作業要求:【https://www.cnblogs.com/c-programing-language/p/9931659.html】
第七次作業7-3 統計學生平均成績與及格人數 (15 分)
本題要求編寫程序,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型范圍內。
輸入格式:輸入在第一行中給出非負整數N,即學生人數。第二行給出N個非負整數,即這N位學生的成績,其間以空格分隔。
輸出格式:按照以下格式輸出:average = 成績均值,
count = 及格人數,
其中平均值精確到小數點后一位。
輸入樣例:5
77 54 92 73 60
輸出樣例:average = 71.2
count = 4
一.實驗代碼
# include<stdio.h> int main() { int count,grade,i,N; double total,average; scanf("%d\n",&N); total=0; count=0; for(i=1;i<=N;i++){ scanf("%d",&grade); total=total+grade; average=total/N; if(grade>=60){ count=count+1;} } printf("average = %.1lf\n",average); printf("count = %d\n",count); return 0; }
二.解題思路
1.步驟
1).先定義整型變量count表示合格的人數,grade表示分數,N表示人的個數,total計算總分。
2).先輸入人的個數,然寫出for循環,輸入五個成績。
3).最后輸出average和count。
運行的結果:
2.流程圖
三.調試過程碰到的問題及解決辦法
起初在for循環中忘記了寫求average的代碼,顯示average=0.0,然后加上之后結果正確了。
調試過程
第九次作業7-2 輸出閏年 (15 分)
輸出21世紀中截止某個年份以來的所有閏年年份。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。
輸入格式:輸入在一行中給出21世紀的某個截止年份。
輸出格式:逐行輸出滿足條件的所有閏年年份,即每個年份占一行。輸入若非21世紀的年份則輸出"Invalid year!"。若不存在任何閏年,則輸出“None”。
輸入樣例1:
2048
輸出樣例1:
2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048
輸入樣例2:2000
輸出樣例2:
Invalid year!
一.實驗代碼
#include<stdio.h> int main() { int year,i,count; count=0; scanf("%d",&year); if(year<=2000||year>2100) printf("Invalid year!\n"); else{ for(i=2001; i<=year; i++){ if(i%4==0&&i%100!=0||i%400==0){ printf("%d\n",i); count++; } } if(count==0) printf("None\n"); } return 0; }
二.解題思路
1.步驟
1).定義整型變量year表示開始輸入的年份,i表示要輸出的閏年,count用來統計閏年的個數。
2).一共有三種情況,一個是輸入的年份不在2000-2100內,還有在大范圍內,但是小范圍內沒有閏年。
3).另外就是存在閏年,需要用if else來找出閏年最后輸出出來。
運行的結果:
2.流程圖
三.調試過程碰到的問題及解決辦法
開始做的時候整個代碼的大概能夠想到,就是不知道在表示條件時的“或者”怎么打,所以我在網上查了下"||"表示或者。
然后就遇到了點輸出格式上的錯誤,循環輸出時,要有“\n”換行。
調試過程:
輸入year=2048
進入循環體,i從2001開始直到2048,在其中輸出能被4或100整除或者能被400整除的數,就為閏年,同時count會記錄閏年個數。
最后當i=2049時跳出循環輸出閏年的結果。
第十次作業7-4 最大公約數和最小公倍數 (15 分)
本題要求兩個給定正整數的最大公約數和最小公倍數。
輸入格式:輸入在一行中給出兩個正整數M和N(≤1000)。
輸出格式:在一行中順序輸出M和N的最大公約數和最小公倍數,兩數字間以1空格分隔。
輸入樣例: 511 292
輸出樣例: 73 2044
一.實驗代碼
#include<stdio.h> int main(){ int M,N,i; scanf("%d %d",&M,&N); for(i=M;i>=1;i--){ if(M%i==0&&N%i==0){ printf("%d ",i); break;} } for(i=N;i<=M*N;i++){ if(i%M==0&&i%N==0){ printf("%d",i); break;} } return 0; }
二解題思路
1.步驟
1).先定義整形變量M N i,輸入M N的值。
2).用for的循環和if的條件分別找最大公約數和最小公倍數。
3).最后分別輸出i表示最大公約數和最小公倍數。
運行的結果:
2.流程圖
三.調試過程碰到的問題及解決辦法
開始是因為不知道怎么求最大公約數和最小公倍數想了很長時間,后來知道應該用for循環和if的條件來求。
求最大公約數時,i要等於兩個數中比較大的,保證能在約數多的范圍內找最大公約數,然后在循環中求M N除以i是否有余數,每次循環i都要減一,直到M N都被i整除時輸出i。
求最小公倍數時,i要等於兩個數中較小的數,小於最大公倍數M*N,從最小的數開始找起,每次循環i要加一,直到i能同時被M和N整除時,輸出i。
調試過程:
輸入M和N
開始進入循環
當i等於73時,跳出第一個循環,M和N的最大公約數為73。
開始進入第二次循環
當i等於2044時,第二個循環結束,M和N的最小公倍數為2044。
個人總結
本周學習的重點就是循環語句的運用,平時比較習慣運用的就是for和while的循環語句,但是現在運用的還不夠熟練,所以我應該多打一些類似的代碼,增加自己的熟練度 ,同時有不會的要多問問別人,自己也要多查查相關的東西,使自己能夠把循環語句更清晰熟練的運用。
作業點評:
1.https://www.cnblogs.com/chumengGTRlhz/p/9991154.html