C语言程序设计第五次作业——循环结构(1)

(一)改错题

输出华氏摄氏温度转换表:输入两个整数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; 
}

对源程序进行编译,采用每次修改第一个错误并重新编译的方法,记录每个错误的错误信息、分析错误原因并给出正确的语句。

  错误信息1:

  错误原因:for循环括号里边应该用;隔开,而不是用,隔开。

  改正方法: 如图用;隔开。

  错误信息2:

   错误原因:括号后面多出了一个分号

  改正方法:把分号去掉

  错误信息3:

   错误原因:fahr为 int,但是输出确实%3.0f,对应有误。

  改正方法:将%3.0f改为%3d。

  错误信息4:

   错误原因:突然发现for下边循环语句没有加大括号。

  改正方法:加上大括号。

  错误信息5:

   错误原因:发现循环数目次数太多,由此看出 循环语句有错误 fahr ++不正确。

  改正方法:

  错误信息6:celsius是浮点型,所以5/9不对,不符合浮点型计算。

  改正方法:改为5.0/9

(二)学习总结

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

详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
答:①odd=0
②even=0
③i=1
④循环开始i<=1
⑤输入num(数字)
⑥num与2求余的结果是不是等于0,如果是 even+1,如果不是那就 odd+1 第一次循环结束,i=i+1
⑦i是不是小于等于10,所以i=2小于10,开始第二次循环
⑧num与2求余的结果是不是等于0,如果是 even+1,如果不是那就 odd+1 第一次循环结束,i=i+1
.
.
.
⑨i=11,i大于10,跳出循环,输出 even 与 odd,结束
实现的功能:10以内的 奇数和 与 偶数和

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

运行结果:

单独运行时,前缀和后缀形式没有区别,结果一样。

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

运行结果:

第一条输出语句i++是先输出变量的值 在加1,所以输出2;而++j是先给变量的值加1在输出所以是3;
说明i++与++j 顺序不同,可能输出的值不一样。两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值;
这两条输出语句执行完后,i=2,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可看出结果一样,所以,循环体的认定与缩格形式无关
③有1 2 3结果可看出,与{}有关。而且,有3 4 可看出,循环下边大括号位置的不同,结果不一样,在3中,printf("\n");在括号里边,所以答案*分行,而4恰恰相反。
④我认为3 4 是正确的。

4.对其他你认为需要进行总结的内容进行总结。
答:i++与++i我觉得还有一些需要总结,在此我参照了一些博文。
http://blog.csdn.net/david8631/article/details/2707914/

(三)实验总结

本次实验总结,学号末位数是单数的同学完成循环结构(1)中的1、3、5、7题,学号末位数是双数的同学完成循环结构(1)中的2、4、6、8题。

  1. 统计学生平均成绩与及格人数

(1)题目

本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图

(3)源代码

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

(4)实验分析

问题1:sum SUM结果错误
原因:没有赋初值
解决办法:sum=0,SUM=0;

(5)本题PTA提交列表

4 .到底是不是太胖了

(1)题目

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

(2)流程图

(3)源代码

# include <stdio.h>
# include <math.h> 
int main()
{
    int N,W,R,i,H; 
    double L,K;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
	    scanf("%d %d",&H,&W);
	    L=(H-100)*0.9*2;
	    K= fabs(W-L);
	    if(K<L*0.1)
	    { 
	    printf("You are wan mei!\n");
	    }
	    else if((W-L)>=L*0.1) 
	    {
	    printf("You are tai pang le!\n");	
	    }
   	    else
	    {
	    printf("You are tai shou le!\n");	
	    }
    }
 
     return 0;
 }

(4)实验分析

问题1:在一个人体重身高录入 输出结果是太胖了结果不对。
原因:浮点型比较可能会出现错误
解决办法:左右两边都成10 使其变成整数在比较。

(5)本题PTA提交列表

6.统计学生成绩
(1)题目本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图

(3)源代码

# include <stdio.h>
int main()
{
    int A=0,B=0,C=0,D=0,E=0,N,i,n;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
	    scanf("%d",&n);
	    if(n>=90&&n<=100)
	    {		
		    A=A+1;
	    }
	    else if(n>=80&&n<90)
	    {
		    B=B+1;
	    }
	    else if(n>=70&&n<80)
	    {
		    C=C+1;
	    }
	    else if(n>=60&&n<70)
	    {
		    D=D+1;
	    }
	    else
	    {
		    E=E+1;
	    }
    }

    printf("%d %d %d %d %d",A,B,C,D,E);

    return 0;
} 

(4)实验分析

问题1:格式错误
原因:大括号没有对齐
解决办法:所有括号依次对其

(5)本题PTA提交列表

  1. 找出最小值
    (1)题目

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。

(2)流程图

(3)源代码

#include<stdio.h>
#include<limits.h>
int main(void)
{
    int N,n,min = INT_MAX,i = 0;
    scanf("%d",&N);
    for(i = 1;i <= N;i++)
    {
        scanf("%d",&n);
        if(n <= min)
        {
            min = n;
        }

    }
    printf("min = %d",min);
    return 0;
}

(4)实验分析

问题1:刚开始不会做,因为不知道第三变量取谁
原因:第三变量不懂取什么
解决办法:知道了limits.h 用途检测整型数据类型表达值范围 ,可以用它找出最小值

(5)本题PTA提交列表

(四)博客互评

每个同学至少评论三篇其他同学的博客作业,依次列出你所评论的博客地址。对于同学对你的博客作业提出的问题,应积极进行回答,存在的错误应及时改正。希望大家能够在互评的过程中取长补短,共同进步。

http://www.cnblogs.com/zhaochenyu/p/7810395.html(永恒破碎
http://www.cnblogs.com/snxtx/p/7812139.html(许天笑)
http://www.cnblogs.com/liukaixuan/p/7812027.html(人满为患)

posted on 2017-11-11 00:43  怪人、  阅读(596)  评论(3编辑  收藏  举报

导航