錯題一
某大學全校都開設C語言課程,每學年結束都按成績進行統計。請編寫程序,輸入優秀、良好、中等、及格和不及格的人數,輸出成績統計表。
輸入樣例
36
275
1806
2194
101
輸出樣例
Rank Number
----------------
Excellent 36
Good 275
Medium 1806
Pass 2194
Fail 101
----------------
Total 4412
錯誤代碼:

錯誤原因:1,忘記了printf中變量前不需要加&
2,沒有注意到輸出長度
改正后代碼:
#include <stdio.h>
int main()
{ int a,b,c,d,e,f;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
f = a+b+c+d+e;
printf("Rank Number\n----------------\nExcellent%7d\nGood%12d\nMedium%10d\nPass%12d\nFail%12d\n----------------\nTotal%11d\n",a,b,c,d,e,f);
return 0;
}
相關知識:%nd:n為指定的輸出字段的寬度,如果數據的位數小於n,則左端補以空格,若大於n,則按實際位數輸出。
錯題二
請編寫程序,輸入正整數 n,計算平方和 s=12+22+32+⋯+n2。
輸入格式
n
輸出格式
s
輸入樣例
9
輸出樣例
285
錯誤代碼:

錯誤原因:對for循環掌握不夠。
改正后代碼:
錯題三
雞、兔的總數從鍵盤給出,顯示所有可能的雞兔數目組合。(設兩種動物數都不為0)
輸入格式:
輸入1個100以內的整數作為雞兔總數目。(不考慮非法輸入)
輸出格式:
分行顯示所有雞兔可能的數目組合。
輸入樣例:
4
輸出樣例:
在這里給出相應的輸出。例如:
rabbits=1,chickens=3
rabbits=2,chickens=2
rabbits=3,chickens=1

錯誤原因:忘記題目需使用for使用循環。
改正后代碼:注意i<n而不是i<=n。
錯題四
輸入年份year、月份month,判斷該月的天數。閏年:能被4整除但不能被100整除或者能被400整除的年份是閏年。
輸入格式:
測試數據有多組,處理到文件尾。對於每組測試,輸入兩個整數,表示年份year和月份month。
輸出格式:
對於每組測試,輸出對應年月的天數。
輸入樣例:
2020 2
2020 4
輸出樣例:
29
30

錯誤原因:1,if else嵌套使用錯誤。
2,“測試數據有多組,處理到文件尾”不知道如何輸入數據。
改正后代碼:switch case分成三個部分,最后一部分用if else分成兩部分
#include<stdio.h>
int main(){
int y,m;
while((scanf("%d %d",&y,&m))!=EOF)
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31\n");
break;
case 4:
case 6:
case 9:
case 11:
printf("30\n");
break;
case 2:
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
printf("29\n");
}
else {
printf("28\n");
}
break;
}
return 0;
}
相關知識:如果if else結題麻煩時可以考慮使用switch case
while循環處理到文件尾格式while((scanf( ))!=EOF)
錯題五
現有96個端口狀態,用3個無符號整型ua(95~64),ub(63~32),uc(31~0)組合起來的96位二進制數來表示,每位二進制數的1、0表示其正常和故障狀態。
輸入一個tag位,將tag位上二進制數置1.
tag位表示其在96位中所處的位數(在96位中從低向高從0至95)
輸入格式:
第一行輸入三個無符號整數,表示ua,ub,uc
第二行輸入一個整數tag。
輸出格式:
若tag值不在0到95之間,則輸出Error
,否則輸出轉換后的ua,ub,uc
輸入樣例:
1 2 3
-2
輸出樣例:
Error
輸入樣例:
1 2 3
10
輸出樣例:
ua=1,ub=2,uc=1027
錯誤原因:不會位運算
正確代碼:先用tag/32來求出端口位置,再用tag%32來得出位於端口的哪個位置,最后進行或運算得出答案。
錯題六
當n=5時,沙漏圖形如輸出樣例所示。請觀察並明確沙漏圖形的規律。要求輸入一個整數n,輸出滿足規律的沙漏圖形。
輸入:
測試數據有多組,處理到文件尾。每組測試輸入一個整數n(1<n<20)。
輸出:
對於每組測試,輸出滿足規律的沙漏圖形。
輸入樣例:
5
輸出樣例:
********* ******* ***** *** * *** ***** ******* *********
錯誤代碼:

錯誤原因:1,忘記輸出空格。
2,for循環使用不熟練。
3,不會淑如處理到文件尾的數據。
正確代碼:將圖形分為上下兩部分,先用for嵌套分別輸出"*"和" ",同理再用for嵌套輸出圖形的下部分。
#include<stdio.h>
int main(){
int n,a,j,i;
while(scanf("%d",&n)!=EOF&&n<20&&n>1){
for(a=1;a<=n;a++){
for(i=1;i<a;i++){
printf(" ");
}
for(j=0;j<2*n-2*i+1;j++){
printf("*");
}
printf("\n");
}
for(a=0;a<n-1;a++){
for(i=1;i<n-a-1;i++){
printf(" ");
}
for(j=0;j<=2*n-2*i;j++){
printf("*");
}printf("\n");
}
}
}
考試總結:很多方面內容沒有掌握,有些學到的內容如for,while沒有掌握熟練,主要是自己親手敲的代碼少了,下一段學習中要多看視頻查漏補缺,作業獨立完成,作業盡量自己親手敲代碼。