第二次作业---循环语句
C语言--第02次作业
1.本章学习总结
1.1思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
本章为循环语句的学习,给我的直观感觉就是难,不是知识点难,而是算法上的确是因为没有积累导致常常无从下手或只能解决一半。总而言之就是见过的题太少,又后者说是还在积累的路上。也正是因为这样,看别人的代码,理解他们的思路,明白题目的要求成了小白所需要具备的基础要求。从他人的代码中学习,取其精华,去其糟粕是在学习道路上必须要具备的基本素养。自然,学习借鉴与照搬照抄有很大的不同。因为很多题目都有让我学到新知识,所以,代码备注有的时候被我搞得不太像提示要做什么的备注,更像是一块知识笔记,我希望可以将其用作我复习又或者是提醒自己的手段。
本章学习之前的那场考试,让我觉得我有必要去多做一些题,只有多打代码,才能熟练。但是,本章,我并没有做到,我也就只是艰难的完成了老师布置的任务。现实的确有些令人挫败,我想,这还是面对困难时,我的惰性占了上风,使得效率极低。希望我的下次博客,能看到战胜自己惰性的自己吧。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中循环结构2次题目集的排名得分
2.2 我的总分:
循环结构(单层):175
循环的嵌套:115
总分:290
3.PTA实验作业
3.1 PTA题目1
7-8 单词长度
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
3.1.1 算法分析
- 定义i,num,x,flag
- 输入num
- flag=num
- if(num<0) num=-1*num; flag=num; printf("fu "); //先解决负数
- while(flag>9) flag=flag/10; x=x*10; //通过循环首先数字是几位数
- while(x>=1) i=num/x;
- switch(i)
{
case 0:
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
}
- if(x>9) printf(" "); num=num%x; x=x/10; //依次算出后面的位数
3.1.2 代码截图
3.1.3 测试数据
3.1.4 PTA提交列表及说明
- 提交列表中多次出现多种错误,在dev运行后看到,空格或多位数数字出现问题
- 经过多种尝试,然后就部分正确,其中借鉴了同学的一些想法,逻辑,再通过自己编写
- 所以,最后的提交两次是在自己写完以后,又整理了一遍思路,将自己没怎么想到,或有些差错的地方通过备注的方式再整理了一遍
3.2 PTA题目2
7-3 编程打印空心字符菱形
本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
3.2.1 算法分析
- 定义i,j,mid,n,ch
- mid=(n+1)/2;
- for i =1 to n do
- for(j=1;j<=fabs(mid-i);j++)
- if(i<=mid) num=i;
- else num=n+1-i;
- for(j=1;j<=2*num-1;j++)
- if(j1||j2*num-1) printf("%c",ch+num-1);
- else printf(" ");
3.2.2 代码
3.2.3 测试数据
- 首先,这道题是在老师课上讲过后,在课堂上直接写的。
- 从提交列表上直观感觉先写个伪代码,调整整体思路,将每个步骤罗列好对写题百利无害。
3.2.4 PTA提交列表及说明
3.3 PTA题目3
7-10 jmu-c-二进制转10进制
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
3.3.1 算法分析
- 定义num,ch,n
- n=3,num=0
- while(ch=getchar()) do
- if(ch=='1'||ch=='0') num=num*2+(ch-'0')
- else printf("error input!") n=4
- if(n=3) printf("%d",num);
3.3.2 代码
3.3.3 测试数据
3.3.4 PTA提交列表及说明
- 起先,代码为部分正确,通过dev测试了一下数据,发现有些情况会同时输出数量和input error!
- 通过直接看代码,发现了在运行的时候有些情况在遇到break,跳出循环后,会进入循环外的输出,再输出数字
- 后增加if,来判断是否需要进入循环外语句
4.代码互评
4.1 代码截图
自己的
代码截图来源于不愿意透露姓名的范同学
4.2 二者的不同
- 直观感受就是同学的代码比我的简单,比我的短
- 同学的备注非常直观,给看的人一种清晰的感觉
- 直接通过flag,sign,记录是否为单词,是否存在单词,给后面加不加空格这类的格式问题一种清晰的逻辑顺序