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的函数还是不够熟悉。
posted @ 2017-11-10 23:47  oracler  阅读(364)  评论(1编辑  收藏  举报