C语言考题改错及解答.docx
- 文档编号:26990819
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:86
- 大小:61.30KB
C语言考题改错及解答.docx
《C语言考题改错及解答.docx》由会员分享,可在线阅读,更多相关《C语言考题改错及解答.docx(86页珍藏版)》请在冰豆网上搜索。
C语言考题改错及解答
程序改错题
1.给定程序MODI1.C
中函数的功能是:
用递归算法计算斐波拉契数列中第n项的值。
从第1项起,斐波拉契数列为:
1、1、2、3、5、8、13、21、……。
例如:
若给n输入7,该项的斐波拉契数值为13。
请改正程序中的错误,使它能得出正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
longfun(intg)
{/**********found**********/
switch(g);//去掉;
{case0:
return0;
/**********found**********/
case1;case2:
return1;}//case1:
return(fun(g-1)+fun(g-2));}
main(){longfib;intn;
printf("Inputn:
");scanf("%d",&n);printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n",fib);}
2.给定程序MODI1.C中函数fun的功能是:
将p所指字符串中的所有字符复制到b中,要求复制三个字符之后插入一个空格。
voidfun(char*p,char*b)
{inti,k=0;
while(*p){i=1;
while(i<=3&&*p){
/**********found**********/
b[k]=p;//b[k]=*p
k++;p++;i++;}
if(*p){
/**********found**********/
b[k++]="";}//b[k++]=’’;
}b[k]='\0';}
main(){chara[80],b[80];
printf("Enterastring:
");gets(a);
printf("Theoriginalstring:
");puts(a);
fun(a,b);
printf("\nThestringafterinsertspace:
");puts(b);printf("\n\n");}
3..给定程序MODI1.C中函数fun的功能是:
找出一个大于形参m且紧随m的素数,并作为函数值返回。
intfun(intm)
{inti,k;
for(i=m+1;;i++){
for(k=2;k
/**************found**************/
if(i%k!
=0)//if(i%k==0)
break;
/**************found**************/
if(k
return(i);}}
main(){intm;m=fun(40);printf("%d",m);}
4..给定程序MODI1.C中函数fun的功能是:
删除p所指字符串中的所空白字符(包括Tab字符、回车符及换行符)。
输入字符串用’#’结束输入
fun(char*p)
{inti,t;charc[80];
/************found************/
For(i=0,t=0;p[i];i++)//for
if(!
isspace(*(p+i)))c[t++]=p[i];
/************found************/
c[t]="\0";//c[t]=’\0’;
strcpy(p,c);}
main(){charc,s[80];inti=0;
printf("Inputastring:
");
c=getchar();
while(c!
='#')
{s[i]=c;i++;c=getchar();}
s[i]='\0';fun(s);puts(s);}
5..给定程序MODI1.C中函数fun的功能是:
比较两个字符串,将长的那个字符串的首地址作为函数值返回.
/**********found**********/
charfun(char*s,char*t)
/*改为char*fun(char*s,char*t)*/
{intsl=0,tl=0;char*ss,*tt;
ss=s;tt=t;
while(*ss)
{sl++;
/**********found**********/
(*ss)++;//ss++
}while(*tt){tl++;
/**********found**********/
(*tt)++;}//tt++
if(tl>sl)returnt;
elsereturns;}
main()
{chara[80],b[80],*p,*q;inti;
printf("\nEnterastring:
");gets(a);
printf("\nEnterastringagain:
");gets(b);
printf("Thelonger
is:
\n\"%s\"\n",fun(a,b));}
6..给定程序MOID1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。
typedefstructaa
{intdata;structaa*next;
}NODE;
NODE*Creatlink(intn,intm)
{NODE*h=NULL,*p,*s;
inti;
/**********found***********/
p=(NODE)malloc(sizeof(NODE));//(NODE*)
h=p;
p->next=NULL;
for(i=1;i<=n;i++)
{s=(NODE*)malloc(sizeof(NODE));
s->data=rand()%m;s->next=p->next;
p->next=s;p=p->next;}
/**********found***********/
returnp;}//returnh
outlink(NODE*h)
{NODE*p;p=h->next;
printf("\n\nTHELIST:
\n\nHEAD");
while(p)
{printf("->%d",p->data);
p=p->next;}
printf("\n");}
main(){NODE*head;
head=Creatlink(8,22);
outlink(head);}
7..给定程序MODI1.C中函数fun的功能是:
利用插入排序对字符串的字符按从小到大的顺序进行排序。
插入法的基本算法是:
先对字符串中的头两个元素进行排序。
然后把第三个字符插入到前两字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。
待排序的字符串已在主函数中赋予。
#defineN80
voidinsert(char*aa)
{inti,j,n;charch;
/**********found**********/
n=strlen[aa];//n=strlen(aa)
for(i=1;i /**********found**********/ c=aa[i];//ch=aa[i] j=i-1; while((j>=0)&&(ch {aa[j+1]=aa[j];j--;} aa[j+1]=ch;}} main() {chara[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; inti; printf("Theoriginalstring: %s\n",a); insert(a); printf("Thestringaftersorting: %s\n\n",a);} 8.给定程序MOID1.C中函数fun的功能是: 求出两个非零整数的最大公改为returnh约数,并作为函数值返回。 例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27. #include intfun(inta,intb) {intr,t; if(a /************found************/ t=a;b=a;a=t;}//t=a;a=b;b=t r=a%b; while(r! =0) {a=b;b=r;r=a%b;} /************found************/ return(a);}//return(b); main() {intnum1,num2,a; printf("Inputnum1num2: "); scanf("%d%d",&num1,&num2); printf("num1=%dnum2=%d\n\n",num1,num2); a=fun(num1,num2); printf("Themaxcommondivisoris%d\n\n",a);} 9.给定程序MODI1.C中函数fun的功能是: 根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。 例如,若输入2则输出 12 24 若输入4则输出: 1234 2468 36912 481216 #defineM10 inta[M][M]={0}; /**************found**************/ fun(int**a,intm)//fun(int(*a)[10],intm) {intj,k; for(j=0;j for(k=0;k /**************found**************/ a[j][k]=k*j;//a[j][k]=(k+1)*(j+1) main(){inti,j,n; printf("Entern: "); scanf("%d",&n); fun(a,n); for(i=0;i {for(j=0;j printf("%4d",a[i][j]); printf("\n");}} 10.给定程序MODI1.C中函数fun的功能是: 计算S=f(-n)+f(-n+1)+…+f(0)+f (1)+…+f(n)的值。 例如: 当n为5时,函数值为: 10.407143。 f(x)函数定义如下: ┌(x+1)/(x-2)x>0且x≠2 f(x)=┤0x=0或x=2 └(x-1)/(x-2)x<0 /************found************/ f(doublex)//doublef(doublex) {if(x==0.0||x==2.0) return0.0; elseif(x<0.0) return(x-1)/(x-2); else return(x+1)/(x-2);} doublefun(intn) {inti;doubles=0.0,y; for(i=-n;i<=n;i++) {y=f(1.0*i);s+=y;} /************found************/ returns}//returns; main(){printf("%f\n",fun(5));} 11.给定程序MOID1.C中函数fun的功能是: 找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。 #include #defineN100 intfun(int*s,intn) {inti,j,k,a,b,c;j=0; for(i=100;i /**************found**************/ k=n;//k=i; a=k%10;k/=10; b=k%10;k/=10; /**************found**************/ c=k%10//c=k%10; if(a==b&&a==c)s[j++]=i;} returnj;} main(){inta[N],n,num=0,i; do {printf("\nEntern(<=1000): "); scanf("%d",&n);} while(n>1000); num=fun(a,n); printf("\n\nTheresult: \n"); for(i=0;i printf("\n\n");} 12.给定程序MODI1.C中函数fun的功能是: 交换主函数中两个变量的值。 例如: 若变量a中的值原为8,b中的值为3。 程序运行后a中的值为3,b中的值为8。 /*********found**********/ intfun(intx,inty)//intfun(int*x,int*y) {intt; /*********found**********/ t=x;x=y;y=t;}//t=*x;*x=*y;*y=t main(){inta,b;a=8;b=3; fun(&a,&b); printf("%d,%d\n",a,b);} 13.(45,50)给定程序MODI1.C中函数fun的功能是: 从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。 高位仍在高位,低位仍在低位。 例如,当s中的数为: 7654321,t中的数为: 642。 #include /************found************/ voidfun(longs,longt)//voidfun(longs,long*t) {longsl=10; s/=10; *t=s%10; /************found************/ while(s<0)//while(s>0) {s=s/100; *t=s%10*sl+*t; sl=sl*10;}} main(){longs,t; printf("\nPleaseenters: "); scanf("%ld",&s); fun(s,&t);printf("Theresultis: %ld\n",t);} 14.给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。 函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来并且作为函数值返回。 #include #include typedefstructaa {intdata;structaa*next;}NODE; intfun(NODE*h) {intsum=0; NODE*p; /***********found**********/ p=h;//p=h->next; while(p) {if(p->data%2==0) sum+=p->data; /***********found**********/ p=h->next;}//p=p->next returnsum;} NODE*creatlink(intn) {NODE*h,*p,*s,*q; inti,x; h=p=(NODE*)malloc(sizeof(NODE)); for(i=1;i<=n;i++) {s=(NODE*)malloc(sizeof(NODE)); s->data=rand()%16; s->next=p->next;p->next=s; p=p->next;}p->next=NULL; returnh;} outlink(NODE*h,FILE*pf) {NODE*p; p=h->next; fprintf(pf,"\n\nTHELIST: \n\nHEAD"); while(p) {fprintf(pf,"->%d",p->data);p=p->next;} fprintf(pf,"\n");} outresult(ints,FILE*pf) {fprintf(pf,"\nThesumofevennumbers: %d\n",s);} main(){NODE*head;inteven; clrscr(); head=creatlink(12); head->data=9000; outlink(head,stdout); even=fun(head); printf("\nTheresult: \n"); outresult(even,stdout);} 15.给定程序MODI1.C中函数fun的功能是: 求k! (k<13),所求阶乘的值作为函数值返回。 例如: 若k=10,则应输出: 3628800。 longfun(intk) {/************found************/ ifk>0//if(k>0) return(k*fun(k-1)); /************found************/ elseif(k=0)//elseif(k==0) return1L;} main(){intk=10; clrscr(); printf("%d! =%ld\n",k,fun(k));} 16.给定程序MODI1.C中fun函数的功能是: 将p所指字符串中每个单词的最后一个字母改成大写。 (这里的”单词”是指由空格隔开的字符串)。 例如,若输入”Iamastudenttotaketheexamination.”,则应输出”IaMAstudenTtOtakEthEexamination.” #include #include #include voidfun(char*p) {intk=0; for(;*p;p++) if(k) {/**********found***********/ if(p=='')/*改为if(*p==’’)*/ {k=0; /**********found***********/ *(p-1)=toupper(*(p-1))/*改为添加;*/ }} elsek=1;} main(){charchrstr[64]; intd;clrscr(); printf("\nPleaseenteranEnglishsentence within63letters: "); gets(chrstr);d=strlen(chrstr); chrstr[d]=''; chrstr[d+1]=0; printf("\n\nBeforechanging: \n%s",chrstr); fun(chrstr); printf("\nAfterchanging: \n%s",chrstr);} 17.给定程序MODI1.C中函数fun的功能是: 求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。 例如: 当字符串中的内容为: ”abcdabfabcdx”,t中的内容为: ”ab”时,输出结果应是: abcdx。 当字符中内容为: ”abcdabfabcdx”,t中的内容为: ”abd”时,则程序输出未找到信息: notbefound! 。 char*fun(char*s,char*t) {char*p,*r,*a; /************found************/ a=Null;//a=NULL while(*s) {p=s;r=t; while(*r) /************found************/ if(r==p){r++;p++;} //if(*r==*p){r++;p++;} elsebreak; if(*r=='\0')a=s; s++;}returna;} main(){chars[100],t[100],*p; clrscr(); printf("\nPleaseenterstringS: "); scanf("%s",s); printf("\nPleaseentersubstringt: "); scanf("%s",t);p=fun(s,t); if(p) printf("\nTheresultis: %s\n",p); elseprintf("\nNotfound! \n");} 18.给定程序MODI1.C中函数fun的功能是: 求整数x的y次方的低3位值。 例如: 整数5的6次方为12625,此值的低3位值为625。 #include longfun(intx,inty,long*p) {inti; longt=1; /**************found**************/ for(i=1;i t=t*x;*p=t; /**************found**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 考题 改错 解答