C语言switch语句&&清屏&&交集与并集&&吸收缓冲区

switch开关语句

的case后接整形常量表达式->包括(int,char)如下的形式都是整形常量式

#include<stdio.h> 
int main()
{
	int a;
	scanf("%c",&a);如果改为scanf %d则无法读入字符常量
                 并不是想象中的字符常量被转为ASCii表的数字
	switch(a)
	{
		case 'A':此时的int a==65
			printf("hhhh");
			break;
		case '+':此时的int b==43
		    printf("eeee");	
		    break;
	        case 1:此时的int a==49被转为ASCii表上对应的数字
                       想要进入这个需要把1改为49
	    	printf("aaaaa");
	    	break;
	}
}


#include<stdio.h> 
int main()
{
	这回的a是char型
	char a;
	scanf("%c",&a);改为scanf %d同样只能读入整数。
	switch(a)
	{
		case 'A': 此时的a==65'A'
		    printf("hhhh");
		    break;
		case '+': 此时的a==43'+'
		    printf("eeee");	
		    break;
	        case 1:   此时的a==1'49' 同样地被转为ASCii表
	     	    printf("aaaaa");
	    	    break;
	}
}

根据上面的例子可以清晰的看出,switch是可以实现键盘输入字母,字符和数字来进行跳转的

但是想要字母与数字混用则需要把case后的数字label改为ASCii表对应的数字。

清屏函数

 

C语言中没有能够实现想删几行就删几行的函数(就窝目前所知是没办法实现的)

如动图所示的效果就只能靠清屏函数再通过循环printf来实现 

使用清屏函数(system("cls"))需要调用stdlib.h 

 

基础版:2个集合的交集&&并集 (输入的数据无重复元素)

交集:

非常简单,因为在输入数据的时候每个数组是不会出现重复的元素,那么只需要2个集合遍历,如果相等就把X存入交集C

   for(int i=0;i<la;i++)
	{
	       for(int j=0;j<lb;j++)
		{
			if(a[i]==b[j])
			{
			    c[x]=a[i];
			    x++; 把相同的元素存入交集C中
			}else{
			    continue;
			}
		}
	}
	printf("交集是");
	if(x==0) 如果x==0,说明是一个空集
	{
	    printf("空集"); 
	} else{
		for(int i=0;i<x;i++)
	        {
		    printf("%d ",c[i]);
	         }
	}

并集:

在输入数据时没有重复的条件下,求并集反而更为困难 。在这里我使用了flag标识来判断交集D中有没有重复的元素

算法逻辑:先将一个集合A存入并集D中,然后用集合B并集D遍历如果没有重复则存入交集D中,如果与交集D中的元素重复则continue;进入下一次循环->取出下一个集合B的元素

把集合A存入并集D中
for(int i=0;i<la;i++)
{
	d[i]=a[i];
	y++;
}
集合B与并集D遍历比较
for(int i=0;i<lb;i++)外层循环逐一取出集合B的元素
{
	int flag=1;设置flag标志
	for(int j=0;j<y;j++)内层循环用取出的元素
	{                   与交集D中所有元素比较
	        if(b[i]==d[j]) 
		{
		    flag=0; 发现重复,flag变为0
		}           跳入continue
	}
	if(flag==1) 没有发现重复,该元素存入并集D
	{
		d[y]=b[i];
		y++;
	}else{
		continue;
	}
}
printf("并集是"); 
for(int i=0;i<y;i++)
{
	printf("%d ",d[i]);
}

进阶版(输入时的数据有重复的元素)

昨晚抓破了脑袋都没想出来,这里先挖个坑。但是我觉得可以根据设置flag标志的思路来判断是否有重复的元素来写

第二天!!我来填坑了!!!

其实根据基础版的并集算法就可以实现2个数组A&B比较并把A数组中与B数组的重复的元素丢掉,最后把A数组剩下的元素存入B数组中。根据这样的思路窝想到通过这个算法可以把第一次输入的数组a进行剔除产生新数组A(无重复元素)。完成了这一步就相当于把问题变回了基础版。

交集:

#include<stdio.h>
#define N 100 
int main()
{
	int a[3]={2,2,3};int A[N]; int x=0;
	int b[4]={2,1,3,1};int B[N];int y=0;
	int C[N];int c=0;
	int D[N];int d=0;
	//求交集
	A[0]=a[0];把第一个元素存入新数组作为基准
                  那么for中的i就从1开始取元素
	for(int i=1;i<3;i++)
	{
	 	int flag=1;
	 	for(int j=0;j<x+1;j++) x,y代表数组的下标,x+1后才是数组元素个数 
	 	{
	 		if(a[i]==A[j])
	 		{
	 			flag=0;
	 		}
	 	} 
	 	if(flag==1)
	 	{
	 		A[x+1]=a[i];
	 		x++;
	 	}
	 } 
	 B[0]=b[0];
	 for(int i=1;i<4;i++)
	 {
	 	int flag=1;
	 	for(int j=0;j<y+1;j++) x,y代表数组的下标,x+1后才是数组元素个数 
	 	{
	 		if(b[i]==B[j])
	 		{
	 			flag=0;
	 		}
	 	} 
	 	if(flag==1)
	 	{
	 		B[y+1]=b[i];
	 		y++;
	 	}
	 }
	 for(int i=0;i<x+1;i++) x,y代表数组的下标,x+1后才是数组元素个数 
	 {
	 	for(int j=0;j<y+1;j++)
	 	{
	 		if(A[i]==B[j])
	 		{
	 			C[c]=A[i];
	 			c++;
	 		}
	 	} 
	 }
	 printf("交集是");
	 for(int i=0;i<c;i++)
	 {
	 	printf("%d ",C[i]);
	 }
     return 0;
}

并集:

既然问题变成了基础版,思路就这样了,所以源代码跟基础版一模一样。

 

 

吸收缓冲区

并不知道原理,只知道如何解决

1 使用getchar来吸收
       
     getchar();

2.一次吸收完缓冲区的数据
     int ch;
     while((ch=getchar()!='\n'||(ch!=EOF))
     

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值