c语言第六次作业解析.docx
《c语言第六次作业解析.docx》由会员分享,可在线阅读,更多相关《c语言第六次作业解析.docx(24页珍藏版)》请在冰豆网上搜索。
c语言第六次作业解析
第六次作业:
指针
(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)
1.数组元素循环移位
有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。
写一函数实现以上功能。
在主函数中输入n及n个整数,输入m(m#includevoidmain(){voidinv(int*p,intn,intm);intn,m,a[20],*p;printf("pleaseinputn=");scanf("%d",&n);printf("pleaseinput%dnumbers:",n);p=a;while(pscanf("%d",p++);printf("pleaseinputm=");scanf("%d",&m);p=a;inv(a,n,m);printf("thenewarray:\n");while(pprintf("%d",*p++);putchar('\n');}voidinv(int*p,intn,intm){inti;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i*(p+i)=*(p+n+i);}2.矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即。要求编写一个函数实现上述排序功能。在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。#includevoidmain(){voidinv(int(*x)[5]);inti,j,a[5][5];int(*p)[5];printf("pleaseinputan5*5array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("thenewarray:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}voidinv(int(*x)[5]){inti,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。例如:如用户输入3,则输出“星期三”。要求:用指针数组的方法来实现。#includevoidmain(){intn;char(*p)[3];chara[7][3]={"一","二","三","四","五","六","七"};printf("pleaseinputn=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至sChar*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。#include#includechar*strncpy(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i)=*(t+i);if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
#include
voidmain()
{
voidinv(int*p,intn,intm);
intn,m,a[20],*p;
printf("pleaseinputn=");
scanf("%d",&n);
printf("pleaseinput%dnumbers:
",n);
p=a;
while(pscanf("%d",p++);printf("pleaseinputm=");scanf("%d",&m);p=a;inv(a,n,m);printf("thenewarray:\n");while(pprintf("%d",*p++);putchar('\n');}voidinv(int*p,intn,intm){inti;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i*(p+i)=*(p+n+i);}2.矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即。要求编写一个函数实现上述排序功能。在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。#includevoidmain(){voidinv(int(*x)[5]);inti,j,a[5][5];int(*p)[5];printf("pleaseinputan5*5array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("thenewarray:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}voidinv(int(*x)[5]){inti,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。例如:如用户输入3,则输出“星期三”。要求:用指针数组的方法来实现。#includevoidmain(){intn;char(*p)[3];chara[7][3]={"一","二","三","四","五","六","七"};printf("pleaseinputn=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至sChar*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。#include#includechar*strncpy(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i)=*(t+i);if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
scanf("%d",p++);
printf("pleaseinputm=");
scanf("%d",&m);
inv(a,n,m);
printf("thenewarray:
\n");
while(pprintf("%d",*p++);putchar('\n');}voidinv(int*p,intn,intm){inti;for(i=1;i<=n;i++)*(p+n-i+m)=*(p+n-i);for(i=0;i*(p+i)=*(p+n+i);}2.矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即。要求编写一个函数实现上述排序功能。在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。#includevoidmain(){voidinv(int(*x)[5]);inti,j,a[5][5];int(*p)[5];printf("pleaseinputan5*5array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("thenewarray:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}voidinv(int(*x)[5]){inti,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。例如:如用户输入3,则输出“星期三”。要求:用指针数组的方法来实现。#includevoidmain(){intn;char(*p)[3];chara[7][3]={"一","二","三","四","五","六","七"};printf("pleaseinputn=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至sChar*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。#include#includechar*strncpy(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i)=*(t+i);if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
printf("%d",*p++);
putchar('\n');
}
voidinv(int*p,intn,intm)
inti;
for(i=1;i<=n;i++)
*(p+n-i+m)=*(p+n-i);
for(i=0;i*(p+i)=*(p+n+i);}2.矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即。要求编写一个函数实现上述排序功能。在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。#includevoidmain(){voidinv(int(*x)[5]);inti,j,a[5][5];int(*p)[5];printf("pleaseinputan5*5array:\n");p=a;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",*(p+i)+j);inv(p);printf("thenewarray:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",*(*(p+i)+j));putchar('\n');}putchar('\n');}voidinv(int(*x)[5]){inti,j,t;for(i=0;i<24;i++)for(j=i+1;j<25;j++){if(*(*x+i)>*(*x+j)){t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}}return;}3.星期的查找编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。例如:如用户输入3,则输出“星期三”。要求:用指针数组的方法来实现。#includevoidmain(){intn;char(*p)[3];chara[7][3]={"一","二","三","四","五","六","七"};printf("pleaseinputn=");scanf("%d",&n);p=a;printf("星期%s\n",p+n-1);}4.字符串库函数的实现请使用指针的方法来实现如下的库函数:Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至sChar*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。#include#includechar*strncpy(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i)=*(t+i);if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
*(p+i)=*(p+n+i);
2.矩阵元素的排序
将一个5×5的整数型矩阵中各元素重新排序。
排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即
。
要求编写一个函数实现上述排序功能。
在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。
voidinv(int(*x)[5]);
inti,j,a[5][5];
int(*p)[5];
printf("pleaseinputan5*5array:
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",*(p+i)+j);
inv(p);
printf("%4d",*(*(p+i)+j));
voidinv(int(*x)[5])
inti,j,t;
for(i=0;i<24;i++)
for(j=i+1;j<25;j++)
if(*(*x+i)>*(*x+j))
{t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}
return;
3.星期的查找
编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。
例如:
如用户输入3,则输出“星期三”。
要求:
用指针数组的方法来实现。
intn;
char(*p)[3];
chara[7][3]={"一","二","三","四","五","六","七"};
printf("星期%s\n",p+n-1);
4.字符串库函数的实现
请使用指针的方法来实现如下的库函数:
Char*strncpy(char*s,char*t,intn)//复制t的前n个字符至s
Char*strncat(char*s,char*t,intn)//连接t的前n个字符至s的末尾
intstrncmp(char*s,char*t,intn)//比较s和t的前n个字符
并请编写一个主函数来调用并测试自己编写的库函数。
char*strncpy(char*s,char*t,intn)
inti,length;
length=strlen(s);
for(i=0;i*(s+i)=*(t+i);if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
*(s+i)=*(t+i);
if(lengthreturn(s);}char*strncat(char*s,char*t,intn){inti,length;length=strlen(s);for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
return(s);
char*strncat(char*s,char*t,intn)
for(i=0;i*(s+i+length)=*(t+i);*(s+length+n)='\0';return(s);}intstrncmp(char*s,char*t,intn){inti;for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
*(s+i+length)=*(t+i);
*(s+length+n)='\0';
intstrncmp(char*s,char*t,intn)
for(i=0;i{if(*(s+i)==*(t+i))continue;elseif(*(s+i)>*(t+i)){return(1);break;}else{return(-1);break;}}}voidmain(){chara[20],b[20];intn;scanf("%s%s%d",a,b,&n);printf("%s\n",strncpy(a,b,n));scanf("%s%s%d",a,b,&n);printf("%s\n",strncat(a,b,n));scanf("%s%s%d",a,b,&n);printf("%d\n",strncmp(a,b,n));}5.算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。#include#include#includeintresult=1;voidGetRanddomExpression(int*num1,char*a,int*num2){intn;srand(time(NULL));*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n){case0:{while(*num2>*num1)*num2=rand()%100+1;result=(*num1)-(*num2);*a='-';}break;case1:{while((*num1+*num2)>100)*num2=rand()%100+1;*a='+';result=(*num1)+(*num2);}break;case2:while((*num1*(*num2))>100)*num2=rand()%100+1;*a='*';result=(*num1)*(*num2);break;case3:{while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/';}break;}}intjudge(intanswer){if(answer==result)return(1);elsereturn(0);}voidmain(){intnum1,num2;chara;intanswer;while(result!=answer){GetRanddomExpression(&num1,&a,&num2);printf("pleaseinputtheresultoftheexpression:\n%d%c%d=",num1,a,num2);scanf("%d",&answer);if(judge(answer)==1)printf("youareright!");elseprintf("sorry,itnottherightanswer.\n");}}6.数组分区(指针作为函数参数)本题由三个部分构成(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。 #include#include#include#includevoidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count){inti;intcount_even=0,count_odds=0;for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
if(*(s+i)==*(t+i))continue;
elseif(*(s+i)>*(t+i)){return
(1);break;}
else{return(-1);break;}
chara[20],b[20];
scanf("%s%s%d",a,b,&n);
printf("%s\n",strncpy(a,b,n));
printf("%s\n",strncat(a,b,n));
printf("%d\n",strncmp(a,b,n));
5.算术练习程序(指针型函数)
一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。
该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。
intresult=1;
voidGetRanddomExpression(int*num1,char*a,int*num2)
srand(time(NULL));
*num1=rand()%100+1;
*num2=rand()%100+1;
n=rand()%4;
switch(n)
case0:
{while(*num2>*num1)*num2=rand()%100+1;
result=(*num1)-(*num2);*a='-';}break;
case1:
{while((*num1+*num2)>100)*num2=rand()%100+1;
*a='+';result=(*num1)+(*num2);}break;
case2:
while((*num1*(*num2))>100)*num2=rand()%100+1;
*a='*';result=(*num1)*(*num2);break;
case3:
{while(*num1%*num2!
=0)*num2=rand()%100+1;
result=(*num1)/(*num2);*a='/';}break;
intjudge(intanswer)
if(answer==result)return
(1);
elsereturn(0);
intnum1,num2;
chara;
intanswer;
while(result!
=answer)
GetRanddomExpression(&num1,&a,&num2);
printf("pleaseinputtheresultoftheexpression:
\n%d%c%d=",num1,a,num2);
scanf("%d",&answer);
if(judge(answer)==1)printf("youareright!
");
elseprintf("sorry,itnottherightanswer.\n");
6.数组分区(指针作为函数参数)
本题由三个部分构成
(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。
该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)
(2)利用
(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。
该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。
(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用
(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。
voidCountEvensAndOdds(int*parr,intarr_len,int*even_count,int*odds_count)
intcount_even=0,count_odds=0;
for(i=0;i{if((*(parr+i)%2)==0)count_even++;elsecount_odds++;}*even_count=count_even;*odds_count=count_odds;}voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len){inteven_count,odds_count,i,m=0,n=0;intcount_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int*)malloc(sizeof(int)*even_count);*odds_arr=(int*)malloc(sizeof(int)*odds_count);for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
if((*(parr+i)%2)==0)count_even++;
elsecount_odds++;
*even_count=count_even;
*odds_count=count_odds;
voidPartition(int*parr,intarr_len,int**even_arr,int*even_len,int**odds_arr,int*odds_len)
inteven_count,odds_count,i,m=0,n=0;
CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);
*even_arr=(int*)malloc(sizeof(int)*even_count);
*odds_arr=(int*)malloc(sizeof(int)*odds_count);
for(i=0;i{if((*(parr+i)%2)==0){*(*even_arr+m)=*(parr+i);m++;}else{*(*odds_arr+n)=*(parr+i);n++;}}*even_len=m;*odds_len=n;}voidprint_arr(int*parr,intarr_len){inti;for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
if((*(parr+i)%2)==0)
{*(*even_arr+m)=*(parr+i);m++;}
else
{*(*odds_arr+n)=*(parr+i);n++;}
*even_len=m;
*odds_len=n;
voidprint_arr(int*parr,intarr_len)
for(i=0;i{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}printf("\n");}voidmain(){int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;srand(time(NULL));arr_len=rand()%50;parr=(int*)malloc(sizeof(int)*arr_len);printf("arr_len=%d\n",arr_len);for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}
printf("\n");
int*parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;
arr_len=rand()%50;
parr=(int*)malloc(sizeof(int)*arr_len);
printf("arr_len=%d\n",arr_len);
for(i=0;iparr[i]=rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:\n");print_arr(parr,arr_len);printf("even_arrlen=%d\n",even_len);printf("even_arr:\n");print_arr(even_arr,even_len);printf("odds_arrlen=%d\n",odds_len);printf("odds_arr:\n");print_arr(odds_arr,odds_len);}7.字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1)如果该字符是空格,则保留该字符。(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3)否则删除该字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence。#include#include#includevoidmain(){char*p,str[50]={'0'};intn,i,j=0,num[26]={0};gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char));for(i=0;str[i]!=0;i++){if(str[i]=='')*(p+j++)=str[i];else{if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5){*(p+j++)=str[i];num[str[i]-97]++;}elsenum[str[i]-97]++;}}for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
parr[i]=rand()%100;
Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);
printf("arr:
print_arr(parr,arr_len);
printf("even_arrlen=%d\n",even_len);
printf("even_arr:
print_arr(even_arr,even_len);
printf("odds_arrlen=%d\n",odds_len);
printf("odds_arr:
print_arr(odds_arr,odds_len);
7.字符串压缩(使用字符指针)
编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:
(1)如果该字符是空格,则保留该字符。
(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符
(3)否则删除该字符。
例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:
occurrence。
char*p,str[50]={'0'};
intn,i,j=0,num[26]={0};
gets(str);
n=strlen(str);
p=(char*)malloc(n*sizeof(char));
for(i=0;str[i]!
=0;i++)
if(str[i]=='')*(p+j++)=str[i];
if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5)
*(p+j++)=str[i];
num[str[i]-97]++;
elsenum[str[i]-97]++;
for(i=0;iprintf("%c",*(p+i));putchar('\n');}8.字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。#include#includevoidmain(){char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};charb[6],*p;intlength,i,k;printf("pleaseinputsomecharactors:");scanf("%s",b);length=strlen(b);for(i=0;i<6;i++){for(p=b;p{if(*p==*a[i])k=i;else{k=6;break;}}if(k==i)printf("%s\n",a[i]-length);}}9.字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include#includevoidsort(char*name[],intn){char*temp;inti,j,k;for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
printf("%c",*(p+i));
8.字符查找(使用指针数组)
用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:
输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。
char*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};
charb[6],*p;
intlength,i,k;
printf("pleaseinputsomecharactors:
scanf("%s",b);
length=strlen(b);
for(i=0;i<6;i++)
for(p=b;p
if(*p==*a[i])k=i;
else{k=6;break;}
if(k==i)printf("%s\n",a[i]-length);
9.字符串排序(使用多级指针)
用指向指针的指针的方法对于输入的5个字符串进行排序并输出。
(假设每个字符串最大长度不超过20)
//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。
voidsort(char*name[],intn)
char*temp;
inti,j,k;
for(i=0;i{k=i;for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
k=i;
for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;}}}voidprint(char*name[],intn){inti;for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
if(strcmp(name[k],name[j])>0)k=j;
if(k!
=i){temp=name[i];name[i]=name[k];name[k]=temp;}
voidprint(char*name[],intn)
for(i=0;iprintf("%s\n",name[i]);}voidmain(){char*name[5];chara[5][20];intn=5,i;printf("pleaseinputfivestr:\n");for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
printf("%s\n",name[i]);
char*name[5];
chara[5][20];
intn=5,i;
printf("pleaseinputfivestr:
for(i=0;i{scanf("%s",a[i]);name[i]=*(a+i);}printf("\nthenewstr:\n");sort(name,n);print(name,n);}10.最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:Whatislocalbus?Namesomelocalbus.ALocalbusishighspeedI/Obusclosetotheprocessor.#include#includeintstr_match(char*s1,char*s2,intlen){while(len>0){if(*s1!=*s2)return0;s1++;s2++;len--;}return1;}voidmain(){inti,j,s,l,flag1,flag2;charstr[3][60]={{"whatthelocalbus?"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};intlen[3];for(i=0;i<3;i++)len[i]=strlen(str[i]);for(l=len[0];l>0;l--){for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
scanf("%s",a[i]);
name[i]=*(a+i);
printf("\nthenewstr:
sort(name,n);
print(name,n);
10.最长公共字串(提示使用strstr()库函数)
编写一个程序,求给定三个字符串的最长公共子串。
假设给定的三个字符串分别为:
Whatislocalbus?
Namesomelocalbus.
ALocalbusishighspeedI/Obusclosetotheprocessor.
intstr_match(char*s1,char*s2,intlen)
while(len>0)
if(*s1!
=*s2)return0;
s1++;
s2++;
len--;
return1;
inti,j,s,l,flag1,flag2;
charstr[3][60]={{"whatthelocalbus?
"},{"Namesomelocalbus."},{"ALocalbusishighspeedI/Obusclosetotheprocessor."}};
intlen[3];
for(i=0;i<3;i++)
len[i]=strlen(str[i]);
for(l=len[0];l>0;l--)
for(s=0;s+l-1{flag1=1;for(i=1;i<3;i++){flag2=0;for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
flag1=1;
for(i=1;i<3;i++)
flag2=0;
for(j=0;j+l-1{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}if(!flag2){flag1=0;break;}}if(flag1)gotoL;}}L:printf("最长公共子串为:");for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}
if(!
flag2){flag1=0;break;}
if(flag1)gotoL;
L:
printf("最长公共子串为:
for(i=0;iprintf("%c",*(str[0]+s+i));putchar('\n');}//以下为选做题目11.网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:gunsminesmissilesaamericssellsnugsdaniimsssleotsitneeemis则输出为:gunsmissiles#include#includeintFindCode(charkeyword[100],intstring_num,charstring[100]){intk,letter1[26]={0},letter2[26]={0};for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
printf("%c",*(str[0]+s+i));
//以下为选做题目
11.网络警察
作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。
不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。
请编写一个程序,发现这种调整过顺序的关键词。
程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。
程序的输出为在该句子中所找到的经过顺序调整的关键词。
例如输入:
gunsminesmissiles
aamericssellsnugsdaniimsssleotsitneeemis
则输出为:
gunsmissiles
intFindCode(charkeyword[100],intstring_num,charstring[100])
intk,letter1[26]={0},letter2[26]={0};
for(k=0;kletter1[keyword[k]-97]++,letter2[string[k]-97]++;for(k=0;k<26;k++)if(letter1[k]!=letter2[k])break;if(k==26)return1;return0;}voidPart(charkeyword[][100],chartemp[100],int*Size){char*p;inti=0,j;p=temp;while(*p!='\0'){j=0;while(*p!=''&&*p!='\0')keyword[i][j++]=*(p++);keyword[i++][j]='\0';while(*p=='')p++;}*Size=i;}voidmain(){charkeyword[100][100],string[100][100],temp[100];intkey_num,string_num;inti,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
letter1[keyword[k]-97]++,letter2[string[k]-97]++;
for(k=0;k<26;k++)
if(letter1[k]!
=letter2[k])break;
if(k==26)return1;
return0;
voidPart(charkeyword[][100],chartemp[100],int*Size)
char*p;
inti=0,j;p=temp;
while(*p!
='\0')
j=0;
=''&&*p!
='\0')keyword[i][j++]=*(p++);
keyword[i++][j]='\0';
while(*p=='')p++;
*Size=i;
charkeyword[100][100],string[100][100],temp[100];
intkey_num,string_num;
inti,j;
gets(temp);
Part(keyword,temp,&key_num);
Part(string,temp,&string_num);
for(i=0;ifor(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
for(j=0;jif(FindCode(keyword[i],strlen(keyword[i]),string[j]))printf("%s",keyword[i]);printf("\n");}12.动态三维数组a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。b、另外编写一个FreeGrid函数,用来释放这个三维数组。C、在主函数中●
if(FindCode(keyword[i],strlen(keyword[i]),string[j]))
printf("%s",keyword[i]);
12.动态三维数组
a、编写一个函数CreateGrid(intm,intn,intt),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。
要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。
b、另外编写一个FreeGrid函数,用来释放这个三维数组。
C、在主函数中
●
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1