C语言程序设计真题-程序改错
程序改错
题号:12101
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#include "stdio.h"
main()
{
char c;
int letters = 0, space = 0, digit = 0, others = 0;
printf("please input some characters\n");
while((c = getchar()) == '\n') // Error 1
{
if(c >= 'a' && c <= 'z' && c >= 'A' && c <= 'Z') // Error 2
letters++;
else if(c =! ' ') // Error 3
space++;
else if(c >= '0' && c <= '9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",
letters, space, digit, others);
}
答案:
- 位置 1:
while((c = getchar()) != '\n') - 位置 2:
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') - 位置 3:
else if(c == ' ')
题号:8384
功能:用起泡法对10个整数从小到大排序。
#include "stdio.h"
void sort(int x, int n) // Error 1
{
int i, j, k, t;
for(i = 0; i < n - 1; i++)
for(j = 0; j < n - i; j++) // Error 2
if(x[i] > x[i + 1]) // Error 3
{
t = x[j];
x[j] = x[j + 1];
x[j + 1] = t;
}
}
main()
{
int i, n, a[100];
printf("please input the length of the array:\n");
scanf("%d", &n);
for(i = 0; i < n; i++) scanf("%d", &a[i]);
sort(n, a); // Error 4
printf("output the sorted array:\n");
for(i = 0; i <= n - 1; i++) printf("%5d", a[i]);
printf("\n");
}
答案:
- 位置 1:
void sort(int *x, int n)或void sort(int x[], int n) - 位置 2:
for(j = 0; j < n - 1 - i; j++) - 位置 3:
if(x[j] > x[j + 1]) - 位置 4:
sort(a, n);
题号:9441
题目: 找出一个大于给定整数m且紧随m的素数,并作为函数值返回。
#include<conio.h>
#include<stdio.h>
int fun(int m)
{
int i;k; /* 错误1 */
for(i=m+1;;i++)
{
for(k=2;k<i;k++)
if(i%k!=0) /* 错误2 */
break;
if(k=i) /* 错误3 */
return(i);
}
}
main()
{
int n;
clrscr();
printf("\nPlease enter n:");
scanf("%d",&n);
printf("%d\n",fun(n));
getch();
}
答案:
- 错误1:
int i,k;或int i; int k;或int k,i;或int k; int i; - 错误2:
if(i%k==0)或if(!(i%k)) - 错误3:
if(k==i)或if(i==k)
题号:8576
题目: 给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它能得出正确结果。
#include <stdio.h>
void fun(long s,long t) /* 错误1 */
{
long s1=10;
s/=10;
*t=s%10;
while(s<0) /* 错误2 */
{
s=s/100;
*t=s%10*s1+*t;
s1=s1*10;
}
}
main()
{
long s,t;
printf("\nPlease enter s:");
scanf("%ld",&s);
fun(s,&t);
printf("The result is:%ld\n",t);
}
答案:
- 错误1:
void fun(long s,long *t) - 错误2:
while(s>0)或while(s!=0)
题号:7182
题目: 给定程序中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。
例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。
请改正程序中的错误,使它能得出正确结果。
#include <stdio.h>
void fun(char *p, char *b)
{
int i, k=0;
while(*p)
{
i=1;
while(i<=3 && *p)
{
b[k] = *p; /* 错误1 */
k++;
p++;
i++;
}
if(*p)
{
b[k++] = ' '; /* 错误2 */
}
}
b[k] = '\0';
}
main()
{
char a[80], b[80];
printf("Enter a string: ");
gets(a);
printf("The original string: ");
puts(a);
fun(a, b);
printf("\nThe string after insert space: ");
puts(b);
printf("\n\n");
}
答案:
- 错误1:
b[k] = *p; - 错误2:
b[k++] = ' ';
题号:10239
题目: 求一个3行4列矩阵的外框的元素值之和。
注意:矩阵四个角上的元素不能重复加。
例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,四框元素值之和应为65。
#include "stdio.h"
int fun(int a[3][4], int m, int n)
{
int i, j, s, s1=0, s2=0, s3=0, s4=0; /* 错误1 */
for(j=0; j<n; j++)
{
s1 = s1 + a[0][j];
s2 = s2 + a[m-1][j]; /* 错误2 */
}
for(i=1; i<m-1; i++) /* 错误3 */
{
s3 = s3 + a[i][0];
s4 = s4 + a[i][n-1];
}
s = s1 + s2 + s3 + s4; /* 错误4 */
return s;
}
void main()
{
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
printf("total=%d\n", fun(a, 3, 4));
}
答案:
- 错误1:
int i, j, s, s1=0, s2=0, s3=0, s4=0; - 错误2:
s2 = s2 + a[m-1][j];或s2 += a[m-1][j];或s2 = a[m-1][j] + s2; - 错误3:
for(i=1; i<m-1; i++)或for(i=1; i<-1+m; i++)或for(i=1; m-1>i; i++)或for(i=1; -1+m>i; i++)或for(i=1; i<=m-2; i++)或for(i=1; m-2>=i; i++) - 错误4:
s = s1 + s2 + s3 + s4;
题号:11864
题目: 用下面的和式求圆周率的近似值。直到最后一项的绝对值小于等于 0.0001。
$$
\frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \dots
$$
#include "stdio.h"
#include "math.h" /* 错误1 */
void fun()
{
int i = 1;
float s = 0, t, p = 1;
t = 1; /* 错误2 */
while (fabs(t) > 1e-4) /* 错误3 */
{
s = s + t;
p = -p;
i = i + 2;
t = p / i;
}
printf("pi=%f\n", s * 4); /* 错误4 */
}
void main()
{
fun();
}
答案:
- 错误1:
#include "math.h"或#include <math.h> - 错误2:
t = 1; - 错误3:
while (fabs(t) > 1e-4)或while (0.0001 < fabs(t))或while (1e-4 < fabs(t))或while (fabs(t) > 0.0001) - 错误4:
printf("pi=%f\n", s * 4);或printf("pi=%f\n", 4 * s);
题号:1920
题目: 一个偶数总能表示为两个素数之和。
#include "stdio.h"
#include "math.h"
main()
{
int a, b, c, d;
scanf("%d", &a); /* 错误1 */
for (b = 3; b <= a / 2; b += 2)
{
for (c = 2; c <= sqrt(b); c++)
if (b % c == 0)
break;
if (c > sqrt(b))
d = a - b; /* 错误2 */
else
break;
for (c = 2; c <= sqrt(d); c++)
if (d % c == 0) /* 错误3 */
break;
if (c > sqrt(d))
printf("%d=%d+%d\n", a, b, d);
}
}
答案:
- 错误1:
scanf("%d", &a); - 错误2:
d = a - b; - 错误3:
if (d % c == 0)
题号:9037
题目: 编写函数 fun 生成一个周边元素为 5,其它元素为 1 的 3×3 的二维数组。
#include "stdio.h"
main()
{
int a[3][3], i, j;
fun(a);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", a[i][j]);
printf("\n");
}
getch();
}
fun(int arr[][3])
{
int i, j; /* 错误1 */
for (i = 0; i < 3; i++) /* 错误2 */
for (j = 0; j < 3; j++)
if (i == 0 || j == 0 || i == 2 || j == 2)
arr[i][j] = 5;
else if (i + j == 1 || i + j == 3) /* 错误3 */
arr[i][j] = 5;
else
arr[i][j] = 1;
}
答案:
- 错误1:
int i, j; - 错误2:
for (i = 0; i < 3; i++) - 错误3:
else if (i + j == 1 || i + j == 3)
题号:12176
题目: 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#include <stdio.h>
void main()
{
char letter;
printf("please input the first letter of someday\n");
while ((letter = getch()) != 'Y') /* 错误1 */
{
switch (letter)
{
case 'S':
printf("please input second letter\n");
if ((letter = getch()) == 'a')
printf("saturday\n");
else if ((letter = getch()) == 'u')
printf("sunday\n");
else
printf("data error\n");
break;
case 'F':
printf("friday\n");
break;
case 'M':
printf("monday\n");
break;
case 'T':
printf("please input second letter\n");
if ((letter = getch()) == 'u') /* 错误2 */
printf("tuesday\n");
else if ((letter = getch()) == 'h')
printf("thursday\n");
else
printf("data error\n");
break; /* 错误3 */
case 'W':
printf("wednesday\n");
break;
default:
printf("data error\n");
}
}
getch();
}
答案:
- 错误1:
while ((letter = getch()) != 'Y') - 错误2:
if ((letter = getch()) == 'u') - 错误3:
break;
题号:10318
题目: 定义一个 3×3 的二维数组 b,数组元素的值由键盘输入,输出其中的最小值及所在的行下标。
#include "stdio.h"
int hang;
int fun(int b[3][3]);
main()
{
int b[3][3], i, j, min;
printf("给数组元素赋值:\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &b[i][j]);
printf("输出3×3的矩阵:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%4d", b[i][j]);
printf("\n");
}
min = fun(b);
printf("min=%d,hang=%d\n", min, hang);
}
int fun(int b[3][3])
{
int i, j, min = b[0][0]; /* 错误1 */
hang = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
if (min > b[i][j]) /* 错误2 */
{
min = b[i][j];
hang = i; /* 错误3 */
}
return min; /* 错误4 */
}
答案:
- 错误1:
int i, j, min = b[0][0]; - 错误2:
if (min > b[i][j])或if (min >= b[i][j])或if (b[i][j] < min)或if (b[i][j] <= min) - 错误3:
hang = i; - 错误4:
return min;或return (min);
题号:8513
题目: 输出 Fibonacci 数列的前 20 项,要求变量类型定义成浮点型,输出时只输出整数部分,输出项数不得多于或少于 20。
#include "stdio.h"
void fun()
{
int i;
float f1 = 1, f2 = 1, f3;
printf("%8.0f", f1); /* 错误1 */
printf("%8.0f", f2);
i = 2; /* 错误2 */
while (i <= 20)
{
f3 = f1 + f2;
f1 = f2; /* 错误3 */
f2 = f3; /* 错误4 */
i++;
printf("%8.0f", f3);
}
printf("\n");
}
void main()
{
fun();
}
答案:
- 错误1:
printf("%8.0f", f1);或printf("%f", f1);或printf("%8f", f1); - 错误2:
i = 2; - 错误3:
f1 = f2; - 错误4:
f2 = f3;
题号:10309
题目: 调用 fun 函数。从键盘上输入一个整数给变量 n,求 1-n 之间的奇数和。如 n 输入 8,和为 16。
#include <stdio.h>
int fun(int k) /* 错误1 */
{
int m = 0;
while (k >= 1)
{
if (k % 2 == 1) /* 错误2 */
m = m + k;
k--;
}
return m;
}
main()
{
int n;
scanf("%d", &n); /* 错误3 */
printf("%d\n", fun(n));
}
答案:
- 错误1:
int fun(int k) - 错误2:
if (k % 2 == 1)或if (k % 2)或if (k % 2 != 0) - 错误3:
scanf("%d", &n);或scanf("%d",&n);
题号:7203
题目: 给定程序中函数 fun 的功能是:从低位开始取出长整型变量 s 中奇数位上的数,依次构成一个新数放在 t 中。高位仍在高位,低位仍在低位。
例如,当 s 中的数为:7654321 时,t 中的数为:7531。
请改正程序中的错误,使它能得出正确的结果。
#include <stdio.h>
void fun(long s, long *t) /* 错误1 */
{
long sl = 10;
*t = s % 10;
while (s > 0)
{
s = s / 100;
*t = s % 10 * sl + *t;
sl = sl * 10; /* 错误2 */
}
}
main()
{
long s, t;
printf("\nPlease enter s:");
scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
答案:
- 错误1:
void fun(long s, long *t) - 错误2:
sl = sl * 10;
题号:10550
程序改错:
只允许修改错误代码,其他代码不允许修改!
功能:将一个字符串中的大写字母转换成小写字母。
例如:输入aSdFG输出为asdfg。
#include<stdio.h>
/*=======ERROR=======*/
bool fun(char *c)
{
if(*c<='Z'&&*c>='A')*c-='A'-'a';
/*=======ERROR=======*/
fun= c;
}
void main()
{
/*=======ERROR=======*/
char s[81],p=s;
gets(s);
while(*p)
{
*p=fun(p);
/*=======ERROR=======*/
puts(*p);
p++;
}
putchar('\n');
}
答案:
位置1: char fun(char *c)
位置2: return *c; 或 return (*c); 或 return(*c);
位置3: char s[81],*p=s;
位置4: putchar(*p); 或 printf("%c",*p);
题号:8333
程序改错:
题目:809*??=800*??+9*??+1 其中??代表的两位数,
8*??的结果为两位数,9*??的结果为3位数。
求??代表的两位数,及809*??后的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
output(long b,long i)
{ printf("\n%ld=800*%ld+9*%ld+1\n",b,i,i);
printf("??代表的两位数: %d",i);
printf("\n809*??后的结果:%d",b);
getch();
}
main()
/*=======Error=======*/
{long int a;b;i;
a=809;
/*=======Error=======*/
for(i=10;i<100,i++)
{
/*=======Error=======*/
b=i/a+1;
if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)
output(b,i);
}
}
答案:
位置1: {long int a,b,i;
位置2: for(i=10;i<100;i++) 或 for(i=10;i<=99;i++)
位置3: b=i*a+1; 或 b=a*i+1;
题号:10431
程序改错:
题目:函数fun的功能是:根据整型形参m的值,计算如下公式的值。
$$
t=1-\frac{1}{2\times2}-\frac{1}{3\times{3}}-\dots-\frac{1}{m\times m}
$$
例如,若m=5,则应输出:0.536389
请改正程序中的错误,使它能得出正确的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
double fun(int m)
{
/*=======ERROR=======*/
int y=1;
int i;
/*=======ERROR=======*/
for(i=2;i<m;i--)
/*=======ERROR=======*/
y-=1/(i*i);
/*=======ERROR=======*/
return m;
}
main()
{
int n=5;
printf("\nthe result is %lf\n",fun(n));
}
答案:
位置1: double y=1.0;
位置2: for(i=2;i<=m;i++) 或 for(i=2;m>=i;i++) 或 for(i=2;i<m+1;i++) 或 for(i=2;i<1+m;i++) 或 for(i=2;m+1>i;i++) 或 for(i=2;1+m>i;i++)
位置3: y-=1.0/(i*i); 或 y=y-1.0/(i*i); 或 y-=1.0/(float)(i*i); 或 y=y-1.0/(float)(i*i); 或 y=y-1.0/i/i; 或 y=y-1.0/(float)i/(float)i;
位置4: return y; 或 return (y); 或 return(y);
题号:10977
程序改错:
功能:请编写函数fun,对长度为8个字符的字符串,将8个字符按降序排列。
例如:原来的字符串为CEAedcab,排序后输出为edcbaECA。
#include "stdio.h"
#include "ctype.h"
#include "conio.h"
int fun(char *s,int num)
{
/*=======ERROR=======*/
int i;j;
char t;
for(i=0;i<num;i++)
/*=======ERROR=======*/
for(j=i;j<num;j++)
/*=======ERROR=======*/
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
main()
{
char s[10];
printf("输入8个字符的字符串:");
gets(s);
fun(s,8);
printf("\n%s",s);
}
答案:
位置1: int i,j;
位置2: for(j=i+1;j<num;j++)
位置3: if(s[i]<s[j])
题号:8697
程序改错:
题目:用起泡法对10个整数从小到大排序。程序中共有4条错误语句,请改正错误。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
/*=======Error=======*/
void sort(int x,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
/*=======Error=======*/
for(j=0;j<n-i;j++)
/*=======Error=======*/
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("please input the length of the array:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
/*=======Error=======*/
sort(n,a);
printf("output the sorted array:\n");
for(i=0;i<=n-1;i++)
printf("%5d",a[i]);
printf("\n");
}
答案:
位置1: 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;j<n-(1+i);j++) 或 for(j=0;n-(1+i)>j;j++)
位置3: if(x[j]>x[j+1]) 或 if(x[j+1]<x[j])
位置4: sort(a,n);
题号:9313
程序改错:
题目:从键盘输入二维数组a[4][5]的值,求每列元素的最小值,并存入一维数组b[5]中。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
#include <stdio.h>
void fun(int a[4][5],int b[])
{
int i,j,min;
for(j=0;j<5;j++)
{
/*=======ERROR=======*/
min=a[j][0];
for(i=0;i<4;i++)
/*=======ERROR=======*/
if(min<a[i][j])
min=a[i][j];
/*=======ERROR=======*/
b[i]=min;
}
}
main()
{
int a[4][5],b[5],i,j;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
/*=======ERROR=======*/
scanf("%d",a[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
fun(a,b);
for(i=0;i<5;i++)
printf("%5d",b[i]);
}
答案:
位置1: min=a[0][j];
位置2: if(min>a[i][j]) 或 if(min>=a[i][j]) 或 if(a[i][j]<min) 或 if(a[i][j]<=min)
位置3: b[j]=min;
位置4: scanf("%d",&a[i][j]);
题号:10425
程序改错:
功能:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如:若输入整数:2310,则应输出:2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
#include "conio.h"
#include "stdio.h"
/*=======ERROR=======*/
int IsPrime(integer n )
{
int i, m;
m = 1;
for ( i = 2; i < n; i++ )
/*=======ERROR=======*/
if ( n%i )
{
m = 0;
break;
}
/*=======ERROR=======*/
return ( n );
}
main( )
{
int j, k;
printf( "\nPlease enter an integer number between 2 and 10000: " );
scanf( "%d", &k );
printf( "\n\nThe prime factor(s) of %d is( are ):", k );
for( j = 2; j <= k; j++ )
if((!( k%j))&&( IsPrime(j))) printf( "\n %4d", j );
printf("\n");
}
答案:
位置1: IsPrime(int n)
位置2: if(!(n%i)) 或 if(n%i==0) 或 if((n%i)==0)
位置3: return ( m );
题号:8708
程序改错:
功能:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如:当s中的数为:87653142时,t中的数为: 7531。
#include <conio.h>
#include <stdio.h>
void fun (long s, long *t)
{
int d;
long sl=1;
/*=======ERROR=======*/
t = 0;
while ( s > 0)
{
d = s%10;
/*=======ERROR=======*/
if (d%2 == 0)
{
*t = d * sl + *t;
sl *= 10;
}
/*=======ERROR=======*/
s \= 10;
}
}
void main()
{
long s, t;
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
答案:
位置1: *t = 0;
位置2: if(d%2) 或 if(d%2!=0) 或 if((d%2)!=0) 或 if((d%2)==1) 或 if(d%2==1)
位置3: s /= 10; 或 s=s/10
题号:10800
功能: 将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如:若输入字符串"-1234",则函数把它转换为整数值 -1234。
#include"stdio.h"
long fun ( char *p)
{
int i=1;
long n=0;
/**********ERROR**********/
if(p=='-')
{
p++; i=-1;
}
else if(*p=='+')
p++;
while(*p>='0' && *p<='9')
n=10*n + *p++ - '0';
/**********ERROR**********/
return n+i;
}
void main()
{
char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
/**********ERROR**********/
n == fun(s);
printf("%ld\n",n);
}
答案:
位置 1: if(*p=='-')
位置 2: return n*i;
位置 3: n = fun(s);
题号:8722
功能: 输入n,计算s=1+1+2+1+2+3+1+2+3+4+…+1+2+3+4+…+n
#include<stdio.h>
void main()
{
/**********ERROR**********/
int i,s;p,n;
printf("Enter n:\n");
/**********ERROR**********/
scanf("%d",n);
/**********ERROR**********/
for(s=p=0,i=1;i<n;i++)
s+=p+=i;
printf("S= %d\n",s);
}
答案:
位置 1: int i,s,p,n;
位置 2: scanf("%d",&n);
位置 3: for(s=p=0,i=1;i<=n;i++)或for(s=p=0,i=1;i<n+1;i++)
题号:11686
题目: 给定程序MODI1.C中函数 fun 的功能是:从m个学生的成绩中统计出高于和等于平均分的学生人数,此人数由函数值返回。平均分通过形参传回,输入学生成绩时,用-1结束输入,由程序自动统计学生人数。
例如,若输入 8 名学生的成绩,输入形式如下:
80.5 60 72 90.5 98 51.5 88 64 -1
结果为:
The number of students :4
Ave = 75.56
注意: 不可以增加或删除程序行,也不可以更改程序的结构。
#include <conio.h>
#include <stdio.h>
#define N 20
int fun ( float *s, int n, float *aver )
{ float av, t ; int count , i;
count = 0; t=0.0;
for ( i = 0; i < n; i++ ) t += s [ i ];
av = t / n; printf( "ave =%f\n",av );
for ( i = 0; i < n; i++ )
/**********Error**********/
if ( s[ i ] < av ) count++;
/**********Error**********/
aver = av;
/**********Error**********/
return count
}
main()
{ float a, s[30], aver;
int m = 0, i;
clrscr();
printf ( "\nPlease enter marks ( -1 to end):\n " );
scanf("%f",&a );
while( a>0 ) { s[m] = a; m++; scanf ( "%f", &a );}
printf( "\nThe number of students : %d\n" , fun ( s, m, &aver ));
printf( "Ave = %6.2f\n",aver );
}
答案:
位置 1: if ( s[ i ] >= av ) count++;
位置 2: *aver = av;
位置 3: return count;
题号:8535
题目: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
注意: 不可以增加或删除程序行,也不可以更改程序的结构。
#include"stdio.h"
main()
{
/**********Error**********/
float sn=100.0;hn=sn/2;
int n;
/**********Error**********/
for(n=2;n<10;n++)
{
sn=sn+2*hn;
/**********Error**********/
hn=hn%2;
}
printf("the total of road is %f\n",sn);
printf("the tenth is %f meter\n",hn);
}
答案:
位置 1: float sn=100.0,hn=sn/2;
位置 2: for(n=2;n<=10;n++) 或 for(n=2;n<11;n++)
位置 3: hn=hn/2;
题号:12146
题目: 函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49和21,则输出的最大公约数为7。
请改正程序中的错误,使它能得出正确的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
int fun(int a,int b)
{
int r,t;
if(a<b)
{
t=a;
/**********Error**********/
b=a;
/**********Error**********/
a=t;
}
r=a%b;
while(r!=0)
{
a=b;
b=r;
/**********Error**********/
r=a/b;}
/**********Error**********/
return a;
}
main()
{
int num1,num2,a;
scanf("%d%d",&num1,&num2);
a=fun(num1,num2);
printf("the maximum common divisor is %d\n\n",a);
}
答案:
位置 1: a=b;
位置 2: b=t;
位置 3: r=a%b;}
位置 4: return b; 或 return (b);
题号:8716
题目: 给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:8642。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
#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;
/**********Error**********/
if(d%2=0)
/**********Error**********/
{ *t=d* sl+ t;
sl *= 10;
}
/**********Error**********/
s\=10;
}
}
main()
{ long s, t;
clrscr();
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
getch();
}
答案:
位置 1: if(d%2==0)
位置 2: { *t=d* sl+ *t;
位置 3: s/=10; 或 s=s/10;
题号:10005
题目: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
#include"stdio.h"
main()
{
int i=5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
/**********Error**********/
int next;
if(n<=1)
{
/**********Error**********/
next!=getchar();
printf("\n\0:");
putchar(next);
}
else
{
next=getchar();
/**********Error**********/
palin(n);
putchar(next);
}
}
答案:
位置 1: char next;
位置 2: next=getchar();
位置 3: palin(n-1);
题号:9811
题目: 根据整型形参m,计算如下公式的值:
$$y = 1 + \frac{1}{3} + \frac{1}{5} + \frac{1}{7} + \cdots + \frac{1}{2m-3}$$
注意:不可以增加或删除程序行,也不可以更改程序的结构。
#include "stdio.h"
double fun(int m)
{
/**********ERROR**********/
double y=1
int i;
/**********ERROR**********/
for(i=1; i<m; i++)
/**********ERROR**********/
y+=1.0/(2i-3);
return(y);
}
main()
{
int n;
printf("Enter n: ");
scanf("%d", &n);
printf("\nThe result is %1f\n", fun(n));
}
答案:
位置 1: double y=1;
位置 2: for(i=1; i<=m; i++)
位置 3: y+=1.0/(2*i-3);
题号:1512
功能: 求广义菲玻那契级数的第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 ) );
}
答案:
位置 1: for (k=4; k<=n; k++)
位置 2: a=b;
位置 3: return d;

