c语言博客作业02循环结构

1.本章学习总结(2分)

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

本周主要学习循环结构和循环的嵌套,相比较上周的学习来说,这周的学习明显难度加大了很多,每一题的代码量也变多了。对于我来说,循环的两个题集中的每一题都值得我认真研究,理清思路,保证自己是真正明白了,理解了。使用循环的嵌套后,程序中的中括号就变多了,因此在打代码时要更注意格式,确保程序看起来整齐,可读性强。同时,题目难度的加大也要求我们不要一看到题目就开始写程序,应该先尝试理一理思路,写出伪代码,这样正式开始写的时候思路就不会乱。然后自己接下来的小目标就是在做题时提高效率,努力做到写的又快又规范。

1.2.2 代码累计

2. PTA总分

2.1 截图PTA中循环结构2次题目集的排名得分


2.2 我的总分:

循环结构(单层):175
循环的嵌套:115
总分:290

3.PTA实验作业(6分)

3.1 PTA题目1

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu

3.1.1 算法分析

定义n,i,mask=1,copy//n存放输入的数,i存放每个位数上的数,
输入n
if(n<0)then 
n=-n,printf("fu")//为负数的时候
end if
if(n>0)
copy=n
end if
while(copy>9)do
mask*=10
copy/=10//while循环计算出位数,mask=10代表两位,100代表三位
for(mask>0)
i=n/mask;//算出每个位数上的数
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;
default:printf("jiu");	
n=n%mask
mask=mask/10//将每个位数上的数转为拼音
if(mask>0)
printf(" ")//每个数之间输出空格
结束循环

3.1.2 代码截图


3.1.3 测试数据

3.1.4 PTA提交列表及说明


Q1:刚开始在输出的拼音前加空格,后来提交发现部分正确,当输入0时前面也会出现空格
A1:后来取消了拼音前的空格,改为空格在每一次循环之后单独输出

3.2 PTA题目2

本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称

3.2.1 算法分析

定义num,i,j,k,mid  定义字符型变量ch
输入ch num
mid=num/2+1//mid为中间量,菱形关于mid对称
i=1; 
ch=ch-1;                 
for i=1 to i=num do   //i代表行
for j=1 to j=fabs(i-mid) do
printf(" ");      //控制前面的空格 
end for
if(i<=mid)
ch=ch+1;
end if
for k=1 to k=2*i-1 do    //上半部分 
if(k==1||k==2*i-1)
printf("%c",ch);   //控制输出字母的位置
else  
printf(" ");	//控制输出空格的位置
end if
else  //下半部分
ch=ch-1;
for k=1 k =2*(num-i+1)-1 do
if(k==1||k==2*(num-i+1)-1)
printf("%c",ch);     //控制输出字母的位置
else
printf(" ");     //控制输出空格的位置
end if
结束循环

3.2.2 代码


3.2.3 测试数据!

3.2.4 PTA提交列表及说明


Q1:首先打算将上半部分和下半部分一起完成但发现难度比较大
A1:将上半部分和下半部分分开
Q2:一不完成空格和菱形的输出难度比较大
A2:先输出一个实心菱形,然后再挖空
Q3:遇到输出的字母不对,题目要求先加后减
A3:在没有进入循环之前将ch-1,然后在循环内在进行加减

3.3 PTA题目3

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内

3.3.1 算法分析

定义count count_0定义字符型变量n
while((n=getchar())!='.'){
if (n!=' ') 
if(count>0&&count_0>0) //当且仅当字母位数大于 0 
printf("%d ",count);          且后方有空格时才输出带有空格的位数 
count=0; 
end if
count++;
count_0=0;  
continue;   
end if
if (n==' ')
count_0++;
end if    
if (count>0) // 输出最后一个单词的个数 
printf("%d\n", count);
else
printf("\n"); // 处理只有一个 . 的情况  
end if

3.3.2 代码

3.3.3 测试数据

3.3.4 PTA提交列表及说明

Q1:开始时忽略了最后一个单词,最后一个单词后面没有空格但是要输出单词个数
A1:单独列了一种情况

4.代码互评

4.1 代码截图

同学代码截图

自己的代码截图

4.2 二者的相同和不同

相同点:

  • 都对输出图形进行了分类,将不同情况的分开考虑
  • 同时对于输出空格还是字母也进行了分类

不同点:

  • 该同学先考虑了首行和末行的输出格式,我先考虑的时将输出图案分为上半部分和下半部分
  • 该同学在考虑空中间行的两个字母时,分为输出的第一个字母不换行,第二个字母换行,我是按照改行的与输出字母的列的关系来分析,符合关系的输出字母,不符合的输出空格。
原文地址:https://www.cnblogs.com/zyxaa/p/9866139.html