當前位置:首頁 » 編程語言 » 選取c語言的一個適當大小的子集
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

選取c語言的一個適當大小的子集

發布時間: 2023-01-04 17:26:21

A. 用c語言對一個C語言的子集編制一個一遍的編譯程序

呵呵,你們一個學期的作業還來只有30分

B. 用C語言編寫給定一個集合A,求A的所有非空子集。

#include <stdio.h>
#include <string.h>
#include <math.h>
void add(int *a,int n);
int main ()
{
char A[25];
gets(A);
int i,t=0,k=0,h,number,l=strlen(A);
int a[10]={1};
number=(l-1)/2;
h=pow(2,number)-1;
for(t=1;t<=h;t++)
{
printf("{");
for(i=0;i<number;i++)
{
if(a[i])
{
if(k++)
printf(",");
printf("%c",i+97);
}
}
k=0;
printf("}\n");
add(a,number);
}
}
void add(int *a,int n)
{
int i;
a[0]++;
for(i=0;i<n;i++)
{
if(a[i]==2)
{
a[i]=0;
a[i+1]++;
}
}
}
真的很用心!!!

C. 編制C語言子集的詞法分析程序

#include <iostream>

#include <string>

using namespace std;

string key[6] = {"begin", "if", "then", "while", "do", "end"};

//關鍵字

bool isKey( string str, int &syn) //判斷是否為關鍵字,若是傳回相

應關鍵碼的種別名

{

int i;

for(i=0; i<6; i++)

{

if(str == key[i])

{

syn = i + 1;

return true;

}

}

return false;

}

bool isLetter(char c) //是否為字母

{

if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))

return true;

else

return false;

}

bool isDigit(char c) //是否為數字

{

if(c >= '0' && c <= '9')

return true;

else

return false;

}

void analyse(FILE *fileP)

{

int n;

char c;

string str = "";

while((c = fgetc(fileP)) != EOF)

{

if(c == ' ' || c == '\n' || c == '\t')

continue;

else if(isDigit(c)) //數字

{

while(isDigit(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

cout << "(11, " << str << ")" << endl;

str = "";

}

else if(isLetter(c)) //字母開頭的

{

while(isDigit(c) || isLetter(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

if(isKey(str, n))

cout << "(" << n << ", " << str << ")" << endl; //關鍵碼

else

cout << "(10, " << "\'"<< str << "\'" << ")" << endl; //標志符

str = "";

}

else //操作符等

{

switch(c)

{

case '+':

cout << "(13, +)" << endl;

break;

case '-':

cout << "(14, -)" << endl;

break;

case '*':

cout << "(15, *)" << endl;

break;

case '/':

cout << "(16, /)" << endl;

break;

case ':':

{

if(c=fgetc(fileP) == '=')

cout << "(18, :=)" << endl;

else

{

cout << "(17, :)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '<':

{

c=fgetc(fileP);

if(c == '=')

cout << "(22, <=)" << endl;

else if(c == '>')

cout << "(21, <>)" << endl;

else

{

cout << "(20, <)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '>':

{

c=fgetc(fileP);

if(c == '=')

cout << "(24, >=)" << endl;

else

{

cout << "(23, >)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '=':

cout << "(25, =)" << endl;

break;

case ';':

cout << "(26, ;)" << endl;

break;

case '(':

cout << "(27, ()" << endl;

break;

case ')':

cout << "(28, ))" << endl;

break;

case '#':

cout << "(0, #)" << endl;

break;

}

}

}

}

int main()

{

FILE *fileP;

fileP = fopen("test.txt", "r");

cout << "------詞法分析如下------" << endl;

analyse(fileP);

return 0;

}

D. 用c語言解決集合中關於子集的問題

#include <stdio.h>
int No1(int a[10],int b[3]);
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int b[3]={4,5,6};
No1(a,b);
}
int No1(int a[10],int b[3])
{
int i;
int j;
int k=0;
for(i=0;i<10;i++)
{
for(j=0;j<3;j++)
{
if(b[j]==a[i])
{
k++;
}
}
}
if(k==3)
{
printf("b是a的子函數");
}
}
大概就是這個樣子,你試試看把

E. 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();
}

F. c語言求一個整數集合的各個子集的數字和並比較大小,列出和最大的子集

這是個經典演算法:

#include"stdio.h"
intmaxa(int*a,intl,int*s,int*e)/*用s和e記錄子數組起始和終止地址,l是數組長度*/
{
intsummax=0;/*最大子數組的和*/
intsumcur=0;/*當前和*/
inti;
*s=0;*e=0;
for(i=0;i<l;i++)
{
sumcur+=a[i];
if(sumcur>summax)
{
summax=sumcur;
*e=i;
}
elseif(sumcur<0)
{
sumcur=0;
*s=i+1;
}
}
if(summax<=0)
{
summax=a[0];
for(i=0;i<l;i++)
{
if(summax<a[i])
{
summax=a[i];
*s=i;
*e=i;
}
}
}
returnsummax;
}
intmain()
{
inta[]={1,-2,3,10,-4,7,2,-5};
intstart,end;
printf("最大子數組的和為:%d ",maxa(a,8,&start,&end));
printf("最大子數組的元素下標從%d到%d: ",start,end);
while(start<=end)
{
printf("%d",a[start++]);
}
printf(" ");
return0;
}

結果:

G. 用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); //輸出累積者的尾
}
}
}
}

H. 大一c語言求子集題目,求教

按照題目要求編寫的列印字元的所有組合子集的C語言程序如下

#include<stdio.h>

#include<math.h>

void printall(char data[],int num)

{

int real_size=(int)pow(2,num);

int i,j,k=0,total=0;

printf("%d ",real_size);

for(i=0;i<real_size;i++)

{

printf("{");

for(j=0;j<num;j++)

{

if(i & (1 << j)){

if(j==k){

printf("%c",data[j]);

}else{

printf("%c,",data[j]);

}

}

}

printf("} ");

total++;

if(total==(int)pow(2,k+1)){

k++;

}

}

}

int main()

{

int t,n,i,j;

char a[30];

scanf("%d",&t);

for(i=0;i<t;i++){

scanf("%d",&n);

for(j=0;j<n;j++){

scanf(" %c",&a[j]);

}

printall(a,n);

}

return 0;

}

I. 輸出一個集合的子集用c語言程序編寫

#include<stdio.h>
#define AMAX 6
static char A[AMAX] = {'a','b','c','d','e','f'};

void print(int len)//len為子集的大小,即元素的個數
{
int i,j,k;
j=k=0;
for(i=0;i<AMAX;i++)
{
if(AMAX-i<len)break;
for(j=0;j<len;j++)
{
printf("%c ",A[i+j]);
}
printf("\n");
}
return;
}
int main()
{
int i;
for(i=1;i<=AMAX;i++)
{
print(i);
}
return 0;
}