改错题
1.
在程序编辑区编写程序,程序功能如下:有一个3行4列的矩阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
例如:
输入:
1 2 3 4
5 6 7 8
9 4 2 3
输出:
max=9,row =2,colum=0
#include <stdio.h>
int main(void)
{
int max,m,i,j,r,c;
int a[3][4];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
/***********found***********/
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
/***********found***********/
if(a[i][j]>max)
{
max= a[i][j];
r=i;
c=j;
}
printf("max=%d,row =%d,colum=%d \n",max,r,c);
return 0;
}
2.
在程序编辑区编写程序,程序功能如下:任意输入两个字符串(如“Country”和“side”),并存放在s1、s2两个数组中,然后将s1、s2两个字符串连接起来,形成一个新字符串(如:“Countryside”),放在s1数组中,并输出。
例如:
输入
Country
side
输出
Countryside
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1[80], s2[40];
int i = 0, j = 0;
scanf("%s", s1);
scanf("%s", s2);
while(s1[i] != '\0') i++;
while(s2[j] != '\0')
{
s1[i++] = s2[j];
j++;
}
s1[i] = '\0';
printf("%s", s1);
return 0;
}
3.
在程序编辑区编写程序,程序功能如下: 求一维数组a中的最小元素及其下标。
例如:
输入
1 4 2 7 3 12 5 34 5 9
输出
The min is: 1,pos is: 0 。
程序中有两处错误,错误都在提示行: /found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main()
{ int a[10],i,min,pos;
for(i=0;i<10;i++) scanf("%d",&a[i]);
/************found************/
min = a[0];
pos = 0;
for ( i=1; i<10; i++)
if (min > a[i])
{
min = a[i];
/************found************/
pos = i;
}
printf("The min is:%d ,pos is:%d\n", min , pos);
}
4.
在程序编辑区编写程序,程序功能如下: 求一维数组a中值为偶数的元素之和。
例如:
输入
10 4 2 7 3 12 5 34 5 9
输出
The result is:62
请修改并运行该程序 。 程序中有两处错误,错误都在提示行: /found/的下面一行,请考生注意。 请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行 或删行,也不得更改程序的结构!
#include <stdio.h>
int main()
{ int a[10],i,s;
for(i=0;i<10;i++) scanf("%d",&a[i]);
s = 0;
for ( i=0; i<10; i++)
/************found************/
if (a[i] % 2==0 )
/************found************/
s = s + a[i];
printf("The result is:%d\n", s);
}
5
求一维数组a中所有元素的平均值,结果保留两位小数。
例如
输入
10 4 2 7 3 12 5 34 5 9
输出
The aver is:9.10
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main() {
int a[10], i;
float aver = 0.0, s = 0.0; // /found/
for (i = 0; i < 10; i++) scanf("%d", &a[i]); // 输入数组元素
for (i = 0; i < 10; i++) { // /found/ 修改为从 0 开始
s += a[i];
}
aver = s / i; // 修改为使用数组长度 10 作为分母
printf("The aver is:%.2f\n", aver);
return 0;
}
6.
在程序编辑区编写程序,程序功能如下: 输入一个百分制成绩,打印出五级记分成绩。
考试成绩在90分或90分以 上为优秀,80~89分为良好,70~79为中等,60~69为及格,低于60分 为不及格。
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main()
{
int score;
// 使用do-while循环确保输入的成绩在合理范围(0 - 100)内
do
{
scanf("%d", &score);
} while (score < 0 || score > 100);
// 根据成绩计算对应的等级分类,这里通过除以10获取对应区间的关键数字
// 例如90 - 100分除以10得到9或10,对应“优秀”等级,注意此处不需要加1,原代码加1是错误的逻辑
int t = score / 10;
switch (t)
{
case 10:
case 9:
printf("优秀!\n");
break;
case 8:
printf("良好!\n");
break;
case 7:
printf("中等!\n");
break;
case 6:
printf("及格!\n");
break;
default:
// 对于小于60分的情况(即t为0 - 5的情况),统一输出“不及格”,使用default处理更简洁
printf("不及格!\n");
break;
}
return 0;
}
7.
输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,
如果找到,输出相应的下标,否则,输出“Not Found”。
例如:
输入
2 9 8 9 6
9
输出
Index is 1
输入
2 9 8 9 6
5
输出
Not Found
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
int i, flag, x;
int a[5];
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
flag = 0;
for (i = 0; i < 5; i++)
{
if (a[i] == x)
{
printf("Index is %d\n", i);
flag = 1;
break;
}
}
if (flag == 0)
printf("Not Found\n");
return 0;
}
8.
在程序编辑区编写程序,程序功能如下:函数fun的功能是根据形参m,计算公式
T=1/1!+1/2!+ 1/3!+…+1/m!的值。
请修改并运行该程序 。 程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double fun(int m)
{
double t = 0.0;
double fac;
int i, j;
for (i = 1; i <= m; i++)
{
fac = 1.0;
for (j = 1; j <= i; j++)
fac *= j;
t += 1.0 / fac;
}
return t;
}
int main(void)
{
int m;
scanf("%d", &m);
printf("%12.10lf \n", fun(m));
return 0;
}
9.
在程序编辑区编写程序,程序功能如下:将10个整数存入数组,删除数组中的某个元素。
例如,数组中有1,2,3,4,5,6,7,8,9,10共10个元素,删除第5个元素后,数组中剩下9个元素1,2,3,4,6,7,8,9,10。
程序中有两处错误,错误都在提示行:
/found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
int a[10],i,num;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
scanf("%d",&num); /*输入要删除的元素序号*/
for(i=num;i<10;i++)
/***********found***********/
a[i-1]= a[i];
/***********found***********/
for(i=0;i<9;i++)
printf("%d ", a[i]);
return 0;
}
10
在程序编辑区编写程序,程序功能如下: 求一维数组a中的最小元素及其下标。
例如,当一维数组a中的元素为:1,4,2,7,3,12,5,34,5,9,
程序的输出应为:The min is:1,pos is:0 。
程序中有两处错误,错误都在提示行: /found/的下面一行,请考生注意。
请改正程序中的错误,使它能得出正确的结果。
注意:程序中的其它地方请考生不要随意改动,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main()
{ int a[10]={},i,min,pos;
for(i=0;i<10;i++) scanf("%d",&a[i]);
/************found************/
min = a[0];
pos = 0;
for ( i=1; i<10; i++)
if (min > a[i])
{
min = a[i];
/************found************/
pos = i;
}
printf("The min is:%d ,pos is:%d\n", min , pos);
}
填空题
1
在程序编辑区编写程序,给定程序功能是:实现从键盘上输入若干学生的成绩,统计并输出最高成绩,当输入负数时结束输入。例如:
输入:60,70,80,90,100,-1
输出:100
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
int score, max;
scanf("%d", &score); // 读取第一个成绩
max = score; // 假设第一个成绩是最高成绩
while (score >= 0) // (1) 条件改为 score >= 0,以便输入负数时结束输入
{
if (max < score) // (2) 如果当前成绩大于最高成绩,则更新最高成绩
max = score;
scanf("%d", &score); // 继续读取下一个成绩
}
printf("%d", max); // 输出最高成绩
return 0;
}
2
在程序编辑区编写程序,给定程序功能是:
用递归将整数按逆序输出。
例如:
输入
12345
输出
54321
程序有两个空(1)、(2)需要补充完整。
并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void r(int m); // 函数声明应该放在 main 函数之前或者包含在头文件中
int main(void)
{
int n;
scanf("%d", &n); // 读取一个整数
r(n); // 调用函数 r
return 0;
}
void r(int m) // 定义函数 r
{
if (m < 0) m = -m;
printf("%d", m % 10);
if (m / 10 > 0) // 如果 m 还有十位或更高位数
{
r(m / 10); // 递归调用 r,打印 m 的其余位数
}
}
2
在程序编辑区编写程序,给定程序功能是:
从键盘上输入若干个学生的成绩,统计出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。
例如
输入:
70 80 90 -1
输出:
ave = 80.00
-----------OUTPUT---------------
70.0
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
float x[100],sum=0,ave,a;
int n=0,i;
scanf("%f", &a);
while(a>=0.0 && n<100)
{
sum+=a;
x[n]=a;
n++;
scanf("%f", &a);
}
ave=sum/n;
printf("ave = %.2f\n",ave);
printf("-----------OUTPUT---------------\n");
for(i=0; i<n; i++)
if(x[i]<ave)
printf("%.1f\n",x[i]);
return 0;
}
4
在程序编辑区编写程序,给定程序功能是:
从键盘上输入一字符串s,字符串s中包含若干个数字字符,将字符串s中的数字字符放入另一个数组d,最后将数组d中的字符串输出。
例如:
输入
abc13def24
输出
1324
程序有两个空(1)、(2)需要补充完整。并将程序调试出 所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更 改程序的结构!
例如:
输入:
abc123de678
输出:
123678
#include "stdio.h"
#include "string.h"
int main(void)
{
char s[80], d[80];
int i, j;
scanf("%s", s);
for (i = j = 0; s[i] != '\0'; i++)
if (s[i] >= '0' && s[i] <= '9') // ① 检查字符是否为数字
{
d[j] = s[i];
j++;
}
d[j] = '\0'; // ② 在d数组的末尾添加空字符
puts(d);
return 0;
}
5
查找n在数组a中最后一次出现的位置(数组首元素的位置为零)。
输入5个整数,将它们存入数组a中,再输入1个数n,然后在数组中查找n,
如果找到,输出n最后一次出现的相应下标,否则,输出“Not Found”。
例如:
输入
2 9 8 9 6
9
输出
9 is No. 3
输入
2 9 8 9 6
5
输出
5 not found !
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
int a[5];
int i, k = -1, n, f = 0; // 初始化 k 为 -1,表示未找到
for(i = 0; i < 5; i++) scanf("%d", &a[i]); // 读取5个整数存入数组a
scanf("%d", &n); // 读取要查找的数n
for(i = 4; i >= 0; i--) // 从数组末尾向前查找
/************found************/
if(a[i] == n) // (1) 检查数组元素是否等于n
{
f = 1; // 找到n,设置f为1
k = i; // (2) 记录n最后一次出现的位置
break; // 找到后即退出循环
}
if(f)
printf("%d is No. %d\n", n, k); // 输出n和其最后一次出现的位置
else
printf("%d not found !\n", n); // 未找到n,输出"Not Found"
return 0;
}
6
把数组a(大小为M)中前M-1个元素中的最小值放入a的最后一个元素中。
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define M 11
int main()
{
int a[M], i;
for (i = 0; i < M - 1; i++)
scanf("%d", &a[i]);
a[M - 1] = a[0]; // 假设第一个元素是最小的
for (i = 1; i < M - 1; i++) // (1) 遍历数组的其余元素,直到M-1
/************found************/
if (a[i] < a[M - 1]) // (2) 检查当前元素是否小于已知的最小值
a[M - 1] = a[i]; // 更新最小值
printf("Min is %d\n", a[M - 1]);
return 0;
}
7.
在程序编辑区编写程序,给定程序功能是:实现从键盘上输入若干学生的成绩,统计并输出最高成绩,当输入负数时结束输入。例如:
输入:60 70 80 90 100 -1
输出:100
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
int main(void)
{
int score, max;
// (1) 初始化score并读取第一个成绩
scanf("%d", &score);
max = score; // 假设第一个成绩是最高成绩
// (2) 循环条件,当输入的成绩大于0时继续循环
while (score > 0)
{
if (max < score)
max = score; // 如果当前成绩高于最高成绩,则更新最高成绩
scanf("%d", &score); // 读取下一个成绩
}
printf("%d", max); // 输出最高成绩
return 0;
}
8
在程序编辑区编写程序,给定程序功能是:
求区间[200,2000]中所有回文数的和,回文数是正读与反读都一样的数,如525和1551。
程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。
注意:不要随意改动程序,不得增行或删行,也不得更 改程序的结构
#include <stdio.h>
int hws(long n)
{
long x = n, t = 0, k;
while (x > 0)
{
k = x % 10;
t = t * 10 + k;
x = x / 10;
}
// (1) 检查原始数和反转后的数是否相等
if (n == t) return 1;
else return 0;
}
int main(void)
{
long k, s = 0;
// (2) 调用函数hws检查每个数是否是回文数,并累加
for (k = 200; k <= 2000; k++)
if (hws(k))
s = s + k;
printf("%ld ", s);
return 0;
}