c语言国二考试编程题答案_第1页
c语言国二考试编程题答案_第2页
c语言国二考试编程题答案_第3页
c语言国二考试编程题答案_第4页
c语言国二考试编程题答案_第5页
已阅读5页,还剩327页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言国二考试编程题答案c语言国二考试编程题答案c语言国二考试编程题答案xxx公司c语言国二考试编程题答案文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为10、20、30、40。第一个for循环用来计算score数组中分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意j的递增方式。#include<string.h>#include<conio.h>#include<stdio.h>intfun(intscore[],intm,intbelow[]) {inti,j=0,aver=0; for(i=0;i<m;i++) aver+=score[i]; aver/=m; for(i=0;i<m;i++) if(score[i]<aver) below[j++]=score[i]; returnj;}main(){inti,n,below[9];intscore[9]={10,20,30,40,50,60,70,80,90};n=fun(score,9,below);printf("\nbelowtheaveragescoreare:");for(i=0;i<n;i++)printf("%4d",below[i]);}2.请编写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。该题关键就是如何表示能被7或11整除,但不能同时被7和11整除。用(i%7==0)||(i%11==0)来表示能被7或11整除,用!((i%7==0)&&(i%11==0))来表示不能同时被7和11整除。#include<conio.h>#include<stdio.h>voidfun(int*a,int*n){inti,m=0;for(i=1;i<1000;i++)if(((i%7==0)||(i%11==0))&&!((i%7==0)&&(i%11==0))){a[m]=i;m+=1;}*n=m;}main(){intaa[1000],n,k;clrscr();fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)printf("\n");elseprintf("%d,",aa[k]);}3.请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好保正i永远的奇数。这里也要注意存放结果的数组pp的下标变化方式。#include<conio.h>#include<stdio.h>voidfun(intx,intpp[],int*n) {inti,j=0; for(i=1;i<=x;i=i+2) if(x%i==0)pp[j++]=i; *n=j; } main(){intx,aa[1000],n,i;printf("\npleaseenteranintegernumber:\n");scanf("%d",&x);fun(x,aa,&n);for(i=0;i<n;i++)printf("%d",aa[i]);}

4.请编写一个函数voidfun(char*tt,intpp[]),统计在字符串中'a'到'z'26个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000本题采用的是字母的ASCII码值与数组pp下标的对应转换关系分别求出对应字母的个数。第一个for是给pp赋初值0,第二个for用于控制在字符串内从头到尾移动。由于字母'a'的ASCII码值为97而它的个数要放在pp[0]中,而'a'-97的值正好为0。#include<conio.h> #include<stdio.h> voidfun(char*tt,intpp[]) {inti; for(i=0;i<26;i++) pp[i]=0; for(;*tt;tt++) if(*tt<='z'&&*tt>='a')pp[*tt-97]++; } main(){charaa[1000];intbb[26],k;clrscr();printf("\nPleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf("%d",bb[k]); printf("\n");}5.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入:17,5,则应输出:19,23,29,31,37。本题中的for循环用来判断一个数是否为素数,由于个数只能是k个所以用do-while循环来控制。#include<conio.h>#include<stdio.h>voidfun(intm,intk,intxx[]) {inti,j=0,p=m+1; do {for(i=2;i<p;i++) if(p%i==0)break; if(i>=p)xx[j++]=p; p++;}while(j<k);} main(){intm,n,zz[1000];printf("\npleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m<n;m++)printf("%d",zz[m]);}6.请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串World,然后输入3,则调用该函数后的结果为Word。#include<stdio.h>#include<conio.h>#defineLEN20voidfun(chara[],charb[],intn){inti,k=0;for(i=0;a[i]!='\0';i++)if(i!=n)b[k++]=a[i];b[k]='\0';}main() {FILE*wf;charstrl[LEN],str2[LEN];intn; printf("Enterthestring:\n"); gets(strl);printf("Enterthepositiondeleted:");scanf("%d",&n);fun(strl,str2,n);printf("Thenewstringis:%s\n",str2);wf=fopen("out.dat","w");fun("world",str2,3);fprintf(wf,"%s",str2);fclose(wf);}7.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980。#include<conio.h>#include<stdio.h>intfun(int*s,intt,int*k) {inti,max; max=s[0]; for(i=0;i<t;i++) if(s[i]>max){max=s[i];*k=i;} } main(){inta[10]={876,675,896,101,301,401,980,431,451,777},k;fun(a,10,&k);printf("%d,%d\n",k,a[k]);}8.编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n),例如:若n的值为11时,函数的值为1.833333。#include<stdio.h>floatfun(intn) {inti,sum=1; floats=1; for(i=2;i<=n;i++) {sum=sum+i; s=s+1.0/sum;} returns;} longchsdc(intn) {inti,s;s=0;for(i=0;i<n;i++)s=s+i;return(s);}main(){intn;floats;printf("\nPleaseenterN:");scanf("%d",&n);s=fun(n);printf("theresultis:%f\n",s);}9.编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。p=m!/n!(m-n)!。例如:m=12,n=8时,运行结果为495.000000。#include<conio.h>#include<stdio.h>floatfun(intm,intn) {inti,j,k; longintt=1,s=1,p=1;floatq;for(i=1;i<=m;i++)t*=i;for(j=1;j<=n;j++)s*=j;for(k=1;k<=m-n;k++)p*=k;q=(float)t/s/p;returnq;}main(){printf("\np=%lf\n",fun(12,8));}10.编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。Xn+1=cos(Xn)迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出结果Root=0.739085。#include<conio.h>#include<math.h>#include<stdio.h>floatfun() {floatx0,x1=0; do{x0=x1; x1=cos(x0);}while(fabs(x0-x1)>1e-006);returnx1;}main(){printf("root=%f\n",fun());}11.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如:a数组中的值为该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只有左边的i个元素要置为0(每行总是如此)。用外层for来控制行而内嵌的for来控制每行的左边元素,故而在内嵌for中j最大只能循环到i(即表示出第i行左边的i个元素)。 1 9 7 0 9 7a= 2 3 8 0 0 8 4 5 6,则返回主程序后a数组中的值应为 0 0 0。#include<stdio.h> #include<conio.h> #include<stdlib.h> #defineN5 intfun(inta[][N]) {inti,j; for(i=0;i<N;i++) for(j=0;j<=i;j++) a[i][j]=0; } main() {inta[N][N],i,j; printf("***Thearray****\n");for(i=0;i<N;i++)for(j=0;j<N;j++){a[i][j]=rand()%10; printf("%4d",a[i][j]);}fun(a); printf("Theresult\n");for(i=0;i<N;i++)for(j=0;j<N;j++)printf("%4d",a[i][j]);}12.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为则返回主程序后s的值应为3.375。注意不能重复计算,第一个for循环求出第一列与最后一列的和,第二个for循环求出第一行与最后一行(已除去两头元素),要注意第二个for中起始为1,最后为N-2。#include<stdio.h> #include<conio.h> #include<stdlib.h> #defineN5 doublefun(intw[][N]) {inti,t=0; doubles=0; for(i=0;i<N;i++) {s+=w[i][0]+w[i][N-1];t+=2;} for(i=1;i<N-1;i++) {s+=w[0][i]+w[N-1][i];t+=2;} s=s/t; returns;}main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;doubles;printf("***Thearray***\n");for(i=0;i<N;i++)for(j=0;j<N;j++)printf("%4d",a[i][j]);s=fun(a);printf("***Theresult***\n");printf("Thesumis%lf\n",s);}13.请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。该题用for(i=0;i<N;i++)来控制一列一列地找,而内嵌循环for(j=0;j<M;j++)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在多数题目中都要用到多重循环(一般为二重)。#include"conio.h" #include"stdio.h" #defineM3 #defineN4 voidfun(inttt[M][N],intpp[N]) {inti,j; for(i=0;i<N;i++) {pp=tt[0][i]; for(j=0;j<M;j++) if(tt[j][i]<pp[i])pp[i]=tt[j][i];} } main(){intt[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}};intp[N],i,j,k;printf("theoriginaldatais:\n");for(i=0;i<M;i++)for(j=0;j<N;j++)printf("%6d",t[i][j]);fun(t,p);printf("\ntheresultis:\n");for(k=0;k<N;k++)printf("%4d",p[k]);}14.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:若二维数组中的值为13579299946999813570则函数值为61。该题的第一个for循环是计算矩阵的最上一行和最下一行的总和,第二个for是计算除两头元素以外的最左一列和最右一列的元素的和,最后sum就是周边元素的和。#include<conio.h> #include<stdio.h> #defineM4 #defineN5 intfun(inta[M][N]) {intsum=0,i; for(i=0;i<N;i++)sum+=a[0][i]+a[M-1][i]; for(i=1;i<M-1;i++)sum+=a[i][0]+a[i][N-1]; returnsum;} main(){intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;printf("Theoriginaldatais:\n");for(i=0;i<M;i++) for(j=0;j<N;j++)printf("%6d",aa[i][j]); y=fun(aa); printf("\nThesum:%d\n",y);}

15.请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if语句。#include<conio.h> #include<stdio.h> unsignedfun(unsignedw) {if(w>=10000)returnw%10000; if(w>=1000)returnw%1000; if(w>=100)returnw%100; returnw%10;}main(){unsignedx;printf("enteraintegernumber:");scanf("%u",&x);if(x<10)printf("dataerror!");elseprintf("theresult:%u\n",fun(x));}16.请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0。#include<stdio.h>#include<conio.h>floatfun(floath){longt;h=h*1000;t=(h+5)/10;return(float)t/100;}main(){floata;printf("Entera:");scanf("%f",&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf("Theresult:%6.2f\n",fun(a));}17.请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+i<s+n-1-i来控制)。由于s+i中一个地址,因此要注意把它的内容取出再进行换位。#include<string.h>#include<conio.h>#include<stdio.h>#defineN81

fun(char*s)

{inti=0,t,n=strlen(s);

for(;s+i<s+n-1-i;i++)

{t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}

}main()

{chara[N];

printf("Enterastring:");gets(a);

printf("Theoriginalstringis:");puts(a);

fun(a);

printf("\n");

printf("Thestringaftermodified:");

puts(a);

}18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵:100200300则程序输出100400700400500600200500800700800900300600900这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。#include<stdio.h>

#include<conio.h>intfun(intarray[3][3])

{inti,j,t;

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

for(j=i+1;j<3;j++)

{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}

}main()

{inti,j;

intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};

clrscr();

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

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

printf("%7d",array[i][j]);

printf("\n");}

fun(array);

printf("Convertedarray:\n");

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

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

printf("%7d",array[i][j]);

printf("\n");}

}19.编写函数fun,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。例如:若程序执行时输入字符串为:turbocandborlandc++从键盘上输入字符n,则输出后变为:turbocadborladc++如果输入的字符在字符串中不存在,则字符串照原样输出。注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。

#include<stdio.h>

#include<conio.h>

intfun(chars[],intc)

{inti,k=0;

for(i=0;s[i];i++)

if(s[i]!=c)s[k++]=s[i];

s[k]='\0';

}main()

{staticcharstr[]="turbocandborlandc++";

charch;

clrscr();

printf(":%s\n",str);

printf(":");

scanf("%c",&ch);

fun(str,ch);

printf("str[]=%s\n",str);

}20.编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。注:循环for(i=2;i<k;i++)用于判断k是否为素数,原理是当用2到k-1这间的数去对k求余,如余数为0(即被整除)则表示k不是一个素数。语句if(i>=k)用于判断在上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。

#include<stdio.h>#include<conio.h>#defineMAX100intfun(intlim,intaa[MAX]){inti,j=0,k;for(k=2;k<lim;k++){for(i=2;i<k;i++)if(!(k%i))break;if(i>=k)aa[j++]=k;}returnj;}main(){intlimit,i,sum;intaa[MAX];printf("\ninputaintegernumber:");scanf("%d",&limit);sum=fun(limit,aa);for(i=0;i<sum;i++){if(i%10==0&&i!=0)printf("\n");printf("%5d",aa[i]);}}21.编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,若原来的字符串为CEAedca,则排序后输出为CedcEAa。♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣/*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for()循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for()循环中从1开始,只到num-2即可。*/

#include<string.h>#include<conio.h>#include<stdio.h>intfun(char*s,intnum){inti,j,t;for(i=1;i<num-2;i++)for(j=i+1;j<num-1;j++)if(s[i]<s[j]) {t=s[i];s[i]=s[j];s[j]=t;}}main(){chars[10];printf("输入7个字符的字符串:");gets(s);fun(s,7);printf("\n%s",s);}22.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。#include<stdio.h>#include<stdlib.h>#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){doublemax;inti;max=h->s;for(i=0;i<N;i++)if((h+i)->s>max)max=(h+i)->s;returnmax;}STREC*creat(double*s){STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(i<N){q=(STREC*)malloc(sizeof(STREC));q->s=s[i];i++;p->next=q;p=q;}p->next=0;returnh;}outlist(STREC*h){STREC*p;p=h->next;printf("head");do{printf("->%2.0f",p->s);p=p->next;}while(p!=0);printf("\n\n");}main(){doubles[N]={85,76,69,85,91,72,64,87},max;STREC*h;h=creat(s);outlist(h);max=fun(h);printf("max=%6.1f\n",max);}23.请编写函数fun,该函数的功能是:判断字符串是否为回文若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出N0。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。#include<stdio.h>#defineN80intfun(char*str)

{inti,n=0,fg=1;

char*p=str;

while(*p){n++;p++;}

for(i=0;i<n/2;i++)

if(str[i]==str[n-1-i]);

else{fg=0;break;}

returnfg;}main(){chars[N];printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");}24.请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。#include<stdio.h>#include<string.h>longfun(char*p){longs=0,t;inti=0,j,n=strlen(p),k,s1;if(p[0]=='-')i++;for(j=i;j<=n-1;j++){t=p[j]-'0';s1=10;for(k=j;k<n-1;k++)t*=s1;s+=t;}if(p[0]=='-')return-s;elsereturns;}main(){chars[6];longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%ld\n",n);}25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入:beijingshanghai<CR>(<CR>为回车键),函数将返回shanghai。#include<stdio.h>char*fun(char*s,char*t){char*ss=s,*tt=t;while((*ss)&&(*tt)){ss++;tt++;}if(*tt)return(t);elsereturn(s);}main(){chara[20],b[10],*p,*q;inti;printf("Input1thstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s\n",fun(a,b));}26.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):X/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+...+1×2×3×...×n/3×5×7×(2n+1)程序运行后,如果输入精度0.0005,则程序输出为3.14…。#include<stdio.h>#include<math.h>doublefun(doubleeps){doubles;

floatn,t,pi;

t=1;pi=0;n=1.0;s=1.0;

while((fabs(s))>=eps)

{pi+=s;

t=n/(2*n+1);

s*=t;

n++;}

pi=pi*2;

returnpi;}main(){doublex;printf("Inputeps:");scanf("%lf",&x);printf("\neps=%lf,PI=%lf\n",x,fun(x));}27.请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449#include<conio.h>#include<stdio.h>#defineM100voidfun(intm,int*a,int*n){inti,k;*n=0;for(i=1,k=0;i<=m;i++)if((i%7==0)||(i%11==0)){a[k++]=i;(*n)++;}}main(){intaa[M],n,k;fun(50,aa,&n);for(k=0;k<n;k++)if((k+1)%20==0)printf("\n");elseprintf("%4d",aa[k]);printf("\n");}28.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。#include<stdlib.h>#include<stdio.h>voidfun(inta[],intn,int*max,int*d){inti;

*max=a[0];

*d=0;

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

if(a[i]>*max)

{*max=a[i];

*d=i;}}main(){inti,x[20],max,index,n=10;for(i=0;i<n;i++){x[i]=rand()%50;printf("%4d",x[i]);}printf("\n");fun(x,n,&max,&index);printf("Max=%5d,Index=%4d\n",max,index);}29.请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入abc4Efg,则应输出aBc4EFg。#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++)if(i%2==1&&ss[i]>='a'&&ss[i]<='z')ss[i]=ss[i]-32;}main(){FILE*wf;chartt[81],s[10]="abc4Efg";printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n%s\n",tt);wf=fopen("out.dat","w");fun(s);fprintf(wf,"%s",s);fclose(wf);}30.请编写一个函数fun,它的功能是:求出—个2×M整型二维数组中最大元素的值,并将此值返回调用函数。#defineM4#include<stdio.h>fun(inta[][M]){inti,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];returnmax;}main(){FILE*wf;intarr[2][M]={5,8,3,45,76,-4,12,82};printf("max=%d\n",fun(arr));wf=fopen("out.dat","w");fprintf(wf,"%d",fun(arr));fclose(wf);}31.请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为ABCDEFGl23456,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是246。#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){inti,j=0;for(i=0;s[i]!='\0';i++)if(i%2==0&&s[i]%2==0)t[j++]=s[i];t[j]='\0';}main(){FILE*wf;chars[100],t[100];printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);wf=fopen("out.dat","w");fun("ABCDEFG123456",t);fprintf(wf,"%s",t);fclose(wf);}32.请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为ABCDEFG12345,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是135。#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i<n;i++)if(i%2!=0&&s[i]%2!=0){t[j]=s[i];j++;}t[j]='\0';}main(){chars[100],t[100];printf("\npleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\ntheresultis:%s\n",t);}33.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。例如,字符串中的内容为****A*BC*DEF*C*******,若n的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****,若n的值7,则字符串中的内容仍为****A*BC*DEF*C*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。#include<stdio.h>#include<conio.h>voidfun(char*a,intn){inti=0,k=0;char*p,*t;p=t=a;while(*t)t++;t--;while(*t==’*’){k++;t--;}t++;if(k>n){while(*p&&p<t+n){a[i]=*p;i++;p++;}a[i]='\0';}}main(){FILE*wf;chars[81],*t="****A*BC*DEF*G*******";printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);wf=fopen("out.dat","w");fun(t);fprintf(wf,"%s",t);fclose(wf);}34.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STRUC;intfun(STRUC*a,STRUC*b){inti,j=0,max=a[0].s;for(i=0;i<N;i++)if(max<a[i].s)max=a[i].s;for(i=0;i<N;i++)if(max==a[i].s)b[j++]=a[i];returnj;}main(){STRUCs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};STRUCh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);printf("\n");out=fopen("out45.dat","w");fprintf(out,"%d\n",n);for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i].s);fclose(out);}35.请编写一个函数,用来删除字符串中的所有空格。例如,输入asdafaaz67,则输出为asdafaaz67。#include<stdio.h>

#include<ctype.h>

#include<conio.h>intfun(char*str)

{char*p=str;

for(;*str;str++)

if(*str!='')*p++=*str;

*p='\0';

}main()

{charstr[81];intn;printf("Inputastring:")

gets(str);

puts(str);

fun(str);

printf("***str:%s\n",str);}36.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。例如,若字符串中的内容为*******A*BC*DEF*G****,移动后,字符串中的内容应当是A*BC*DEF*G**********。在编写函数时,不得使用C语言提供的字符串函数。#include<stdio.h>#include<conio.h>voidfun(char*a){inti=0,n=0;char*p;p=a;while(*p=='*'){n++;p++;}while(*p){a[i]=*p;i++;p++;}while(n!=0){a[i]='*';i++;n--;}a[i]='\0';}main(){FILE*wf;chars[81],*t="****A*BC*DEF*G*******";printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);wf=fopen("out.dat","w");fun(t);fprintf(wf,"%s",t);fclose(wf);}37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STRUC;voidfun(STRUC*p){inti;p->ave=0.0;for(i=0;i<N;i++)p->ave=p->ave+p->s[i];p->ave=p->ave/N;}main(){FILE*wf;STRUCs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};inti;fun(&s);printf("The%s'sstudentdata:\n",s.num);for(i=0;i<N;i++)printf("%4.1f\n",s.s[i]);printf("\nave=%7.3f\n",s.ave);wf=fopen("out.dat","w");fprintf(wf,"ave=%7.3f",s.ave);fclose(wf);}38.请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符1,则输出3。注:本题用while()循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss==c))是否为指定的字母,若是则个数加1。这里要注意如何让ss指针向下走动(ss++)。

#include<conio.h>

#include<stdio.h>

#defineM81

intfun(char*ss,charc)

{intnum=0;

while(*ss!='\0'){if(*ss==c)num++;ss++;}

return(num);

}

main()

{chara[M],ch;

printf("\nPleaseenterastrint:");gets(a);

printf("\nPleaseenterachar:");ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));}39.请编写函数fun,该函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{inti,k=0,b[N];

for(i=p+1;i<n;i++)b[k++]=w[i];

for(i=0;i<=p;i++)b[k++]=w[i];

for(i=0;i<n;i++)w[i]=b[i];

}

main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:\n");

for(i=0;i<n;i++)printf("%d",a[i]);

printf("\n\nEnterp:");scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

for(i=0;i<n;i++)printf("%d",a[i]);

printf("\n\n");}40.请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。#include<stdio.h>#include<string.h>#defineN80voidfun(char*w,intm){inti,j;chart;for(i=1;i<=m;i++){t=w[0];for(j=1;w[j]!='\0';j++)w[j-1]=w[j];w[j-1]=t;}}main(){FILE*wf;chara[N]="ABCDEFGHIJK";intm;printf("Theoriginastring:\n");puts(a);printf("\n\nEnterm:");scanf("%d",&m);fun(a,m);printf("\nThestringaftermoving:\n");puts(a);printf("\n\n");wf=fopen("out.dat","w");fun(a,3);fprintf(wf,"%s",a);fclose(wf);}41.请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如,若二维数组中的数据为:WW WW则字符串中的内容应是WSHWSHWSH。 SS SS HHHH#include<stdio.h>#defineM3#defineN4voidfun(char(*s)[N],char*b){inti,j,k=0;for(i=0;i<N;i++)for(j=0;j<M;j++)b[k++]=s[j][i];b[k]='\0';}main(){FILE*wf;chara[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};inti,j;printf("Thematrix:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3c",w[i][j]);printf("\n");}fun(w,a);printf("TheAstring:\n");puts(a);printf("\n\n");wf=fopen("out.dat","w");fprintf(wf,"%s",a);fclose(wf);}42.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数组右上半三角元素中的值乘以m。例如:若m的值为2,a数组中的值为,则返回主程序后a数组中的值应为。/*该题的关键也是在如何表示右上半角,本题采用的是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变。*/

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intm)

{inti,j;

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

for(j=N-1;j>=i;j--)

a[i][j]*=m;

}

main()

{inta[N][N],m,i,j;

printf("****thearray****\n");

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

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

{a[i][j]=rand()%20;printf("%4d",a[i][j]);}

printf("\n");

}

dom=rand()%10;while(m>=3);

printf("m=%4d\n",m);

fun(a,m);

printf("theresult\n");

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

{for(j=0;j<N;j++)printf("%4d",a[i][j]);

printf("\n");}}43.编写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。函数strlen用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p;如果用maz=&p;则只改变了max的指向,它不能传回给实参。因此我们要改变max指向地址中的内容,这才能使得实参ps有正确的值。#include"stdio.h"

#include"string.h"

#include"conio.h"

fun(char(*a)[81],intnum,char**max)

{char*p=a[0];inti;

for(i=1;i<num;i++)

if(strlen(a[i])>strlen(p))p=a[i];

*max=p;

}main()

{charss[10][81],*ps;

intn,i=0;

printf("enterstring:\n");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

fun(ss,n,&ps);

printf("\nmax=%s\n",ps);

}44.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,子字符串为as,则应输出6。注:由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==substr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。因而只要让长串当前位置逐一向后移即可(用for()循环来完成)。

#include"stdio.h"

#include"string.h"

#include"conio.h"intfun(char*str,char*substr)

{inti,n=0,s=strlen(str);

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

if((str[i]==substr[0])&&(str[i+1]==substr[1]))n++;

returnn;

}main()

{charstr[81],substr[3];

intn;

printf("enter1:");

gets(str);

printf("enter2:");

gets(substr);

puts(str);

puts(substr);

n=fun(str,substr);

printf("n=%d\n",n);}45.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。#include<stdio.h>#include<conio.h>voidfun(char*a,intn,inth,inte){inti,j=0;for(i=h;i<n-e;i++)a[j++]=a[i];a[j]=‘\0’;}main(){FILE*wf;chars[81],*t,*f;char*p="****A*BC*DEF*G*******";intm=0,tn=0,fn=0;printf("Enterastring:\n");gets(s);t=f=s;while(*t){t++;m++;}t--;while(*t=='*'){t--;tn++;}while(*f=='*'){f++;fn++;}fun(s,m,fn,tn);printf("Thestringafterdeleted:\n");puts(s);wf=fopen("out.dat","w");fun(p,21,4,7);fprintf(wf,"%s",p);fclose(wf);}46.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论