標籤:== img 程式設計 內容 count 代碼 統計學 學習總結 統計
(一)改錯題
輸出華氏攝氏溫度轉換表:輸入兩個整數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
來源程式(有錯誤的程式)
#include <stdio.h> int main(void) { int fahr , lower, upper; /* fahr表示華氏度 */ double celsius; /* celsius表示攝氏度 */ printf("Enter lower:"); scanf("%d",&lower); printf("Enter upper:"); scanf("%d",&upper); printf("fahr celsius\n"); /* 顯示表頭 */ /* 溫度轉換 */ for (fahr = lower , fahr <= upper, fahr ++) ; celsius = 5 /9 * (fahr - 32.0); printf("%3.0f %6.1f\n", fahr, celsius); return 0; }
對來源程式進行編譯,採用每次修改第一個錯誤並重新編譯的方法,記錄每個錯誤的錯誤資訊、分析錯誤原因並給出正確的語句。
錯誤一
for後邊不加逗號
改正方法:將逗號刪去
錯誤二
for後小括弧的語句應用分號隔開
改正方法 將括弧裡的逗號改成分號
錯誤三
for後邊的語句體沒有加括弧
改正方法:將for後的語句體用花括弧括起來
錯誤四
fahr為整形變數 應用%d celsius應為一位小數
改正方法:printf("%d %.1f\n", fahr, celsius);
錯誤五
每次迴圈只加1
改正方法:
錯誤六
計算公式錯誤
改正方法:
(二)學習總結
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; }
詳細描述程式的執行過程,即說明程式的每一步是執行的哪條代碼,執行順序如何。迴圈需描述前兩次迴圈和最後一次迴圈的詳細執行過程。最後說明程式實現的功能是什麼。
執行步驟:
1.定義整型變數
2.給odd和even賦初始值0
3.執行for語句
(1)執行i=1;
(2)輸入num
(3)執行if語句,若為真,則執行even++;若為假,則執行odd++
(4)進行for迴圈,當i=2時,執行(2)(3)
(5)再進行for迴圈,直到i=11時,不符合for迴圈的條件,輸出even和odd的值
程式實驗的功能:
輸入十個整數,判斷十個整數中有幾個偶數,幾個奇數
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++是先執行其他語句再加1;++j是先加1再執行其他語句
(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; }
運行結果:
執行過程:
1.執行整型定義
2.執行i=2,j=2;
3.輸出i的值
4.執行i++;
5.執行++j,將j的值加1
6.輸出j
說明的問題:
i++是賦值,再加1;++j是先加1,再去賦值
兩條輸出語句執行完後,i和j的值都是3
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; }
運行結果:
(1)(2)的運行結果相同,所以迴圈體的認定與縮格形式無關;(3)(4)的運行結果不同,(3)(4)程式中{}裡的內容也不一樣,而迴圈結構執行的是{}中的內容,所以迴圈體的認定與{}有關。
如果一個迴圈語句後面加了{},那麼這個語句迴圈體為{}裡面的內容,如果迴圈語句後面沒有加{},那麼迴圈體語句為迴圈語句後的第一條語句。
(1)(3)(4)是正確的
(2)是錯誤的
7-2 統計學生平均成績與及格人數(10 分)
#include<stdio.h>
int main()
{
int n,x=0,i;
double a[10001],sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]);
if(a[i]>=60) x++;
sum+=a[i];
}
if(n==0) printf("average = 0.0\n");
else printf("average = %.1f\n",sum/n);
printf("count = %d\n",x);
return 0;
}
7-4 到底是不是太胖了(15 分)
#include<stdio.h>
#include<math.h>
struct student{
int sg,tz;
double bz;
}stu[20];
int main(){
int num,i;
double c;
scanf("%d",&num);
for(i=0;i<num;i++){
scanf("%d %d",&stu[i].sg,&stu[i].tz);
stu[i].bz=0;
}
for(i=0;i<num;i++){
stu[i].bz=(stu[i].sg-100)*0.9;
c=stu[i].bz-(double)stu[i].tz/2.0;
if(stu[i].bz*0.1>fabs(c)){
printf("You are wan mei!\n");
}
if(c>0&&stu[i].bz*0.1<=fabs(c)){
printf("You are tai shou le!\n");
}
if(c<0&&stu[i].bz*0.1<=fabs(c)){
printf("You are tai pang le!\n");
}
}
return 0;
}
7-6 統計學產生績(10 分)
#include<stdio.h>
int main(void)
{
int N;
int i,x;
int a=0,b=0,c=0,d=0,e=0;
while(scanf("%d",&N)!=EOF){
for(i=0;i<N;i++){
scanf("%d",&x);
if(x>=90){
a++;
}else if(x>=80){
b++;
}else if(x>=70){
c++;
}else if(x>=60){
d++;
}else{
e++;
}
}
printf("%d %d %d %d %d\n",a,b,c,d,e);
}
return 0;
}
7-8 找出最小值(10 分)
#include<stdio.h>
int main(void)
{
int n,i,l,min;
scanf("%d",&n);
scanf("%d",&l);
min=l;
for(i=1;i<n;i++){
scanf("%d",&l);
if(min>l)
min=l;
}
printf("min = %d",min);
return 0;
}
C語言程式設計第五次作業——迴圈結構(1)