C语言程序设计真题-程序改错2
1 【程序改错】
功能
用选择法对数组中的 n 个元素按从小到大的顺序进行排序。
#include "stdio.h"
#define N 20
void fun(int a[], int n)
{
int i, j, t, k;
for (j = 0; j < n-1; j++)
{
/**********ERROR**********/
k = j
for (i = j+1; i < n; i++)
/**********ERROR**********/
if(a[i] > a[k])
/**********ERROR**********/
k = j;
t = a[k];
a[k] = a[j];
a[j] = t;
}
}
void main()
{
int a[N]={9,6,8,3,-1},i, m = 5;
printf("排序前的数据:");
for(i = 0; i < m; i++)
printf("%d ",a[i]);
printf("\n");
fun(a,m);
printf("排序后的数据:");
for(i = 0; i < m; i++)
printf("%d ",a[i]);
printf("\n");
}
改错参考答案
k = j;if(a[i] < a[k])或if(a[k] > a[i])k = i;
2 【程序改错】
功能
计算级数 ex=1+x+x2/2!+x3/3!+…+xn/n! 的值。其中 xn 代表 x 的 n 次方。
#include "stdio.h"
main()
{
int m,n;
float x,term,ex1,ex2;
printf("x,m=");
scanf("%f %d",&x,&m);
/**********ERROR**********/
ex1==ex2=1;
term=1;
for(n=1;n<=m;n++)
{
/**********ERROR**********/
term*=x%n;
ex1+=term;
}
ex2=term;
/**********ERROR**********/
for (n=m;n>1; n--)
{
term*=n/x;
ex2+=term;
}
printf("exforward=%f exbackrard=%f\n",ex1,ex2);
}
改错参考答案
ex1=ex2=1;term*=x/n;for(n=m;n>=1;n--)
3 【程序改错】
题目
求两个整数的最小公倍数。
注意
不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
main()
{
int a,b,i,j,t;
scanf("%d,%d",&a,&b);
if(a>b) t=a;
else t=b;
/**********ERROR**********/
for(i=t;i<=a;i++)
{
if(i%a==0&&i%b==0)
/**********ERROR**********/
j=i;break;
}
}
改错参考答案
for(i=t;;i++)或for(i=t;i<=a*b;i++){j=i;break;}
4 【程序改错】
功能
求广义菲玻那契级数的第 n 项。广义菲玻那契级数的前 n 项为:1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( ) 函数。
例如
若 n = 15,则应输出:The value is: 2209。
#include "conio.h"
#include "stdio.h"
long fun ( int n )
{
long a=1, b=1, c=1, d=1, k;
/**********ERROR**********/
for (k=4; k<n; k++)
{
d = a+b+c;
/**********ERROR**********/
a=b
b=c;
c=d;
}
/**********ERROR**********/
return k;
}
main( )
{
int n = 15;
clrscr( );
printf( "The value is: %ld\n", fun ( n ) );
}
改错参考答案
for (k=4; k<=n; k++)a=b;return d;
5 【程序改错】
题目
下面程序用来计算 N=10 个数的平均数,试改正程序中的错误之处。
注意
不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
/**********ERROR**********/
#define N=10
main()
{
int i;
float s=0,a;
/**********ERROR**********/
for(i=1;i<=s;i++);
{
scanf("%f",&a);
s+=a;
}
printf("aver=%f",s/N);
}
改错参考答案
#define N 10for(i=1;i<=N;i++)或for(i=1;i<=10;i++)或for(i=0;i<10;i++)
6 【程序改错】
功能
求广义菲玻那契级数的第 n 项。广义菲玻那契级数的前 n 项为:1,1,1,3,5,9,17,31,…… 项值通过函数值返回 main ( ) 函数。
例如
若 n = 15,则应输出:The value is: 2209。
#include "conio.h"
#include "stdio.h"
long fun ( int n )
{
long a=1, b=1, c=1, d=1, k;
/**********ERROR**********/
for (k=4; k<n; k++)
{
d = a+b+c;
/**********ERROR**********/
a=b
b=c;
c=d;
}
/**********ERROR**********/
return k;
}
main( )
{
int n = 15;
clrscr( );
printf( "The value is: %ld\n", fun ( n ) );
}
改错参考答案
for (k=4; k<=n; k++)a=b;return d;
7 【程序改错】
题目
从键盘输入数 a、b、c 后,输出其中最小的数。
注意
不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
main()
{
int a,b,c,t,m;
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
/**********ERROR**********/
t=(a>b)?a :b;
/**********ERROR**********/
m=(t>c)?t :c;
printf("m is %d\n", m);
}
改错参考答案
t=(a<b)?a:b;m=(t<c)?t:c;
8 【程序改错】
功能
读取 7 个数(1-50)的整数值,每读取一个值,程序打印出该值个数的 *。
#include "stdio.h"
main()
{
int i,a,n=1;
int a,b,c,t,m;
/**********ERROR**********/
while(n<7)
{
do
{
scanf("%d",&a);
}
/**********ERROR**********/
while(a<1&&a>50);
/**********ERROR**********/
for(i=0;i<=a;i++)
printf("*");
printf("\n");
n++;
}
}
改错参考答案
while(n<=7)或while(n<8)while(a<1||a>50);或while(a>50||a<1);for(i=0;i<a;i++)
9 【程序改错】
功能
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上 5,然后除以 10 的余数代替该位数字。再将新生成数据的第一位和第四位交换,第二位和第三位交换。
例如
输入一个四位整数 1234,则结果为:9876。
#include "stdio.h"
main()
{
int a,i,aa[4],t;
printf("输入一个四位整数:");
/**********ERROR**********/
scanf("%d",a);
aa[0]=a%10;
/**********ERROR**********/
aa[1]=a%100%10;
aa[2]=a%1000/100;
aa[3]=a/1000;
/**********ERROR**********/
for(i=0;i<3;i++)
{
aa[i]+=5;
aa[i]%=10;
}
for(i=0;i<=3/2;i++)
{
t=aa[i];
aa[i]=aa[3-i];
aa[3-i]=t;
}
for(i=3;i>=0;i--)
printf("%d",aa[i]);
}
改错参考答案
scanf("%d",&a);aa[1]=a%100/10;for(i=0;i<=3;i++)或for(i=0;i<4;i++)
10 【程序改错】
功能
编写函数 fun 计算下列分段函数的值:
$$
f(x) = \begin{cases}
20·x & x<0且x\neq-3 \\
\sin(x) & 0\leq x<10且x\neq2及x\neq3 \\
x^2+x-1 & 其他
\end{cases}
$$
#include "math.h"
#include "stdio.h"
float fun(float x)
{
/**********ERROR**********/
float y
/**********ERROR**********/
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;
/**********ERROR**********/
return x;
}
main()
{
float x,f;
printf("Input x=");
scanf("%f",&x);
f=fun(x);
printf("x=%f,f(x)=%f\n",x,f);
}
改错参考答案
float y;if (x<0 && x!=-3.0)return y;
11 【程序改错】
题目
打印出 100~200 间 (包括 100 和 200) 所有不能被 3 整除的数。
注意
不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
main()
{
int n;
for(n=100;n<=200;n++)
{
/**********ERROR**********/
if(n%3=0)
/**********ERROR**********/
break;
printf("%3d",n);
}
}
改错参考答案
if(n%3==0)continue;

