C语言笔试程序改错题.docx
《C语言笔试程序改错题.docx》由会员分享,可在线阅读,更多相关《C语言笔试程序改错题.docx(35页珍藏版)》请在冰豆网上搜索。
![C语言笔试程序改错题.docx](https://file1.bdocx.com/fileroot1/2022-10/12/d8a5bf39-0d66-44d8-823f-6502a6bf7833/d8a5bf39-0d66-44d8-823f-6502a6bf78331.gif)
C语言笔试程序改错题
C语言机试程序改错题
gc22.c程序是输入一个字符串,将此字符串中最长的单词输出,程序在注释行附近有两个错误,请试调试改正,但调试改正中不得增删语句。
intalph(charc)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return
(1);
else
return(0);/*find1*/
}
intlongest(charstr)//////////////intlongest(char*str)
{
intlen=0,i,length=0,flag=1,point,place;
for(i=0;i<=strlen(str);i++)
if(alph(str[i]))
if(flag)
{
flag=0;
point=i;
}
else
len++;
else/*Find2*/
{
flag=0;/////////////flag=1;
if(len>length)
{length=len;
place=point;
len=0;}
}
return(place);
}
main()
{
inti;
charline[100];
printf("Enterstring\n");
gets(line);
printf("thelongestis:
");
for(i=longest(line);alph(line[i]);i++)
printf("%c",line[i]);
printf("\n");
}
2下列程序是建立一个包含学生有关数据的单向链表。
但该程序有2个错误,错误出现在
每个注释行附近,请调试改正。
调试改正中,不得改变程序结构,也不得增删语句。
#defineNULL0
structstud
{
longnum;
charname[10];
floatscore;
structstud*next;
};
/*……………comment……………*/
intn;
structstudcreate()////////structstud*create(void)
{
structstud*head,*p1,*p2;
n=0;
p1=p2=(structstud*)malloc(sizeof(structstud));
scanf("%ld,%s,%f",&p1->num,p1->name,&p1->score);
/*……………comment……………*/
head=NULL;
while(p1!
=0)//////////while(p1->num!
=0)
{
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p1=(structstud*)malloc(size(structstud));
scanf("%ld,%s,%f",&p1->num,p1->name,&p1->score);
}
p2->next=NULL;
return(head);
}
gc56.c程序用于将字符串中的小写字母转换为大写字母,程序中有两处错误,请调试改正之,但不得增删语句.
#include
voidmain(void)
{
chars[255];
inti;
scanf("%s",s);
for(i=0;s[i];i++)
if(s[i]>='b'&&s[i]<='z')//////s[i]>='a'&&s[i]<='z'
s[i]=s[i]+'a'+'A';//////s[i]=s[i]-'a'+'A'
printf("%s",s);}
gc57.c的功能是互换给定数组中的最大数和最小数。
如将下面8个数:
5,3,1,4,2,8,9,6
变成:
5,3,9,4,2,8,1,6
程序中,最大数与最小数的互换操作通过函数调用来实现,让指针max和min分别指向最大数和最小数。
程序有二处错误,请改正。
注意:
不得增行和删行,也不得修改程序的结构。
main()
{
inti;
staticinta[8]={5,3,1,4,2,8,9,6};
voidjhmaxmin();
printf("Originalarray:
\n");
for(i=0;i<8;i++)
printf("%5d",a[i]);
printf("\n");
jhmaxmin(a,8);
printf("Arrayafterswapingmaxandmin:
\n");
for(i=0;i<8;i++)
printf("%5d",a[i]);
printf("\n");
}
voidjhmaxmin(p,n)
intp,n;////////int*p,n;
{
intt,*max,*min,*end,*q;
end=p+n;
max=min=p;
for(q=p+1;q{if(*q>*max)max=q;
if(*q}
t=*max;*max=*min;*min=t;
}
gc101.c的功能为:
输入8个整数,使用指针以选择法对其进行排序(从小到大).程序中有两处错误代码,请改正.注意,不得改变程序结构。
#include
main()
{
inta[8],*p=a;
inti,j;
inttempmin,tempcode;
printf("\ninputthenumbers:
\n");
for(i=0;i<8;i++)
scanf("%d",p+i);
tempmin=*p;
for(i=0;i<7;i++)
{
for(j=i;j<8;j++)
if(j==i||*(p+j){tempmin=*(p+i);//////////tempmin=*(p+j);
tempcode=j;
};
if(tempcode!
=i)
{*(p+tempcode)=*(p+i);
*(p+j)=tempcode;/////////////*(p+i)=tempmin;
}
}
for(i=0;i<8;i++)
printf("%d,",*(p+i));
return
(1);
}
gc137.c中的sub函数的功能是:
将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。
例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。
请改正函数sub中的两个错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得修改程序的结构。
#include"stdio.h"
#include"conio.h"
#include"string.h"
voidsub(char*s,char*t)
{
inti,d;
d=strlen(s);
for(i=1;it[i]=s[d-1-i];
for(i=0;it[d+i]=s[i];
t[2*d]='/0';/////////t[2*d]='\0';
}
main()
{
chars[100],t[100];
clrscr();
printf("\nPleaseenterstringS:
");
scanf("%s",s);
sub(s,t);
printf("\nTheresultis:
%s\n",t);
}
gc155.c的功能是从键盘输入一行字符,分别统计其中的字母、数字、空格和其它字符的个数。
但该程序中有2处错误,请调试并改正。
不允许改变程序结构和增删语句。
#include
main()
{intc;
intletter=0,digit=0,space=0,other=0;
printf("Pleaseinputastring:
\n");
while(c=getchar()!
='\n')//////while((c=getchar())!
='\n')
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letter++;
elseif(c>='0'&&c<='9')
digit++;
elseif(c='')//////////elseif(c=='')
space++;
else
other++;
printf("letter=%d,",letter);
printf("digit=%d,",digit);
printf("space=%d,",space);
printf("other=%d\n",other);
}
gc163.c的功能是实现求1000以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如:
6=1+2+3,28=1+2+4+7+14),并显示结果。
但该程序中有2处错误,请调试并改正。
不允许改变程序结构和增删语句。
#include
voidmain(void)
{
inti,k,m,n,s,p;//////////////////p=0
inta[100];
printf("\n10000以内的自然数中的完数有:
");
for(i=2;i<=10000;i++)
{s=0;
m=0;
for(k=1;k<=i/2;k++)
{if(i%k==0)
{s=s+k;
a[m]=k;
m=m+1;
}
}
if(s=i)////////if(s==i)
{p=p+1;
printf("\n%d=%d",s,a[0]);
n=1;
while(n{printf("+%d",a[n]);n=n+1;}
}
}
printf("\n总个数为:
%d\n",p);
}
gc165.c程序中的函数find_str()用来返回字符串s2在字符串s1中第一次出现的首地址;如果字符串s2不是s1的子串,则该函数返回空指针NULL。
现在程序中发现有两个错误,错误就出现在那些注释行的附近,请你找出错误并将它们改正过来,要求在调试过程中不允许改变程序结构,更不得增删语句。
include
#include
char*find_str(char*s1,char*s2)
{
inti,j,ls2;
ls2=strlen(s2);
for(i=0;i<=strlen(s1)-ls2;i++)
{