1. 程式人生 > >《C語言程式設計》程式設計總結匯總

《C語言程式設計》程式設計總結匯總

《C語言程式設計》程式設計總結匯總
院系:
專業年級:
班級名稱:
學號:
姓名:
指導教師:
完成時間:
自我評價:

電腦科學與技術專業教研室
2018 年秋季學期

                   第四周程式設計總結

題目4-1. A乘以B (5 分)
看我沒騙你吧 —— 這是一道你可以在10秒內完成的題:給定兩個絕對值不超過100的整數A和B,輸出A乘以B的值。
1).實驗程式碼#include<stdio.h>
int main(){
int A , B ,C;
scanf("%d %d",&A,&B);
C = AB;
printf("%d",C);
return 0;}
2).設計思路
第一步輸入變數A,B,C.
第二步定義變數A,B
第三步運算A

B
第四部對於要輸出的結果進行定義
3).本題除錯過程遇到的問題及解決方法
注意1.程式設計錯誤,段錯誤。這些錯誤可以通過編譯器來查詢。在打程式碼過程中我在第一題出現的錯誤是在scanf語句中沒有打“&”符號。
注意2.格式錯誤。等號前後忘記打空格
注意3.答案錯誤。這個問題就需要自己來檢查了,這個程式碼放到編譯器中可以編譯執行,但是放在pta中就無法得到正確答案。需要再次審題,看清題目的要求是,再去更改程式碼。

4).執行結果截圖

題目4-2. 日期格式化 (5 分)
世界上不同國家有不同的寫日期的習慣。比如美國人習慣寫成“月-日-年”,而中國人習慣寫成“年-月-日”。下面請你寫個程式,自動把讀入的美國格式的日期改寫成中國習慣的日期。
1) 實驗程式碼 #include<stdio.h>
int main(){
int m,d,y;
scanf("%d-%d-%d",&m,&d,&y);
printf("%04d-%02d-%02d" ,y,m,d);
return 0;}
2).設計思路
第一步輸入變數m,d,y
第二步定義變數m,d,y
第三步轉換變數,調換順序
第四步對於要輸出的結果進行定義
3).本題除錯過程遇到的問題及解決方法
注意1.段錯誤。這個是我在打程式碼時漏打了主函式注意
2.部分正確。這個應該就是程式碼只有部分通過了測試點,在臨界點上的運算不對。和同學討論得出答案

4).執行結果截圖

題目4-3. 是不是太胖了 (5 分)
據說一個人的標準體重應該是其身高(單位:釐米)減去100、再乘以0.9所得到的公斤數。已知市斤是公斤的兩倍。現給定某人身高,請你計算其標準體重應該是多少?(順便也悄悄給自己算一下吧……)
1) 實驗程式碼 #include<stdio.h>
int main(){
float h ,w;
scanf("%f",&h);
w = (h-100)0.92;
printf("%.1f" ,w);
return 0;}
2).設計思路
第一步在草稿紙上寫出表示式
第二步輸入變數 h,w
第三步定義變數h
第四步寫出運算式子
第五步對於要輸出的結果進行定義
3).本題除錯過程遇到的問題及解決方法
注意1,答案錯誤,此時要用的輸入語句為float而不是int。通過編譯器可以查詢

4). .執行結果截圖

題目4-4. 求整數均值 (10 分)
本題要求編寫程式,計算4個整數的和與平均值。題目保證輸入與輸出均在整型範圍內。
2) 實驗程式碼 #include <stdio.h>
int main(void){
float a = 0.0, b = 0.0, c = 0.0, d = 0.0, Sum = 0.0, Average = 0.0;
scanf("%f %f %f %f", &a, &b, &c, &d);
Sum = a + b + c + d;
Average = Sum / 4;
printf("Sum = %.0f; Average = %.1f\n", Sum, Average);
return 0;
}
2).設計思路
第一步在草稿紙上寫出表示式
第二步輸入變數 a,b,c,d,sum,average
第三步定義變數a,b,c,d
第四步寫出運算式子
第五步對於要輸出的結果進行定義
3).本題除錯過程遇到的問題及解決方法
注意1.答案錯誤。在給sum賦值時少加了一個d。自己檢查

4). .執行結果截圖

第五週程式設計總結
題目5-1,計算存款利息 (10 分)
本題目要求計算存款利息,計算公式為interest=money×(1+rate)year−money,其中interest為存款到期時的利息(稅前),money是存款金額,year是存期,rate是年利率。
1).實驗程式碼 #include<stdio.h>

include<math.h>

int main(void){
float money,year,rate;
double interest;
scanf("%f %f %f",&money ,&year ,&rate);
interest = (money*pow(1+rate,year))-money ;
printf("interest = %.2f\n" ,interest);
return 0;
}
2).設計思路
第一步 構思,在大腦或草稿中大致形成一個程式碼框架
第二步 輸入變數,並進行定義
第三步 輸入賦值語句的表示式
第四步 輸出變數,並進行定義
3).本題除錯過程中碰到問題及解決辦法
注意1.當呼叫數學函式時,記得加入#include<math.h>

4).執行結果截圖

題目5-2. 計算分段函式[2] (10 分)
本題目要求計算下列分段函式f(x)的值:

注:可在標頭檔案中包含math.h,並呼叫sqrt函式求平方根,呼叫pow函式求冪。1)1)實驗程式碼 #include <stdio.h>

include <math.h>

int main() {
double x = 0.00 ,result = 0.00;
scanf("%lf" ,&x);
if(x>=0)
result = sqrt(x);
else
result = pow(x+1,2)+2*x+1/x ;
printf("f(%.2f) = %.2f\n" ,x,result);
return 0;
}
2).設計思路
第一步 大致構思,使用if-else語句
第二步 輸入變數並進行定義
第三步 分條陳述使用if-else語句,呼叫數學函式
第四步 輸出並定義變數
3). 本題除錯過程中碰到問題及解決辦法
注意1.答案錯誤 第13行的輸出,f(x)應該表示為f(%.2f)

4).執行結果截圖

題目5-3. 超速判斷 (10 分)
模擬交通警察的雷達測速儀。輸入汽車速度,如果速度超出60 mph,則顯示“Speeding”,否則顯示“OK”。
1)實驗程式碼 #include<stdio.h>
int main(void){
int v;//0<=v<=500
scanf("%d" ,&v);
if(v>60) printf("Speed: %d - Speeding\n" ,v);
else printf("Speed: %d - OK\n" ,v);
return 0;
}
2).設計思路
第一步 構思,運用if-else語句
第二步 輸入變數,呼叫scanf函式
第三步 使用if-else語句
第四步 輸出結果
3). 本題除錯過程中碰到問題及解決辦法
注意1 在使用if-else語句時,不是選著運算而是選著輸出。鄙人沒有遇到問題。

4).執行結果截圖

題目5-4. 階梯電價 (15 分)
為了提倡居民節約用電,某省電力公司執行“階梯電價”,安裝一戶一表的居民使用者電價分為兩個“階梯”:月用電量50千瓦時(含50千瓦時)以內的,電價為0.53元/千瓦時;超過50千瓦時的,超出部分的用電量,電價上調0.05元/千瓦時。請編寫程式計算電費。
1).實驗程式碼#include<stdio.h>
int main(){
float consumption , m;
scanf("%f" , &consumption);{
if(consumption<0) printf("Invalid Value!\n");
else{
if(consumption<=50)
m = consumption0.53;}
else m = 50
0.53+(consumption-50)*0.58;
printf("cost = %.2f\n",m);}
return 0;
}
2).設計思路
第一步 構思,運用if-else語句
第二步 輸入變數,呼叫scanf函式
第三步 使用if-else語句,此時有三種情況需要使用2個else
第四步 輸出結果
3). 本題除錯過程中碰到問題及解決辦法
注意1.編譯錯誤,if-else語句不僅可以用於2個條件中,還可以用於多個條件中。通過相互討論得出結論。
4).執行結果截圖

題目5-5. 輸出三角形面積和周長 (15 分)
本題要求編寫程式,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。三角形面積計算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1).實驗程式碼#include<stdio.h>

include<math.h>

int main(){
double a,b,c;
double area,perimeter,s;
scanf("%lf %lf %lf",&a,&b,&c);
if((a+b)>c&&(a+c)>b&&(b+c)>a) {
s = (a + b + c)/2;
area = sqrt(s(s-a)(s-b)*(s-c));
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else printf("These sides do not correspond to a valid triangle");
return 0;
}
2).設計思路
第一步 構思,運用if-else語句並確定條件,呼叫數學函式,
第二步 輸入變數,呼叫scanf函式
第三步 使用if-else語句,此時有三種情況需要使用2個else
第四步 輸出結果
3). 本題除錯過程中碰到問題及解決辦法
注意1.部分正確 在使用if條件語句時,對於三角形任意2邊之和大於第三邊的條件不知道輸入,少了&符號。

4).執行結果截圖

題目5-6. 三天打魚兩天晒網 (15 分)
中國有句俗語叫“三天打魚兩天晒網”。假設某人從某天起,開始“三天打魚兩天晒網”,問這個人在以後的第N天中是“打魚”還是“晒網”?
1).實驗程式碼#include<stdio.h>
int main (){
int i,n,s;
scanf("%d",&n);
s=n%5;
if(i<=1000) {
if((s==1)||(s==2)||(s==3))
printf("Fishing in day %d",n);
else printf("Drying in day %d",n);
}
return 0;
}
2).設計思路
第一步 構思,運用if-else語句並確定條件.
第二步 輸入變數,呼叫scanf函式,輸入賦值語句。
第三步 使用if-else語句。
第四步 輸出結果
3). 本題除錯過程中碰到問題及解決辦法
注意1.構思要明確,知道如何讓計算機編譯執行得到想要的答案。起初我的構思不對,通過和同學的討論明確思路。

4).執行結果截圖

第六週程式設計總結
題目6-1 求N分之一序列前N項和 (15 分)
本題要求編寫程式,計算序列 1 + 1/2 + 1/3 + ... 的前N項之和。
1).實驗程式碼#include<stdio.h>
int main(){
int denominator,i,n;
double item,sum;
scanf("%d",&n);
denominator = 1; sum = 0;
for(i = 1;i<=n;i++){
item = 1.0/denominator;
sum = sum+item;
denominator = denominator+1; }
printf("sum = %.6f\n",sum);
return 0;
}
2).設計思路
第一步 整形輸入分母和i項和n項,和
第二步 分別給分母和和賦值
第三步 使用迴圈語句
3)本題除錯中遇到的問題及解決方案
符號用錯,除號和\沒有分清

4).執行結果截圖

題目6-2: 求奇數分之一序列前N項和 (15 分)
本題要求編寫程式,計算序列 1 + 1/3 + 1/5 + ... 的前N項之和。
1).實驗程式碼#include<stdio.h>
int main(){
int denominator,i,n;
double item,sum;
scanf("%d",&n);
denominator = 1; sum = 0;
for(i = 1;i<=n;i++){
item = 1.0/denominator;
sum = sum+item;
denominator = denominator+2; }
printf("sum = %.6f\n",sum);
return 0;
}
2).設計思路
第一步 整形輸入i,n,分母
第二步 使用for語句進行迴圈
第三步 進行輸出
3)本題除錯中遇到的問題及解決方案
容易出現編譯錯誤,denominator是以2為差值出現的
我在編譯過程中沒有出現錯誤
4).執行結果截圖

題目6-3: 求簡單交錯序列前N項和 (15 分)
本題要求編寫程式,計算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N項之和。
1).實驗程式碼#include<stdio.h>
int main(){
int denominator,flag,i,n;
double item,sum;
scanf("%d",&n);
flag = 1;
denominator = 1;
sum = 0;
for(i = 1;i<=n;i++){
item = flag*1.0/denominator;
sum = sum+item;
flag = -flag;
denominator = denominator+3; }
printf("sum = %.3f",sum);
return 0;
}
2).設計思路
第一步 整形輸入i,n,分母
第二步 使用for語句進行迴圈
第三步 進行輸出
3)本題除錯中遇到的問題及解決方案
本題需要注意分母的差值為2,我沒有出現錯誤i
4).執行結果截圖

題目6-4:求平方與倒數序列的部分和 (15 分)
本題要求對兩個正整數m和n(m≤n)編寫程式,計算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。
1).實驗程式碼#include <stdio.h>
int main (void){
int m, n, i;
double sum = 0;
scanf("%d %d", &m, &n);
for(i = m; i <= n; i++)
sum += i * i + 1.0 / i;
printf("sum = %.6lf", sum);
return 0;
}
2).設計思路
第一步 輸入並定義變數
第二步 使用for循壞語句
第三步 輸出精確到小數點後六位的結果
3)本題除錯中遇到的問題及解決方案
本題需要注意符號的使用,我在編譯過程中沒有遇到問題
4).執行結果截圖

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

include<stdio.h>

int main(){
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
double j,k;
double m=1;
j=1;
for(i=2;i<=n;i=i+1)
{
if(i%2==0)
{
j=j+2;
k=-i/j;
}
else
{
j=j+2;
k=i/j;
}
m=m+k;
}
printf("%.3lf\n",m);
}
return 0;
}
3)本題除錯中遇到的問題及解決方案
邏輯錯誤,沒有注意奇偶性問題

4).執行截圖

第七週程式設計總結
題目7-1: 生成3的乘方表 (15 分)
輸入一個非負整數n,生成一張3的乘方表,輸出30~3n的值。可呼叫冪函式計算3的乘方。
1).實驗程式碼 #include<stdio.h>

include<math.h>

int main(){
int i,n,power;
scanf("%d",&n);
for(i = 0;i<=n;i++){
power = pow(3,i);
printf("pow(3,%d) = %d\n",i,power); }
return 0;
}
2).設計思路
第一步 輸入變數i,n,power
第二步運用scanf語句進行定義
第三步使用for迴圈語句
第四步輸出得到答案
3)本題除錯中遇到的問題及解決方案
答案錯誤 printf語句放在了for語句的外面,通過查閱書籍。
4).執行結果截圖

題目7-2:求平方根序列前N項和 (15 分)
本題要求編寫程式,計算平方根序列√1+√2+√3+⋯的前N項之和。可包含標頭檔案math.h,並呼叫sqrt函式求平方根。
1).實驗程式碼 #include<stdio.h>

include<math.h>

int main(){
int n,i;
double s;
scanf("%d",&n);
for(i = 1;i<=n;i++)
s+=sqrt(i);
printf("sum = %.2f",s);
return 0;
}
2).設計思路
第一步 呼叫數學函式加入標頭檔案
第二步 運用整形和浮點型輸入變數
第三步 運用for迴圈語句 輸入表示式
第四步 輸出變數
3)本題除錯中遇到的問題及解決方案
迴圈語句的錯誤,i是從1開始迴圈,不是0
4).執行結果截圖

題目7-3:求冪之和 (15 分)
本題要求編寫程式,計算sum=21+22+23+⋯+2n。可以呼叫pow函式求冪。
1).實驗程式碼#include<stdio.h>

include<math.h>

int main(){
int sum,result,item,n; //n<=10
double i;
scanf("%d",&n);
sum = 0;
for(i = 1;i<=n;i++) sum+=pow(2,i);
printf("result = %d",sum);
return 0;
}
2).設計思路
第一步 呼叫數學函式加入標頭檔案
第二步 運用整形和浮點型輸入變數
第三步 寫出題目運算表示式
第四步 輸出答案
3)本題除錯中遇到的問題及解決方案
沒有注意題目中結果輸出整形
4).執行結果截圖

題目7-4: 求組合數 (15 分)
本題要求編寫程式,根據公式Cnm=m!(n−m)!n!算出從n個不同元素中取出m個元素(m≤n)的組合數。
建議定義和呼叫函式fact(n)計算n!,其中n的型別是int,函式型別是double。
1).實驗程式碼#include<stdio.h>
int main(){
int m,k,n,i,j,sum,ride,result;
double item;
scanf("%d %d",&m,&n);
item = 1; sum = 1; ride = 1;
for(i = 1;i<=n;i++) item = itemi;
for(j = 1;j<=m;j++) sum = sum
j;
for(k = 1;k<=n-m;k++) ride = ridek;
result = item/sum
1/ride;
printf("result = %d",result);
return 0;
}
2).設計思路
第一步 對於變數進行輸入和定義
第二步 運用3次for迴圈語句,並且得到m!、n!(n-m)!
第三步 對於階乘結果再次運算,得到組合數
3)本題除錯中遇到的問題及解決方案
本題沒有遇到問題
4).執行結果截圖

題目7-5: 驗證“哥德巴赫猜想” (20 分)
數學領域著名的“哥德巴赫猜想”的大致意思是:任何一個大於2的偶數總能表示為兩個素數之和。比如:24=5+19,其中5和19都是素數。本實驗的任務是設計一個程式,驗證20億以內的偶數都可以分解成兩個素數之和。
1)程式碼:#include <stdio.h>

include <string.h>

include<math.h>

int prime(int p){
int i;
int k = (int)sqrt(p);
for (i = 2; i <= k; i++)
if (p%i == 0) return 0;
return 1;}
int main(){
int N,i,j;
scanf("%d",&N);
if (N == 4) {
printf("4 = 2 + 2");
return 0; }
for (i = 3; i < N / 2;i+=2){
if (prime(i)) {
j = N - i;
if (prime(j)) {
printf("%d = %d + %d",N,i,j);
break;
}
}
}
return 0;
}
2)設計思路:
第一步 加入標頭檔案
第二步 判斷是否為偶數
第三步 q不斷增加而p不斷減小
第四步 輸出結果
3)本題除錯中遇到的問題及解決方案
不知道如何進行分解成2個素數,同樣沒有呼叫標頭檔案
4)執行結果截圖

第八週程式設計總結
題目8-1: 混合型別資料格式化輸入 (5 分)
本題要求編寫程式,順序讀入浮點數1、整數、字元、浮點數2,再按照字元、整數、浮點數1、浮點數2的順序輸出。
1).實驗程式碼#include<stdio.h>
int main(){
int n;
float number1,number2;
char op;
scanf("%f %d %c %f",&number1,&n,&op,&number2);
printf("%c %d %.2f %.2f",op,n,number1,number2); return 0;
}
2).設計思路
第一步 輸入並定義變數
第二步 輸出並定義變數
3)本題除錯中遇到的問題及解決方案
沒有遇到問題
4).執行結果截圖

題目8-2:計算符號函式的值 (10 分)
對於任一整數n,符號函式sign(n)的定義如下:

請編寫程式計算該函式對任一輸入整數的值。
1).實驗程式碼

include<stdio.h>

int main()
{
int n,result;
scanf("%d",&n);
if(n == 0)
result = 0;
else if(n<0)
result = -1;
else
result = 1;
printf("sign(%d) = %d",n,result);
return 0;
}
2).設計思路
第一步 整形輸入變數n
第二步 使用if-else語句進行判斷
第三步 輸出結果
3)本題除錯中遇到的問題及解決方案
If語句中的等號出現錯誤,==為等號,=為賦值語句
4).執行結果截圖

題目8-3: 計算個人所得稅 (10 分)
假設個人所得稅為:稅率×(工資−1600)。請編寫程式計算應繳的所得稅,其中稅率定義為:
• 當工資不超過1600時,稅率為0;
• 當工資在區間(1600, 2500]時,稅率為5%;
• 當工資在區間(2500, 3500]時,稅率為10%;
• 當工資在區間(3500, 4500]時,稅率為15%;
• 當工資超過4500時,稅率為20%。
1).實驗程式碼

include<stdio.h>

int main(){
double wage,rate;
scanf("%lf",&wage);
if(wage>=0){
if(wage<=1600) rate = 0.00;
else if(wage>1600&&wage<=2500) rate = 0.05(wage-1600);
else if(wage>2500&&wage<=3500) rate = 0.10
(wage-1600);
else if(wage>3500&&wage<=4500) rate = 0.15(wage-1600);
else if(wage>4500) rate = 0.20
(wage-1600);
}
printf("%.2lf",rate);
return 0;
}
2).設計思路
第一步 使用雙精度浮點型進行定義
第二步使用if-else語句進行對不同工資的判斷
第三步進行個人稅的輸出
3)本題除錯中遇到的問題及解決方案
無問題
4).執行結果截圖

題目8-4:比較大小 (10 分)
本題要求將輸入的任意3個整數從小到大輸出。
1).實驗程式碼

include<stdio.h>

int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int e = 0;
if(a>b){
e = a;
a = b;
b = e;
}
if(a>c){
e = a;
a = c;
c = e;
}
if(b>c){
e = b;
b = c;
c = e;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
2).設計思路
第一步 使用4個盒子,其中一個空盒子用來儲存2者之間較大的
第二步使用if-else語句進行大小的比較,
第三步按順序輸出
3)本題除錯中遇到的問題及解決方案

4).執行結果截圖

題目8-5:到底是不是太胖了 (10 分)
據說一個人的標準體重應該是其身高(單位:釐米)減去100、再乘以0.9所得到的公斤數。真實體重與標準體重誤差在10%以內都是完美身材(即 | 真實體重 − 標準體重 | < 標準體重×10%)。已知市斤是公斤的兩倍。現給定一群人的身高和實際體重,請你告訴他們是否太胖或太瘦了。
1).實驗程式碼

include<stdio.h>

int main()
{
int n;
double s,x,a,b;
scanf("%d",&n);
while(n--)
{
scanf("%lf%lf",&a,&b);
s=(a-100.0)0.9;
x=b/2.0;
if(x>(s-s
0.1)&&x<(s+s0.1))
printf("You are wan mei!\n");
if(x>=(s+s
0.1))
printf("You are tai pang le!\n");
if(x<=(s-s*0.1))
printf("You are tai shou le!\n");
}
}
2).設計思路
第一步 進行輸入並定義變數
第二步有3種情況使用if-else語句進行不同的輸出。
3)本題除錯中遇到的問題及解決方案
If條件語句使用數學函式進行判斷,導致部分正確
4).執行結果截圖

題目8-6: 高速公路超速處罰 (15 分)
按照規定,在高速公路上行使的機動車,達到或超出本車道限速的10%則處200元罰款;若達到或超出50%,就要吊銷駕駛證。請編寫程式根據車速和限速自動判別對該機動車的處理。
1).實驗程式碼

include <stdio.h>

int main()
{
int speed,limit;
double a;
scanf("%d %d",&speed,&limit);
a=(double)(speed-limit)*100/(double)limit;
if(a<10||speed<limit)
printf("OK");
else if(a<50)
printf("Exceed %.0f%%. Ticket 200",a);
else
printf("Exceed %.0f%%. License Revoked",a);
return 0;
}
2).設計思路
第一步 輸入並定義速度和限制速度
第二步求出罰款200元的條件
第三步使用if-else語句進行判斷是否需要罰款
第四步 格式化輸出
3)本題除錯中遇到的問題及解決方案
滿足一個速度小於10%是僅僅不夠的,速度必須小於限制速度才是沒有超速
4).執行結果截圖

題目8-7: 統計字元 (15 分)
本題要求編寫程式,輸入10個字元,統計其中英文字母、空格或回車、數字字元和其他字元的個數。
1).實驗程式碼

include<stdio.h>

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

for(i=0;i<=9;i++){
    scanf("%c",&ch);
    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) 
           letter++;
    else if(ch>='0'&&ch<='9') 
           digit++;
    else if(ch==' '||ch=='\n') 
           blank++;
    else 
           other++;
}
  scanf("%c",&ch);
 printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
 return 0;

}
2).設計思路
第一步 進行格式化輸入並定義儲存變數的字元
第二步判斷是否為字元,數字等,如果是並進行累加
第三步格式化輸出
3)本題除錯中遇到的問題及解決方案
空格和回車的判斷不熟悉,查閱書籍可知
4).執行結果截圖

題目8-8: 統計學生平均成績與及格人數 (15 分)
本題要求編寫程式,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型範圍內。
1).實驗程式碼

include<stdio.h>

include<math.h>

int main(void)
{
int n,grade;
int count;
double sum,ave;
scanf("%d",&n);
count=0;
sum=0.0;
for(int i=0;i<n;i++){
scanf("%d",&grade);
sum+=grade;
if(grade>=60) count+=1;
}
ave = n!=0? sum/n : 0;
printf("average = %.1lf\n",ave);
printf("count = %d",count);
return 0;
}
2).設計思路
第一步 呼叫數學函式使用標頭檔案
第二步 輸入並定義變數
第三步使用if-else語句進行判斷是否及格,是,則進行累加
第四步 求出平均數,並進行格式化輸出
3)本題除錯中遇到的問題及解決方案
需注意當n=0時不能進行平均值的運算
4).執行結果截圖

題目8-9:輸出閏年 (15 分)
輸出21世紀中截止某個年份以來的所有閏年年份。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。
程式碼:#include<stdio.h>
int main()
{
int year, i, 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;
}
2).設計思路
第一步 格式化輸入年份
第二步 判斷是否滿足閏年的條件,使用if-elae語句
第三步 格式化輸出變數
3)本題除錯中遇到的問題及解決方案
If條件句的邏輯關係不明確,邏輯或和邏輯與的符號混淆
查詢書籍
4).執行結果截圖

第九周程式設計總結
題目9-1:查詢水果價格 (15 分)
給定四種水果,分別是蘋果(apple)、梨(pear)、桔子(orange)、葡萄(grape),單價分別對應為3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在螢幕上顯示以下選單:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
使用者可以輸入編號1~4查詢對應水果的單價。當連續查詢次數超過5次時,程式應自動退出查詢;不到5次而使用者輸入0即退出;輸入其他編號,顯示價格為0。
1).實驗程式碼

include<stdio.h>

int main(void)
{
printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
int i, price;
for(i=1;i<=5;i++){
scanf("%d",&price);
if(price==0){
break;
}
switch(price){
case 1:printf("price = 3.00\n");break;
case 2:printf("price = 2.50\n");break;
case 3:printf("price = 4.10\n");break;
case 4:printf("price = 10.20\n");break;
default:printf("price = 0.00\n");break;
}
}
return 0;
}
2).設計思路
第一步 進行價格輸出
第二步 使用迴圈語句和switch語句對不同的商品的價格進行輸出
第三步 返回主函式
3)本題除錯中遇到的問題及解決方案
在運用switch語句時,沒有考慮到輸出格式,總是出現答案錯誤
4).執行結果截圖

題目9-2:計算油費 (15 分)
現在90號汽油6.95元/升、93號汽油7.44元/升、97號汽油7.93元/升。為吸引顧客,某自動加油站推出了“自助服務”和“協助服務”兩個服務等級,分別可得到5%和3%的折扣。
本題要求編寫程式,根據輸入顧客的加油量a,汽油品種b(90、93或97)和服務型別c(m - 自助,e - 協助),計算並輸出應付款。
1).實驗程式碼

include<stdio.h>

int main()
{
int a,b;
double price;
char c;
scanf("%d %d %c",&a,&b,&c);

if(b==90)
price=a6.95;
else if(b==93)
price=a
7.44;
else if(b==97)
price=a*7.93;

if(c=='m')
price=price0.95;
else
price=price
0.97;
printf("%.2lf",price);
return 0;
}
2).設計思路
第一步 對於服務等級和汽油號
第二步使用if-else語句進行條件選擇計算價格
第三步輸出價格
3)本題除錯中遇到的問題及解決方案
本題沒有遇到問題
4).執行結果截圖

題目9-3:計算天數 (15 分)
本題要求編寫程式計算某年某月某日是該年中的第幾天。
1).實驗程式碼

include <stdio.h>

int main() {
int y, m, d;
int p,i;
scanf("%d/%d/%d", &y, &m, &d);
p = d;
for(i = 1; i < m; i++)
{
switch(i) {
case 1:case 3:case 5:case 7:
case 8:case 10:case 12:
p += 31; break;
case 4:case 6:case 9:case 11:
p += 30;break;
case 2:
if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
p += 29;
else
p += 28;
}
}
printf("%d", p);
return 0;
}
2).設計思路
第一步 格式化輸入年月日
第二步 運用for語句進行迴圈,switch語句對於不同的月份的天數進行判斷和計算
第三步 輸出總天數
3)本題除錯中遇到的問題及解決方案
在case語句的運用錯誤,導致無法計算出結果
4).執行結果截圖

第十週程式設計總結
題目10-1: 求奇數和 (15 分)
本題要求計算給定的一系列正整數中奇數的和。
1).實驗程式碼

include<stdio.h>

int main()
{
int n,sum = 0;
while(1){
scanf("%d",&n);
if(n<=0){
break;
}
if(n%2!=0){
sum += n;
}
}
printf("%d\n",sum);
return 0;
}
2).設計思路
第一步 整形定義n,sum,並賦值sum為0
第二步 使用while迴圈語句【while(1)不斷進行迴圈】,不斷輸入整數n
第三步 判斷是否為奇數,將負數轉為整數,進行累加;
第四步 輸出結果
3)本題除錯中遇到的問題及解決方案
不知道如何進行迴圈,不知道while(1)的意思和用法
4).執行結果截圖

題目10-2: 韓信點兵 (10 分)
在中國數學史上,廣泛流傳著一個“韓信點兵”的故事:韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數:
• 按從1至5報數,記下最末一個士兵報的數為1;
• 再按從1至6報數,記下最末一個士兵報的數為5;
• 再按從1至7報數,記下最末一個士兵報的數為4;
• 最後按從1至11報數,最末一個士兵報的數為10;
請編寫程式計算韓信至少有多少兵。
1).實驗程式碼

include<stdio.h>

int main()
{
int i;
for(i=1;;i++){
if((i%5==1)&&(i%6==5)&&(i%7==4)&&(i%11==10)){
printf("%d\n",i);
return 0;
}
}
}
2).設計思路
第一步 使用迴圈語句來進行判斷和計算
第二步 輸出兵的數量
3)本題除錯中遇到的問題及解決方案
剛剛拿到題目完全不懂題意,更別說思路了,還是心急吃不了熱豆腐
4).執行結果截圖

題目10-3: 求整數的位數及各位數字之和 (15 分)
對於給定的正整數N,求它的位數及其各位數字之和。
1).實驗程式碼

include<stdio.h>

int main()
{
int integer,sum,count;
scanf("%d",&integer);
sum = 0;
count = 0;
if(integer<=0){
integer = -integer;
}
while(integer>0){
sum+=integer%10;
integer = integer/10;
count++;
}
printf("%d %d",count,sum);
return 0;
}
2).設計思路
第一步 將整數不斷除以10,將餘數不斷累加得到各位數字之和
第二步 輸出資料,得到結果
3)本題除錯中遇到的問題及解決方案
本題沒有遇到困惑
4).執行結果截圖

題目10-4: 整除光棍 (20 分)
這裡所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程式要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然後,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。
提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在於,s可能是個非常大的數 —— 比如,程式輸入31,那麼就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。
1).實驗程式碼

include<stdio.h>

int main()
{
int n,i,x=0,flag=0;
scanf("%d",&n);
for(i=1;;i++)
{
x=x*10+1;
if(x>=n)
{
flag=1;
printf("%d",x/n);
}
else if(flag==1)
printf("0");
x=x%n;
if(x==0)
break;
}
printf(" %d",i);
return 0;
}
2).設計思路
第一步 使用for語句進行迴圈,寫出光棍數字的表示式
第二步 分條件來進行判斷和輸出
第三步
3)本題除錯中遇到的問題及解決方案
4).執行結果截圖

第十一週程式設計總結
題目1:11-1 列印九九口訣表 (15 分)
下面是一個完整的下三角九九口訣表:
11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本題要求對任意給定的一位正整數N,輸出從1
1到N*N的部分口訣表。
1).實驗程式碼

include<stdio.h>

int main()
{
int n;
scanf("%d",&n);
for(int i = 1;i <=n ;i++){
for(int j = 1;j <= i;j++){
if(i * j >= 10){
printf("%d%d=%d ", j, i, j i); //2格
}
else{
printf("%d%d=%d ", j, i, j i);//3格
}
}
printf("\n");
}
return 0;

2).設計思路
第一步 考慮到使用巢狀語句迴圈,輸入一個整數
第二步 定義i從1開始迴圈到n停止
第三步 定義一個j從1開始迴圈到i停止
第四步 格式化輸出,當i和j的成績大於10的時候要空2格,否則空3格
3)本題除錯中遇到的問題及解決方案
在輸出乘法表的時候出現空格問題,不知道如何去列印
4).執行結果截圖

題目2:11-2 換硬幣 (20 分)
將一筆零錢換成5分、2分和1分的硬幣,要求每種硬幣至少有一枚,有幾種不同的換法?
1).實驗程式碼

include<stdio.h>

int main()
{
int x,count=0;
scanf("%d",&x);
for ( int k = x / 5; k > 0; k-- )
for ( int i = x / 2; i > 0; i-- )
for ( int j = x; j > 0; j-- )
if(k5+i2+j==x){
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", k, i, j, k + j + i);
count++;
}
printf("count = %d",count);
return 0;
}
2).設計思路
第一步 輸入零錢x
第二步 使用巢狀迴圈定義一個k從x/5開始迴圈,定義一個i從i/2開始迴圈,定義一個j從x開始迴圈,不斷累減
第三步 當滿足k5+i2+j==x條件時進行輸出,此時就是對應的硬幣數
4).執行結果截圖

題目3:11-3 找完數 (20 分)
所謂完數就是該數恰好等於除自身外的因子之和。例如:6=1+2+3,其中1、2、3為6的因子。本題要求編寫程式,找出任意兩正整數m和n之間的所有完數。
1).實驗程式碼

include<stdio.h>

int main(){
int n,m,i,j,sum,num=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++){
if(i==1) continue;
sum=1;
for(j=2;j<i;j++)
if(i%j==0) sum+=j;
if(sum==i){
printf("%d = 1",i);
for(j=2;j<i;j++)
if(i%j==0)
printf(" + %d",j);
printf("\n");
num++;
}
}
if(num==0) printf("None\n");
return 0;
}
2).設計思路
第一步 輸入2個數m、n
第二步 i從m開始迴圈到n結束,定義的j從2開始迴圈到i停止不斷累加
第三步 用sum來累加能整出的數
第四步 如果sum==i說明完數只有1
3)本題除錯中遇到的問題及解決方案
巢狀迴圈次數使用的次數過多,自己都有點暈
4).執行結果截圖

第12周程式設計總結
題目12-1 程式設計列印空心字元菱形 (10 分)
本題目要求讀入菱形起始字母和菱形的高度,然後輸出空心字元菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字串構成,每行的字串中心對齊;上半部分相鄰兩行字串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。
1) 實驗程式碼

include<stdio.h>

int main(){
int n,i,j,m,k;
char ch;
k=1;
scanf("%c %d",&ch,&n);
getchar();
//printf("%c %d",ch,n);
m=(n+1)/2;
for(i=0;i<m;i++)
{
for(j=0;j<m-i-1;j++){
printf(" ");
}
printf("%c",ch);
if(i==0){
ch++;
printf("\n");
continue;
}
for(j=0;j<2i-1;j++){
printf(" ");
}
printf("%c",ch++);
printf("\n");
}ch=ch-2;
for(i=n-m;i>0;i--){
for(j=0;j<k;j++){
printf(" ");
}k++;
printf("%c",ch);
for(j=0;j<2
i-3;j++){
printf(" ");
}
if(i==1){
printf("\n");
break;
}
printf("%c\n",ch--);
}
return 0;
}
2) 設計思路
第一步 使用for迴圈輸出空格
第二步 繼續使用for迴圈輸出字元
第三步 考慮特殊情況最中間的那一行字元
3) 本週除錯過程遇到的問題及解決方法
最中間的那一行屬於特殊情況需要特殊考慮
4) 執行結果截圖
題目12-2 跟奧巴馬一起畫方塊 (15 分)
美國總統奧巴馬不僅呼籲所有人都學習程式設計,甚至以身作則編寫程式碼,成為美國曆史上首位編寫計算機程式碼的總統。2014年底,為慶祝“電腦科學教育周”正式啟動,奧巴馬編寫了很簡單的計算機程式碼:在螢幕上畫一個正方形。現在你也跟他一起畫吧!
1) 實驗程式碼

include<stdio.h>

int main()
{
int i,j;
int n;
char c;
scanf("%d",&n);
getchar();
scanf("%c",&c);
for(i=1;i<=(int)(n/2.0+0.5);i++)
{ for(j=1;j<=n;j++)
{
printf("%c",c);
}
printf("\n");
}
return 0;
}
2) 設計思路
第一步 使用getchar接收字元,使用for迴圈來輸出行數
第二步 再巢狀一個for迴圈來輸出字元
第三步 輸出得到結果
3) 本週除錯過程遇到的問題及解決方法
在看到別人的程式碼時,在使用for迴圈輸出行數時一直不明白別人的式子為什麼要加上那個0.5.通過討論得出,0.5的作用就是四捨五入
4) 執行結果截圖

題目12-3 輸出三角形字元陣列 (15 分)
本題要求編寫程式,輸出n行由大寫字母A開始構成的三角形字元陣列。
1) 實驗程式碼

include<stdio.h>

int main()
{
int n, count = 0;
scanf("%d", &n);
for (int i = n; i > 0; i--) {
for (int j = 0; j < i; j++) {
printf("%c ", 'A' + count);
count++;
}
printf("\n");
}
return 0;
}
2) 設計思路
第一步 運用for迴圈輸出行數
第二步 巢狀一個for迴圈輸出字母
第三步 在迴圈外界輸出空格
3) 本週除錯過程遇到的問題及解決方法
這道題不是很難,勉強過關
4) 執行結果截圖
題目12-4 閱覽室 (20 分)
天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程式。當讀者借書時,管理員輸入書號並按下S鍵,程式開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程式結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程式應輸出當天的讀者借書次數和平均閱讀時間。
注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。
1) 實驗程式碼

include<stdio.h>

int main()
{
int N,n,hh,mm;
scanf("%d",&N);
char c;

for(int i=0;i<N;i++){
    int flag[1001]={0},time[1001]={0},sum=0,cnt=0;
    while(scanf("%d %c %d:%d",&n,&c,&hh,&mm)) {
            if(n==0) break;
            if(c=='S'){
                      time[n]=hh*60+mm;
                      flag[n]=1;
                      
            }
            else if(c=='E'){
                   if(flag[n]==1){
                        flag[n]=0;
                              sum+=hh*60+mm-time[n];
                              cnt++;
                    }
            }
    } 
   if(cnt==0) printf("0 0\n");
   else printf("%d %.0f\n",cnt,(double)sum/cnt);
} 

}
2) 設計思路
第一步使用for迴圈,一共有N天的記錄,迴圈N次
第二步建立2個數組分別是學號和時間
第三步使用while進行迴圈,並用if來判斷,輸入0,表示結束。接收到字元就從s到E統計時間
3) 本週除錯過程遇到的問題及解決方法
看到題目有點懵逼,但是通過同學的講解,漸漸有了思路
4) 執行結果截圖

第13周程式設計總結
題目13-1 使用函式計算兩點間的距離 (10 分)
本題要求實現一個函式,對給定平面任意兩點座標(x1,y1)和(x2,y2),求這兩點之間的距離。

include <stdio.h>

include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{
double x1, y1, x2, y2;

scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));

return 0;

}

/* 你的程式碼將被嵌在這裡 */

5) 實驗程式碼
double dist( double x1, double y1, double x2, double y2 )
{
double distance;
distance = sqrt(pow(x1-x2,2)+pow(y1-y2,2));

return distance;
}
6) 設計思路
第一步輸入自定義函式名稱
第二步定義變數距離
第三步運用函式求出距離
7) 本週除錯過程遇到的問題及解決方法
木有問題呀
8) 執行結果截圖

題目13-2 符號函式 (10 分)
本題要求實現符號函式sign(x)。

include <stdio.h>

int sign( int x );

int main()
{
int x;

scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));

return 0;

}

/* 你的程式碼將被嵌在這裡 */
5) 實驗程式碼
int sign( int x )
{
int s;

if(x>0){
s = 1;
}
else if(x==0){
s = 0;
}
else{
s = -1;
}

return s;
}
6) 設計思路
第一步 使用if-else語句對於X不同情況的討論
第二步 分別輸出結果
7) 本週除錯過程遇到的問題及解決方法
這是做過的一道題,但是使用的方法不同,現在使用的自定義函式來打的程式碼。個人認為直接使用if-else語句會更優化
8) 執行結果截圖

題目13-3 使用函式計算兩個複數之積 (10 分)
若兩個複數分別為:c1=x1+y1i和c2=x2+y2i,則它們的乘積為 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。
本題要求實現一個函式計算兩個複數之積。

include<stdio.h>

double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );

int main(void)
{
double imag1, imag2, real1, real2;

scanf("%lf %lf", &real1, &imag1);           
scanf("%lf %lf", &real2, &imag2);           
complex_prod(real1, imag1, real2, imag2);   
printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);

return 0;

}

/* 你的程式碼將被嵌在這裡 */
5) 實驗程式碼
void complex_prod( double x1, double y1, double x2, double y2 )

{

result_real = x1*x2 - y1*y2;

result_imag = x1*y2 + x2*y1;

}
6) 設計思路
直接寫出表示式即可,表示式題目有
7) 本週除錯過程遇到的問題及解決方法
本題使用了函式宣告,無需使用return返回函式值
8) 執行結果截圖

題目13-4 使用函式求最大公約數 (10 分)
本題要求實現一個計算兩個數的最大公約數的簡單函式。

include <stdio.h>

int gcd( int x, int y );

int main()
{
int x, y;

scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y));

return 0;

}

/* 你的程式碼將被嵌在這裡 */
5) 實驗程式碼
int gcd(int x,int y)
{
int max,min;
int n;
if(x>y)
max=x,min=y;
else
max=y,min=x;
do{
n=max%min;
max=min;
min=n;
}while(n);
return max;
}
6) 設計思路
第一步 使用if-else語句判斷出最大的數
第二步 使用do-while進行迴圈求出最大公約數即餘數
第三步 返回值
7) 本週除錯過程遇到的問題及解決方法
注意主函式名稱後面不能加標點
8) 執行結果截圖

題目13-5 使用函式輸出水仙花數 (20 分)
水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=13+53+33。 本題要求編寫兩個函式,一個判斷給定整數是否水仙花數,另一個按從小到大的順序打印出給定區間(m,n)內所有的水仙花數。

include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

return 0;

}

/* 你的程式碼將被嵌在這裡 */
1) 實驗程式碼
int narcissistic(int number)
{
int digit, powersum, integer, count;
count = 0;
integer = number;
while(integer > 0)
{
integer = integer / 10;
count++;
}

powersum = 0;
integer = number;

for(int i=0; i < count; i++)
{
digit = integer % 10;
integer = integer / 10;
powersum = powersum + pow(digit, count);

}

if(powersum == number)
return 1;
else
return 0;
}

void PrintN(int m, int n)
{
int i;
for(i = m + 1; i < n; i++)
if (narcissistic(i) == 1)
printf("%d\n", i);
}
2) 設計思路
第一步使用while迴圈統計他的位數,並得到每位上的數字
第二步使用for迴圈得到他的餘數。並計算,每位上數字的位數方的結果
第三步使用if-else語句來判斷是否為水仙花數
3) 本週除錯過程遇到的問題及解決方法
此題需要再定義一個函式來列印區間,此時應當把返回1和返回0的程式碼放入此函式
4) 執行結果截圖