C語言第五次作業


(一)改錯題
輸出華氏攝氏溫度轉換表:輸入兩個整數lower和upper,輸出一張華氏攝氏溫度轉換表,華氏溫度的取值范圍是{lower,upper},每次增加2℉。計算公式如下:
c = 5×(f-32)/9
其中,c表示攝氏溫度,f表示華氏溫度。
輸入輸出樣例1:
  Enter lower:32
  Enter upper:35
  fahr celsius
  32 0.0
  34 1.1
輸入輸出樣例2:
  Enter lower:40
  Enter upper:30
  fahr celsius
錯誤信息1:for()后加了;語句混亂
改正信息:把分號去掉
錯誤信息2:輸出格式保留小數錯誤
改正信息: printf("%3.0f %6.1f\n", fahr, celsius)改為%d%.1f
錯誤信息3:for (fahr = lower , fahr <= upper, fahr ++)
改正信息:因為fahr的增幅是2,所以改為fahr = fahr+2
錯誤信息4: celsius = 5 /9 * (fahr - 32.0); 不是double類型等於0
改正信息:在5的前面加上(double)

(二)學習總結
1.有如下程序:

include <stdio.h>

int main()
{
int i,num,odd,even;
odd = 0;
even = 0;
for(i = 1; i <= 10;i++)
{
scanf("%d",&num);
if(num % 2 == 0)
{
even++;
}
else
{
odd++;
}
}
printf("%d %d",even,odd);
return 0;
}
第一次運行i=1,even=1,odd=0;第二次i=2,even=1,odd=1;最后一次i=10,even=5,odd=5
運行目的是算出數字1至10有多少個奇數多少個偶數
2.增量運算符
(1)運行下面程序,結果是什么?增量運算符在單獨使用時,前綴和后綴形式有區別嗎?

include <stdio.h>

int main()
{
int i,j;
i = 2;
j = 2;
i++;
++j;
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}
結果i=3,j=3;無區別
(2)運行下面的程序,結果是什么?兩條輸出語句的執行過程是怎樣的?說明什么問題?這兩條輸出語句執行完后,i和j的值分別是多少?

include <stdio.h>

int main()
{
int i,j;
i = 2;
j = 2;
printf("%d\n",i++);
printf("%d\n",++j);
return 0;
}
i=2,j=3;++在前在后有區別;i先輸出后加1,j先加1后輸出
3.有些循環語句后面有{},有些沒有,有些語句有縮進,運行下面的四個小程序,運行結果有什么不同?循環體的認定與縮格形式是否有關?與{}是否有關?那么,應該如何正確判斷一個循環語句中的循環體?下面的程序中,哪幾種格式是正確的縮進格式。
(1)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(2)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(3)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
printf("\n");
}
return 0;
}
(4)

include <stdio.h>

int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
第3第4種正確;和{}有關
(1)
(2)
(3)
(4)
4.循環語句中最好在for后用{}保證循環完整,for的括號后不要加;,在++i。i++的運算過程先后順序,for循環語句的縮進格式要明確,讀題明確不要有漏缺的循環。
(三)實驗總結
本次實驗總結,學號末位數是單數的同學完成循環結構(1)中的1、3、5、7題,學號末位數是雙數的同學完成循環結構(1)中的2、4、6、8題。
一題目:7-1 求奇數分之一序列前N項和(10 分)
本題要求編寫程序,計算序列 1 + 1/3 + 1/5 + ... 的前N項之和。
輸入格式:
輸入在一行中給出一個正整數N。
輸出格式:
在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點后6位。題目保證計算結果不超過雙精度范圍。
(2)流程圖

(3)源代碼:

include <stdio.h>

int main()
{
int N,i;
double sum;

sum = 0.0;
scanf("%d",&N);
for(i = 1;i <= N;i++)
{
	sum = sum+(1.0/((2*i)-1));
}
printf("sum = %.6f",sum);

return 0;

}
(4)實驗分析:沒出錯
(5)本題PTA提交列表

三題目:
7-3 奇偶分家(10 分)
給定N個正整數,請統計奇數和偶數各有多少個?
輸入格式:
輸入第一行給出一個正整N(≤1000);第2行給出N個正整數,以空格分隔。
輸出格式:
在一行中先后輸出奇數的個數、偶數的個數。中間以1個空格分隔。
(2)流程圖

(3)源代碼

include <stdio.h>

int main()
{
int n,a,j,o,i,y;

j = 0;
o = 0;
scanf("%d",&n);
if(n <= 1000)
{
	for(i = 0;i < n;i++)
	{
		scanf("%d",&a);
		y = a%2;
		if(y == 1)
		{
			j=j+1;
		}
		else
		{
			o=o+1;
		}
	}
	printf("%d %d",j,o);
}

return 0;

}
(4實驗分析):基本沒問題
(5)提交列表

五題目:7-5 統計字符(15 分)
本題要求編寫程序,輸入10個字符,統計其中英文字母、空格或回車、數字字符和其他字符的個數。
輸入格式:
輸入為10個字符。最后一個回車表示輸入結束,不算在內。
輸出格式:
在一行內按照
(1)流程圖

(2)源代碼

include <stdio.h>

int main()
{
char a;
int s,letter = 0,blank = 0,digit = 0,other = 0,i;

for(i = 0;i < 10;i++)
{
	scanf("%c",&a);
	s = a;
	if(s >= 65 && s <= 90)
	{
		letter++;
	}
	else if(s >= 97 && s <= 122)
	{
		letter++;
	}
	else if(s == 32 || s == 10)
	{
		blank++;
	}
	else if(s >= 48 && s <= 57)
	{
		digit++;
	}
	else
	{
		other++;
	}

}

printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);

return 0;

}
實驗分析:主要忘記代表數集是多少
提交列表:

七題目:
7-7 求交錯序列前N項和(15 分)
本題要求編寫程序,計算交錯序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N項之和。
流程圖:

源代碼:

include <stdio.h>

int main()
{
int n,i,y;
double sum = 0.0;

scanf("%d",&n);
for(i = 1;i <= n;i++)
{
	y = i%2;
	if(y == 1)
	{
		sum = sum + i/((2.0*i)-1);
	}
	else
	{
		sum = sum - i/((2.0*i)-1);
	}
}
printf("%.3f",sum); 

return 0;

}
實驗分析:沒有將sum初始值賦0.0
提交列表:

(四)博客互評


免責聲明!

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



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