當前位置:首頁 » 編程語言 » c語言中集合ab如何書寫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中集合ab如何書寫

發布時間: 2022-11-04 06:12:13

c語言給定兩個集合A和B,,將A-B的元素排序後輸出,輸入兩行,分別為兩行,分別為A

#include<stdio.h>
#include<stdlib.h>
intminus(int*a,intm,int*b,intn)
{
inti,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[j]==b[i])
{
for(k=j;k<m-1;k++)
a[k]=a[k+1];
j--;
m--;
}
}
}
returnm;
}

intmain()
{
int*a,*b,m,n,i;
scanf("%d",&m);
a=(int*)malloc(sizeof(int)*m);
for(i=0;i<m;i++)
scanf("%d",a+i);
scanf("%d",&n);
b=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",b+i);
m=minus(a,m,b,n);
for(i=0;i<m-1;i++)
printf("%d",a[i]);
printf("%d ",a[i]);
free(a);
free(b);
return0;
}

⑵ 怎樣用語言c語言實現集合的合並,交集

通過你描述的問題,正確的交集代碼如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合並集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

⑶ 用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語言 集合a-b

std::set<int> a;std::set<int> b;
std::set<int> c = a-b;

⑸ c語言中字元串"ab"的長度是多少希望高手幫幫忙,謝了!

"ab"的存儲為:0x61(a的ASCII),0x62,'\0'(字元串結束符)
但計算長度是,'\0'不計算,它只是結束標志,因此長度是2

⑹ 如何用C語言表示離散數學上的集合,並輸出輸入

最簡單的是bit set(又稱為Bit array、bit vector),例如用 typedef unsigned bitset[N / sizeof(unsigned)]表示一個集合(其全集的元素量為N),每個bit代表某個元素是否存在於該集合中。

這個數據結構的好處是,可用位操作(&、|、~)實現並集、交集、補集,非常適合計算機運作。

缺點是空間和時間復雜度和全集的元素數量 N 成正比,而不是集合實際的元素量。例如全集是32位整數,每個集合就需要2^32 bit = 512MB的空間。如果集合中的元素比較少,可以使用有序序列,例如排序數組(Sorted array)、二叉查找樹等實現集合。它們的缺點是修改集合不是常數時間。

數據類型關鍵字

short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)

long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)

long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)

signed:修飾整型數據,有符號數據類型。(C89標准新增)

unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)

restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的初始且唯一的方式。

⑺ 用C語言實現: 已知兩個集合A,B(成員為整數),求兩個集合的交集,並集,結果存 放於A中,按遞增排列。

#include<stdio.h>
#include<malloc.h>

typedefstructnode{
intnum;
structnode*next;
}AGG;

AGG*CreateList(){//創建單循環鏈表,返回鏈表頭
AGG*head,*p;
inti,n;
printf("結點個數n=");
scanf("%d",&n);
head=p=(AGG*)malloc(sizeof(AGG));//專用頭結點
head->num=0;
printf("輸入%d整數(空格隔開): ",n);
for(i=0;i<n;++i){
p->next=(AGG*)malloc(sizeof(AGG));
scanf("%d",&p->next->num);
p=p->next;
}
p->next=head;
returnhead;
}

voidRiseSort(AGG*head){//上升排序
AGG*p,*s,*pt;
p=head;
s=p->next;
while(p->next!=head){
while(s->next!=head){
if(p->next->num>s->next->num){
pt=p->next;
p->next=s->next;
s->next=p->next->next;
p->next->next=pt;
}
elses=s->next;
}
p=p->next;
s=p->next;
}
}

voidSimplification(AGG*head){//去除相同的集合元素
AGG*p,*q,*s;
p=head->next;
q=p->next;
while(q!=head){
if(p->num==q->num){
p->next=q->next;
s=q;
q=q->next;
deletes;
}
else{
p=p->next;
q=q->next;
}
}
}

AGG*CreateAgg(){
AGG*head;
head=CreateList();
RiseSort(head);;
Simplification(head);
returnhead;
}

voidInsertNode(AGG*head,intnum){
AGG*t,*p=head;
while(p->next!=head){
if(p->next->num==num)return;
if(p->next->num<num)p=p->next;
else{
t=(AGG*)malloc(sizeof(AGG));
t->num=num;
t->next=p->next;
p->next=t;
return;
}
}
t=(AGG*)malloc(sizeof(AGG));
t->num=num;
p->next=t;
t->next=head;//插入在鏈表尾的處理
}

AGG*MergeAgg(AGG*A,AGG*B){//A∪B
AGG*head,*pa,*pb,*pc,*qc;
head=pc=(AGG*)malloc(sizeof(AGG));
pa=A->next;
while(pa!=A){
qc=(AGG*)malloc(sizeof(AGG));
qc->num=pa->num;
pc->next=qc;
pc=qc;
pa=pa->next;
}
pc->next=head;
pb=B->next;
while(pb!=B){
InsertNode(head,pb->num);
pb=pb->next;
}
returnhead;
}

AGG*MutualAgg(AGG*A,AGG*B){//A∩B
AGG*C,*pa,*pb,*pc,*qc;
C=pc=(AGG*)malloc(sizeof(AGG));
pc->num=0;
pa=A->next;
pb=B;
while(pa!=A){
pb=B->next;
while(pb!=B){
if(pb->num==pa->num){
qc=(AGG*)malloc(sizeof(AGG));
qc->num=pb->num;
pc->next=qc;
pc=qc;
}
pb=pb->next;
}
pa=pa->next;
}
pc->next=C;
returnC;
}

AGG*DifferAgg(AGG*A,AGG*B){//返回A、B的差集A-B
AGG*head,*p,*q,*r;
inttag;
head=r=(AGG*)malloc(sizeof(AGG));
for(p=A->next;p!=A;p=p->next){
tag=1;
for(q=B->next;q!=B&&tag;q=q->next)
tag=p->num!=q->num;
if(tag){
r->next=(AGG*)malloc(sizeof(AGG));
r=r->next;
r->num=p->num;
}
}
for(p=B->next;p!=B;p=p->next){
tag=1;
for(q=A->next;q!=A&&tag;q=q->next)
tag=p->num!=q->num;
if(tag){
r->next=(AGG*)malloc(sizeof(AGG));
r=r->next;
r->num=p->num;
}
}
r->next=head;
RiseSort(head);
returnhead;
}

voidPrintList(AGG*head){
AGG*p=head->next;
shortcounter=0;
while(p!=head){
if(counter&&counter%10==0)printf(" ");
printf("%5d",p->num);
counter++;
p=p->next;
}
if(counter%10)printf(" ");
}

voidfreeheap(AGG*head){
AGG*p,*q;
p=head;
q=p->next;
while(q!=head){
p=q;
q=p->next;
free(p);
}
free(head);
}

intmain(){
AGG*A,*B,*C,*D,*E;
printf("創建集合A: ");
A=CreateAgg();
printf("創建集合B: ");
B=CreateAgg();
printf("集合A的元素有: ");
PrintList(A);
printf("集合B的元素有: ");
PrintList(B);
C=MutualAgg(A,B);
printf("交集C=A∩B: ");
PrintList(C);
printf("並集D=A∪B: ");
D=MergeAgg(A,B);
PrintList(D);
printf("差集D=A-B: ");
E=DifferAgg(A,B);
PrintList(E);
freeheap(A);
freeheap(B);
freeheap(C);
freeheap(D);
freeheap(E);
printf(" ");
return0;
}

⑻ c語言 中'ab'的值

a的ASCII碼是10進制的97,16進制的61,b的ASCII碼是10進制的98,16進制的62,順序寫到一起是16進制的6162,轉換為10進制就是24930。
'ab'佔用2個位元組(字面上是這樣),賦給int類型變數在某些編譯器(如Dev-C++)中是可能的,但沒有推廣價值,也米有應用價值,所以這也不會出現在考試、或者筆試題目中。

⑼ 字元串ab在C語言中表示為

"ab" 雙引號表示字元串,'a' 單引號表示單個字元