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

原文地址:https://www.cnblogs.com/xing--/p/7806535.html