程序改错

更新时间:2023-09-26 14:55:01 阅读量: 综合文库 文档下载

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

试卷编号:10766 所属语言:C语言

试卷方案:TC_150604083824 试卷总分:440分 共有题型:1种

一、程序改错 共44题 (共计440分)

第1题 (10.0分) 题号:360 难度:中 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:计算正整数num的各位上的数字之积。 例如:若输入:252,则输出应该是:20。 若输入:202,则输出应该是:0。

------------------------------------------------------*/

#include #include

long fun (long num) {

/**********FOUND**********/ long k=1 do {

k*=num ;

/**********FOUND**********/ num\\=10;

/**********FOUND**********/ }while(!num) ; return (k) ; } main( ) {

long n ;

printf(\ printf(\} 答案:

=======(答案1)======= long k=1;

=======(答案2)======= num/=10;

=======(答案3)======= } while(num) ; =========或========= }while(num!=0);

第2题 (10.0分) 题号:554 难度:中 第2章 /*------------------------------------------------------- 【程序改错】

---------------------------------------------------------

题目:以下程序输入一个整数n,计算累加和(1+2+3+…+n)并输出。请找出错误并改正。 如输入 5↙

输出:The sum from 1 to 5 is 15

-------------------------------------------------------*/ #include main()

{

/***********FOUND***********/ int i, n, sum; /***********FOUND***********/ scanf( \

for ( i = 0; i <= n; i++ ); /***********FOUND***********/

sum += n; printf( \} 答案:

=======(答案1)======= int i, n, sum=0;

=======(答案2)======= scanf( \

=======(答案3)======= sum += i;

第3题 (10.0分) 题号:551 难度:中 第1章 /*------------------------------------------------------- 【程序改错】

---------------------------------------------------------

题目:下列程序从键盘输入一个数n,求1~n之和并输出。请纠正程序中存在错误,使程 序实现其功能。

如输入 5↙

输出:The sum from 1 to 5 is 15

-------------------------------------------------------*/

#include main() {

int i=1,n;

/***********FOUND***********/ float sum;

/***********FOUND***********/ scanf(\

/***********FOUND***********/ for(;i

printf(\ } 答案:

=======(答案1)======= float sum=0;

=======(答案2)======= scanf(\

=======(答案3)======= for(;i<=n;i++)

第4题 (10.0分) 题号:22 难度:易 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:计算数组元素中值为正数的平均值(不包括0)。 例如:数组中元素的值依次为39,-47,21,2,-8,15,0, 则程序的运行结果为19.250000。

------------------------------------------------------*/ #include double fun(int s[]) {

/**********FOUND**********/ int sum=0.0; int c=0,i=0;

/**********FOUND**********/ while(s[i] =0) {

if (s[i]>0) {

sum+=s[i]; c++; } i++; }

/**********FOUND**********/ sum\\=c;

/**********FOUND**********/ return c; } main() {

int x[1000];int i=0; do {

scanf(\ while(x[i++]!=0); printf(\} 答案:

=======(答案1)======= double sum=0.0; =========或========= double sum=0;

=======(答案2)======= while( s[i] != 0 ) =========或========= while(!s[i]==0) =========或========= while(!0==s[i]) =========或========= while(s[i])

=======(答案3)======= sum/=c;

=========或========= sum=sum/c;

=======(答案4)======= return sum;

=========或========= return (sum);

第5题 (10.0分) 题号:11 难度:中 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:用下面的和式求圆周率的近似值。直到最后一项的绝对值 小于等于0.0001。

π 1 1 1 — = 1 - — + — - — + ... 4 3 5 7

------------------------------------------------------*/ #include

/**********FOUND**********/ #include fun()

{

int i=1;

/**********FOUND**********/ int s=0,t=1,p=1;

/**********FOUND**********/ while(fabs(t)<=1e-4) { s=s+t; p=-p; i=i+2; t=p/i; }

/**********FOUND**********/ printf(\} main() { fun(); } 答案:

=======(答案1)======= #include \=========或========= #include

=======(答案2)======= float s=0,t=1,p=1; =========或========= float s=0,p=1,t=1; =========或========= float p=1,s=0,t=1; =========或========= float p=1,t=1,s=0; =========或========= float t=1,p=1,s=0; =========或========= float t=1,s=0,p=1;

=======(答案3)======= while(fabs(t)>1e-4) =========或=========

while(0.00010.0001)

=======(答案4)======= printf(\

第6题 (10.0分) 题号:13 难度:中 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:求1到20的阶乘的和。

------------------------------------------------------*/ #include fun() {

int n,j;

float s=0.0,t=1.0; for(n=1;n<=20;n++) {

/**********FOUND**********/ s=1;

for(j=1;j<=n;j++)

/**********FOUND**********/ t=t*n;

/**********FOUND**********/ s+t=s; }

/**********FOUND**********/ printf(\} main() { fun(); } 答案:

=======(答案1)======= t=1;

=========或========= t=1.0;

=======(答案2)======= t= t * j ;

=========或========= t*=j;

=========或========= t=j*t;

=======(答案3)======= s= s + t ;

=========或========= s+=t;

=========或========= s=t+s;

=======(答案4)======= printf(\

第7题 (10.0分) 题号:444 难度:易 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:编写函数fun计算下列分段函数的值: x*20 x<0且x≠-3

f(x)= sin(x) 0≤x<10且x≠2及x≠3 x*x+x-1 其它

------------------------------------------------------*/

#include #include

double fun(double x) {

/**********FOUND**********/ double y

/**********FOUND**********/ if (x<0 || x!=-3.0)

y=x*20;

else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0) y=sin(x); else

y=x*x+x-1;

/**********FOUND**********/ return x; } main() {

double x,f;

printf(\ scanf(\ f=fun(x);

printf(\} 答案:

=======(答案1)======= double y;

=======(答案2)======= if (x<0 && x!=-3.0)

=======(答案3)======= return y;

第8题 (10.0分) 题号:380 难度:中 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:输入两个双精度数,函数返回它们的平方和的平方根值。 例如:输入:22.936 和 14.121,输出为:y = 26.934415。

------------------------------------------------------*/

#include #include #include

/**********FOUND**********/ double fun (double *a, *b) {

double c;

/**********FOUND**********/ c = sqr(a*a + b*b);

/**********FOUND**********/ return *c; }

main ( ) {

double a, b, y;

printf ( \ scanf (\ y = fun (&a, &b);

printf (\} 答案:

=======(答案1)=======

double fun (double *a, double *b)

=======(答案2)======= c = sqrt(*a * *a + *b * *b);

=======(答案3)======= return c;

第9题 (10.0分) 题号:4 难度:易 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。

------------------------------------------------------*/ #include #define N 11 main() {

int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};

printf(\ /**********FOUND**********/ scanf(\

printf(\ for(i=0;i

/**********FOUND**********/ for(i=N-1;i>=0;i--) if(number<=a[i])

/**********FOUND**********/ a[i]=a[i-1]; else {

a[i+1]=number;

/**********FOUND**********/ exit; }

if(number

=======(答案1)======= scanf(\

=======(答案2)======= for(i=N-2;i>=0;i--) =========或========= for(i=N-2;0<=i;i--)

=======(答案3)======= a[ i + 1 ]=a[i];

=======(答案4)======= break;

第10题 (10.0分) 题号:400 难度:中 第2章

/*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:编写函数fun求20以内所有5的倍数之积。

------------------------------------------------------*/

#define N 20 #include

int fun(int m) {

/**********FOUND**********/

int s=0,i; for(i=1;i

/**********FOUND**********/

if(i%m=0) /**********FOUND**********/

s=*i; return s; } main() {

int sum; sum=fun(5);

printf(\以内所有%d的倍数之积为: %d\\n\} 答案:

=======(答案1)======= int s=1,i;

=======(答案2)======= if(i%m==0)

=======(答案3)======= s*=i;

第11题 (10.0分) 题号:397 难度:中 第2章 /*------------------------------------------------------

【程序改错】

--------------------------------------------------------

功能:输入两个实数,按代数值由小到大输出它们,并在fun() 函数中输出。(输出的数据都保留2位小数)

------------------------------------------------------*/

#include fun() {

/**********FOUND**********/ float t float a, b ;

scanf(\ /**********FOUND**********/ if(a

/**********FOUND**********/ printf(\} main() { fun(); } 答案:

=======(答案1)======= float t;

=======(答案2)======= if(a>b)

=======(答案3)======= printf(\

第12题 (10.0分) 题号:21 难度:中 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:求出两个非零正整数的最大公约数,并作为函数值返回。 例如:若给num1和num2分别输入49和21,则输出的最大公约数为7。

------------------------------------------------------*/ #include int fun(int a,int b) {

int r,t; if(a

/**********FOUND**********/ b=a;

/**********FOUND**********/ a=t; } r=a%b; while(r!=0) { a=b; b=r;

/**********FOUND**********/ r=a/b; }

/**********FOUND**********/ return a; } main() {

int num1,num2,a;

scanf(\ a=fun(num1,num2);

printf(\} 答案:

=======(答案1)======= a=b;

=======(答案2)======= b=t;

=======(答案3)======= r=a%b;

=======(答案4)======= return b;

=========或========= return (b);

=========或========= return(b);

第13题 (10.0分) 题号:3 难度:难 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:用起泡法对10个整数从小到大排序。

------------------------------------------------------*/

#include

/**********FOUND**********/ void sort(int x,int n) {

int i,j,t;

for(i=0;i

/**********FOUND**********/ for(j=0;j

/**********FOUND**********/ if(x[i]>x[i+1]) {

t=x[j]; x[j]=x[j+1]; x[j+1]=t; } } main()

{

int i,n,a[100];

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

printf(\ for(i=0;i<=n-1;i++) printf(\ printf(\} 答案:

=======(答案1)======= void sort(int *x,int n) =========或========= void sort(int x[],int n)

=======(答案2)======= for(j=0;j< n -1 -i ;j++) =========或========= for(j=0; n -1 -i >j;j++) =========或========= for(j=0;jj;j++) =========或========= for(j=0;j<= n -2 -i ;j++)

=======(答案3)======= if(x[j]>x[ j + 1 ]) =========或========= if(x[ j + 1]

=======(答案4)======= sort(a,n);

第14题 (10.0分) 题号:253 难度:易 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:以下程序把两个数按由大到小的顺序输出来.

------------------------------------------------------*/ #include

/***********FOUND***********/ swap( int *p1,*p2) { int p; p=*p1; *p1=*p2; *p2=p; } main( ) {

int a,b, *p,*q; printf(\

/***********FOUND***********/ scanf(\ p=&a; q=&b; if(a

printf(\ /***********FOUND***********/ printf(\} 答案:

=======(答案1)======= swap( int *p1,int *p2) =========或========= void swap( int *p1,int *p2)

=======(答案2)======= scanf(\

=======(答案3)=======

printf(\=========或=========

printf(\

第15题 (10.0分) 题号:23 难度:中 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输 出主对角线上的元素之和sum。

------------------------------------------------------*/

#include void fun() {

int a[3][3],sum; int i,j;

/**********FOUND**********/ a=0;

for(i=0;i<3;i++) for(j=0;j<3;j++)

/**********FOUND**********/ scanf(\ for(i=0;i<3;i++)

/**********FOUND**********/ sum=sum+a[i][j];

/**********FOUND**********/ printf(\} main() { fun(); } 答案:

=======(答案1)======= sum=0;

=======(答案2)======= scanf(\

=======(答案3)=======

sum= sum + a[i][i] ; =========或========= sum+=a[i][i];

=======(答案4)======= printf(\

第16题 (10.0分) 题号:10 难度:中 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:判断m是否为素数,若是返回1,否则返回0。

------------------------------------------------------*/ #include

/**********FOUND**********/ void fun( int n) {

int i,k=1; if(m<=1) k=0;

/**********FOUND**********/ for(i=1;i

/**********FOUND**********/ if(m%i=0) k=0;

/**********FOUND**********/ return m; }

void main() {

int m,k=0;

for(m=1;m<100;m++) if(fun(m)==1) {

printf(\ if(k%5==0) printf(\ } } 答案:

=======(答案1)=======

int fun( int m) =========或========= fun( int m)

=======(答案2)======= for(i=2;ii;i++) =========或========= for(i=2;i<=m-1;i++) =========或========= for(i=2;m-1>=i;i++)

=======(答案3)======= if( m%i == 0 ) k=0;

=======(答案4)======= return k;

第17题 (10.0分) 题号:31 难度:易 第1章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。 max代表最高分,min代表最低分,avg代表平均分。

------------------------------------------------------*/ #include main( ) { int i;

/***********FOUND***********/ float a[8],min,max,avg; printf(\ for(i=0;i<=9;i++) {

printf(\ /***********FOUND***********/ scanf(\ }

/***********FOUND***********/ max=min=avg=a[1];

d=x0/10; e=x;

/**********FOUND**********/ if (a==0)

printf(\ else if (b!=0)

printf(\ else if (c!=0)

printf(\ else if (d!=0)

printf(\ else if (e!=0)

printf(\} 答案:

=======(答案1)======= long a,b,c,d,e,x;

=======(答案2)======= b=x000/1000;

=======(答案3)======= if (a!=0)

=========或========= if (!a)

第38题 (10.0分) 题号:410 难度:易 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:输入一行字符,分别统计出其中英文字母、空格、数字和 其它字符的个数。

------------------------------------------------------*/

#include main() {

char c;

int letters=0,space=0,digit=0,others=0; printf(\ /**********FOUND**********/ while((c=getchar())=='\\n') {

/**********FOUND**********/ if(c>='a'&&c<='z'&&c>='A'&&c<='Z') letters++;

/**********FOUND**********/ else if(c=!' ') space++;

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

printf(\ space,digit,others); } 答案:

=======(答案1)======= while((c=getchar())!='\\n')

=======(答案2)=======

if( c>='a'&&c<='z' || c>='A'&&c<='Z' ) =========或=========

if( c<='z'&&c>='a' || c>='A'&&c<='Z' ) =========或=========

if( c <= 'z' && c >= 'a' || c >= 'A' && c<='Z' )

=======(答案3)======= else if(c==' ')

第39题 (10.0分) 题号:412 难度:难 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉 一半,又多吃了一个。以后每天早上都吃了前一天剩下的一

半零一个。到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘了多少。

------------------------------------------------------*/

#include main() {

int day,x1,x2; day=9;

/**********FOUND**********/ x2==1; while(day>0) {

/**********FOUND**********/ x1=(x2+1)/2; x2=x1;

/**********FOUND**********/ day++; }

printf(\} 答案:

=======(答案1)======= x2=1;

=======(答案2)======= x1= ( x2 + 1 ) * 2 ;

=======(答案3)======= day--;

=========或========= day-=1;

=========或========= day=day-1;

第40题 (10.0分) 题号:439 难度:易 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:求100以内(包括100)的偶数之和.

------------------------------------------------------*/

#include main() {

/**********FOUND**********/ int i,sum=1;

/**********FOUND**********/ for(i=2;i<=100;i+=1) sum+=i;

/**********FOUND**********/ printf(\} 答案:

=======(答案1)======= int i,sum=0;

=======(答案2)======= for(i=2;i<=100;i+=2)

=======(答案3)======= printf(\

第41题 (10.0分) 题号:404 难度:易 第2章 /*------------------------------------------------------ 【程序改错】

--------------------------------------------------------

功能:编写函数求2!+4!+6!+8!+10+12!+14!。

------------------------------------------------------*/

#include

long sum(int n) {

/**********FOUND**********/ int i,j long t,s=0;

/**********FOUND**********/ for(i=2;i<=n;i++) { t=1;

for(j=1;j<=i;j++) t=t*j; s=s+t; }

/**********FOUND**********/ return(t); } main() {

printf(\} 答案:

=======(答案1)======= int i,j;

=======(答案2)======= for(i=2;i<=n;i=i+2) =========或========= for(i=2;i<=n;i+=2) =========或========= for(i=2;i<=n;i++,i++)

=======(答案3)======= return(s);

第42题 (10.0分) 题号:553 难度:中 第1章 /*------------------------------------------------------- 【程序改错】

---------------------------------------------------------

题目:列程序的功能为:已知圆锥半径r和高h,计算圆锥体积v。请纠正程序中存在错误, 使程序实现其功能。

-------------------------------------------------------*/ #include main() {

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

Top