C语言程序改错
C语言程序改错

一、程序改错共137题(共计1370分)第1题(10.0分)题号:384/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#define N 20void fun ( int * a, int n ){int i, m, t, k ;for(i=0;i<2;i++){/**********FOUND**********/m=0;/**********FOUND**********/for(k=1;k<n;k++)/**********FOUND**********/if(a[k]>a[m]) k=m;t=a[i];a[i]=a[m];a[m]=t;}}main( ){int b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;for ( i=0; i<n; i++ ) printf("%d ", b[i]);printf("\n");fun ( b, n );for ( i=0; i<n; i++ )printf("%d ", b[i]);printf("\n");}答案:=======(答案1)=======m=i;=======(答案2)=======for(k=i;k<n;k++)=======(答案3)=======if(a[k]>a[m]) m=k;第2题(10.0分)题号:405/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:写计算级数 ex=1+x+x2/2!+x3/3!+ ...+xn/n! 的值。
C语言程序改错题及答案

#include <string.h>
#include <stdlib.h>
void main()
{ int n,i;
/***** 1 *****/
char str;// char*str
scanf("%d\n",&n); str=(char*)malloc(n); gets(str);
int a[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThe array is:\n"); /*输出数组元素*/
for (i=0;i<N;i++)
printf("%5d",a[i]);
for (i=0;i<N-1;i++ห้องสมุดไป่ตู้ /*排序操作*/
{
min = i;
for (j=i+1; j<N; j++)
/****** 2 *****/
putchar(\n);//‘\n’
}
}
12、在考生目录下,有Modify.c程序,该程序中“/***** N *****/”的下一行中有错误,
请改正(注意:不得加行、减//行、加句、减句,否则后果自负)。
该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
}
11、在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下
一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)
程序改错完整版---C语言

(一)功能:用选择法对数组中的n个元素按从小到大的顺序进行排序。
#include "stdio.h"#define N 20void fun(int a[], int n){int i, j, t, k;for (j = 0 ;j < n-1 ;j++){/**********ERROR**********/k = jfor (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;}}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;(二)功能:求广义菲玻那契级数的第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=bb=c;c=d;}/**********ERROR**********/return k;}main( ){int n = 15;printf( "The value is: %ld\n", fun ( n ) );}【参考答案】for (k=4; k<=n; k++)【参考答案】a=b;【参考答案】return d;(三)功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
C语言程序改错题

作品编号:DG13485201600078972981创作者:玫霸*第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*sl] = "0";}main(){char s[100], t[100];printf("\nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %s\n", t);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功能:求出以下分数序列的前n项之和。
和值通过函数值返回main函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667。
C语言程序改错及填空题

每个注行邻近,更正。
更正中,不得改程序构,也不得增句。
#define NULL 0struct stud{long num;char name[10];float score;struct stud *next;};/* ⋯⋯⋯⋯⋯ comment⋯⋯⋯⋯⋯*/ int n;struct stud create()////////struct stud *create(void){struct stud *head,*p1,*p2;n=0;p1=p2=(struct stud *)malloc(sizeof(struct stud));scanf("%ld,%s,%f",&p1->num,p1->name,&p1->score);/*⋯⋯⋯⋯⋯ comment ⋯⋯⋯⋯⋯*/head=NULL;while(p1!=0)//////////while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p1=(struct stud *)malloc(size(struct stud));scanf("%ld,%s,%f",&p1->num,p1->name,&p1->score);}p2->next=NULL;return(head);}gc57.c 的功能是互定数中的最大数和最小数。
如将下边8 个数:5,3,1,4,2,8,9,6变为:5,3,9,4,2,8,1,6程序中,最大数与最小数的交换操作经过函数调用来实现,让指针max 和 min 分别指向最大数和最小数。
程序有二处错误,请更正。
注意:不得增行和删行,也不得改正程序的构造。
main(){int i;static int a[8]={5,3,1,4,2,8,9,6};void jhmaxmin();printf(" Original array: \n");for(i=0; i<8; i++)printf("%5d",a[i]);printf("\n");jhmaxmin(a,8);printf(" Array after swaping max and min: \n");for(i=0; i<8; i++)printf("%5d",a[i]);printf("\n");}// 注意: void jhmaxmin(p,n)int p, n;这是一种老的函数形式,此刻一般这样写void jhmaxmin(int p,int n)void jhmaxmin(p,n)int p, n;//////// int *p,n;{int t, *max, *min, *end, *q;end=p+n;max=min=p;for(q=p+1; q<end; q++){ if(*q>*max) max=q;if(*q<max) min=q; ////////*q<*min}t=*max; *max=*min; *min=t;}gc101.c 的功能为 : 输入 8 个整数 , 使用指针以选择法对其进行排序( 从小到大 ). 程序中有两处错误代码 , 请更正 . 注意,不得改变程序构造。
c语言程序改错

c语⾔程序改错【程序改错】1.功能:利⽤递归函数调⽤⽅式,将所输⼊的5个字符,以相反顺序打印出来。
char next;next=getchar();palin(n-1);2.功能:求⼴义菲玻那契级数的第n项。
⼴义菲玻那契级数的前n项为: 1,1,1,3,5,9,17,31,……项值通过函数值返回 main ( )函数。
例如:若 n = 15,则应输出:The value is: 2209。
for (k=4; k<=n; k++)a=b;return d;3.功能:根据整型形参m,计算如下公式的值:y=1/2+1/8+1/18+...+1/2m*mdouble y=0.0;4.功能:编制统计营业员⼀天的营业额的程序,设程序采⽤⼀个循环实现,每次循环输⼊⼀笔交易⾦额并累计营业额。
由于营业员⼀天完成的交易次数是不确定的,为此以最后附加输⼊⼀笔0或负数交易额作为交易⾦额已全部输⼊结束的标志。
float sale,sigma;scanf("%f",&sale);sigma=sigma+sale;5.功能:读取7个数(1-50)的整数值,每读取⼀个值,程序打印出该值个数的*。
while(n<8) while(a<1||a>50);for(i=0;i6.功能:输出Fabonacci数列的前20项,要求变量类型定义成浮点型,输出时只输出整数部分,输出项数不得多于或少于20。
printf("%8f",f1);for(i=1;i<20;i++)f1=f2;f2=f3;7.功能:⼀个偶数总能表⽰为两个素数之和。
scanf("%d",&a);d=a-b;if(d%c==0)8.功能:利⽤⼆维数组输出如图所⽰的图形。
*******************************#define N 7a[i][j]=' ';z=z-1;printf("%c",a[i][j]);9.题⽬:求两个整数的最⼩公倍数。
C语言改错题-含答案

第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*sl] = "0";}main(){char s[100], t[100];printf("\nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %s\n", t);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功能:求出以下分数序列的前n项之和。
和值通过函数值返回main 函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>/**********FOUND**********/fun ( int n ){int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k <= n; k++ ){/**********FOUND**********/s = (double)a / b;c = a;a = a + b;b = c;}/**********FOUND**********/return c;}main( ){int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}答案:1). double fun(int n)2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或s=s+a/(double)b;3). return s;第3题【程序改错】功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。
c语言改错题题库及详解答案

c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。
然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。
下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。
为了修复这个错误,我们应该在声明变量时对其进行初始化。
```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。
访问数组的第6个元素会导致越界错误。
```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。
```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//改:去掉&
return 0; } 12 考查 点:输 入数据 分隔, 输出项 表示, 程序 D1005.c 的功 能是从 键盘读 入两个 整 数并在屏幕上显示。要求:输入时限定两数之间仅以逗号隔开。 #include<stdio.h> int main(void) { int a, b; /*********Found*********/ scanf("%d%d", &a, &b); //改:中间加’,’ /*********Found*********/ printf("a=%d,b=%d\n", &a, &b); //去掉& return 0; } 13、考 查点: 输入格 式控制 、if 语句 ,程序 D1006.c 的功 能是判 断输入 的数据 是否 与已经给出的数据 j 相等。 #include<stdio.h> int main(void) { long int i = 79870, j = 23; /*****Found*****/ scanf("%f", &i); //改:%ld /*****Found*****/ if (j == i); { printf("Equal!"); } else { printf("Not equal!"); } return 0; } 14、考查点:字符输入函数使用,分支条件表示,程序 D1007.c 的功能是使用 getchar 方式从键盘读入一个字符,判断该字符是否大写字符。 #include<stdio.h>
int main(void) { char ch; /****Found****/ getchar(ch); // ch = getchar(); /*****Found*****/ if ('A' <= ch, ch <= 'Z') //&& { printf("yes"); } else { printf("no"); } return 0; } 15、考查点:switch 语句结束、case 后常量表示,程序 D1008.c 的功能是判断用户 是不是输入的整数 0。 #include<stdio.h> int main(void) { int n; scanf("%d", &n); /****Found****/ switch (n); //去掉’;’ { /****Found****/ case0: //中间加空格 printf("Zero\n"); break; default: printf("Non-Zero"); break; } return 0; } 16、考查点:switch 语句、case 后常量表示,程序 D1009.c 的功能是输入一个整数, 如果为 1 时输出 100,为 2 时输出 200,其它输出 0。 #include<stdio.h>
{ t = a; a = c; c = t; } if (b > c) { t = b; b = c; c = t; } printf("after return 0; } 8 考查 点: 格式化 输出、 数据 类型的 正确使 用, 程序 D1001.c 的功 能是 求分数 序列: 2/1,3/2,5/3,8/5,13/8,21/13,....前 20 项之和,要求显示的结果中小数部分 有 4 位。 #include<stdio.h> #define T 20 int main(void) { int n; /*********Found************/ long i, j, temp, sum; i = j = sum for { 2; 1; = 0; (n=1; n<=T; n++) sum = sum + i / j; temp = i; i = i + j; j = temp; } /*********Found************/ printf("2/1+3/2+5/3+8/5+13/8+...=%5.2f\n", sum); //改:.4 return 0; }
6、 考 查 点 : 输入 分 隔 格 式 控 制 ,ห้องสมุดไป่ตู้循 环体 的 定 义 , D12.c 的 功 能 是 从 键盘 读 入 a 和 b 的值(输入格式限定为仅 a,b),在屏幕上显示 b 行 a。 #include<stdio.h> int main(void) { int a, b; /*********Found************/ scanf("%d%d", &a, &b); //中间加’,’ while (b > 0) /*********Found************/ ___________ //括号’{’ printf("%d\n", a); b--; /*********Found************/ ___________ //括号’}’ printf("bye bye!\n"); return 0; } 7 考查 点: 输入格 式控 制、变 量交换 ,程 序 D1000.c 的功 能是 从键盘 输入 3 个浮 点数 a,b,c(输入时 abc 之间以空格相隔),首先按照输入顺序显示在屏幕上,然后按从小到 大顺序把它们输出到屏幕上。 #include<stdio.h> int main(void) { float a, b, c, t; printf("please input three numbers:\n"); /*********Found************/ scanf("%f%f", &a, &b, &c); //改:%f%f%f printf("before sort:a=%g,b=%g,c=%g\n", a, b, c); if (a > b) { t = a; a = b; /*********Found************/ b = a; //改:t } if (a > c)
难度 1 1、程序 D1.c 的功能是从键盘读入一个数并在屏幕上显示。 int main(void) { int xy2; /*********Found************/ scanf("%s", &xy2); //改为:scanf("%d", &xy2); /*********Found************/ printf("xy2=%5d\n", &xy2); //改为:printf("xy2=%5d\n",xy2); return 0; } 2、程序 D2.c 的功能是调用函数,显示两个实数间最大的一个。 #include<stdio.h> float fmax(float x, float y); int main(void) { /*********Found************/ float l, 1; //i l = 3.0; i = 5.6f; /*********Found************/ printf("fmax(%5.2f, %5.2f)=%5.2f\n", i, l, fMax(i, l)); return 0; } /*********Found************/ int fmax(float x, float y) //改:float { if (x < y) return y; else return x; } 3、程序 D4.c 的功能是计算半径为 2+3 的圆的面积。 #include<stdio.h> #define PI 3.14 /*********Found************/ #define S(bj) PI*bj*bj //改: PI*(bj)*(bj)
// fmax
int main(void) { /*********Found************/ int mianJi; //改为:double mianJi = S(2+3); printf("mian ji=%5.2f\n", mianJi); return 0; } 4、相似题:D3.C,程序 D5.c 的功能是将字符串 yy 显示在屏幕上。 #include<stdio.h> int main(void) { /*********Found************/ char yy[100] = "ok??\n", //改为:; /*********Found************/ prntf("%s", yy); //改:printf return 0; } 5、考查点:数据类型选择,/运算符的使用功能是计算 1/1 + 1/2 + … + 1/N 之和并 显示。 #include<stdio.h> #define N 10 int main(void) { /*********Found************/ long jieguo = 0; //改:float int fm; for (fm = 1; fm <= N; fm++) { /*********Found************/ jieguo += 1 / fm; //改:(float) 1 / fm } printf("%8.6f\n", jieguo); return 0; }
int main(void) { int x, y; scanf("%d", &x); switch (x) { /*********Found************/ case x == 1: //改:1 y = 100; break; /*********Found************/ case x == 2: //改:2 y = 200; break; default: /*********Found************/ y = 500; //改:0 break; } printf("%d\n", y); return 0; } 17、 考 查点 :switch 语 句 case 常 量表 示, 循环 条 件表 示, 程序 D1010.c 的 功能 是输 入若干字符数据(回车表示输入结束),分别统计其中‘A’、‘B’、‘C’的个数。 #include<stdio.h> int main(void) { char c; int k1 = 0, k2 = 0, k3 = 0; /*********Found************/ while (c = getchar() != '\n') //加括号() { switch (c) { /*********Found************/ case A: //加’’ k1++; break;