zoukankan      html  css  js  c++  java
  • C语言程序设计第五次作业

    (一)改错题

    输出华氏摄氏温度转换表:输入两个整数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
    ");             /* 显示表头 */
        /* 温度转换 */
        for (fahr = lower , fahr <= upper, fahr ++) ;
            celsius = 5 /9 * (fahr - 32.0); 
            printf("%3.0f %6.1f
    ", fahr, celsius); 
    
       return 0; 
    }
    

    错误1:

    原因1:在for循环中,分号写成了逗号,而且在括号后加了分号,格式错误
    改正1:将逗号改成分号,去掉括号后的分号
    进行编译之后有错
    错误2:

    原因2:经检查代码发现输出类型有错,源代码fahr是整型,应用%d,结果用成了%f
    改正2:将%f改为%d
    编译发现错误3
    错误3:

    原因3:观察发现公式写错了,原公式c = 5×(f-32)/9,而在此处公式 celsius = 5 /9 * (fahr - 32.0);
    改正3:将公式改正确
    编译出现错误4
    错误4:

    原因4:开始没有观察出什么错误,但是在看了半天之后发现for后边有多条语句,没有加大括号
    改正4:在for语句后加上大括号
    编译出现错误5
    错误5:

    原因5:
    在for循环中,每次都增加,而在输出的情况中,不是每次都输出

    改正5:将原题目中的fahr++改为fahr+=2
    编译出现正确结果

    正确代码

     #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
    ");             /* 显示表头 */
        /* 温度转换 */
        for (fahr = lower ;fahr <= upper; fahr +=2) 
            {
    		celsius =5*(fahr-32.0)/9;
            printf("%d %6.1f
    ", fahr, celsius); 
            }
       return 0; 
        }
    

    (二)学习总结

    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; 
    }
    

    第一步:定义整形变量i,num,odd,even
    第二步:给整形变量赋值
    第三步:执行for循环,给变量i赋值为1,给定循环次数为10,i执行完加1
    第四步:输入数据num
    第五步:执行if语句,判断输入数据是否能被2整除,若能整除even+1,若不能odd+1
    第六步:输出数据even和odd
    此程序执行功能是判断输入的数据奇数和偶数的个数
    2.增量运算符
    (1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

    #include <stdio.h>
    int main()
    {    
    int i,j;
    i = 2;
    j = 2;
    i++;
    ++j;
    printf("i = %d
    ",i);
    printf("j = %d
    ",j);   
    return 0; 
    }
    

    运行结果是i=3,j =3
    增量运算符在单独使用时前缀与后缀形式是没有区别的,只有在混合表达式中才有区别
    (2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

    #include <stdio.h>
    int main()
    {    
    int i,j;
    i = 2;
    j = 2;  
    printf("%d
    ",i++);
    printf("%d
    ",++j);     
    return 0; 
    }
    

    运行结果
    第一条输出语句是先输出i的值,然后执行i++
    第二条语句是先把j的值加1,然后输出,说明在表达式计算中,前缀与后缀的计算结果是不一样的
    执行完结果是i =2,j=3
    3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
    (1)

    #include <stdio.h>
    int main()
    {    
    int i;
    for(i = 1;i <= 5;i++)
        printf("*");
    printf("
    ");   
    return 0; 
    }
    

    (2)

     #include <stdio.h>
    int main()
    {    
    int  i;
    for(i = 1;i <= 5;i++)
        printf("*");
        printf("
    ");   
    return 0; 
    }
    

    (3)

    #include <stdio.h>
    int main()
    {    
    int i;
    for(i = 1;i <= 5;i++)
    {
        printf("*");
        printf("
    ");
    }
    return 0; 
    }
    

    (4)

    #include <stdio.h>
    int main()
    {    
    int i;
    for(i = 1;i <= 5;i++)
    {
        printf("*");
    } 
    printf("
    ");
    return 0; 
    }
    




    由以上的运行结果可知循环体的认定与缩格形式无关但是与{}有关,{}里边的是循环体,外边的则不进入循环,(3)(4)缩进是正确的

    (三)实验分析
    一:(1)题目
    本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
    输入格式:
    输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
    输出格式:
    按照以下格式输出:
    average = 成绩均值
    count = 及格人数
    其中平均值精确到小数点后一位。
    (2)流程图

    (3)源代码

    #include<stdio.h>
    int main()
    {
    int n,count,i,sum,score;
    float average=0;
    sum=0,count=0,score=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    
       {
    	scanf("%d",&score);
    	sum=sum+score;
        if(score>=60)
    	count+=1;
       }
       if(n>0)
       {
        average=(float)sum/n;
    printf("average = %.1f
    ",average);
    printf("count = %d
    ",count);
    }
       else
      {
    
    printf("average = %.1f
    ",average);
    printf("count = %d
    ",count);
      }
    
    return 0;
     } 
    

    (4)实验分析
    错误1:不知道强制转换怎么弄,输入整形如何转换成浮点型,输出显示总是0,研究了很久
    改正1:查了资料,又试了几次,才将结果弄正确

    (5)提交列表

    二:
    (1):题目
    据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
    输入格式:
    输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。
    输出格式:
    为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。
    (2)流程图

    (3)源程序

    #include<stdio.h> 
    int main()
    {
    int i,N,x;
    double a,b,y;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
    	scanf("%d %lf",&x,&y);
    	y=y/2;
    	a=(x-100)*(0.9);
    	b=a/10.0;
    	if(y>=(a+b))
    	{
    		printf("You are tai pang le!
    ");
    	}
    	else if(y<=(a-b))
    	{
    		printf("You are tai shou le!
    ");
    	}
    	else
    	{
    		printf("You are wan mei!
    ");
    	}
    }
    return 0;
    }
    

    (4)实验分析
    首先没有读懂题目的意思,不知道怎么做,研究了很久,和同学交流才做对的
    (5)提交列表


    三:(1)题目
    本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
    大于等于90分为A;
    小于90且大于等于80为B;
    小于80且大于等于70为C;
    小于70且大于等于60为D;
    小于60为E。
    输入格式:
    输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
    输出格式:
    在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
    (2)流程图

    (3)源程序

    #include<stdio.h>
    int main()
    {
    int n,i,score,y=0,l=0,j=0,h=0,c=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    	scanf("%d",&score);
    	if(score>=90)
    	y=y+1;
    	else   if(score>=80)
    	j=j+1;
    	else    if(score>=70)
    	h=h+1;
    	else    if(score>=60)
    	l=l+1;
    	else 
        c=c+1;
    }
    printf("%d %d %d %d %d",y,j,h,l,c);
    
    
    return 0;
    
    
    
    
     } 
    

    (4)实验分析
    此题没有什么太大难度,比较简单
    (5)提交列表

    四:(1)题目
    本题要求编写程序,找出给定一系列整数中的最小值。
    输入格式:
    输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
    输出格式:
    在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
    (2)流程图

    (3)源程序

    #include<stdio.h>
    int main()
    {
    int n,i,min,number;
    scanf("%d",&n);
    scanf("%d",&number);
    min=number;
    for(i=2;i<=n;i++)
    {scanf("%d",&number);
    
    if(min>number)
    {
    min=number;
    }
    }
    printf("min = %d",min);
    return 0;
     }
    

    (4)实验分析
    不知道先与哪个数比较,没有一个值在内容中可以与之比较,得先输入一个值记录
    (5)提交列表

    四:博客互评
    (1)陈魔:http://www.cnblogs.com/liumiaomiao520/p/7795587.html
    (2)vahalla:http://www.cnblogs.com/luyu0322-/p/7809912.html
    (3)曲儿说:http://www.cnblogs.com/abc15369938639/p/7810952.html

  • 相关阅读:
    Java中Runnable和Thread的区别
    Callable,Runnable比较及用法
    如何实现视差滚动效果的网页?
    【175】Easy CHM的使用
    【174】C#添加非默认字体
    【173】双显示器随便切换位置
    【172】outlook邮箱设置
    【171】IDL读取HDF文件
    怎样实现二级联动
    Java 23种设计模式详尽分析与实例解析之二--结构型模式
  • 原文地址:https://www.cnblogs.com/xing--/p/7806535.html
Copyright © 2011-2022 走看看