C语言第四次博客作业--嵌套循环
一、PTA实验作业
7-3 编程打印空心字符菱形
1.本题PTA实验结果
2. 设计思路
- (1)定义三个整型变量n,i,j,n代表菱形高度,i和j都为循环变量。定义一个字符型变量c代表起始字母。
- (2)输入起始字母c,菱形高度n。
- (3)若(c=>'A'&&c<='G')&&(n<=10&&n%2!=0)),则正常执行下一条语句;若为非法输入,则不输出。
- (4)先对菱形的上半部分即(n+1)/2部分进行循环。
- (5)i=1。
- (6)j=0。
- (7)输出空格。
- (8)j++,重复步骤7,直到j>=n-i-(n-1)/2,则结束循环。
- (9)输出字符c+i-1。
- (10)若i-1>0,则再输出字符c+i-1。
- (11)输出换行符。
- (12)i++,重复步骤6,直到i>(n+1)/2,则结束循环。
- (13)对菱形的下半部分进行循环。
- (14)i=(n+1)/2-1。
- (15)由于对称,所以输出的格式同上半部分,不同的是此时进行i--,直到i<=0,结束循环。
3.本题调试过程碰到问题及解决办法
- (1)总的就是没观察好整个格式输出的规律,设置的几个判断函数不能完全符合。
- 解决方法:通过多次计算和尝试,改正了函数表达式。
7-5 梅森数
1.本题PTA实验结果
2. 设计思路
- (1)定义五个整数型变量n代表2的最大次方数,i和j代表循环变量。
- (2)输出n。
- (3)若n<2,则输出None。
- (4)若n>=2&&n<20,则进入循环语句。
- (5)i=2。
- (6)y=pow(2,i)-1。
- (7)m=sqrt(y)。
- (8)j=2。
- (9)计算y%j。若!=0,则j++,重复直到j>m,结束循环;若==0直接退出循环,说明y不是素数。
- (10)若j>m,则输出y。
- (11)i++,重复步骤6,直到i>n,结束循环。
3.本题调试过程碰到问题及解决办法
- (1)没有对n的上限做出限制。
- 解决办法:添加if(n>=2&&n<20)
7-7 歌唱比赛评分系统
1.本题PTA实验结果
2. 设计思路
- (1)定义八个整数型变量repeat代表做repeat次运算,n代表评委数,i和j为循环变量,grade代表分数,max代表最高分,min代表最低分。定义一个浮点型变量score代表最终得分。
- (2)输出整数repeat。
- (3)j=1。
- (4)total=0。
- (5)输入整数n。
- (6)输入第一个分数grade。
- (7)赋初值,max=min=grade。
- (8)i=1。
- (9)计算total,total=total+grade。
- (10)再输出一个分数grade。
- (11)若grade>max,则max=grade。
- (12)若grade<min,则min=grade。
- (13)i++,重复步骤9,直到i>(n-1),则结束循环。
- (14)计算total,total=total+grade。
- (15)计算score,score=1.0*(total-max-min)/(n-2)。
- (16)输出score(保留两位小数)。
- (17)j++,重复步骤4,直到j>repeat,则结束循环。
3.本题调试过程碰到问题及解决办法
- (1)没有把所有的步骤放入repeat的循环中。
- 解决方法:经过多次审核和询问老师得以解决问题。
二、同学代码结对互评
1.互评同学名称
- 7-3:李于程
2.我的代码、互评同学代码截图
我的代码
#include<stdio.h>
main()
{
int n,i,j;
char c;
scanf("%c %d",&c, &n);
if((c>='A'&&c<='G')&&(n<=10&&n%2!=0)){
for(i=1;i<=(n+1)/2;i++)
{
for(j=0;j<n-i-(n-1)/2;j++)
printf(" ");
printf("%c",c+i-1);
for(j=1;j<=2*i-3;j++)
printf(" ");
if(i-1>0)
printf("%c",c+i-1);
printf("\n");
}
for(i=(n+1)/2-1;i>0;i--)
{
for(j=0;j<n-i-(n-1)/2;j++) printf(" ");
printf("%c",c+i-1);
for(j=1;j<=2*i-3;j++)
printf(" ");
if(i-1>0)
printf("%c",c+i-1);
printf("\n");
}
}
return 0;
}
李某代码
#include<stdio.h>
int main()
{
int i,h,m,k,l;
char ch;
ch=getchar();
scanf("%d",&h);
m=(h+1)/2;
if(m==1){
for(k=1;k<=m-1;k++){
printf(" ");
}
printf("%c",ch);
}
else{
for(k=1;k<=m-1;k++){
printf(" ");
}
printf("%c",ch);
printf("\n");
for(i=1;i<=m-1;i++){
ch=ch+1;
for(k=1;k<=m-1-i;k++){
printf(" ");}
printf("%c",ch);
for(k=1;k<=i*2-1;k++){
printf(" ");}
printf("%c",ch);
printf("\n");
}
for(i=1;i<=m-2;i++){
ch=ch-1;
l=(m-2-i+1)*2-1;
for(k=1;k<=i;k++){
printf(" ");}
printf("%c",ch);
for(k=1;k<=l;k++){
printf(" ");}
printf("%c",ch);
printf("\n");
}
for(k=1;k<=m-1;k++){
printf(" ");}
printf("%c",ch-1);
}
return 0;
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 不同:对上下半菱形代码的处理方式不同
- 各自优势:我的上下半代码相似,较为简单易懂。而该同学的代码则从上往下一步一步,较为直观。
- 我更喜欢自己的代码风格,处理对称的方式较为简单。
三、截图本周题目集的PTA提交列表及最后排名。
1.PTA提交列表
2.PTA排名
四、本周学习总结
1.你学会了什么?
- 我学会了嵌套结构,并利用嵌套循环解决一些简单问题。
- 学会了判断素数的方式。
- 使用嵌套循环结构时,将所有条件都在循环里才算完整。
- 学会了在循环结构中,恰当的使用在break跳出循环。
- 懂得了函数的基本应用,全局变量和局部变量的特征。
2.本周的内容,你还不会什么?
- 写的代码还是无法做到比较简洁
- 容易在循环结构中犯迷糊,不能直接明白各种变量的变换情况。
- void的函数还是不够熟悉。