R7-6 打印沙漏

题目:

阶段一上机考试错题分析_#include

分析:

(1)每行输出的数相当与 an=2n-1;总数相当于一个上三角加一个下三角减去1;上三角=下三角=n+(n-1)*n/2*2;即总数=2n*n-1

2)题目中要求相邻两行符号数差2,中间对齐——>在每一行前面输出空格数为对应三角形所在行数-1。

 

#include<stdio.h>
int main()
{
	int i,kong,n=0,N,fuhao;
	char op;
	scanf("%d ",&N);                            
	scanf("%c",&op);                           
	while(N>=2*n*n-1){                     
		n++;}
	if(2*n*n-1>N){                              //让n回到 达到离开循环条件前的值
		n--;}
	for(i=1;i<=n;i++)                           //先输入上三角
	{
		for(kong=1;kong<i;kong++)               //输出所需个数的空格
			printf(" ");
		for(fuhao=1;fuhao<=2*n-2*i+1;fuhao++)    //输出所需个数的符号
			printf("%c",op);                    
		printf("\n");                            //行末换行
	}
	for(i=n-1;i>=1;i--)                           //基本与上个循环基本相同,只是修改循环起始计数数和判断条件,且不用输出下三角的尖尖
	{
		for(kong=1;kong<i;kong++)
			printf(" ");
		for(fuhao=1;fuhao<=2*n-2*i+1;fuhao++)
			printf("%c",op);
		printf("\n");
	}
	printf("%d",N-2*n*n+1);                      //输出剩余的符号数量
	return 0;
}

  

解题的难点:

(1)找出循环输出的条件——>重点是要找出规律 

(2)让每行靠中对齐——每换一行变换两个数,在上三角中则每换一行就比上一行多出一个空格。

 

7-7 打印沙漏 

阶段一上机考试错题分析_#include_02

 

 

 

分析:

(1)题目要求:测试数据有多组,处理到文件尾。——意味着没有循环的范围,由此引出对于EOF的使用

对于题目并没有给定输入多少次的情况,只说输入到文件结尾的情况

阶段一上机考试错题分析_#include_03

(2)其他部分与上面那题差不多。

 

代码:

#include<stdio.h>
int main()
{
	int n,i,kong,fuhao;
	while(scanf("%d",&n)!=EOF){
		for(i=1;i<=n;i++)                         
	{
		for(kong=1;kong<i;kong++)                
			printf(" ");
		for(fuhao=1;fuhao<=2*n-2*i+1;fuhao++)     
			printf("*");                    
		printf("\n");                         
	}
	for(i=n-1;i>=1;i--)                         
	{
		for(kong=1;kong<i;kong++)
			printf(" ");
		for(fuhao=1;fuhao<=2*n-2*i+1;fuhao++)
			printf("*");
		printf("\n");
	}
	}
	
	return 0;
}

   

——————————————————————————————————————————————————————————————————————————————————————————

做题就像上楼,不能还没有搭好梯子,就想着一步飞上去,不然容易掉下来。