输出图形(循环程序,任意字符) 三角形、矩形、平行四边形、菱形

接触C有一段时间了,看多好次输出各种图形的练习题,自己也曾经编写过,今天整理在一起,为了给自己留下记录,也为了跟同样在学习路上的朋友们一起交流;

代码采用主函数、分函数结构

实现以下功能

1、选择性输出 想要的图形 以及 图形大小

2、循环功能,主动选择退出

3、键盘任意输入,只有符合要求的输入(0~4)被执行,其他均为非法输入,返回程序,重新选择

4、屏蔽输入结束时的“回车”,用函数 fflush(stdin);   这个函数的作用是清除缓存,为下一次输入做准备

部分截图:

以下是代码:供参考

/*输出图形小程序*/
#include "stdio.h"
#include "stdlib.h"
//声明函数,三角形、矩形、平行四边形、菱形 
int sanj();
int juxi();
int pinx();
int ling();
void main()
{
	int a;
	printf("*******输出图形小程序*******\n\n\t【1】三角形\n\t【2】矩形\n\t【3】平行四边形\n\t【4】菱形\n\t【0】退出\n\n");
	printf("请选择要执行代号: ");
	//scanf("%d",&a); 			//这种取值方法只能取数值 
	a=getchar();				//键盘获取任意字符 
	printf("\n\n");
	a=a-'0';				   //将字符转换为ASCII码 ,并与 ’0‘ 比较大小 
	if(!(a>=0&&a<=4))  a=5;    //对于比值不是 0-4 之间的的数统一赋值为 5 (不是0~4的都可以) 
	switch(a)				   //进入对应的函数	
	{
		case 1: sanj();break;
		case 2: juxi();break;
		case 3: pinx();break;
		case 4: ling();break;
		case 0: exit(0);
		default: printf("选择错误,返回主程序\n\n");
				 fflush(stdin);		//这个函数的作用是清除缓存,返回主函数之前使用, 为下一次取值做准备
				 main();			//返回主函数 
	}
}

int sanj()			//输出三角形 函数 
{	int s1,s2,s3,s;
	printf("【1】三角形  行数:  ");
	scanf("%d",&s);
	printf("\n\n ");
	s3=s*2-1;
	printf("\n");
	for(s1=1;s1<=s;s1++)
	{	printf("\t");
		for(s2=1;s2<=s-s1;s2++)printf("  ");
		for(s3=1;s3<=s1*2-1;s3++)printf("* ");
		printf("\n");
	}
	printf("\n\n");
	fflush(stdin);		//这个函数的作用是清除缓存,返回主函数之前使用, 为下一次取值做准备
	main();			//返回主函数 ;
}

int juxi()		//输出矩形 函数 
{	int s1,s2,s;
	printf("【2】矩形 行数:  ");
	scanf("%d",&s);
	printf("\n\n");
	for(s1=1;s1<=s;s1++)
	{	printf("\t");
		for(s2=1;s2<=s;s2++)printf("* ");
			printf("\n");
	}
	printf("\n\n");
	fflush(stdin);		//这个函数的作用是清除缓存,返回主函数之前使用, 为下一次取值做准备
	main();			//返回主函数 
}

int pinx()		//输出平行四边形 函数 
{	int s1,s2,s3,s;
	printf("【3】平行四边形 行数:  ");
	scanf("%d",&s);
	printf("\n\n");
	for(s3=1;s3<=s;s3++)
	{
		printf("\t");
		for(s1=1;s1<=s-s3;s1++)printf(" ");
			for(s2=1;s2<=s;s2++)printf("* ");
				printf("\n");
	}
	printf("\n\n");
	fflush(stdin);		//这个函数的作用是清除缓存,返回主函数之前使用, 为下一次取值做准备
	main();			//返回主函数 
}
int ling()		//输出菱形 函数 
{	int s1,s2,s3,s4,s5,s,row;
	printf("【4】菱形 行数:  ");
	scanf("%d",&s);
	printf("\n\n");
	row=s/2;
	if(s%2==0)		//输出行数为 偶数 
	{
		for(s1=1;s1<=s;s1++)
		{
			if(s1<=row)
	        {printf("\t");
			for(s2=1;s2<=row-s1;s2++)printf("  ");
				for(s3=1;s3<=s1*2-1;s3++)printf("* ");
					printf("\n");
			}
	        else
			{
				printf("\t");
				for(s4=1;s4<=s1-row-1;s4++)printf("  ");
					for(s5=1;s5<=(s-s1)*2+1;s5++)printf("* ");
						printf("\n");
			}
	}
	}
	else		//输出行数为 奇数 
	{   row++;
		for(s1=1;s1<=s;s1++)
		{
			if(s1<=row)
	        {printf("\t");
			for(s2=1;s2<=row-s1;s2++)printf("  ");
				for(s3=1;s3<=s1*2-1;s3++)printf("* ");
					printf("\n");
			}
	        else
			{
				printf("\t");
				for(s4=1;s4<=s1-row;s4++)printf("  ");
					for(s5=1;s5<=(s-s1)*2+1;s5++)printf("* ");
						printf("\n");
			}
		}
	}
	printf("\n\n");
	fflush(stdin);		//这个函数的作用是清除缓存,返回主函数之前使用, 为下一次取值做准备
	main();			//返回主函数 
}

 

 

 

 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值