C语言上机题库百科园第6章2南信大.docx
- 文档编号:18001955
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:28
- 大小:20.44KB
C语言上机题库百科园第6章2南信大.docx
《C语言上机题库百科园第6章2南信大.docx》由会员分享,可在线阅读,更多相关《C语言上机题库百科园第6章2南信大.docx(28页珍藏版)》请在冰豆网上搜索。
C语言上机题库百科园第6章2南信大
程序设计
/*请编写函数fun,该函数的功能是:
判断字符串是否为回文,若是则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。
回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串123312就不是回文。
试题程序:
*/
#include
#defineN80
intfun(charstr[])
{
/***************Begin************/
/***************End************/
}
voidmain()
{
chars[N];
FILE*out;
chartest[][80]={"1234321","123421","123321","abcdCBA"};
inti;
printf("Enterastring:
");
gets(s);
printf("\n\n");
puts(s);
if(fun(s))
printf("YES\n");
else
printf("NO\n");
/************************************/
out=fopen("debug\\out12.dat","w");
for(i=0;i<4;i++)
if(fun(test[i]))
fprintf(out,"YES\n");
else
fprintf(out,"NO\n");
fclose(out);
/************************************/
}
【参考代码】
intfun(charstr[])
{
inti,n=0,fg=1,j=0;
while(str[j])
{
n++;
j++;
}
for(i=0;i /*循环比较字符*/ if(str[i]==str[n-1-i]); /*相同,什么都不作*/ else /*不同,直接跳出循环*/ { fg=0; break; } returnfg; } /*请编写函数fun,该函数的功能是: 统计一行字符串中单词的个数,作为函数值返回。 一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。 试题程序: */ #include #include #defineN80 intfun(char*s) { /************Begin*************/ /*************End*************/ } voidmain() { FILE*wf; charline[N]; intnum=0; printf("Enterastring: \n"); gets(line); num=fun(line); printf("Thenumberofwordis: %d\n\n",num); /******************************/ wf=fopen("d: \\out19.dat","w"); fprintf(wf,"%d",fun("Thisisabigcar")); fclose(wf); /*****************************/ } 【参考代码】 inti,j=0; for(i=0;s[i]! ='\0';i++) if(s[i]! =''&&(s[i+1]==''||s[i+1]=='\0')) /*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/ j++; returnj;/*返回单词个数*/ /*假定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 除了字符串前导的*号之外,将串中其他*号全部删除。 在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。 试题程序: */ #include #include voidfun(char*a) { /************Begin*************/ /************End**************/ } voidmain() { chars[81]; FILE*in,*out; inti; printf("Enterastring: \n"); gets(s); fun(s); printf("Thestringafterdeleted: \n"); puts(s); /******************************/ in=fopen("in21.dat","r"); out=fopen("debug\\out21.dat","w"); for(i=0;i<8;i++) { fscanf(in,"%s",s); fun(s); fprintf(out,"%s\n",s); } fclose(in); fclose(out); /******************************/ } 【参考代码】 inti=0; char*p=a; while(*p&&*p=='*') { a[i]=*p;i++;p++; } while(*p) { if(*p! ='*') { a[i]=*p;i++; } p++; } a[i]='\0'; /*假定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 将字符串中的前导*号全部删除,中间和后面的*号不删除。 例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include voidfun(char*a) { /************Begin**************/ /************End*************/ } voidmain() { FILE*wf,*in; inti; chars[81],t[81]="****A*BC*DEF*G*******"; printf("Enterastring: \n"); gets(s); fun(s); printf("Thestringafterdeleted: \n");puts(s); /******************************/ in=fopen("in18.dat","r"); wf=fopen("debug\\out18.dat","w"); for(i=0;i<8;i++) { fscanf(in,"%s",t); fun(t); fprintf(wf,"%s\n",t); } fclose(in); fclose(wf); /*****************************/ } 【参考代码】 char*p=a; while(*p=='*') p++; /*指针p指向字符串第一个字母*/ for(;*p! ='\0';p++,a++) *a=*p; *a='\0'; /*请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。 例如,字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include #defineN81 voidfun(char*s) { /************Begin*************/ /************End**************/ } voidmain() { chara[N]; FILE*out; printf("Enterastring: "); gets(a); printf("Theoriginalstringis: "); puts(a); fun(a); printf("\n"); printf("Thestringaftermodified: "); puts(a); strcpy(a,"HelloWorld! ThisisafirstCprogram! "); fun(a); /******************************/ out=fopen("d: \\out17.dat","w"); fprintf(out,"%s",a); fclose(out); /******************************/ } 【参考代码】 charch; inti,m,n; i=0; m=n=strlen(s)-1; while(i<(n+1)/2) { ch=s[i]; s[i]=s[m]; s[m]=ch; i++; m--; } /*请编写函数fun,其功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是: 将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位依次放在c数的百位和个位上。 例如,当a=45,b=12,调用该项函数后,c=4152。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include voidfun(inta,intb,long*c) { /************Begin************/ /************End***************/ } voidmain() { inta,b; longc; FILE*out; printf("Inputa,b: "); scanf("%d%d",&a,&b); fun(a,b,&c); printf("Theresultis: %ld\n",c); /******************************/ out=fopen("debug\\out20.dat","w"); for(a=10;a<20;a++) { fun(a,109-a,&c); fprintf(out,"%d\n",c); } fclose(out); /******************************/ } 【参考代码】 *c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10; 程序改错 /*下列给定程序中函数fun的功能是: 先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 例如,当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include #include #include voidfun(char*s,char*t) { inti,s1; s1=strlen(s); for(i=0;i /**********ERROR**********/ t[i]=s[s1-1]; for(i=0;i t[s1+i]=s[i]; /**********ERROR**********/ t[2*s1]="\0"; } voidmain() {chars[100],t[100]; printf("\nPleaseenterstrings: "); scanf("%s",s); fun(s,t); printf("Theresultis: %s\n",t); } 【参考答案】 t[i]=s[s1-1-i]; t[i]=s[s1-i-1i]; 【参考答案】 t[2*s1]='\0'; t[2*s1]=0; /*下列给定程序中,函数fun的功能是: 在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上, 并将该字符前的原字符向后顺序移动。 例如,调用fun函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为eABCDFGH。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include /**********ERROR**********/ fun(char*p) {charmax,*q;inti=0; max=p[i]; while(p[i]! =0) {if(max { /**********ERROR**********/ p=q+i;max=p[i]; } i++; } /**********ERROR**********/ while(q {*q=*(q-1); q--; } p[0]=max; } voidmain() {charstr[80]; printf("Enterastring: ");gets(str); printf("\nTheoriginalstring: "); puts(str); fun(str); printf("\nThestringaftermoving: "); puts(str);printf("\n\n"); } 【参考答案】 voidfun(char*p) 【参考答案】 q=p+i; q=i+p; 【参考答案】 while(q>p) while(p /*下列给定程序中,函数fun的功能是: 计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。 请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include #include #include #include #defineN80 intfun(char*s,char*t) {intn; char*p,*r; n=0; p=&s[0]; /**********ERROR**********/ *r=t; while(*p) { if(*r==*p) { r++; if(*r=='\0') { n++; /**********ERROR**********/ 【1】; } } p++; } returnn; } voidmain() {chara[N],b[N];intm; system("CLS"); printf("\nPleaseenterstringa: "); gets(a); printf("\nPleaseentersubstringb: "); gets(b); m=fun(a,b); m=printf("\nTheresultis: m=%d\n",m); } 【参考答案】 r=t; 【参考答案】 r=t; r=&t[0]; /*下列给定程序中,函数fun的功能是: 从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回, 平均分存放在形参aver所指的存储单元中。 例如输入8名学生的成绩: 80.5607290.59851.58864 则低于平均分的学生人数为4(平均分为75.5625)。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include #include #defineN20 intfun(float*s,intn,float*aver) {floatave,t=0.0; intcount=0,k,i; for(k=0;k /**********ERROR**********/ t=s[k]; ave=t/n; for(i=0;i if(s[i] /**********ERROR**********/ *aver=&ave; returncount; } voidmain() {floats[30],aver; intm,i; printf("\nPleaseenterm: "); scanf("%d",&m); printf("\nPleaseenter%dmark: \n",m); for(i=0;i printf("\nThenumberofstudents: %d\n",fun(s,m,&aver)); printf("Ave=%f\n",aver); } 【参考答案】 t+=s[k]; t=t+s[k]; 【参考答案】 *aver=ave; /*下列给定程序中,函数fun的功能是: 实现两个整数的交换。 例如,给a和b分别输入60和65,输出为: a=65b=60 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include #include /**********ERROR**********/ voidfun(inta,b) {intt; /**********ERROR**********/ t=b;b=a;a=t; } voidmain() {inta,b; printf("Entera,b: "); scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%db=%d\n",a,b); } 【参考答案】 voidfun(int*a,int*b) 【参考答案】 t=*b;*b=*a;*a=t; t=*b,*b=*a,*a=t; t=*a;*a=*b;*b=t; t=*a,*a=*b,*b=t; /*给定程序中函数fun的功能是: 把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。 例如,输入的数为: 551234, 输出结果应当是: a=55.0,b=34.0,c=12.0。 请改正程序中的错误,使它能得出正确结果。 给定源程序: */ #include voidfun(float*a,float*b,float*c) { /**********ERROR**********/ float*k; if(*a<*b) {k=*a;*a=*b;*b=k;} /**********ERROR**********/ if(*a>*c) {k=*c;*c=*a;*a=k;} if(*b<*c) {k=*b;*b=*c;*c=k;} } intmain() {floata,b,c; printf("Inputabc: ");scanf("%f%f%f",&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); return0; } 【参考答案】 floatk; 【参考答案】 *a<*c *c>*a /*给定程序中函数fun的功能是: 把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。 例如,输入的数为: 551234, 输出结果应当是: a=55.0,b=34.0,c=12.0。 请改正程序中的错误,使它能得出正确结果。 给定源程序: */ #include voidfun(float*a,float*b,float*c) { /**********ERROR**********/ float*k; if(*a<*b) {k=*a;*a=*b;*b=k;} /**********ERROR**********/ if(*a>*c) {k=*c;*c=*a;*a=k;} if(*b<*c) {k=*b;*b=*c;*c=k;} } intmain() {floata,b,c; printf("Inputabc: ");scanf("%f%f%f",&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); return0; } 【参考答案】 p=j; 【参考答案】 p=i; 程序填空 /*给定程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 题库 百科 南信大