C语言博客作业--嵌套循环
一、PTA实验作业
题目一:7-4 换硬币
1. 本题PTA提交列表
2. 设计思路
- 1.定义a,b,c分别放5分,2分,1分钱硬币的数量。定义count统计次数,x放输入的金额
- 2.规定count的初值为0
- 3.输入x的值
- 4.用for语句列出所有的可能
- 5.如果可能满足5a+2b+c==x执行步骤6,7
- 6.输出5分,2分,1分及总共数量
- 7.count加1
- 8.输出count的值
3.本题调试过程碰到问题及解决办法
- 原本循环是从最小直接加到最大的可能,虽然能够输出但与题目不符。所以采用了减法使输出满足题目的要求。
题目2:梅森数
1.本题PTA提交列表
2.设计思路
- 1.定义i,n放输入的数,y,b
- 2.输入n的值
- 3.如果n<2,输出 None
- 4.如果n>=2且n<20执行下列步骤
- 5.b=2,如果b<=n执行步骤6,7,8,9
- 6.y=pow(2,b)-1;
- 7.i=2,如果i<=y/2执行步骤8,9
- 8.如果y%i==0不输出
- 9.如果i>y/2,输出y的值
- 10.b加一,回到步骤5
3.本题调试过程碰到问题及解决办法
原本的代码的输出以及调试没有什么问题都与题目一致,但一直是部分正确。通过给出的提示,然后再分析题目得出是自己少考虑了情况。通过添加修改终于全部正确。
正确代码及调试:
题目3:餐饮服务质量调查打分
1.本题PTA提交列表
2.设计思路
- 1.定义repeat,n放个数,i,a放打的成绩,count1,count2,count3,count4,count5分别放1,2,3,4,5的次数,u
- 2.输入repeat的值
- 3.规定u==1,如果u<=repeat执行以下步骤
- 4.规定count1,count2,count3,count4,count5初值为0
- 5.输入n的值
- 6.规定i的初值为1,如果i<=n,执行步骤7,8,9,10,11,12,13
- 7.输入a的值
- 8.如果a的值为1,count1加1
- 9.如果a的值为2,count2加1
- 10.如果a的值为3,count3加1
- 11.如果a的值为4,count4加1
- 12.如果a的值为5,count5加1
- 13.i加一,返回步骤6
- 14.输出1: ,执行count1次循环输出* 后换行
- 15.输出2: ,执行count2次循环输出* 后换行
- 16.输出3: ,执行count3次循环输出* 后换行
- 17.输出4: ,执行count4次循环输出* 后换行
- 18.输出5: ,执行count5次循环输出* 后换行
3.本题调试过程碰到问题及解决办法
本题开始写的代码循环位置没有放好,虽然题目中测试的数据1可以正确输出,但repeat改为2及以上就错误了
错误代码用repeat==1调试没出现问题
后来经过排查调整位置使代码正确
二、同学代码结对互评
1.欧阳震霆
2.
#include<stdio.h>
int main(){
int repeat,n,i,a,count1,count2,count3,count4,count5,u;
scanf("%d\n",&repeat);
for(u=1;u<=repeat;u++){
count1=count2=count3=count4=count5=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a);
if(a==1)
count1++;
else if(a==2)
count2++;
else if(a==3)
count3++;
else if(a==4)
count4++;
else if(a==5)
count5++;
}
printf("1:");
for(i=1;i<=count1;i++){
printf("*");
}
printf("\n2:");
for(i=1;i<=count2;i++){
printf("*");
}
printf("\n3:");
for(i=1;i<=count3;i++){
printf("*");
}
printf("\n4:");
for(i=1;i<=count4;i++){
printf("*");
}
printf("\n5:");
for(i=1;i<=count5;i++){
printf("*");
}
printf("\n");
}
return 0;
} 我的代码
#include<stdio.h>
int main()
{
int repeat,n,i,j,grade,count1,count2,count3,count4,count5,m;
scanf("%d",&repeat);
if(repeat>0&&repeat<10){
for(i=1;i<=repeat;i++){
count1=count2=count3=count5=count4=0;
scanf("%d",&n);
if(n>=1&&n<=20){
for(j=1;j<=n;j++){
scanf("%d",&grade);
switch(grade){
case 1:count1++;break;
case 2:count2++;break;
case 3:count3++;break;
case 4:count4++;break;
case 5:count5++;break;
default:break;
}
}
printf("1:");
for(m=1;m<=count1;m++)
printf("*");
printf("\n");
printf("2:");
for(m=1;m<=count2;m++)
printf("*");
printf("\n");
printf("3:");
for(m=1;m<=count3;m++)
printf("*");
printf("\n");
printf("4:");
for(m=1;m<=count4;m++)
printf("*");
printf("\n");
printf("5:");
for(m=1;m<=count5;m++)
printf("*");
printf("\n");
}
}
}
return 0;
} 欧阳代码
3.代码分析:代码中的定义及输入阶段是差不多的,在统计分数的次数时用的方法不同。
我用的时基本的if-else语句,欧阳用的是switch语句。switch语句明显比较简单,if-else虽然
也易懂但所需的篇幅较大。后面我输出换行时与数字合并,看起来较为简洁。
三、截图本周题目集的PTA最后排名
本周学习总结
1.你学会了什么
- 在循环中加入其他循环解决问题。期间也涉及到寻找一些变量间的关系从而解决问题。
- 明白了代码在循环内外的差别,这方面要仔细去观察
- 了解到函数中的及时停止循环及循环的去向也是很重要
2.本周的内容,你还不会什么?
- 有些难一点题目还是没有什么思路
- 有些循环的位置,循环停止,去向找的不准确导致错误
- 写的代码还是无法做到比较简洁