求解c语言
已经int数组A[10]、B[10],对数组A、B进行集合概念上的“并”操作、“交”的操作。结果分别存放在数组D[20]、E[10]。要求:(1)4个数组要有输入输出;(...
已经int数组A[10]、B[10],对数组A、B进行集合概念上的“并”操作、“交”的操作。结果分别存放在数组D[20]、E[10]。
要求:
(1)4个数组要有输入输出;
(2)符合数学上“集合”的概念。
数组的交集与并集 展开
要求:
(1)4个数组要有输入输出;
(2)符合数学上“集合”的概念。
数组的交集与并集 展开
3个回答
展开全部
#include <stdio.h>
#define MAX 10
#define Empty 65535
int find(int n, int *a)
{
int i;
int status = 0;
for(i = 0; i < MAX; i++)
if( n == *(a+i)){
status = 1;
break;
}
return status;
}
int main(){
//init
int a[MAX]={Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty};
int b[MAX]={Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty};
int d[2*MAX]={Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty };
int e[MAX]={ Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty,Empty};
int i, j;
//input a and b
printf("Pls input the array a\n");
for(i = 0; i < MAX; i++)
scanf("%d",&a[i]);
printf("Pls input the array B[10]:\n");
for(i = 0; i < MAX; i++)
scanf("%d",&b[i]);
//or
j = 0;
for (i = 0; i < MAX; i++)
{
if (a[i] != Empty)
d[j++] = a[i];
}
for (i = 0; i < MAX; i++)
if ( !find(b[i],a))
d[j++] = b[i];
//and
j = 0;
for (i = 0; i < MAX; i++)
{
if (find(a[i], b) && (a[i] != Empty))
e[j++] = a[i];
}
// print A[10]
printf("A[10] = {");
for(i =0; i < MAX; i++)
if (a[i] != Empty)
printf("%d,", a[i]);
printf("}\n");
// print B[10]
printf("B[10] = {");
for(i =0; i < MAX; i++)
if (b[i] != Empty)
printf("%d,", b[i]);
printf("}\n");
// print A[10] or B[10]
printf("A[10] or B[10] = {");
for(i = 0; i < 2*MAX; i++)
{
if (d[i] == Empty)
break;
else
printf("%d,",d[i]);
}
printf("}\n");
// print A[10] and B[10]
printf("A[10] and B[10] = {");
for( i = 0; i < MAX; i++)
{
if (e[i] == Empty)
break;
else
printf("%d,",e[i]);
}
printf("}\n");
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第四题
是因为你在for循环后加了一个
";"即一个空语句,后边输出的内容不在循环体中
%md
m为指定输出字段宽度,如果位数小于m则前补空格,若实际位数大于m则按实际输出。
第五题为死循环吧
main()
{
char
*s={"ABC"};
do{
printf("%d",*s%10);
}while(*++s);
}
这样就行了。
第七题
我的输出的是2。。。
第八题
应该是位运算,不懂就看看谭浩强的书,“c程序设计(第三版)”319页。此0010
0011&0010
0011
其中&是与运算,结果还是0010
0011
即十进制的35。
最后
fun(&a[i]);相当与
fun(a+i);函数调用时,形参a的值为实参的值a+i,这两个a没有什么联系,纯粹迷惑大众的。现在fun函数里的a就是a+i了,a[0]相当于*((a+i)+0),
a[1]相当于是*((a+i)+1),简化一下就是a[i]
=
a[i+1];
是因为你在for循环后加了一个
";"即一个空语句,后边输出的内容不在循环体中
%md
m为指定输出字段宽度,如果位数小于m则前补空格,若实际位数大于m则按实际输出。
第五题为死循环吧
main()
{
char
*s={"ABC"};
do{
printf("%d",*s%10);
}while(*++s);
}
这样就行了。
第七题
我的输出的是2。。。
第八题
应该是位运算,不懂就看看谭浩强的书,“c程序设计(第三版)”319页。此0010
0011&0010
0011
其中&是与运算,结果还是0010
0011
即十进制的35。
最后
fun(&a[i]);相当与
fun(a+i);函数调用时,形参a的值为实参的值a+i,这两个a没有什么联系,纯粹迷惑大众的。现在fun函数里的a就是a+i了,a[0]相当于*((a+i)+0),
a[1]相当于是*((a+i)+1),简化一下就是a[i]
=
a[i+1];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询