浙大版《C語言程序設計(第3版)》題目集 --總結


浙大版《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()

知識點:對逐個輸入的數據進行判斷;對符合賽選條件的元素,進行邏輯運算。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM