(一)改错题
输出华氏摄氏温度转换表:输入两个整数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
源程序(有错误的程序)
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循环中,末尾不用加分号
改正方法:将分号去掉,改为 for (fahr = lower , fahr <= upper, fahr ++)
错误信息2:
错误原因:for循环语句中,括号内部表达式用分号隔开
改正方法:将逗号改为分号,为 for (fahr = lower ; fahr <= upper; fahr ++)
错误信息3:
错误原因:编译没有问题,但输出结果错误,经查找,far定义为整浮点型型,输出格式为
改正方法:将输出%3.0f改为%3d
错误信息4:
错误原因:输出错误,继续找错,发现温度转化式有错误
改正方法:改为celsius = 5 * (fahr - 32.0) / 9;
错误信息5:
错误原因:输出结果不对,继续查找,发现for语句没有加大括号,致运行错误
改正方法:加上花括号为
for (fahr = lower , fahr <= upper, fahr ++) ;
{
celsius = 5 /9 * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celsius);
}
错误信息6:
错误原因:输出4组数据,经思考,每次fahr增加2,程序中增加1
改正方法: fahr ++改为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\n"); / 显示表头 /
/ 温度转换 */
for (fahr = lower ; fahr <= upper; fahr=fahr+2)
{
celsius = 5 * (fahr - 32.0) / 9;
printf("%3d %6.1f\n", fahr, celsius);
}
return 0;
}
(二)学习总结
1.
源程序
执行过程:
①定义了四个整型变量 i,num,odd,even,并赋odd初值为0,赋even初值为0;
②进入for语句循环,赋 i 值为1;
③判断循环条件 i<=10,此时 i =1,i<10成立,进入循环;
④执行循环,输入一个整数,存储到num这个变量中;
⑤判断num与2求余是否为0;
⑥若为0,则执行even++,即even的值加一;若为假,即余数不为0,则执行odd++,即odd的值加1;
⑦判断完成后,执行i++,i值加1,此时i值为2;
⑧接着判断循环条件,i=2<10成立,进入循环;
⑨再次输入一个数,再次判断if条件
⑩循环十次之后,i值为11,此时i=11>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 的值,为2,在给 i 值加1;第二条 先给 j 值加1,在输出此时 j 的值,为3。
说明增量运算符在作为表达式的一部分时,前缀与后缀是不一样的,前缀是先给变量加上或减去一个值,再参加运算;而后缀则是该变量先参加运算,再给该变量加上或减去一个值。
两条输出语句执行完后,i 和 j 的值都为3。
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
(1)
结果为一行的五个 *
(2)
结果仍为一行的五个 *
(3)
结果为一列的五个 *
(4)
结果为一行的五个 *
由此看出:循环体的认定与缩格形式无关,与{}有关;要正确判断一个循环语句中的循环体,要看{},看{}将那些内容包括在内;
四种程序中,2、3、4都是正确的缩进格式。
4.对其他你认为需要进行总结的内容进行总结。
关于符合运算符,符合运算符的优点体现在它的方便,比如表达式 n=n+1就可以写成n+=1,大大提高了编程的效率,节省了时间。
(三)实验总结
- 统计学生平均成绩与及格人数
(1)题目
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图
(3)源代码
include <stdio.h>
int main ()
{
int i,N,G,count,sum;
double average;
scanf("%d",&N);
count=0;
sum=0;
if(N == 0)
{
}
else
{
for(i=1;i<=N;i++)
{
scanf("%d",&G);
sum = sum + G;
average = (double)sum / N;
if(G>=60)
{
count = count + 1;
}
else
{
count = count;
}
}
}
printf("average = %.1f\n",average) ;
printf("count = %d",count);
return 0;
}
(4)实验分析
问题:
原因:未给count赋初值
解决办法:给count赋初值为0
(5)本题PTA提交列表
2.到底是不是太胖了
(1)题目
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int i,N,H,W;
double bz;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d %d",&H,&W);
bz = (H-100)0.92;
if(W-bz<bz0.1 && bz-W<bz0.1)
{
printf("You are wan mei!\n");
}
else if(W-bz>=bz*0.1)
{
printf("You are tai pang le!\n");
}
else
{
printf("You are tai shou le!\n");
}
}
return 0;
}
(4)实验分析
问题1:完美情况时,只考虑了真实体重-标准体重>标准体重*0.1的情况
原因:考虑不全面,没有仔细阅读题目要求
解决办法:增添了缺少的步骤
问题2:边界测试150错误
原因:不了解程序的情况
解决办法:老师帮忙
(5)本题PTA提交列表
3.统计学生成绩
(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int N,A=0,B=0,C=0,D=0,E=0,i,grade;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&grade);
if(grade>=90 && grade<=100)
{
A++;
}
else if(grade>=80 && grade<90)
{
B++;
}
else if(grade>=70 && grade<80)
{
C++;
}
else if(grade>=60 && grade<70)
{
D++;
}
else
{
E++;
}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
(4)实验分析
本题只要仔细,不马虎,就不会有错,此题是循环中简单的一题
(5)本题PTA提交列表
4.找出最小值
(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int n,x,i,min;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
if(i==1)
{
min=x;
}
else
{
if(min>x)
{
min=x;
}
else
{
min=min;
}
}
}
printf("min = %d",min);
return 0;
}
(4)实验分析
本题属于简单题,只要用心的话就可以做对,就可以无停顿的写下程序
(5)本题PTA提交列表
(四)博客互评
郭玉霖的博客链接:http://www.cnblogs.com/HBQ521/
姚庆虎的博客链接:http://www.cnblogs.com/yaole10086/
T磊?的博客链接:http://www.cnblogs.com/8426224ll/
|
请发表评论