C语言练习-main函数的参数和打印杨辉三角

代码实现效果是:
在执行文件时
传入main函数的参数为1 打印三角
传入main函数的参数为1 1 打印菱形
传入main函数的参数为1 1 1 打印字母三角
传入main函数的参数为1 1 1 1打印字母菱形
代码如下

//只是我的兴趣,并无其它!

#include<stdio.h>
#include<stdlib.h>

void xin(int argc,char** argv);  //打印星星
void Char(int argc,char** argv);  //打印字母

int main(int argc,char** argv)
{	
	printf("该程序的执行名为:%s\n",argv[0]);   //打印执行名 第一个参数一直保存执行程序名\
	一直有argv[0]
	
	switch(argc)   //main函数的传递的参数个数
	{
		case 1:printf("少了!\n");break;   //参数传递少了
		case 4:
		case 5:Char(argc,argv);//打印字母
		case 2:
		case 3:xin(argc,argv);break;//打印星星
		
		default:printf("多了!\n");break;   //参数传递多了
	}
	
	//当给main函数没有传参时,或者直传递一个去访问argv[2] 都会出现以下错误\
	Segmentation fault (core dumped)  访问内存失败  ---访问main函数的参数是被保护的
		
	return 0;
}

void xin(int argc,char** argv)
{
	if(atoi(argv[1])==1)   //打印三角形
	{
		int a;
		printf("Input a numble:");
		scanf("%d",&a);
		char c='*';
		
		int i;
		for(i=0;i<=a;i++)   //打印行数
		{
			for(int j=0;j<a-i;j++)  //空格
			{
				printf(" ");
			}
			for(int j=0;j<2*i+1;j++)   //星号
			{
				printf("%c",c);
			}
			printf("\n");  //换行
		}
		//if(argv[2] - '0'==1)    //打印下半部分   有BUG  \
		atoi函数是将数字字符装欢成对应的数值  ---在stdlib.h中
		
		if(argc<3)   //如果参数少了 直接结束函数,少掉访问的错误
		{
			return;
		}
		
		if(atoi(argv[2])== 1)    //打印下半部分
		{
			for(i=a-1;i>=0;i--)   //打印行数
			{
				for(int j=0;j<a-i;j++)  //空格
				{
					printf(" ");
				}
				for(int j=0;j<2*i+1;j++)   //星号
				{
					printf("*");
				}
				printf("\n");  //换行
			}
		}
	}
}

void Char(int argc,char** argv)
{
	if(atoi(argv[3])==1)   
	{
		printf("Input a chareset:");
		//while(getchar()!='\n');  //等待回车   接收上一个输入的回车键   
		
		char a=getchar();   //接收这个输入的字符
		char c;
		if(a>=97)  //小写
		{
			c='a';
		}
		else if(a>=65)  //大写
		{
			c='A';
		}
		else if(a>=48)  //数字
		{
			c='0';
		}
		else
		{
			printf("输入无效字符!\n");
			return;
		}
		int n=a-c+1;  //得到行数   加上本身
		
		int i=1;   //为了倒叙时变量可用
		for(;i<=n;i++)
		{
			for(int j=0;j<n-i;j++)  //空格
			{
				printf(" ");
			}
			for(int j=0;j<i;j++)  //前半字母
			{
				printf("%c",c+j);
			}
			
			for(int j=i-1;j>0;j--)  //后半字母    //减去本身的一个,防止再次打印中间的字母
			{
				printf("%c",c+j-1);   //往下移动一个
			}
			printf("\n");
		}
		
		if(argc<5)   //如果参数少了 直接结束函数,少掉访问的错误
		{
			return;
		}
		
		if(atoi(argv[4])==1)
		{
			for(i=n-1;i>0;i--)   //倒三角
			{
				for(int j=0;j<n-i;j++)  //空格
				{
					printf(" ");
				}
				for(int j=0;j<i;j++)  //前半字母
				{
					printf("%c",c+j);
				}
				
				for(int j=i-1;j>0;j--)  //后半字母    //减去本身的一个,防止再次打印中间的字母
				{
					printf("%c",c+j-1);   //往下移动一个
				}
				printf("\n");
			}
		}
	}
}


实现的效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值