资源描述
试卷编号:9477
所属语言:C语言
试卷方案:TC_150421153314
试卷总分:1530分
共有题型:1种
一、程序改错 共153题 (共计1530分)
第1题 (10.0分) 题号:383 难度:易 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:分别统计输入的字符串中各元音字母(即:A、E、i、O、U)
的个数。
注意:字母不分大、小写。
例如:若输入:THis is a boot,则输出应该是:1、0、2、2、0。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
fun ( char *s, int num[5] )
{
int k, i=5;
for ( k = 0; k<i; k++ )
/**********FOUND**********/
num[i]=0;
for (; *s; s++)
{
i = -1;
/**********FOUND**********/
switch ( s )
{
case 'a':
case 'A':
{
i=0;
break;
}
case 'e':
case 'E':
{
i=1;
break;
}
case 'i':
case 'I':
{
i=2;
break;
}
case 'o':
case 'O':
{
i=3;
break;
}
case 'u':
case 'U':
{
i=4;
break;
}
}
/**********FOUND**********/
if (i < 0)
num[i]++;
}
}
main( )
{
char s1[81]; int num1[5], i;
printf( "\nPlease enter a string: " ); gets( s1 );
fun ( s1, num1 );
for ( i=0; i < 5; i++ )
printf ("%d ",num1[i]);
printf ("\n");
}
答案:
=======(答案1)=======
num[k]=0;
=======(答案2)=======
switch(*s)
=======(答案3)=======
if (i >= 0)
第2题 (10.0分) 题号:586 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
在主函数中从键盘输入若干个数放入数组中,用0结束输入并放
在最后一个元素中。下列给定程序中,函数fun()的功能是计算
数组元素中值为负数的平均值(不包括0)。
例如:数组中元素的值依次为43,-47,-21,53,-8,12,0,
则程序的运行结果为-25.333333。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序
的结构。
试题程序:
-------------------------------------------------------*/
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
double fun(int x[ ])
{
double sum = 0.0;
int c = 0, i = 0;
/***********FOUND***********/
while(x[i]==0)
{
if(x[i]<0)
{
sum=sum+x[i];
c++;
}
i++;
}
/***********FOUND***********/
sum=sum\c;
return sum;
}
void main()
{
int x[1000];
int i=0;
system("CLS");
printf("\nPlease enter some data(end with 0) :");
do
{
scanf("%d",&x[i]);
}
while(x[i++]!=0);
printf("%f\n",fun(x));
}
答案:
=======(答案1)=======
while(x[i]!=0)
=======(答案2)=======
sum=sum/c;
第3题 (10.0分) 题号:423 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有n个整数,使其前面各数顺序向后移m个位置,最后m个
数变成最前面的m个数。
------------------------------------------------------*/
#include<stdio.h>
move(array,n,m)
/**********FOUND**********/
int n,m,array(20);
{
int *p,array_end;
/**********FOUND**********/
array_end=(array+n-1);
for(p=array+n-1;p>array;p--)
/**********FOUND**********/
*p==*(p-1);
*array=array_end;
m--;
if(m>0) move(array,n,m);
}
main()
{
int number[20],n,m,i;
printf("the total numbers is:");
scanf("%d",&n);
printf("back m:");
scanf("%d",&m);
for(i=0;i<n-1;i++)
scanf("%d,",&number[i]);
scanf("%d",&number[n-1]);
move(number,n,m);
for(i=0;i<n-1;i++)
printf("%d,",number[i]);
printf("%d",number[n-1]);
}
答案:
=======(答案1)=======
int n,m,array[20];
=======(答案2)=======
array_end=*(array+n-1);
=======(答案3)=======
*p=*(p-1);
第4题 (10.0分) 题号:415 难度:难 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:利用递归方法求5!。
------------------------------------------------------*/
#include <stdio.h>
main()
{
int fact();
printf("5!=%d\n",fact(5));
}
int fact(j)
int j;
{
int sum;
/**********FOUND**********/
if(j=0)
/**********FOUND**********/
sum=0;
else
sum=j*fact(j-1);
/**********FOUND**********/
return j;
}
答案:
=======(答案1)=======
if(j==0)
=======(答案2)=======
sum=1;
=======(答案3)=======
return sum;
第5题 (10.0分) 题号:397 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入两个实数,按代数值由小到大输出它们,并在fun()
函数中输出。(输出的数据都保留2位小数)
------------------------------------------------------*/
#include <stdio.h>
fun()
{
/**********FOUND**********/
float t
float a, b ;
scanf("%f %f",&a,&b);
/**********FOUND**********/
if(a<b)
{
t=a;
a=b;
b=t;
}
/**********FOUND**********/
printf("%5.2f ,%5.2f\n",&a,&b);
}
main()
{
fun();
}
答案:
=======(答案1)=======
float t;
=======(答案2)=======
if(a>b)
=======(答案3)=======
printf("%5.2f, %5.2f\n",a,b);
第6题 (10.0分) 题号:551 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:下列程序从键盘输入一个数n,求1~n之和并输出。请纠正程序中存在错误,使程
序实现其功能。
如输入 5↙
输出:The sum from 1 to 5 is 15
-------------------------------------------------------*/
#include <stdio.h>
main()
{
int i=1,n;
/***********FOUND***********/
float sum;
/***********FOUND***********/
scanf("%d", n);
/***********FOUND***********/
for(;i<n;i++)
sum+=i;
printf("The sum from 1 to %d is %d\n",n,sum);
}
答案:
=======(答案1)=======
float sum=0;
=======(答案2)=======
scanf("%d",&n);
=======(答案3)=======
for(;i<=n;i++)
第7题 (10.0分) 题号:442 难度:易 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:写一个函数,求一个字符串的长度,在main函数中输入字
符串,并输出其长度。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
int length(p)
char *p;
{
int n;
n=0;
/**********FOUND**********/
while(*p=='\0')
{
n++;
p++;
}
return n;
}
main()
{
int len;
/**********FOUND**********/
char *str[20];
printf("please input a string:\n");
scanf("%s",str);
/**********FOUND**********/
len==length(str);
printf("the string has %d characters.",len);
}
答案:
=======(答案1)=======
while(*p!='\0')
=========或=========
while(*p)
=========或=========
while(*p!=0)
=========或=========
while(*p!=NULL)
=======(答案2)=======
char str[20];
=======(答案3)=======
len=length(str);
第8题 (10.0分) 题号:356 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:将长整型数中每一位上为偶数的数依次取出,构成一个新
数放在t中。高位仍在高位,低位仍在低位。
例如:当s中的数为:87654时,t中的数为:864。
------------------------------------------------------*/
#include <conio.h>
#include <stdio.h>
void fun (long s, long *t)
{
int d;
long sl=1;
*t = 0;
while ( s > 0)
{
d = s%10;
/**********FOUND**********/
if(d%2=0)
{
/**********FOUND**********/
*t=d* sl+ t;
sl *= 10;
}
/**********FOUND**********/
s\=10;
}
}
main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
答案:
=======(答案1)=======
if( d%2 == 0 )
=========或=========
if(d%2!=1)
=======(答案2)=======
*t=d* sl+ *t;
=========或=========
*t+=d*sl;
=========或=========
*t+=sl*d;
=========或=========
*t=*t+d* sl;
=========或=========
*t=*t+sl*d;
=======(答案3)=======
s/=10;
=========或=========
s=s/10;
第9题 (10.0分) 题号:420 难度:难 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:打印出杨辉三角形(要求打印出10行).
------------------------------------------------------*/
#include<stdio.h>
main()
{
int i,j;
int a[10][10];
printf("\n");
/**********FOUND**********/
for(i=1;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
/**********FOUND**********/
for(i=1;i<10;i++)
for(j=1;j<i;j++)
/**********FOUND**********/
a[i][i]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
答案:
=======(答案1)=======
for(i=0;i<10;i++)
=========或=========
for(i=0;i<=9;i++)
=======(答案2)=======
for(i=2;i<10;i++)
=========或=========
for(i=2;i<=9;i++)
=======(答案3)=======
a[i][j]=a[i-1][j-1]+a[i-1][j];
第10题 (10.0分) 题号:249 难度:中 第1章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:有一数组内放10个整数,要求找出最小数和它的下标,然后
把它和数组中最前面的元素即第一个数对换位置.
------------------------------------------------------*/
#include <stdio.h>
main( )
{
int i,a[10],min,k=0;
printf("\n please input array 10 elements\n");
for(i=0;i<10;i++)
/***********FOUND***********/
scanf("%d", a[i]);
for(i=0;i<10;i++)
printf("%d",a[i]);
min=a[0];
/***********FOUND***********/
for(i=3;i<10;i++)
/***********FOUND***********/
if(a[i]>min)
{
min=a[i];
k=i;
}
/***********FOUND***********/
a[k]=a[i];
a[0]=min;
printf("\n after eschange:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\nk=%d\nmin=%d\n",k,min);
}
答案:
=======(答案1)=======
scanf("%d",&a[i]);
=======(答案2)=======
for(i=1;i<10;i++)
=========或=========
for(i=0;i<10;i++)
=========或=========
for(i=1;i<=9;i++)
=========或=========
for(i=0;i<=9;i++)
=======(答案3)=======
if(a[i]<min)
=======(答案4)=======
a[k]=a[0];
第11题 (10.0分) 题号:358 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:求两数平方根之和,作为函数值返回。
例如:输入12和20,输出结果是:y = 7.936238。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
/**********FOUND**********/
double fun (double *a, *b)
{
double c;
/**********FOUND**********/
c = sqr(a)+sqr(b) ;
/**********FOUND**********/
return a;
}
main ( )
{
double a, b, y;
printf ( "Enter a & b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}
答案:
=======(答案1)=======
double fun (double *a, double *b)
=======(答案2)=======
c = sqrt(*a)+sqrt(*b) ;
=========或=========
c = sqrt(*b)+sqrt(*a) ;
=======(答案3)=======
return c;
=========或=========
return(c);
=========或=========
return sqrt(*b)+sqrt(*a);
=========或=========
return sqrt(*a)+sqrt(*b);
第12题 (10.0分) 题号:256 难度:难 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:判断整数x是否是同构数。若是同购数,函数返回1;否则返回0。
说明:所谓“同构数”是指这个数出现在它的平方数的右边。
例如:输入整数25,25的平方数是625,25是625中右侧的数,
所以25是同构数。
注意:x的值由主函数从键盘读入,要求不大于1000。
------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
int fun(int x)
{
/**********FOUND**********/
int k
/**********FOUND**********/
k=x;
/**********FOUND**********/
if((k%10==x)&&(k%100==x)&&(k%1000==x))
return 1;
else
return 0;
}
main()
{
int x,y;
printf("\nPlease enter a integer numbers:");
scanf("%d",&x);
if(x>100){printf("data error!\n");exit(0);}
y=fun(x);
if(y)
printf("%d YES\n",x);
else
printf("%d NO\n",x);
}
答案:
=======(答案1)=======
int k;
=======(答案2)=======
k=x*x;
=======(答案3)=======
if((k%10==x)||(k%100==x)||(k%1000==x))
第13题 (10.0分) 题号:380 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
/**********FOUND**********/
double fun (double *a, *b)
{
double c;
/**********FOUND**********/
c = sqr(a*a + b*b);
/**********FOUND**********/
return *c;
}
main ( )
{
double a, b, y;
printf ( "Enter a, b : ");
scanf ("%lf%lf", &a, &b );
y = fun (&a, &b);
printf ("y = %f \n", y );
}
答案:
=======(答案1)=======
double fun (double *a, double *b)
=======(答案2)=======
c = sqrt(*a * *a + *b * *b);
=======(答案3)=======
return c;
第14题 (10.0分) 题号:390 难度:易 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:输入一个字符串,过滤此串,滤掉字母字符,并统计新生
成串中包含的字符个数。
例如:输入的字符串为ab234$df4,则输出为:
The new string is 234$4
There are 5 char in the new string.。
------------------------------------------------------*/
#include <stdio.h>
#include <conio.h>
#define N 80
int fun(char *ptr)
{
int i,j;
/**********FOUND**********/
for(i=0,j=0;*(ptr+i)!="\\0";i++)
/**********FOUND**********/
if(*(ptr+i)>'z'|| *(ptr+i)<'a'||*(ptr+i)>'Z' || *(ptr+i)<'A')
{
/**********FOUND**********/
(ptr+j)=(ptr+i);
j++;
}
*(ptr+j)='\0';
return(j);
}
main()
{
char str[N];
int s;
printf("input a string:");gets(str);
printf("The original string is :"); puts(str);
s=fun(str);
printf("The new string is :");puts(str);
printf("There are %d char in the new string.",s);
}
答案:
=======(答案1)=======
for(i=0,j=0;*(ptr+i)!='\0';i++)
=======(答案2)=======
if( *(ptr+i)>'z' || *(ptr+i)<'a'&&*(ptr+i)>'Z' || *(ptr+i)<'A' )
=======(答案3)=======
*(ptr+j)=*(ptr+i);
第15题 (10.0分) 题号:434 难度:中 第2章
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:以下程序能求出1*1+2*2+......+n*n<=1000中满足条件的
最大的n。
------------------------------------------------------*/
#include <stdio.h>
#include "string.h"
main()
{
int n,s;
/**********FOUND**********/
s==n=0;
/**********FOUND**********/
while(s>1000)
{
++n;
s+=n*n;
}
/**********FOUND**********/
printf("n=%d\n",&n-1);
}
答案:
=======(答案1)=======
s=n=0;
=======(答案2)=======
while(s<=1000)
=======(答案3)=======
printf("n=%d\n",n-1);
第16题 (10.0分) 题号:251 难度:难
展开阅读全文