(一)改错题
1、错误信息:
错误原因:do while的形式错了
改正方法:while( item < eps)后加上分号 。
2、错误信息:
错误原因:最后一项的绝对值小于eps结束,要想要循环进行应该>=eps
改正方法:把item < eps改成item>=eps.
3、错误信息:
错误原因:item定义得是double类型
改正方法:把1改成1.0
4、错误信息:
错误原因:item定义得是double类型
改正方法:输入把%f改成%lf.
(二)学习总结
1.while(1)和for(;;)是无限循环,用break.
2.(1)循环次数已知,用for语句。
(2)循环次数未知,但循环条件在进入循环时明确,用while语句。
(3)循环次数未知,且循环条件在进入循环时未知,需要在循环体中明确,用do while语句。
3.(1)for语句
#include <stdio.h>
int main(void)
{
int n,i,sum;
double average;
sum=0;
i=1;
scanf("%d",&n);
for(; ;)
{
if(n!=-1)
{
sum=sum+n;
i++;
}
else
{
break;
}
scanf("%d",&n);
}
average=(double)sum/i;
printf("%f",average);
return 0;
}
(2)while语句
#include <stdio.h>
int main(void)
{
int n,i,sum;
double average;
n=0;
sum=0;
i=0;
while(n!=-1)
{
scanf("%d",&n);
sum=sum+n;
i++;
}
average=(double)sum/i;
printf("%f",average);
return 0;
}
(3)do while语句
#include <stdio.h>
int main(void)
{
int n,sum,i;
double average ;
sum=0;
i=1;
scanf("%d",&n);
do
{
sum=sum+n;
i++;
scanf("%d",&n);
}while(n!=-1);
average=(double)sum/i;
printf("%f",average);
return 0;
}
4.(1)
break是不符合条件,直接跳出循环
(2)
continue是不符合条件,结束本次循环。
(三)实验总结
-
求给定精度的简单交错序列部分和
(1)题目
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
(2)流程图
(3)源代码#include <stdio.h>
#include <math.h>
int main(void)
{
int n;
double eps,sum,b,c;
scanf("%lf",&eps);
n=1;
sum=0;
c=1;
if(c<=eps)
{
sum=1;
}
else
{
while(fabs(c)>eps)
{
b=3.0n-2;
c=1.0/bpow(-1,n-1);
sum=sum+c;
n++;}
}printf("sum = %f",sum);
return 0;}
(4)实验分析
问题1:运行不对
原因:用eps于eps相比较 了
解决办法:重新定义一个量与eps比较。
(5)本题PTA提交列表
-
猜数字游戏
(1)题目
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
(2)流程图
(3)源代码#include <stdio.h>
int main()
{
int i,n,a,N;
scanf("%d",&i);
scanf("%d",&N);
while(n<=N)
{
scanf("%d",&a);
n=n+1;
if(a<0)
{
printf("Game Over\n");
break;
}
if(i>a)
{
printf("Too small\n");} else if(i<a) { printf("Too big\n"); } else { if(n==1) { printf("Bingo!\n"); break; } else if(n>1&&n<=3) { printf("Lucky You!\n"); break; } else if(n>3&&n<=N) { printf("Good Guess!\n"); break; } else { printf("Game Over\n"); break; } }
}
return 0;
}
(4)实验分析
问题1:编译错误
原因:第一个else 就是a=b的意思,我在里面判断的时候又写了一遍a=b.
解决办法:把b=a去掉
(5)本题PTA提交列表
-
求奇数和
(1)题目
本题要求计算给定的一系列正整数中奇数的和
(2)流程图
(3)源代码#include <stdio.h>
int main(void)
{
int a,sum;
sum=0;
scanf("%d",&a);
do
{if(a<0) { break; } else if(a%2!=0) { sum=sum+a; } scanf("%d",&a);
}
while(a>0);
printf("%d",sum);
return 0;
}
(4)实验分析
问题1:编译错误
原因:while(a>0)后面应该有分号
解决办法:while(a>0);
(5)本题PTA提交列表
(四)博客互评
1,姚纪远:http://www.cnblogs.com/yjy751522356/p/7838296.html
2.王映丹:http://www.cnblogs.com/windsky-1999/p/7838107.html
3.卢玉:http://www.cnblogs.com/luyu0322-/p/7846404.html