1. 程式人生 > >C語言程序設計第五次作業——循環結構(1)

C語言程序設計第五次作業——循環結構(1)

執行 wan 裏的 images for語句 urn 語句 eof uil

(一)改錯題

輸出華氏攝氏溫度轉換表:輸入兩個整數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)