C++改错和填空题题库(共50页).doc
精选优质文档-倾情为你奉上一、程序改错 第1题/*-【程序改错】-题目:用顺序交换法将12个整数中处于奇数位的数从大到小排序。-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main()/*FOUND*/ int m12,i,j;/*FOUND*/ for(i=1;i<=12;i+) cin>>mi; for(i=0;i<11;i+=2)/*FOUND*/ for(j=i+1;i<11;i+)/*FOUND*/ if(mi>mj) k=mi; mi=mj; mj=k; for(i=0;i<12;i+) cout<<mi;答案: 1). int m12,i,j,k; 2). for(i=0;i<12;i+) 或 for(i=0;i<=11;i+) 3). for(j=i+2;j<11;j+=2) 或 for(j=i+2;j<11;j=j+2) 4). if(mj>mi) 或 if(mi<mj)第2题 /*-【程序改错】-题目:在一个具有n个数的数组中查找并删除一个数K。-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#define n 10#include <iostream.h>void main()/*FOUND*/ int an,n,k,i,j;/*FOUND*/ for(i=1;i<=n;i+) cin>>ai; cin>>k;/*FOUND*/ for(i=1;i<=n|ai!=k;i+); if(i<n) for(j=i;j<=n-1;j+) aj=aj+1;/*FOUND*/ for(i=0;i<n;i+) cout<<ai; else cout<<"not found" for(i=0;i<n;i+) cout<<ai; 答案: 1). int an,k,i,j; 2). for(i=0;i<n;i+) 3). for(i=0;i<n&&ai!=k;i+); 4). for(i=0;i<n-1;i+)第3题 /*-【程序改错】-题目:利用插入法将20个数排列成降序,并计算输入序列中第10个数到第20个数的和.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main( ) float s,a21=1,3,5,7,9,2,4,6,8,10,13,65,76,34,23,15,64,33,234,66;/*FOUND*/ int i,j; for(j=2;j<=20;j+) k=j-1; a0=aj;/*FOUND*/ while(k>=0&&ak>a0 ) /*FOUND*/ ak=ak+1; k-; /*FOUND*/ ak=a0; for(i=1;i<=20;i+) cout<<ai<<" " s=0.0; for(j=10;j<=20;j+) s=s+aj; cout<<s;答案: 1). int i,j,k; 2). while(m<aj&&j>=0) 3). ak+1=ak; 4). ak+1=a0;第4题 /*-【程序改错】-题目:将十进制正整数n转化为二进制数输出-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int m50,m150,n,i,j,n1; cin>>n; i=0; while(n>0) /*FOUND*/ n1=n%2;/*FOUND*/ m1i=n/2;/*FOUND*/ n1=n; i+; for(j=1;j<=i;j+)/*FOUND*/ m1i+1-j=mj; for(j=1;j<=i;j+) cout<<mj;答案: 1). n1=n/2; 2). m1i=n%2; 3). n=n1; 4). mj = m1i-j;第5题 /*-【程序改错】-题目:判断一个自然数是否为降序数(若D1D2D3DN满足DI>DI+1, 1<=I<=N,则D1D2DN为降序数,如54321)-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int m100,n,i,j; cin>>n; for(i=0;n!=0;i+) /*FOUND*/ mi=n/10;/*FOUND*/ n=n%10; /*FOUND*/ for(j=0;j<i&&aj<aj+1;j+);/*FOUND*/ if(j<=i) cout<<"yes" else cout<<"no"答案: 1). mi=n%10; 2). n=n/10; 3). for(j=0;j<i-1&&aj<aj+1;j+); 4). if(j=i-1)第6题 /*-【程序改错】-题目:用二分法在一组按升序的数中找出指定的数K.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int a20,n,find,k,m,i,j; cin>>n; for(i=0;i<n;i+) cin>>ai; cin>>k; find=0; i=0;j=n-1;/*FOUND*/ while(i<=j&&find=0) m=(i+j)/2; if(k=am)/*FOUND*/ find=0;/*FOUND*/ else if(k>am) j=m-1; else i=m+1; /*FOUND*/ if(find=1) cout<<"found"<<m; else cout<<"no found"答案: 1). while(i<=j&&find=0) 2). find=1; 3). else if(k<am) 4). if(find=1)第7题 /*-【程序改错】-题目:打印扬辉三角形 1 1 1 1 2 1 1 3 3 1 1 3 6 4 1-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int a55,i,j; for(i=0;i<5;i+) /*FOUND*/ ai1=1; aii=1; for(j=1;j<=i-1;j+)/*FOUND*/ aij=ai-1j-1+aij; for(i=0;i<5;i+) /*FOUND*/ for(j=0;j<5;j+)/*FOUND*/ cout<<aji<<" " cout<<endl; 答案: 1). ai0=1; 2). aij=ai-1j-1+ai-1j; 3). for(j=0;j<=i;j+) 4). cout<<aij<<" "第8题 /*-【程序改错】-题目:用”筛选法”判断并输出1-100之间的素数.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int a101,i,j; for(i=1;i<=100;i+) ai=1; a1=0; for(i=2;i<=50;i+) /*FOUND*/ j=1; while (i*j<=100) /*FOUND*/ aij=0; j+; for(i=1;i<=100;i+)/*FOUND*/ if(ai =1)/*FOUND*/ cout<<ai;答案: 1). j=2; 2). ai*j=0; 或 aj*i=0; 3). if(ai=1) 或 if(ai) 4). cout<<i;第9题/*-【程序改错】-题目:下面函数chnum将一个整数字符串转换为一个整数。-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include<string.h>#include<iostream.h> int chnum (char *str) int i,j,k,h,len,L,num=0; /*FOUND*/ int L=n=strlen(str);/*FOUND*/ for(i=0;i<L;i+) ; k=1; j=len=len-1; cout<<len<<endl; while (j>0) k=k*10; /*FOUND*/ j+; /*FOUND*/ h=*(str+4-len)-'0' num=num+h*k; return num; void main() int t;char *a="1234" t=chnum(a); cout<<t<<endl;答案: 1). L=len=strlen(str); 2). for(i=0;i<L;i+) 3). j-; 或 -j; 或 j=j-1; 或 j-=1; 4). h=*(str+i)-'0'第10题/*-【程序改错】-题目:将1到255之间的任意一个十进制转换成二进制.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int a8,k,m,n,i;/*FOUND*/ cin<<n; k=0; while(n!=0) m=n/2; ak=n%2;/*FOUND*/ k-;/*FOUND*/ m = n; /*FOUND*/ for(i=k;i>=1;i+) cout<<ai;答案: 1). cin>>n; 2). k+; 3). n=m; 4). for(i=k-1;i>=0;i-)第11题 /*-【程序改错】-题目:打印出1000以内的同时满足如下条件的数 个位数字与十位数字之和除以10所得的余数等于百位数字-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <math.h>#include <iostream.h>void main() /*FOUND*/ int a,b,c,d,i,j; for (i=3;i<1000;i+)/*FOUND*/ for (j=2;flag=1;j<=sqrt(i)&&flag;j+)/*FOUND*/ if(i%j=1) flag=0;/*FOUND*/ if(flag=0) a=i/100; b=(i-a*100)/10; c=i-a*100-b*10; d=b+c-(c+b)/10*10; if (d=a) cout<<i; 答案: 1). int a,b,c,d,i,j,flag; 2). for (j=2,flag=1;j<=sqrt(i)&&flag;j+) 3). if(i%j=0) flag=0; 或 if(!i%j=0) flag=0; 4). if(flag=1) 或 if(flag) 或 if(flag !=0)第12题 /*-【程序改错】-题目:统计100-300之间同时被3,7整除的数的个数,输出这些数 的个数及它们的平方和.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() float ns;/*FOUND*/ int k; n=0;/*FOUND*/ ns=1; for(k=100;k<=300;k+) /*FOUND*/ n37=7%k+3%k;/*FOUND*/ if(n37=0) n+; ns=ns+k*k; cout<<n<<ns;答案: 1). int n37,k,n; 2). ns=0; 3). n37=k%7+k%3; 4). if(n37=0)第13题/*-【程序改错】-题目:在100,5000之间打印出各位数字和为5的所有整数的个数.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() int a,b,c,d,k,i; k=0; for(i=104;i<=500;i+) /*FOUND*/ a=i%100; b=(i-a*100)/10; c=i-a*100-b*10; /*FOUND*/ if(a+b+c<>5) k+; for(i=1000;i<=5000;i+) a=i/1000; b=(i-a*1000)/100; /*FOUND*/ c=(i-A*1000-b*100)/100; d=i-a*1000-b*100-c*10;/*FOUND*/ if(a+b+c=5) k+; cout<<k;答案: 1). a=i/100; 2). if(a+b+c=5) k+; 3). c=(i-a*1000-b*100)/10; 4). if(a+b+c+d=5) k+;第14题 /*-【程序改错】-题目: 下列程序是求某班级的最高成绩、最低成绩和平均成绩 的程序,输入-1表示结束。-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main() float cj,sum,max,min,ave; int n; /*FOUND*/ n=0 cin>>cj; /*FOUND*/ sum=0;/*FOUND*/ min=max=0; cin>>cj;/*FOUND*/ while(cj!=0) n+; sum+=cj; if(cj>max) max=cj; if(cj<min) min=cj; cin>>cj; ave=sum/n; cout<<ave<<max<<min;答案: 1). n=1; 2). sum=cj; 3). min=max=cj; 4). while(cj>=0)第15题/*-【程序改错】-题目:计算T=1-1/2+2/3-3/4+-29/30-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <iostream.h>void main()/*FOUND*/ int t1,f,k; float t=1;/*FOUND*/ f=1;/*FOUND*/ for(k=1;k<=30;k+) /*FOUND*/ t1=(k-1)/k; t+=t1*f; f=-f; cout<<t;答案: 1). int f,k;float t1,t=1; 2). f=-1; 3). for(k=2;k<=30;k+) 4). t1=(float)(k-1)/k; 或 t1=(k-1)/(float)k; 或 t1=1.0*(k-1)/k;第16题 /*-【程序改错】-题目:计算输出100-200之间素数的平方根之和-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include<math.h>#include<iostream.h>void main() float s,sn; int n,k,l; s=0;/*FOUND*/ for(n=100;n<=199;n+=2) sn=sqrt(n);/*FOUND*/ l=0;/*FOUND*/ for(k=2;k<=n&&l;k+) if(n%k=0)l=0;/*FOUND*/ if(l=0) s+=sn; cout<<s;答案: 1). for(n=101;n<=199;n+=2) 或 for(n=100;n<=199;n+=1) 或 for(n=100;n<=200;n+=1) 或 for(n=101;n<=200;n+=2) 2). l=1 3). for(k=2;k<n&&l=0;k+) 4). if(l!=0)第17题/*-【程序改错】-题目:计算并输出100200之间的所有素数的平方根之和.-注意:不可以增加或删除程序行,也不可以更改程序的结构。-*/#include <math.h>#include <iostream.h>void main( ) float s,sn; int n,k,f,m; s=0.0; for(n=101;n<=199;n+=2) sn=sqrt(n); m=sn; k=3; f=0;/*FOUND*/ while(k<=m&&f=0) /*FO