階段一上機考試補題報告


錯題一

7-1 成績統計表 (10 分)
 

某大學全校都開設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,則按實際位數輸出。

錯題二

7-2 求序列平方和 (10 分)
 

請編寫程序,輸入正整數 n,計算平方和 s=12+22+32++n2。

輸入格式

n

輸出格式

s

輸入樣例

9
 

輸出樣例

285
錯誤代碼:

錯誤原因:對for循環掌握不夠。

改正后代碼:

 錯題三

7-3 簡單循環結構:輸出所有雞兔可能的數目。 (20 分)
 

雞、兔的總數從鍵盤給出,顯示所有可能的雞兔數目組合。(設兩種動物數都不為0)

輸入格式:

輸入1個100以內的整數作為雞兔總數目。(不考慮非法輸入)

輸出格式:

分行顯示所有雞兔可能的數目組合。

輸入樣例:

4
 
結尾無空行

輸出樣例:

在這里給出相應的輸出。例如:

rabbits=1,chickens=3
rabbits=2,chickens=2
rabbits=3,chickens=1
 
結尾無空行
錯誤代碼:

錯誤原因:忘記題目需使用for使用循環。

改正后代碼:注意i<n而不是i<=n。

 錯題四

7-4 求某月的天數 (20 分)
 

輸入年份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)

錯題五

7-5 位運算應用 (20 分)
 

現有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來得出位於端口的哪個位置,最后進行或運算得出答案。

 錯題六

7-7 打印沙漏 (20 分)
 

當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沒有掌握熟練,主要是自己親手敲的代碼少了,下一段學習中要多看視頻查漏補缺,作業獨立完成,作業盡量自己親手敲代碼。

 

 

 


 







免責聲明!

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



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