上机考试题参考答案1、编一个函数fun(char*s),函数的功能是把字符串中的内容逆置。例子如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:gfedcba。试题程序:#defineN10fun(char*s){inti=0,t,n=strlen(s);for(;s+is+n-1-i;i++){t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}}main(){chara[N];clrscr();printf(Enterastring:);gets(a);printf(Theoriginalstringis:);puts(a);fun(a);printf(\n);printf(Thestringaftermodified:);puts(a);}2、写程序,实现矩阵(3行3列)的转置(即行列互换)。intfun(intarray[3][3]){inti,j,t;for(i=0;i2;i++)for(j=i+1;j3;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;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}fun(array);printf(Convertedarray:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}}3、请编一个函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。试题程序。fun(int*a,intn,int*odd,int*even){inti;*even=0;*odd=0;for(i=0;in;i++)if(!(a[i]%2))*even+=a[i];else*odd+=a[i];}main(){inta[6]={1,9,2,3,11,6},i,n=6,odd,even;clrscr();printf(Theoriginaldatais:\n);for(i=0;in;i++)printf(%5d,*(a+i));printf(\n\n);fun(a,n,&odd,&even);printf(Thesumofoddnumbers:%d\n,odd);printf(Thesumofevennumber:%d\n,even);}4、要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。试题程序。#defineVSIZE20intfun(intlist[],intsize){inti,j=0;for(i=1;isize;i++)if(list[i]list[j])j=i;returnj;}main(){inti;intvector[VSIZE];clrscr();for(i=0;iVSIZE;i++){vector[i]=rand();printf(Vector[%d]=%6d\n,i,vector[i]);}i=fun(vector,VSIZE);printf(\nMininum:vector[%d]=%6d\n,i,vector[i]);}5、请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。试题程序。floatfun(floath){longt;h=h*1000;t=(h+5)/10;return(float)t/100;}main(){floata;clrscr();printf(Entera:);scanf(%f,&a);printf(Theoriginaldatais:);printf(%f\n\n,a);printf(Theresult:%6.2f\n,fun(a));}6、编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。若程序执行时,输入字符串为:turbocandBorlandc++从键盘上输入字符:n,则输出后变为:turbocadborladc++如果输入的字符串不存在,则字符串照原样输出。试题程序。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);}7、请编写一个unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n=2)位的整数,函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;w值为923则函数返回23。试题程序。unsignedfun(unsignedw){if(w=10000)returnw%10000;if(w=1000)returnw%1000;if(w=100)returnw%100;returnw%10;}main(){unsignedx;printf(enteraunsignedintegernumber:);scanf(%u,&x);if(x10)printf(dataerror!);elseprintf(theresult:%u\n,fun(x));}8、编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。试题程序。#defineMAX100intfun(intlim,intaa[MAX]){inti,j=0,k;for(k=2;klim;k++){for(i=2;ik;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;isum;i++){if(i%10==0&&i!=0)printf(\n);printf(%5d,aa[i]);}}9、请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。试题程序。#defineM4#defineN5intfun(inta[M][N]){intsum=0,i;for(i=0;iN;i++)sum+=a[0][i]+a[M-1][i];for(i=1;iM-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;clrscr();printf(Theoriginaldatais:\n);for(i=0;iM;i++){for(j=0;jN;j++)printf(%6d,aa[i][j]);printf(\n);}y=fun(aa);printf(\nThesum:%d\n,y);printf(\n);}10、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。试题程序。intfun(char*s,intnum){inti,j,t;for(i=1;inum-2;i++)for(j=i+1;jnum-1;j++)if(s[i]s[j]){t=s[i];s[i]=s[j];s[j]=t;}}main(){chars[10];clrscr();printf(输入7个字符的字符串:);gets(s);fun(s,7);printf(\n%s,s);}11、请编一函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。试题程序。#defineM3#defineN4voidfun(inttt[M][N],intpp[N]){inti,j;for(i=0;iN;i++){pp[i]=tt[0][i];for(j=0;jM;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;clrscr();printf(theoriginaldatais:\n);for(i=0;iM;i++){for(j=0;jN;j++)printf(%6d,t[i][j]);printf(\n);}fun(t,p);printf(\ntheresultis:\n);for(k=0;kN;k++)printf(%4d,p[k]);printf(\n);}12、写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意:用****作为结束输入的标志。)试题程序。fun(char(*a)[81],intnum,char**max){char*p=a[0];inti;for(i=1;inum;i++)if(strlen(a[i])strlen(p))p=a[i];*max=p;}main(){charss[10][81],*ps;intn,i=0;clrscr();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);}13、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。试题程序。#defineM20voidfun(intbb[],int*n,inty){inti,j=0;for(i=0;i*n;i++)if(bb[i]!=y)bb[j++]=bb[i];*n=j;}main(){intaa[M],n,y,k;printf(\npleaseentern:);scanf(%d,&n);printf(\nenter%dpositivenumber:\n,n);for(k=0;kn;k++)scanf(%d,&aa[k]);printf(theoriginaldatais:\n);for(k=0;kn;k++)printf(%5d,aa[k]);printf(\nenteranumbertodele