浙大版《C語言程序設計(第3版)》題目集
此篇博客意義為總結pta上浙大版《C語言程序設計(第3版)》題目集所做題目的錯誤點,心得體會。
1.練習2-10 計算分段函數[1]
題目截圖
本題目要求計算下列分段函數f(x)的值:
公式
輸入格式:
輸入在一行中給出實數x。
輸出格式:
在一行中按“f(x) = result”的格式輸出,其中x與result都保留一位小數。
輸入樣例1:
10
輸出樣例1:
f(10.0) = 0.1
輸入樣例2:
0
輸出樣例2:
f(0.0) = 0.0
#include<stdio.h>
#include<math.h>
int main(void)
{
double x,result;
scanf("%lf",&x);
if(x==0)
result=0.0;
else
result=pow(x,-1);
printf("f(%.1f) = %.1f",x,result);
return 0;
}
錯誤點:
- (X=0)中少了一個'='號
- printf語句中,輸出的格式控制字符為%.1f,意思是指定輸出時保留一位小數,詳見課本P25頁
- pta作業上面對輸出內容空格的要求
**2.練習2-12 輸出華氏-攝氏溫度轉換表 **
輸入2個正整數lower和upper(lower≤upper≤100),請輸出一張取值范圍為[lower,upper]、且每次增加2華氏度的華氏-攝氏溫度轉換表。
溫度轉換的計算公式:C=5×(F−32)/9,其中:C表示攝氏溫度,F表示華氏溫度。
輸入格式:
在一行中輸入2個整數,分別表示lower和upper的值,中間用空格分開。
輸出格式:
第一行輸出:"fahr celsius"
接着每行輸出一個華氏溫度fahr(整型)與一個攝氏溫度celsius(占據6個字符寬度,靠右對齊,保留1位小數)。
若輸入的范圍不合法,則輸出"Invalid."。
輸入樣例1:
32 35
輸出樣例1:
fahr celsius
32 0.0
34 1.1
輸入樣例2:
40 30
輸出樣例2:
Invalid.
錯誤代碼
#include<stdio.h>
int main()
{
int fahr,lower,upper;
double celsius;
scanf("%d %d",&lower,&upper);
if(lower<=upper&&upper<=100)
{
for(fahr=lower;fahr<=upper;fahr=fahr+2)
{
celsius=5*(fahr-32)/9;
printf("f(%d) %.1f\n",fahr,celsius);
}
}
else
printf("Invalid.");
return 0;
}
心得:一開始不知道怎么做測試,調試程序
3.練習2-18 求組合數
本題要求編寫程序,根據公式 算出從n個不同元素中取出m個元素(m≤n)的組合數。建議定義和調用函數fact(n)計算n!,其中n的類型是int,函數類型是double。
輸入格式:
輸入在一行中給出兩個正整數m和n(m≤n),以空格分隔。
輸出格式:
按照格式“result = 組合數計算結果”輸出。題目保證結果在double類型范圍內。
輸入樣例:
2 7
輸出樣例:
result = 21
#include <stdio.h>
double fact(int n) {
int i;
double result = 1.0;
if (n == 0) {
return 1.0;
}
for (i = 2; i <= n; i++) {
result *= i;
}
return result;
}
int main(void) {
int m, n;
double result;
scanf("%d %d", &m, &n);
result = fact(n) / (fact(m)*fact(n - m));
printf("result = %.0f\n", result);
return 0;
}
疑難點:對定義函數不熟悉,一開始做的時候會想起用for循環控制運算邏輯,但是后來寫的時候發現用for循環太長了
總結:怎么定義函數?
4.習題2-1 求整數均值
dev上面做測試,調試完全沒有錯誤,但是在pta提交卻出現了編譯錯誤……且測試了多組數據,我想原因應該在double(Sum)上面
更正:將第8行改為Average=1.0*Sum/4;pta應該識別不了double(sum)這種格式的輸入。
**5.習題2-5 求平方根序列前N項和 **
在這道題目中,我把定義i放在了for循環類,即i首次出現的位置,給予i定義整形變量,這樣是不是減少一個開辟空間,還是沒有,哈哈。
**6.練習3-3 統計學生平均成績與及格人數 **
#include <stdio.h>
int main()
{
int N,i,defen;
int sum=0,count=0;
double average;
scanf("%d\n",&N);
if(N>0)//注意檢測人數,題干中要求非負數
{
for(i=0;i<N;i++)//通過for循環來控制循環輸入,i<N控制循環次數
{
scanf("%d",&defen);//一次輸入一個數,進行下一邏輯運算
if(defen>=60)
count++;
sum+=defen;
}
average=1.0*sum/N;
}
printf("average = %.1f\n",average);
printf("count = %d",count);
return 0;
}
巧妙處:
for(i=0;i<N;i++)
{
scanf("%d",&defen);
知識點:逐個輸入,輸入數字控制了數入個數。
巧妙處:
for(i=0;i<N;i++)
{
scanf();
if()
知識點:對逐個輸入的數據進行判斷;對符合賽選條件的元素,進行邏輯運算。