您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > C语言程序改错及填空题
1gc23.c下列程序是建立一个包含学生有关数据的单向链表。但该程序有2个错误,错误出现在每个注释行附近,请调试改正。调试改正中,不得改变程序结构,也不得增删语句。#defineNULL0structstud{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);}gc57.c的功能是互换给定数组中的最大数和最小数。如将下面8个数:5,3,1,4,2,8,9,6变成:5,3,9,4,2,8,1,6程序中,最大数与最小数的互换操作通过函数调用来实现,让指针max和min分别指向最大数和最小数。程序有二处错误,请改正。注意:不得增行和删行,也不得修改程序的结构。main(){2inti;staticinta[8]={5,3,1,4,2,8,9,6};voidjhmaxmin();printf(Originalarray:\n);for(i=0;i8;i++)printf(%5d,a[i]);printf(\n);jhmaxmin(a,8);printf(Arrayafterswapingmaxandmin:\n);for(i=0;i8;i++)printf(%5d,a[i]);printf(\n);}//注意:voidjhmaxmin(p,n)intp,n;这是一种老的函数形式,现在一般这样写voidjhmaxmin(intp,intn)voidjhmaxmin(p,n)intp,n;////////int*p,n;{intt,*max,*min,*end,*q;end=p+n;max=min=p;for(q=p+1;qend;q++){if(*q*max)max=q;if(*qmax)min=q;////////*q*min}t=*max;*max=*min;*min=t;}gc101.c的功能为:输入8个整数,使用指针以选择法对其进行排序(从小到大).程序中有两处错误代码,请改正.注意,不得改变程序结构。#includestdio.hmain(){inta[8],*p=a;inti,j;inttempmin,tempcode;printf(\ninputthenumbers:\n);for(i=0;i8;i++)scanf(%d,p+i);tempmin=*p;for(i=0;i7;i++){for(j=i;j8;j++)3if(j==i||*(p+j)tempmin){tempmin=*(p+i);//////////tempmin=*(p+j);tempcode=j;};if(tempcode!=i){*(p+tempcode)=*(p+i);*(p+j)=tempcode;/////////////*(p+i)=tempmin;}}for(i=0;i8;i++)printf(%d,,*(p+i));return(1);}gc137.c中的sub函数的功能是:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。请改正函数sub中的两个错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得修改程序的结构。#includestdio.h#includeconio.h#includestring.hvoidsub(char*s,char*t){inti,d;d=strlen(s);for(i=1;id;i++)///////for(i=0;id;i++)t[i]=s[d-1-i];for(i=0;id;i++)t[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);}4gc163.c的功能是实现求1000以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如:6=1+2+3,28=1+2+4+7+14),并显示结果。但该程序中有3处错误,请调试并改正。不允许改变程序结构和增删语句。#includestdio.hvoidmain(void){inti,k,m,n,s,p;//////////////////p=0inta[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;//////////p=p+1printf(\n%d=%d,s,a[0]);n=1;while(nm){printf(+%d,a[n]);n=n+1;}}}printf(\n总个数为:%d\n,p);}gc165.c程序中的函数find_str()用来返回字符串s2在字符串s1中第一次出现的首地址;如果字符串s2不是s1的子串,则该函数返回空指针NULL。现在程序中发现有两个错误,错误就出现在那些注释行的附近,请你找出错误并将它们改正过来,要求在调试过程中不允许改变程序结构,更不得增删语句。includestdio.h#includestring.hchar*find_str(char*s1,char*s2){inti,j,ls2;ls2=strlen(s2);for(i=0;i=strlen(s1)-ls2;i++)5{for(j=0;jls2;j++)if(s1[j+i]!=s2[j])break;/*..............commentone..............*/if(j==ls2)return(s1+j);//////return(s1+i)}returnNULL;}voidmain(){char*a=dos6.22windows98office2000,*b=windows,c;///////*c/*..............commenttwo..............*/c=find_str(a,b);if(c!=NULL)printf(%s\n,c);elseprintf(未找到字符串%s\n,b);}gc166.c程序的功能是:计算并输出从键盘输入的任一正整数的各位数字之和s以及各位数字之积t。例如,当输入的正整数为237时,s的值为12,t的值为42。请改正程序中的两个错误,使它能得出正确的结果。注意:不得增行或删行,也不得修改程序的结构。#includestdio.hmain(){intn,yw,s=0,t=0;/////////t=1scanf(%d,&n);while(n!=0){yw=n%10;s=s+yw;t=t*yw;n=n%10;////////////n=n/10}printf(s=%d,t=%d\n,s,t);}gc228.c代码功能为:使用指针将数组a中10个整数按相反的顺序存放。程序中有3处错误代码,请指出并改正之.voidinv(x,n)6int*x,n;{int*p,t,*i,*j,m=(n-1)/2;i=x;j=n;///////////j=x+n-1;p=x+m;for(;i=p;i++,j--){t=*i;*i=*j;*j=t;}return;}main(){inta[10],i;printf(input10number);for(i=0;i10;i++)scanf(%d,&a[i]);printf(Theoriginalarray:\n);for(i=0;i10;i++)printf(%d,,a[i]);printf(\n);inv(a,n);/////////////////inv(a,10);printf(Thearrayhasbeeninverted:\n);for(i=0;i10;i--)/////////////////for(i=0;i10;i++)printf(%d,,a[i]);printf(\n);}gc234.c中函数fun的功能是:求S的值。设S=((2*2)/3)*((4*4)/(3*5))*...*((2*k*2*k)/((2*k-1)*(2*k+1)))请改正函数fun中的两个错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includestdio.h#includedos.hfun(intk)////////////////floatfun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n=k){w=2.0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n++;7}returns/////////////returns;}main(){clrscr();printf(%f\n,fun(10));}gc273.c功能是:一个偶数总能表示为两个素数之和。请改正程序的两个错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includestdio.h#includemath.hmain(){inta,b,c,d;scanf(%d,a);///////////scanf(%d,&a);for(b=3;b=a/2;b+=2){for(c=2;c=sqrt(b);c++)if(b%c==0)break;if(csqrt(b))d=a+b;////////////d=a-b;elsebreak;for(c=2;c=sqrt(d);c++)if(d%c==0)break;if(csqrt(d))printf(%d=%d+%d\n,a,b,d);}}gc274.c本程序用于输出如下所示的图形。请将源程序文件中的两个错误改正过来,注意在答题过程中不得对源程序增行或删行,也不得更改程序的结构。11211232112343211234543211234565432112345676543211234567876543211234567898765432112345678909876543211234567898765432112345678765432181234567654321123456543211234543211234321123211211#includestdio.h#includemath.hmain(){inti,j,n;chars[20]=1234567890987654321;printf(\n\n);/*...........comment1................*/n=10;///////////////
本文标题:C语言程序改错及填空题
链接地址:https://www.777doc.com/doc-6150848 .html