C语言改错题库
- 格式:doc
- 大小:114.00 KB
- 文档页数:19
程序改错-------------------------------------1题目:在一个一维整型数组中找出其中最大的数及其下标。
程序中共有4条错误语句,请改正错误。
-----------------*/#define N 10/**********FOUND**********/float fun(int *a,int *b,int n){int *c,max=*a;for(c=a+1;c<a+n;c++)if(*c>max){max=*c;/**********FOUND**********/b=c-a;}return max;}main(){int a[N],i,max,p=0;printf("please enter 10 integers:\n");for(i=0;i<N;i++)/**********FOUND**********/scanf("%d",a[i]);/**********FOUND**********/m=fun(a,p,N);printf("max=%d,position=%d",max,p);}-------------------------------------『错误答案』:1 int fun(int *a,int *b,int n)2 *b=c-a;}3 scanf("%d",&a[i]);4 max=fun(a,&p,N);/*-----------------------------------2题目:用起泡法对10个整数从小到大排序。
程序中共有4条错误语句,请改正错误。
-------------------------------------/**********FOUND**********/void sort(int x,int n){int i,j,k,t;for(i=0;i<n-1;i++)/**********FOUND**********/for(j=0;j<n-i;j++)/**********FOUND**********/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]);sort(a,n);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]) -------------------------------------3题目:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
1 下列给定程序中,函数fun 的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。
例如,当n 为5时,函数值应为10.407143。
f(x)函数定义如下:f(x)=(1)(2)0002(1)(2)0x x x x x x x x ⎧+/->⎪==⎨⎪-/-<⎩或请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:#include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h>/*************found**************/ f(double x)2 下列给定程序中,fun 函数的功能是:根据形参m,计算下列公式的值:t=1+1/2+1/3+1/4+…+1/m例如,若输入5,则应输出2.283333。
3 下列给定程序中,函数fun 的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s 输入:AaaaBBb123CCccccd,则应输出结果:upper=5,lower=9。
4 下列给定程序中函数fun 的功能是:计算正整数num 各位上的数字之积。
例如,若输入252,则输出应该是20。
若输入202,则输出应该是0。
5 下列给定程序中函数fun 的功能是:计算n!。
例如,给n 输入5,则输出120.000000。
6 下列给定的程序中,函数fun 的功能是:计算并输出k 以内最大的10个能被13或17整除的自然数之和。
k 的值由主函数传入,若k 的值为500,则函数的值为4622。
7 下列给定程序中,函数fun()的功能是:根据整型形参m 的值,计算如下公式的值:t=1-1/(22)1/(33)...1/()m m ⨯-⨯--⨯8 在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。
c语言题库改错题及详解答案C语言是一种广泛使用的计算机编程语言,它以其强大的功能和灵活性而闻名。
在学习和掌握C语言的过程中,练习题库中的改错题是提高编程技能的有效方式。
以下是一些常见的C语言改错题及其详解答案。
1. 题目:编写一个程序,计算并输出1到10的累加和。
错误代码:```cint main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum = sum + i;}print("Sum is %d", sum);return 0;}```错误点: `print` 函数应为 `printf`。
正确代码:```c#include <stdio.h>int main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum += i; // 可以简化为 sum += i;}printf("Sum is %d\n", sum);return 0;}```2. 题目:编写一个程序,判断输入的年份是否为闰年。
错误代码:```cint main() {int year;printf("Enter a year: ");scanf("%d", &year);if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```错误点:逻辑判断的括号使用不正确。
正确代码:```c#include <stdio.h>int main() {int year;printf("Enter a year: ");scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```3. 题目:编写一个程序,实现字符串的反转。
三、读程序题1、float f=3.1415927;printf(“%f,%5.4f,%3.3f”,f,f,f);则程序的输出结果是3.141593,3.1416,3.142 .2、int x=6,y=7;printf(“%d,”,x++);printf(“%d\n”,++y);程序的输出结果是6,83、a=3;a+=(a<1)?a:1;printf(“%d”,a);结果是. 44、for (a=1,b=1;a<=100;a++){ if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}程序的输出结果a的值为22 .5、int y=1,x,*p,a[ ]={2,4,6,8,10};p=&a[1];for(x=0;x<3;x++)y + = * (p + x);printf(“%d\n”,y);程序的输出结果y的值是19 .四、程序填空题1、从键盘上输入10个数,求其平均值。
main(){int i;float f,sum;for(i=1,sum=0.0;i<11;i++){ scanf(“%f”,&f);Sum+=f ;}printf(“average=%f\n”,sum/10);}2、以下程序是建立一个名为myfile的文件,并把从键盘输入的字符存入该文件,当键盘上输入结束时关闭该文件。
#include <stdio.h>main(){ FILE *fp;char c;fp= ;do{c=getchar();fputs(c,fp);}while(c!=EOF);3、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
请填空。
main(){ float x,amax,amin;scanf(“%f”,&x);amax=x;amin=x;while(x>=0.0 ){ if(x>amax)amax=x;if(x<=amin )amin=x;scanf(“%f”,&x);}printf(“\namax=%f\namin=%f\n”,amax,amin);}三、阅读程序题(1) 3.141593,3.1416,3.142(2)6,8(3) 4(4)22(5)19四、程序填空题1、scanf(“%f”,&f);sum+=f;2、fopen(“myfile”,w)fclose(fp);3、x>=0.0 x<=amin三、阅读程序题1、int x=6,y=7;printf(“%d,”,x++);printf(“%d\n”,++y);程序的输出结果是______.2、float f=3.1415927;printf(“%f,%5.4f,%3.3f”,f,f,f);则程序的输出结果是______.3、a=3;a+=(a<1)a:1;printf(“%d”,a);结果是______.4、main(){ int a[5]={2,4,6,8,10},*P,* *k;p=a;k=&p;printf(“%d,”,*(p++));printf(“%d\n”,* *k);程序的输出结果是______.5、main(){int a,b;for (a=1,b=1;a<=100;a++){ if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;} }程序的输出结果a的值为______.四、程序填空题1、求主次对角线之和。
第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语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目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;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。
```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。
应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。
```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。
应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。
```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。
应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。
1、下列给定程序中,函数fun的功能是:将s所指字符串的郑旭和反序进行连接,形成的新串放在t所指的数组中2、函数fun的功能是:用下面的公式求π的近似值,知道最后一项的绝对值小于指定的数为止。
3、函数fun的功能是:传入一个整数m,计算如下公式的值。
T=1/2-1/m。
4、函数fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。
5、从参数1-55,查找能被3整除且有一位上的数值是5的数,把这些数放在b所指的属猪中,这些数的个数作为函数值返回。
规定函数中a1放个位数,a2放十位数。
6、求出s所指字符串中最后一次出现的t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;若未能找到,则函数值为null。
7、按以下递归公式求函数的值fun(n)={10 (n=1)。
8、函数fun和funx的功能是:用二分法求方程2x-4x+3x-6=0的一个根,并要求绝对误差不超过0.001。
9、首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的升序字符接在c所指的数组的尾部。
10、计算整数n的阶乘。
11、计算函数F(x,y,z)=(x+y)的值。
其中x和y的值不相等,z和y的值不相等。
12、利用折半查找法查找整数m在数组中的位置。
若找到,返回其下标值;否则,返回-1。
13、求三个数的最小公倍数。
14、将s所指字符串中最后一次出现的鱼t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。
要求t1和t2所指字符串的长度相同。
15、逐个比较p、q所指两个字符串对应位置上的字符,并把ASCII值大或相等的字符一次存放到c所指的数组中,形成一个新的字符串。
16、根据以下公示求π值,并作为函数值返回。
17、将s所指字符串中出现的与t1所指字符串相同的子串全部替换为t2所指字符串,所形成的新串放在w所指的数组中。
C语言改错题库目录C语言改错题库 (1)从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
(3)2.求一维数组a中的值为偶数的元素之和。
(3)3.求二维数组a中的最大值。
(4)5.猴子第一天摘下若干桃子 (5)6. 将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
(5)7.求出a所指数组中最大数(规定最大数不在a[0]中),最大值和a[0]中的数对调。
(6)8.输出200~300之间的所有素数,要求每行输出8个素数。
(6)9.打印九九乘法表 (6)10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。
(7)10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。
(7)11.打印输出以下图形 (8)12.求:1!+2!+3!+ ...... + 20! (8)13.输入一个百分制成绩,打印出五级记分成绩。
(8)14.求一维数组a中值为奇数的元素的平均值。
(9)15.将[m,n]之间的所有素数存放到一维数组a中,并输出。
(9)16.求一维数组a中所有元素的平均值。
(10)17.将[2,100]之间的所有素数存放到一维数组a中,并输出这些素数。
(10)18.求一维数组a中所有元素的平均值,结果保留两位小数。
(11)19. 当M为5时,如果从键盘上输入的5个数 (11)20. 在第一个循环中给a数组的前10个数组元素 (12)21. 把数组a(大小为M)中前M-1个元素中的最大值放入a的最后一个元素中。
(12)22.求排列组合的值 (12)23. 计算正整数num的各位上的数字之和。
(13)24.从键盘上输入一个正整数n,计算并输出n的阶乘。
(13)25.从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数. 例如:从键盘上输入2345, (14)26. 求一维数组a中素数的个数。
(14)27.输出Fabonacci数列:1,1,2,3,5,8,......的前20项的值,要求每行输出5个数。
.. (15)28.求一维数组a中非素数之和。
(15)29.求两个正整数m,n之间的非素数之和(包含m和n)。
(16)30.将无符号八进制数字构成的字符串转换为十进制整数。
(16)31.计算1到M(M为100)之间的奇数之和及偶数之和。
(16)32.实现在N行M列的二维数组中,找出每一行上的最大值,且原数组值不变。
(17)33.查找n在数组a中最后一次出现的位置。
(17)34.求两个正整数x,y的最小公倍数。
(18)35.求两个正整数x,y的最大公约数和最小公倍数。
(18)从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
例如,当s中的数为:7654321时,t 中的数为:7531。
#include <stdio.h>void main( ){ long s, t, sl=10;printf("\nPlease enter s:");scanf("%ld", &s);/************found************/t = s % 10;while ( s > 0){ s = s/100;t = s%10 * sl + t;/************found************/sl = sl*10;}printf("The result is: %ld\n", t);}2.求一维数组a中的值为偶数的元素之和。
例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5,9 ,程序的输出应为:The result is: 62#include <conio.h>#include <stdio.h>void main(){ int a[10]={10,4,2,7,3,12,5,34,5,9},i,s;s = 0;for ( i=0; i<10; i++)/************found************/if (a[i] % 2 == 0)s = s + a[i];/************found************/printf("The result is: %d\n", s);}若用函数调用来求呢?#include <stdio.h>int sum ( int arr[ ],int n ){ int i,s;s = 0;for ( i=0; i<n; i++)if (arr[i] % 2 == 0)/************found************/s = s + arr[i];return (s);}void main(){ int a[10]={10,4,2,7,3,12,5,34,5,9},i,s;/************found************/s = sum( a ,10 );printf("The result is: %d\n", s);}3.求二维数组a中的最大值。
例如,当二维数组a中的元素为:4 4 347 3 125 6 5 程序的输出应为:The max is: 34 。
#include <stdio.h>int arrmax( int arr[3][3]){ int i,j,max;max=arr[0][0];/************found************/for ( i=0; i<3; i++)for ( j=0; j<3; j++)if (max < arr[i][j]) max = arr[i][j];return (max); }void main(){ int a[3][3]={4,4,34,7,3,12,5,6,5},i,j;/************found************/printf("The max is: %d\n",arrmax(a)); }若用函数调用呢?#include <stdio.h>int max;maxarr(int arr[ ]){ int pos,i;/************found************/max =arr[ 0];pos = 0;for ( i=1; i<10; i++)if (max < arr[i]){ max = arr[i];pos = i; }/************found************/return (pos);}void main(){ int a[10]={34,4,2,7,3,12,5,8,5,9};printf("The max is: %d ,pos is: %d\n", max , maxarr(a));}5.猴子第一天摘下若干桃子当即吃了一半又多吃一个;第二天将剩下的桃子吃了半又多吃一个,到第12天的早上,只剩下一个桃子,求第一天共摘了多少桃子。
#include <stdio.h>void main(){ int i,j,x,p;x=1;/************found************/j=11;while(j>=1){ p=(x+1)*2;/************found************/X=p;j--;}printf("total is %d\n",p);}6. 将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:8642。
#include <stdio.h>void main(){ long s, t, sl=1;int d;printf("\nPlease enter s:"); scanf("%ld", &s);t = 0;while ( s > 0){ d = s%10;/************found************/if (d%2==0){ t=d * sl + t;sl *= 10; }/************found************/s /= 10; }printf("The result is: %ld\n", t); }7.求出a所指数组中最大数(规定最大数不在a[0]中),最大值和a[0]中的数对调。
例如数组中原有的数为:7、10、12、0、3、6、9、11、5、8,输出的结果为:12、10、7、0、3、6、9、11、5、8。
#include <stdio.h>#define N 10void main( ){ int a[N]={7,10,12,0,3,6,9,11,5,8}, n=10, i, k,m,max,t;for ( i = 0; i<N; i++) printf("%d ",a[i]); printf("\n");max=a[0]; m=0;for ( k = 1; k <N; k++ )/************found************/if ( a[k]>max ){ max = a[k]; m = k; }/************found************/t = a[0]; a[0]=a[m]; a[m] = t;for ( i=0; i<N; i++ )printf("%d ",a[i]);printf("\n");}8.输出200~300之间的所有素数,要求每行输出8个素数。
#include <stdio.h>#include <math.h>void main(){ int m,j,n=0,k;for(m=200;m<=300;m++){ k=sqrt(m);for(j=2;j<=k;j++)/************found************/if(m%j==0) break;if(j>k){ if(n%8==0) printf("\n");/************found************/printf("%6d",m);n++;}} }9.打印九九乘法表#include <stdio.h>void main(){ int i,j,k;for(i=1;i<=9;i++)/************found************/{ for(j=1;j<=i;j++)printf("%3d *%3d =%3d",i,j,i*j);/************found************/printf("\n");}} {for(j=1;j<=i;j++) printf("\n");10.输出100~200之间既不能被3整除也不能被7整除的整数并统计这些整数的个数,要求每行输出8个数。