全国计算机二级C语言改错题.docx
《全国计算机二级C语言改错题.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言改错题.docx(104页珍藏版)》请在冰点文库上搜索。
全国计算机二级C语言改错题
2011年9月上机改错题
1、
#include
#include
typedefstructaa
{intdata;
structaa*next;
}NODE;
intfun(NODE*h)
{intmax=-1;
NODE*p;
/***********found**********/
p=h;p=h->next;/*h指向的是头节点,题目要求不要头节点,那么我们从第2个结点开始*/
while(p)
{if(p->data>max)
max=p->data;
/***********found**********/
p=h->next;p=p->next;/*链表中的指针后移*/
}
returnmax;
}
outresult(ints,FILE*pf)
{fprintf(pf,"\nThemaxinlink:
%d\n",s);}
NODE*creatlink(intn,intm)
{NODE*h,*p,*s;
inti;
h=p=(NODE*)malloc(sizeof(NODE));h->data=9999;
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;
}
p->next=NULL;
returnh;
}
outlink(NODE*h,FILE*pf)
{NODE*p;
p=h->next;
fprintf(pf,"\nTHELIST:
\n\nHEAD");
while(p)
{fprintf(pf,"->%d",p->data);p=p->next;}
fprintf(pf,"\n");
}
main()
{NODE*head;intm;
head=creatlink(12,100);
outlink(head,stdout);
m=fun(head);
printf("\nTHERESULT:
\n");outresult(m,stdout);
}
2、
#include
doublefun(intm)
{doubley=1.0;
inti;
/**************found**************/
for(i=2;i/**************found**************/
y-=1/(i*i);y-=1.0/(i*i);/*i是整型等号右边都是整型,得到结果也是整型,我们想要的是实型所以,要求1改成1.0*/
return(y);
}
main()
{intn=5;
printf("\nTheresultis%lf\n",fun(n));
}
3
#include
#include
char*fun(chartt[])
{
inti;
for(i=0;tt[i];i++)
/**********found***********/
if(('a'<=tt[i])||(tt[i]<='z'))if(('a'<=tt[i])&&(tt[i]<='z'))/*很明显,这个地方是并且,用&&*/
/**********found***********/
tt[i]+=32;tt[i]-=32;/*小写变大写是减去32*/
return(tt);
}
main()
{
chartt[81];
printf("\nPleaseenterastring:
");
gets(tt);
printf("\nTheresultstringis:
\n%s",fun(tt));
}
4
#include
#include
floatfun(floatnum)
{ints;
floatn,t,pi;
t=1;pi=0;n=1;s=1;
/**************found**************/
while(t>=num)while(fabs(t)>=num)/*这里的t可能会是负数,所以要取绝对值用函数fabs()来实现*/
{
pi=pi+t;
n=n+2;
s=-s;
/**************found**************/
t=s%n;t=s/n;/*这里对应题目是除法*/
}
pi=pi*4;
returnpi;
}
main()
{floatn1,n2;
printf("Enterafloatnumber:
");
scanf("%f",&n1);
n2=fun(n1);
printf("%6.4f\n",n2);
}
5
#include
intfun(int*x,inty)
{
intt;
/**************found**************/
t=x;x=y;t=*x;*x=y;/*这里的x是指针变量,可以通过间址运算符*来运算,*x就是变量a*/
/**************found**************/
return(y);returnt;/*返回的值给变量b,应是原来a的内容,也就是*x的内容*/
}
main()
{
inta=3,b=8;
printf("%d%d\n",a,b);
b=fun(&a,b);
printf("%d%d\n",a,b);
}
6
#include
voidfun(longs,long*t)
{intd;
longsl=1;
/************found************/
t=0;*t=0;/*t是指针变量*/
while(s>0)
{d=s%10;
/************found************/
if(d%2==0)if(d%2!
=0)/*这里应该是留下奇数*/
{*t=d*sl+*t;
sl*=10;
}
s/=10;
}
}
main()
{longs,t;
printf("\nPleaseenters:
");scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
7
#include
intfun(inta,intb)
{intr,t;
if(a
/************found************/
t=a;b=a;a=t;
}
r=a%b;
while(r!
=0)
{a=b;b=r;r=a%b;}
/************found************/
return(a);return(b);/*这里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("Themaximuncommondivisoris%d\n\n",a);
}
8
#include
/**************found**************/
fun(intn)doublefun(intn)/*根据函数被使用的类型,或者返回值得到函数类型是double*/
{inta=2,b=1,c,k;
doubles=0.0;
for(k=1;k<=n;k++)
{s=s+1.0*a/b;
/**************found**************/
c=a;a+=b;b+=c;c=a;a+=b;b=c;/*根据题目要求来,看出来b=c*/
}
return(s);
}
main()
{intn=5;
printf("\nThevalueoffunctionis:
%lf\n",fun(n));
}
9
#include
#defineN10
intfindmid(inta,intb,intc)
{intt;
t=(a>b)?
(b>c?
b:
(a>c?
c:
a)):
((a>c)?
a:
((b>c)?
c:
b));
/**********found**********/
returnb;retrunt;/*算了好久,算出来的t,当然是返回t啦*/
}
voidfun(intx[])
{inti,a,b,c,t[N];
/**********found**********/
for(i=0;ifor(i=0;i{a=t[i];b=t[i+1];c=t[i+2];
/**********found**********/
t[i+1]=findmid(a,b,c);x[i+1]=findmid(a,b,c);/*最终结果要放在x数组中*/
}
}
main()
{inti,x[N]={6,5,7,23,18,5,8,21,45,38};
for(i=0;iprintf("\n");
fun(x);
for(i=0;iprintf("\n");
}
10
#include
/************found************/
voidfun(longs,longt)voidfun(longs,long*t)/*这里的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);
}
11
#include
intfun(intm)
{intk=2;
while(k<=m&&(m%k))
/************found************/
k++k++;/*语句少了分号*/
/************found************/
if(m=k)if(m==k)/*这里是比较,不是赋值,要用==是两个等号*/
return1;
elsereturn0;
}
main()
{intn;
printf("\nPleaseentern:
");scanf("%d",&n);
if(fun(n))printf("YES\n");
elseprintf("NO!
\n");
}
12
#include
intfun(intm)
{inti,k;
for(i=m+1;;i++){
for(k=2;k
/**************found**************/
if(i%k!
=0)if(i%k==0)/*这里是能被整除的时候break*/
break;
/**************found**************/
if(k=i)/*内层的for循环的条件不是break结束也就是从来没有被整除过,最后得到的是素数*/
return(i);
}
}
voidmain()
{
intn;
n=fun(20);
printf("n=%d\n",n);
}
13
#include
intfun(doublex[],intn)
{
/************found************/
intj,c=0,doublexa=0.0;intj,c=0;doublexa=0.0;/*定义完一种类型之后,应该以分号结束*/
for(j=0;jxa+=x[j]/n;
printf("ave=%f\n",xa);
for(j=0;j/************found************/
if(x[j]=>xa)if(x[j]>=xa)/*大于等于的符号怎么写,一定看清楚了哦*/
c++;
returnc;
}
main()
{doublex[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};
printf("%d\n",fun(x,8));
}
14
#include
voidfun(char*s)
{inti,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
/**********found**********/
s[j]=s[i];s[j++]=s[i];/*s[j]被赋值了之后,j要++运算,以便s[j]是下一个元素*/
/**********found**********/
s[j]="\0";s[j]=’\0’;/*这里是字符0不是字符串0*/
}
main()
{charitem[80];
printf("\nEnterastring:
");gets(item);
printf("\n\nThestringis:
\"%s\"\n",item);
fun(item);
printf("\n\nThestringofchangingis:
\"%s\"\n",item);
}
15
#include
#include
#defineM10
inta[M][M]={0};
/**************found**************/
voidfun(int**a,intm)voidfun(inta[M][M],intm)/*这里定义变量能够接受具体二维数组a[M][M],如果不知道怎么定义,直接照抄数组原来的定义都可以*/
{intj,k;
for(j=0;jfor(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;jprintf("%4d",a[i][j]);
printf("\n");
}
}
16
#include
longfun(intg)
{
/**********found**********/
switch(g);switch(g)/*switch()后面没有分号*/
{case0:
return0;
/**********found**********/
case1;case2:
return1;case1:
case2:
return1;/*case1后面应该冒号case之后必须有冒号*/
}
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);
}
17
#include
doublefun(doubleq)
{intn;doubles,t;
n=2;
s=2.0;
while(s<=q)
{
t=s;
/************found************/
s=s+(n+1)/n;s=s+(n+1.0)/n;/*这里的n是整形,(n+1)/n得到的结果也肯定是整形,而我们要得到实型/
n++;
}
printf("n=%d\n",n);
/************found************/
returns;returnt;/*如果是returns根据循环条件会多加了一项所以返回时加最后之前的t*/
}
main()
{
printf("%f\n",fun(50));
}
18
#include
intfun(intk)
{intm=0,mc=0;
while((k>=2)&&(mc<10))
{
/************found************/
if((k%13=0)||(k%17=0))if((k%13==0)||(k%17==0))/*这里是比较不是赋值,所以用两个连续的等号==*/
{m=m+k;mc++;}
k--;
}
returnm;
/************found************/
_____}/*函数体结束的时候用}结束*/
main()
{
printf("%d\n",fun(500));
}
19
#include
#defineN10
/************found************/
voidfun(inta[],intm)intfun(inta[],intm)/*根据主函数调用fun函数的,可以看到要求fun函数返回的是个int型*/
{intlow=0,high=N-1,mid;
while(low<=high)
{mid=(low+high)/2;
if(mhigh=mid-1;
/************found************/
elseIf(m>a[mid])elseif(m>a[mid])/*这里的if是关键字,关键字必须全部小写*/
low=mid+1;
elsereturn(mid);
}
return(-1);
}
main()
{inti,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
printf("a数组中的数据如下:
");
for(i=0;iprintf("Enterm:
");scanf("%d",&m);
k=fun(a,m);
if(k>=0)printf("m=%d,index=%d\n",m,k);
elseprintf("Notbefound!
\n");
}
20
#include
#include
#defineMAXLINE20
fun(char*pstr[6])
{inti,j;
char*p;
for(i=0;i<5;i++){
/**************found**************/
for(j=i+1,j<6,j++)for(j=i+1;j<6;j++)/*for循环里面必须是2个分号,这是格式,必须记牢*/
{
if(strcmp(*(pstr+i),*(pstr+j))>0)
{
p=*(pstr+i);
/**************found*