C语言笔试--程序改错题

更新时间:2024-04-13 02:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言机试程序改错题

gc22.c程序是输入一个字符串, 将此字符串中最长的单词输出,程序在注释行附近有两个错误,请试调试改正,但调试改正中不得增删语句。

int alph(char c) { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return(1); else return(0); /* find 1 */ }

int longest(char str) ////////////// int longest(char *str) { int len=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 /* Find 2 */ { flag=0; /////////////flag=1; if(len>length) { length=len; place=point; len=0; } } return(place); }

main( ) { int i; char line[100]; printf(\ gets(line);

printf(\

for(i=longest(line);alph(line[i]);i++) printf(\ printf(\ }

2下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在

每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。

#define NULL 0 struct stud {

long num; char name[10]; float score;

struct stud *next; };

/* …………… comment …………… */ int n;

struct stud create() ////////struct stud *create(void) { struct stud *head,*p1,*p2; n=0; p1=p2=(struct stud *)malloc(sizeof(struct stud)); scanf(\ /* ……………comment …………… */ head=NULL; while(p1!=0) //////////while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p2->next=p1; p1=(struct stud *)malloc(size(struct stud)); scanf(\ }

p2->next=NULL; return(head);

}

gc56.c程序用于将字符串中的小写字母转换为大写字母,程序中有两处错误,请调试改正之,但不得增删语句.

#include void main(void)

{

char s[255]; int i;

scanf(\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(\

gc57.c的功能是互换给定数组中的最大数和最小数。如将下面8个数: 5,3,1,4,2,8,9,6 变成:

5,3,9,4,2,8,1,6

程序中,最大数与最小数的互换操作通过函数调用来实现,让指针max和min分别指向最大数和最小数。程序有二处错误,请改正。注意:不得增行和删行,也不得修改程序的结构。

main() {

int i;

static int a[8]={5,3,1,4,2,8,9,6}; void jhmaxmin();

printf(\ for(i=0; i<8; i++)

printf(\ printf(\ jhmaxmin(a,8);

printf(\ for(i=0; i<8; i++)

printf(\ printf(\}

void jhmaxmin(p,n)

int p, n; //////// int *p,n; {

int t, *max, *min, *end, *q; end=p+n; max=min=p;

for(q=p+1; q*max) max=q;

if(*q

t=*max; *max=*min; *min=t;

}

gc101.c的功能为:输入8个整数,使用指针以选择法对其进行排序(从小到大).程序中有两处错误代码,请改正.注意,不得改变程序结构。

#include main() {

int a[8],*p=a; int i,j;

int tempmin,tempcode;

printf(\ for (i=0;i<8;i++) scanf(\ 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(\ return(1); }

gc137.c中的sub函数的功能是:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。请改正函数sub中的两个错误,使它能得出正确的结果。注意:不要改动main 函数,不得增行或删行,也不得修改程序的结构。

#include \ #include \ #include \

void sub( char *s, char *t ) {

int i, d;

d=strlen( s );

for( i=1; i< d ; i++ ) ///////for(i=0;i

t[2*d]='/0' ; /////////t[2*d]='\\0'; }

main( ) {

char s[100], t[100]; clrscr( ) ;

printf( \ enter string S : \ scanf(\ sub(s,t) ;

printf( \ result is : %s \\n \ }

gc155.c的功能是从键盘输入一行字符,分别统计其中的字母、数字、空格和其它字符的个数。但该程序中有2处错误,请调试并改正。不允许改变程序结构和增删语句。

#include main() { int c;

int letter=0,digit=0,space=0,other=0; printf(\

while (c=getchar()!='\\n') //////while((c=getchar())!='\\n') if (c>='a'&&c<='z'||c>='A'&&c<='Z') letter++;

else if (c>='0'&&c<='9') digit++;

else if (c=' ') //////////else if(c==' ') space++; else

other++;

printf(\ printf(\ printf(\ printf(\}

本程序用于输出如下所示的图形。请将源程序文件中的两个错误改正过来,注意在答题过程中不得对源程序增行或删行,也不得更改程序的结构。

1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 1234567890987654321 12345678987654321 123456787654321 1234567654321 12345654321 123454321 1234321 12321 121 1

#include #include main() {

int i,j,n;

char s[20]=\printf(\

/* ...........comment 1................*/

n=10; //////////////////////n=19; for(i=-n/2; i<=n/2; i++) {

for(j=0;j<=15+abs(i); j++)printf(\

/* ...........comment 2................*/

for(j=0;j<=n/2-abs(i);j++)printf(\

for(j=n/2-abs(i); j<19;j++)printf(\ ///////////j=n/2+abs(i)+1 printf(\ }

}

gc279.c的功能:函数prn_star(m,left)输出正菱形图案,其中参数m 代表图案的行数(为一奇数),left代表图案距屏幕左边的列数。

函数prt_str(m,left)中有两处错误代码,请指出并改正之。

#include void prn_star(m,left) int m,left; { int i,j,p;

for(i=1;i

for (j=1;j<=left+(m-(2*p-1))/2;j++) printf(\

for (j=1;j<=2*p-1;j++) printf(\ printf(\ } }

main()

{ int m,left;

printf(\请输入正菱形图案的行数:\ scanf(\

printf(\请输入正菱形图案距屏幕左边的列数:\ scanf(\ prn_star(m,left); }

gc280.c功能为:M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时,此人出圈,直到圈中只剩下一个人为止。请按退出次序输出出圈人原来的编号以及留在圈中的最后一个人原来的编号。程序中有两处错误代码,请指出并改正之。

#include

#define M 10 /*number of person*/

#define N 2 /*eliminate a person for N compartment*/

void main() { int i,j,k,n; static a[M]; int b[M];

/*eliminate persons from array a to array b */

for (n=0,j=k=M-1;n

for (i=0;ik) j=0; if (!a[j]) continue; /////////continue;改成break; }

b[n]=j+1; /*record No. of eliminated person*/ a[j]=-1; }

/*output*/

for (i=0;i

printf(\ \ for (i=0;i

printf(\}

gc304.c中的函数fun()的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:\时,则t中的字符串应为:\。

现在程序中发现有两个错误,错误就出现在那些注释行的附近,请你找出错误并将它们改正过来,要求在调试过程中不允许改变程序结构,更不得增删语句。

#include #include

void fun (char *s, char *t) {

int i, st;

st = strlen(s);

/* .............. comment one .............. */ for(i=0; i < st; i++)

t[st] = s[i]; //////////////t[i]=s[i]; for (i=0; i < st; i++) t[st+i] = s[st-i-1];

/* .............. comment two .............. */

t[st] = '\\0'; /////////////t[2*st]='\\0'; }

void main( ) {

char s[100], t[100];

printf(\ gets(s); fun(s, t);

printf(\}

gc305.c程序的功能是:对由n个一位数数字组成的数字串,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数。

请改正程序中的两个错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

main() {

int number[20],n,m,i;

printf(\ scanf(\ printf(\ scanf(\ for(i=0;i

scanf(\ scanf(\ move(number,n,m); for(i=0;i

printf(\ printf(\ }

move(array,n,m) int n,m,array[20]; {

int *p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p--)

*p=*(p+1); ////////*p=*(p-1); array=array_end; ///////*array=array_end; m--;

if(m>0) move(array,n,m); }

gc306.c输出如下图案。 AAAAAAA #BBBBBB ##CCCCC ###DDDD

####EEE

程序中有2处错误,请指出改正之。

#include main() { int i,j;

char ch='A';

for (i=0; i<7;i++) //////for(i=0;i<5;i++) { for (j=1;j<=i;j++) printf(\

for ( j=1;j<7;j++) //////for(j=0;j<7-i;j++) printf(\ printf(\ ch++; } }

gc307.c功能为:使用指针将数组中元素按升序排序。程序中有两处错误代码,请指出并改正之。

#include main() {

int k,m,change,a[10]; int *p1;

int **p2=p1; p1=a;

printf(\ for (k=0;k<10;k++) scanf(\ for (k=0;k<9;k++) {

for (m=0;m<9+k;m++) //////m<9+k改成m<9-k { if ((*p2)[m]>(*p2)[m+1]) { change=(*p2)[m]; (*p2)[m]=(*p2)[m+1]; (*p2)[m+1]=change; } } }

for (k=0;k<10;k++)

printf(\

return(1); }

gc342.c的功能是:计算字符串中子串出现的次数

请改正程序中的两个错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include \ #include \ main()

{ char str1[20],str2[20],*p1,*p2; int sum=0;

printf(\ scanf(\ p1=str1;p2=str2; while(*p1!='\\0') {

if(*p1==*p2)

{while(*p1==*p2||*p2!='\\0') ////////////////||改为&& {p1++; p2++;} } else

p2++; ///////////////p1++; if(*p2=='\\0') sum++; p2=str2; }

printf(\ getch(); }

gc367.c通过接受键盘输入的月数量,再根据当前的月份,可以计算出某一年的月份。例如,当前的月份是10,加输入的月数量5,月份是3;加输入的月数量 –13,月份是9。程序中输出的月份以英文字符显示。CURRENT为当前月份。程序有两处错误,请找出并修正,使之符合上述要求。不得增加行或删除行,也不得更改程序结构。

#define CURRENT 11 #include

main()

{

int month,monthnum; char *ch;

char *month_name(int);

printf(\scanf(\

/*------------Found Mistake Below------------*/ if(monthnum>=0) month=(CURRENT-1+monthnum)+1; else month=(12+(CURRENT-1+monthnum))+1; ch=month_name(month);

printf(\

printf(\%d Months is: %s\\n\ //////////month改为

monthnum

}

/*------------Found Mistake Below------------*/ char *month_name(int n) { char

*name[]={\c\////\前加\

}

return(name[n]);

gc369.c功能为:找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。程序中有两处错误代码,请指出并改正之。不得增加行或删除行,也不得更改程序结构。

*Find the saddle point*/ #include #define N 5 #define M 5

main(){

int i,j,k,flag1,flag2,a[N][M],max,maxi,maxj; for (i=0;i

scanf(\ flag2=0;

for (i=0;i

max=a[j][0]; ///////////// max=a[i][0] for (j=0;jmax) { max=a[i][j];

maxj=j; }

for (k=0,flag1=1;ka[k][maxj]) flag1=0; if (flag1) {

printf(\ flag2=1; } }

if (flag2) //////////// !flag2

printf(\}

gc393.c程序通过接受键盘输入的字符串,通过调用函数trimspace(),实现去掉字符串的前空格和尾空格。

程序有两处错误,请找出并修正,使之符合上述要求。不得增加行或删除行,也不得更改程序结构。

#include main() {

char str[100];

void trimspace(char *); gets(str);

trimspace(str); puts(str); } /*------------Found Mistake Below------------*/ void trimspace(char *p) {

char *q; if(*p!='\\0')

q=strlen(p); ////////////////*q=strlen(p) else return;

/*------------Found Mistake Below------------*/ for(;*q==' ';q--); *q='\\0';

for(q=p;*q==' ';q++); strcpy(p,q);

return; ///////////////册除return }??

gc394.c中函数str1的功能是输入一个英文句子(字符串),将其中每个单词的最后一个字母改写成大写,然后输出此句子。(这里的\单词\是指由空格隔开的字符串)。例如:若输入:\则应输出:\请改正函数str1中的两个错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include \#include \#include \void str1(char *p) { int k=0; for(;*p;p++) if(k) {

if(p==' ') /////////////*p==' ' { k=0;

*p=toupper(*(p-1)); ///////////*(p-1)=toupper(*(p-1)) } } else k=1; }

void main() { char str[100]; int d; clrscr();

printf(\ gets(str); str1(str);

printf(\ }??

gc397.c功能为:设数组a[10]包括10个整型元素,求出a[10]中各相邻二个元素之和,并将这些和存储在数组b[10]中,最后按每行三个输出。程序中有三处错误代码,请改正.注意,不得改变程序结构。

#include main() { int a[10],b[10],i;

for(i=0;i<=10;i++) ///////////for(i=0;i<10;i++) {

scanf(\ //////////&a[i]

} for(i=1;i<10;i++) { b[i]=a[i]+a[i-1]; } for(i=1;i<10;i++) { printf(\ }

}

if ( (i/3)==0) printf(\ //////i%3==0

gc398.c功能为:输入一个大写字母,打印出一个菱形。该菱形中间一行由此字母组成,其相邻的上下两行由它前面的一个字母组成,按此规律,直到字母A出现在第一行和最末行为止。程序中有三处错误代码,请指出并改正之。

例如:输入字母D,打印出如下图形: A BBB CCCCC DDDDDDD CCCCC BBB A

#include ////////////////#include main(){ int i,j,k; char ch;

scanf(\ k=ch-'A'+1;

for (i=1;i<=k;i++){ for (j=40;j>=i;j--) printf(\

for (j=1;j<=i-1;j++) //////////////////for(j=1;j<=2*i-1;j++) printf(\ printf(\ }

k=ch-'A';

for (i=k;i>=1;i--){

for (i=40;i>=i;i--) ///////////////for(j=40;j>=i;i--) printf(\

for (j=1;j<2*i-1;j++) //////////////for(j=1;j<=2*i-1;j++) printf(\ printf(\ } }

gc405.c中,函数fun的功能是:'根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由main()函数输出。

例如, 若输入2 则输出: 1 2 2 4 若输入4 则输出: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16

程序有两处错误,请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include #include #define M 10 int a[M][M]={0};

fun(int **a, int m) ///////////**a改为a[M][M] { int j,k;

for (j=0;j

for (k=1;k

main() { int i,j,n; clrscr();

printf(\fun(a,n);

for(i=0;i

printf(\ printf(\}

}

在给定gc406.c程序中,函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。

请改正函数fun中的三处错误,使它能得出正确的结果。

注意:不得改变程序的结构和算法,也不能增加或删减程序行

#include #include

void fun(long s, long *t) { int d;

long sl = 1;

/************found************/ t = 0; ///////// *t=0 while (s > 0) { d = s;

/************found************/ if (d%2 == 0) //////// d%2!=0 { *t = d * sl + *t; sl *= 10; }

/************found************/ s = 10; /////// s/=10 } }

main() { long s, t; clrscr();

printf(\ fun(s, &t);

printf(\}

gc407.c程序的功能是:读入一个数字b,求sum=b+bb+bbb。例如:读入数字7,则输出下列表达式的和sum=7+77+777。请指正程序中的三处错误,使它能得出正确的结果。

注意:不得改变程序的结构和算法,也不能增加或删除程序行。

#include \

#include \main()

{ int i=-1,j;

long int b,temp,sum;

scanf(\ ////////// &b do

{ i++; temp=0;

for (j=0;j<=i;j++) temp=temp+(long int)pow(10,j-1)*b; //////temp=(long int)pow(10,j)*b sum+=temp;

}while(i<=3); ////////// while(i<3) printf(\}

gc453.c程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。程序有两处错误,请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include #include main()

{ char a[]=\int i, j, k; k=strlen(a);

for(i=0; i<=k-2; i+=2)

for(j=i+2; j<=k; j++ ) //////// for(j=i+2;j<=k;j+=2) if( a[i]a[j] { t=a[i]; a[i]=a[j]; a[j]=t; } puts(a);

printf(\}

gc461.c程序功能为:使用冒泡法对数组data中的数据按升序排列,如data中数据为5,6,3,8,7,则输出为3,5,6,7,8。程序中有三处错误代码,请指出并改正之.注意,不得改变程序结构。

main() {

int i,data[]={5,6,3,8,7};

sort(4,data[1]); ///////sort(5,data) printf(\

for(i=1;i<=4;i++) /////// for(i=0;i<5;i++) printf(\ }

sort(int n,int array[]) {

int i,j,t;

for(i=0;i

for(j=0;j<=n-1;j++) /////////// for(j=0;jarray[j+1]) {

array[j]=t;

array[j]=array[j+1]; array[j+1]=t; } } }

gc462.c程序的功能是:打印出如下形式的杨辉三角形。要求根据用户的输入,决定输出几行。程序中有三处错误,请指出并改正。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1 1 5 10 10 5 1 ......

注意:不得改变程序的结构和算法,也不能增加或删除程序行。

#include \

int yanghui(int x,int y) ////////加上分号; main() {

int i,j,n; clrscr();

printf(\ scanf(\ for (i=1;i<=n;i++)

{

for (j=0;j<=n-i;j++) printf(\ \ for (j=1;j<=i;j++)

printf(\ printf(\ } }

int yanghui(x,y) //////// int yanghui( int x,int y) {

int z;

if (y==1||y==x) z=1; else

z=yanghui(x,y-1)+yanghui(x-1,y);

//////////

z=yanghui(x-1,y-1)+yanghui(x-1,y)

return z; }

输入一个范围-32768——32767的整数,调用函数split(),拆解出各位的数字,放入字符数组s[]中。

正数前面加“+”号,负数前面加“-”号,零不加符号。

gc486.c程序有两处错误,请找出并修正,使之符合上述要求。不得增加行或删除行,也不得更改程序结构。

#include int main(void) { char s[7]; int k; void split(int,char *); printf(\ scanf(\ split(k,s); printf(\ return 0; }

void split(int t,char *ps) { int i; char *q=ps,tmp; if (t>0)

*ps++='+'; if (t<0) { *ps++='-'; t=-t; }

/*------------Found Mistake Below------------*/ while(t/10!=0) /////// while(t!=0) { i=t/10; *ps++=t-i*10; t=i; } *ps++='0'+t; *ps='\\0';

/*------------Found Mistake Below------------*/ }

for(q++;q

gc488.c程序的功能是:读入一个整数n,求sum=1!+2!+3!+...+n!。请指正程

序中的三处错误,使它能得出正确的结果。

注意:不得改变程序的结构和算法,也不能增加或删除程序行。

#include \

long int factorial(int n) {

int i;

long int p=0; /////// p=1 for (i=1;i<=n;i++) p=p*i; return p; }

void main() {

int i,n;

long int sum=0;

scanf(\ /////// &n for (i=1;i<=n;i++)

sum=sum+factorial(n); ///////sum=sum+factorial(i) printf(\

When you are old and grey and full of sleep,

And nodding by the fire, take down this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your moments of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim soul in you, And loved the sorrows of your changing face; And bending down beside the glowing bars, Murmur, a little sadly, how love fled And paced upon the mountains overhead And hid his face amid a crowd of stars.

The furthest distance in the world Is not between life and death But when I stand in front of you Yet you don't know that I love you.

The furthest distance in the world Is not when I stand in front of you

Yet you can't see my love

But when undoubtedly knowing the love from both Yet cannot be together.

The furthest distance in the world Is not being apart while being in love But when I plainly cannot resist the yearning Yet pretending you have never been in my heart. The furthest distance in the world Is not struggling against the tides But using one's indifferent heart To dig an uncrossable river For the one who loves you.

倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。周遭流岚升腾,没露出那真实的面孔。面对那流转的薄雾,我会幻想,那里有一个世外桃源。在天阶夜色凉如水的夏夜,我会静静地,静静地,等待一场流星雨的来临…

许下一个愿望,不乞求去实现,至少,曾经,有那么一刻,我那还未枯萎的,青春的,诗意的心,在我最美的年华里,同星空做了一次灵魂的交流…

秋日里,阳光并不刺眼,天空是一碧如洗的蓝,点缀着飘逸的流云。偶尔,一片飞舞的落叶,会飘到我的窗前。斑驳的印迹里,携刻着深秋的颜色。在一个落雪的晨,这纷纷扬扬的雪,飘落着一如千年前的洁白。窗外,是未被污染的银白色世界。我会去迎接,这人间的圣洁。在这流转的岁月里,有着流转的四季,还有一颗流转的心,亘古不变的心。

本文来源:https://www.bwwdw.com/article/yb0p.html

Top