C语言第三次博客作业---单层循环结构
一、PTA实验作业。
题目1
1.实验代码
int n,i;
double height1,height2;//1为输入身高,2为输出身高。
char sex;
//1<=height1<=3;
//N<=1;
scanf("%d",&n);
while(n--){
getchar();
scanf("%c%lf",&sex,&height1);
switch(sex){
case 'M':height2=height1/1.09;break;
case 'F':height2=height1*1.09;break;
}
printf("%.2f\n",height2);
}
return 0;
2.设计思路
主要描述题目算法。可以用文字描述:
- 第一步:定义height1为输入身高,height2为输出身高,sex为性别,n为人数。
- 第二步:输入人数。
- 第三步:输入性别和输入身高,若性别男height2=height1/1.09;break;,若为女height2=height1*1.09;break;
- 第四步:输出height2的值。
- 第五步:重复步骤三,知道n>0.
3.本题调试过程碰到问题及解决办法
- (1)第一次输出后需要一个回车,应用getchar读掉回车,这点没注意到。
- (2)case后面的字符需要用‘’引出来 否则编译错误。
4.本题PTA实验结果
贴图展示:
题目2
1.实验代码
int i,a,n,s;
s=0;
scanf("%d %d",&a,&n);//输入a,n
for(i=1;i<=n;i++)
s=i*a+s*10;//计算公式
printf("s = %d",s);
2 设计思路
- (1)定义整型变量i,n,a,s存放计算结果
- (2)输入a,n
- (3)计算s=ia+s10
- (4)重复步骤3,直到i>n时结束循环
- (5)输出s
3.本题调试过程碰到问题及解决办法
)
看题目计算a+aa+aaa+...+aa..a的和以为是a*a的意思,所以就很疑惑为什么题目的例子会输出246的答案。
- 2.想了很久还是没懂这个题,就求助了室友,才明白aa是22的意思。
题目3
1.实验代码
int i,number,min,n;
scanf("%d",&n);
scanf("%d",&number); //输入number
min=number; //赋值min为number
for(i=1;i<n;i++){
scanf("%d",&number); //再次输出number
if(min>number) //比较min和number的大小
min=number;
}
printf("min = %d",min); //输出min
2 设计思路
- (1)定义整型变量i,n,number表示输入的数字,min代表最小值
- (2)输入n.number,赋值min=number
- (3)再次输入number,若number小于min,赋值min=number
- (4)重复步骤3,直到i<n结束循环
- (5)输出min
3.本题调试过程碰到问题及解决办法
![](http://images2017.cnblogs.com/blog/1231997/201711/1231997-20171102183202607-2020958412.png
)
通过调试发现忘了对min赋值,虽然对于这个题没有影响,但有可能这种细节不注意,对于以后的编程有一定的影响。
题目4
1.实验代码
int i,N,number,n;
scanf("%d%d",&number,&N);//输入电脑产生的数和循环次数
for(i=1;i<=N;i++){
scanf("%d",&n);//输入玩家猜的数字
if(n>number)//n大于number
printf("Too big\n");
else if(n<number&&n>0)//n大于0且小于number
printf("Too small\n");
else if(n==number&&i==1){//n等于number且i等于1
printf("Bingo!\n");break;}
else if(n==number&&i>1&&i<=3){//n等于number且i等于2或3
printf("Lucky You!\n");break;}
else if(n==number&&i>3&&i<=N){//n等于number且i大于3小于N
printf("Good Guess!\n");break;}
else if(n<0){//n小于0
printf("Game Over");break;}
}
if(n!=number&&i>N)//n不等于number且i大于N
printf("Game Over\n");
2 设计思路
- (1)定义整型变量i,N为可以猜的次数,number为电脑随机产生的数字,n为玩家输入的数字
- (2)输入number,N
- (3)输入n为玩家输入的数字
- (4)当i<=N时,若n大于0小于number, 输出Too small. 若n 大于number, 输出Too big. 若i=1且n等于number 输出Bingo!
若i 等于1或2且n 等于number 时,输出Lucky you! 若i 大于3小于等于N 且n 等于number 时输出Good Guess! 若n 小于0时输出Game Over - (5)当i>=N且n不等于number时输出Game Over
3.本题调试过程碰到问题及解决办法
)
发现如果猜中后程序并没有结束,通过调试想起来没有加break语句跳出循环。
- 2.对于输出Too small的条件没有严谨,忘记n大于0的条件,输入负数的时候会输出Too small的情况。
题目4.
1.实验代码
int main()
//60/120=1/2
{int number1,number2;
scanf("%d/%d",&number1,&number2);
int a,b,c;
a=number1,b=number2;//a=60,b=120
if(a%b==0||b%a==0){
while(c!=0){
if(a<b){
c=a%b;//c=60%120=60//c=60%60=0
a=b;//a=120//a=60
b=c;
}//b=c=60//b=0
else if(a>b){
c=b%a;
b=a;
a=c;
}
}
if(a<b){
printf("%d/%d",number1/a,number2/a);
}
else{printf("%d/%d",number1/b,number2/b);
}}
else
{
printf("%d/%d",number1,number2);}
return 0;
2 设计思路
主要描述题目算法。可以用文字描述:
- 第一步:定义number1存放分子,number2存放分母
- 第二步:如果可化简,a>b,则c=a%b,a=b,b=c
- 第三步:循环2得到结果
- 第四步:a<b,则c=b%a;b=a;a=c;
- 第五步:循环4得到结果
3.本题调试过程碰到问题及解决办法。
- (1)运行发现无论输入什么结果都为1/1,调试后发现是算法中有错误。
- (2)运行发现当a大于b时不会进行化简,调试发现else被镶嵌在if里,也就是if{}的有漏
4.本题PTA实验结果。
二、截图本周题目集的PTA提交列表及最后排名。(2分)
1.提交列表:
2.最后排名:
三、本周学习总结(1分)
1.你学会了什么?
我学会了循环结构的简单用法
2.本周的内容,你还不会什么?
对于循环的算法还不是很了解,应学习更多算法。
3.你碰到什么困难,打算如何解决?
(1)多次出现编译错误,解决方法为在Dev C++中运行,看看提示你除了什么错误,实在不行发群上问老师助教同学。
(2)格式错误(答案错误)是最常见的问题,解决方式为将输出样例复制粘贴下来,还是错误就向老师助教寻求帮助。
(3)部分正确是最难受的,说明你成功完成了大部分,但是还有部分没完成,这时候应该静下心来好好想想是什么地方出了问题,可以重新敲一次代码,和原来进行核对