‘壹’ 用c语言或者C++编写一个程序,能处理集合中交,并,补运算或者判别。。
首先,申请若干数组。每一个数组表示一个集合。
然后分别定义集合的+-*/之间的运算规律即可。
‘贰’ c语言中一个工程下是不是不可以有几个c程序 写了一个程序后,在原窗口在想写个程序整么办
可以有多个C程序,但是Source Files下的所有文件总共只能有一个main
解决方法就是:
选中多余文件(只留下一个)——按键盘上的Delete键删除(源程序还在,只是不在Source Files下了)——菜单栏“组件”——“清除”
这样所有的程序都可以带main互不干扰
如果想要测试以前的程序:
右键单击Source Files——“添加文件到目录”,就可以添加了
‘叁’ C语言编程 集合子集问题
#include<iostream>
#include<string>
#include<fstream>
#include<conio.h>
usingnamespacestd;
//定义集合的最大数量,可以自己修改
#defineMAX_COUNT100
//集合使用数组来保存
intSetA[MAX_COUNT];
intSetB[MAX_COUNT];
intCountA=0;//集合A的长度
intCountB=0;//集合B的长度
///函数Contains,判定集合是否包含一个数
///@paramset,集合
///@paramcount,集合Set中的元素个数
///@paramvalue,是否包含的值
///@returnset包含value,返回true,否则返回false
boolContains(intset[],intcount,intvalue)
{
for(inti=0;i<count;i++)
if(value==set[i])
returntrue;
returnfalse;
}
//输入一个集合
voidInputSet(intset[],int&count)
{
strings;
//读取这一行
getline(cin,s);
inti=0;
while(i<s.length())
{
intspacePos=0;
spacePos=s.find('',i);//查找空格下一个空格的位置
if(spacePos<0||spacePos>=s.length()-1)//如果没有空格或者空格超出了字符串范围,跳出循环
break;
stringtemp=s.substr(i,spacePos-i);
if(temp=="")//如果字符串为空,执行下一条
continue;
intvalue=stoi(temp);
if(!Contains(set,count,value))//如果集合中已经包含此数字了,就不再添加
set[count++]=value;
i=spacePos+1;
}
//读取最后一个数
stringtemp=s.substr(i,s.length()-i);
intvalue=stoi(temp);
if(!Contains(set,count,value))
set[count++]=value;
}
//判断是为setB是否为setA的子集
boolIsSubSet(intsetA[],intcountA,intsetB[],intcountB)
{
for(inti=0;i<countB;i++)
if(!Contains(setA,countA,setB[i]))
returnfalse;
returntrue;
}
voidmain()
{
cout<<"注意:只能输入整数,并且数字之间以空格隔开。"<<endl<<endl;
cout<<"请输入集合A:"<<endl;
InputSet(SetA,CountA);
cout<<"请输入集合B:"<<endl;
InputSet(SetB,CountB);
cout<<endl;
cout<<"集合A和集合B比较结果"<<endl;
if(IsSubSet(SetA,CountA,SetB,CountB))
cout<<"集合B是集合A的子集"<<endl;
else
cout<<"集合B不是集合A的子集"<<endl;
cout<<endl;
cout<<"按任意键退出"<<endl;
getch();
}
‘肆’ 用C语言编写集合子集的程序怎么写
首先,你的题目和举例不相符啊。题目是{ 1 ~ n },而举例是{ 0 ~ n-1};我以题目为准吧。
如果n=5;其中后面的一部分子集按顺序排是这样的:
{5}
{1 5}
{2 5}
{3 5}
{4 5}
{1 4 5}
{2 4 5}
{3 4 5}
{1 3 4 5}
{2 3 4 5}
{1 2 3 4 5}
我们可以把一个子集看成两个部分,一部分是前面的追赶者,另一部分是后面的累积者。
{1 5},{2 5},{3 5},{4 5}就像这些子集,追赶者从1一直追赶到了4,然后与累积者{5}相遇,累积者变成{4 5};追赶者从头继续从1一直追赶到了3,然后与累积者{4 5}相遇,累积者变成{3 4 5};如此反复,可以把这个全部输出来。
而累积者始终是连续的,比如{4 5}、{3 4 5}、{2 3 4 5},所以我们只用定义累积者的头和尾,就可以把累积者的范围定义。
代码如下,仅供参考:
#include <stdio.h>
void main( void )
{
int n,i,runner,start,end;
printf("请输入正整数n的值:");
scanf("%d",&n);
printf("{}\n"); //空集必定是有的
for(end=1;end<=n;end++) //累积者的尾加一,直到n
{
printf("{%d}\n",end);
for(start=end;start>0;start--) //累积者的头减一,直到1
{
for(runner=1;runner<start;runner++) //追赶者加一,直到遇到累积者的头
{
printf("{");
printf("%d ",runner); //输出追赶者
for(i=start;i<end;i++)
printf("%d ",i); //输出累积者(不包括头,因为累积者的尾后面不跟空格,而是跟})
printf("%d}\n",end); //输出累积者的尾
}
}
}
}
‘伍’ 用c语言编写一段程序,求两个集合的交
/*链表实现集合运算*/
#include<iostream.h>
typedef int ElemType;
struct SNode {
ElemType data;
SNode* next;
};
void InitSet(SNode*& HT)
{
HT=NULL;
}
void ClearSet(SNode*& HT)
{
SNode *p=HT, *q;
while(p!=NULL)
{
q=p->next;
delete p;
p=q;
}
HT=NULL;
}
int LenthSet(SNode* HT)
{
int n=0;
while(HT!=NULL)
{
n++;
HT=HT->next;
}
return n;
}
bool EmptySet(SNode* HT)
{
return HT==NULL;
}
bool Inset(SNode* HT, ElemType item)
{
while(HT!=NULL)
{
if(HT->data==item) return true;
else HT=HT->next;
}
return false;
}
void OutputSet(SNode* HT)
{
while(HT!=NULL)
{
cout<<HT->data<<' ';
HT=HT->next;
}
cout<<endl;
}
bool FindSet(SNode* HT, ElemType& item)
{
while(HT!=NULL)
{
if(HT->data==item) break;
else HT=HT->next;
}
if(HT!=NULL)
{
item=HT->data;
return true;
}
else return false;
}
bool ModifySet(SNode* HT, ElemType item, ElemType temp)
{
while(HT!=NULL)
{
if(HT->data==item) break;
else HT=HT->next;
}
if(HT!=NULL)
{
HT->data=temp;
return true;
}
else return false;
}
bool InsertSet(SNode*& HT, ElemType item)
{
//建立值为item的新结点
SNode* newptr= new SNode;
newptr->data=item;
//从单链表中顺序查找是否存在值为item的结点
SNode* p=HT;
while(p!=NULL)
{
if(p->data==item) break;
else p=p->next;
}
// 若不存在则把新结点插入到表头并返回真,否则不返回假
if(p==NULL)
{
newptr->next=HT;
HT=newptr;
return true;
}
else return false;
}
bool DeleteSet(SNode*& HT, ElemType& item)
{
//从单链表中顺序查找是否存在值为item的结点
SNode *cp=HT, *ap=NULL;
while(cp!=NULL)
{
if(cp->data==item) break;
else
{
ap=cp;
cp=cp->next;
}
}
//若不存在则不返回假,表明删除失败
if(cp==NULL)
return false;
//由item带回待删除结点cp的完整值,若不需要带回可设置item为值参
item=cp->data;
if(ap==NULL) HT=cp->next;
//从单链表中删除已经找到的cp结点并对ap是否为表头做不同处理
else ap->next = cp->next;
//删除cp结点后返回真
delete cp;
return true;
}
//求两集合的并集
void UnionSet(SNode* HT1, SNode* HT2, SNode*& HT)
{
HT=NULL;
//把HT1集合单链表元素复制到HT集合单链表中
SNode* p=HT1;
while(p!=NULL)
{
//建立新结点并赋值为p->data
SNode* newptr=new SNode;
newptr->data=p->data;
//把新结点插入到HT集合单链表的表头并让P指向下一个结点
newptr->next=HT;
HT=newptr;
p=p->next;
}
//把HT1集合单链表的每个元素插入到HT集合单链表中
p=HT2;
while(p!=NULL)
{
InsertSet(HT, p->data);
p=p->next;
}
}
//求集合的交集
void InterseSet(SNode* HT1, SNode* HT2, SNode*& HT)
{
HT=NULL;
ElemType x;
SNode* p=HT2;
while(p!=NULL)
{
x=p->data;
bool b=FindSet(HT1,x); //用x查找HT1集合
if(b) InsertSet(HT,x); //若查找成功则把x插入到HT集合中
p=p->next;
}
if(HT==NULL)
cout<<"空集"<<endl;
}
//求集合的差集
void DifferenceSet(SNode* HT1, SNode* HT2, SNode*& HT)
{
HT=NULL;
ElemType x;
SNode* p=HT1;
while(p!=NULL)
{
x=p->data;
bool b=FindSet(HT2,x); //用x查找HT2集合
if(b) InsertSet(HT,x); //若查找失败则把x插入到HT集合中
p=p->next;
}
if(HT==NULL)
cout<<"空集"<<endl;
}
int main()
{
SNode *a,*b,*c,*d;
InitSet(a);
InitSet(b);
InitSet(c);
InitSet(d);
ElemType r[8] = {12,32,13,1,2,4,7,8};
ElemType r1[8] = {25,98,26,15,46,38,5,1};
ElemType r2[8] = {5,98,25,8,34,1,15,46};
int i;
for(i=0;i<8;i++)
InsertSet(a,r[i]);
for(i=0;i<8;i++)
InsertSet(b,r1[i]);
for(i=0;i<8;i++)
InsertSet(c,r2[i]);
ElemType x=1,y=25;
DeleteSet(a,x);
DeleteSet(a,y);
cout<<"输出a集合的元素:"<<endl;
OutputSet(a);
cout<<"---------------------------------------------------------"<<endl;
if(ModifySet(a,13,30))
cout<<"把 a 集合的 13 更新为 30 更新成功 !"<<endl;
else
cout<<"集合 a 更新不成功 !"<<endl;
if(EmptySet(a))
cout<<"集合 a 为空 !"<<endl;
else
cout<<"集合 a 不为空 !"<<endl;
cout<<"集合a的长度:"<<LenthSet(a)<<endl;
cout<<"---------------------------------------------------------"<<endl;
cout<<"输出b集合的元素:"<<endl;
OutputSet(b);
cout<<endl;
cout<<"输出c集合的元素:"<<endl;
OutputSet(c);
cout<<endl;
cout<<"b、c两个集合的并集是:"<<endl;
UnionSet(b,c,d);
OutputSet(d);
cout<<endl;
cout<<"b、c两个集合的交集是:"<<endl;
InterseSet(b,c,d);
OutputSet(d);
cout<<endl;
cout<<"b、c两个集合的差集(c-b)是:"<<endl;
DifferenceSet(b,c,d);
OutputSet(d);
ClearSet(a);
ClearSet(b);
ClearSet(c);
ClearSet(d);
return 0;
}
‘陆’ C语言程序设计问题,关于把几个小程序集合在一个菜单程序里
如果是调用外部进程需要你把那些程序执行文件拷入本程序执行目录下,然后按照以下编写代码执行。
把以下代码中Application1与Application1.exe名称改成你需要调用的程序执行文件名
#include
<conio.h>
#include
<stdio.h>
#include
<process.h>
void
main()
{
while(true)
{
printf("\nPlease
select
a
application
to
execute:");
printf("\n1.Application1");
printf("\nInput:\n");
char
ch
=
getch();
if(ch
==
'q')
break;
else
if(ch
==
'1')
system("Application1.exe");
}
}
‘柒’ 怎样在C语言中编写多个程序并发执行的程序
多线程就可以
‘捌’ c语言编程,集合
动态规划.
#include<stdio.h>
/*#include<stdlib.h>*/
#include<memory.h>
#defineN5050
intmain(intargc,char*argv)
{
intd[N];
intn,s;
while(scanf("%d",&n)!=EOF){
s=n*(n+1)>>1;
if(s&1){
printf("0 ");
}
else{
s=s>>1;
inti,j;
memset(d,0,N*sizeof(d[0]));
d[0]=1;
for(i=1;i<=n;i++){
for(j=s;j>=i;j--){
d[j]=d[j]+d[j-i];
}
}
printf("%d ",d[s]>>1);
}
}
return0;
}
‘玖’ C语言中,如何用多个文件编写程序
1.
将一个函数写在一个文件里,然后再在另一个文件里用“include”包含这个文件。
2.
举例:
在文件c1.c里编一个函数:
void
printWord(){
printf("Hello!world!");
}
再建立一个文件c2.c,文件开头写上#include"c1.c",就可以调用c1.c里的函数printword()了
这样通过include操作,可以把任意多个文件连接起来,编译成一个程序运行。
‘拾’ 用C语言编写一个程序,从小到大输出一个集合
给你描述一下方法,具体怎么写,还需要自己去写一下。否则是学不会编程的。
把他们写进一个数组,用if语句判断大于a且小于z,再进行排序,再次删除相同元素,最后输出,输出注意格式。我也是一个从什么都不会,慢慢摸索出来的。可能有很简单的方法,但是我还是不会,希望这些能帮到你。