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.本周的内容,你还不会什么?

  • 有些难一点题目还是没有什么思路
  • 有些循环的位置,循环停止,去向找的不准确导致错误
  • 写的代码还是无法做到比较简洁
posted @ 2017-11-10 20:22  圣多美  阅读(206)  评论(3编辑  收藏  举报