c程序改错题——有答案
- 格式:docx
- 大小:46.42 KB
- 文档页数:35
(一)功能:用选择法对数组中的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语言题库改错题及详解答案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题【程序改错】功能:先将在字符串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 1 1S = 1 + —— + ——— + ...... + ———————1+2 1+2+3 1+2+3+......+n ------------------------------------------------------*/#include <stdio.h>main(){int n;double fun();printf("Please input a number:");/**********FOUND**********/print("%d",n) ;printf("%10.6f\n",fun(n));}/**********FOUND**********/fun(int n){int i,j,t;double s;s=0;/**********FOUND**********/while(i=1;i<=n;i++);{t=0;for(j=1;j<=i;j++)t=t+j;/**********FOUND**********/=s+1/t;}return s;}/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:判断m是否为素数,若是返回1,否则返回0。
------------------------------------------------------*/#include <stdio.h>/**********FOUND**********/void fun( int n){int i,k=1;if(m<=1) k=0;/**********FOUND**********/for(i=1;i<m;i++)/**********FOUND**********/if(m%i=0) k=0;/**********FOUND**********/return m;}void main(){int m,k=0;for(m=1;m<100;m++)if(fun(m)==1){printf("%4d",m);k++;if(k%5==0) printf("\n");}}/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:用下面的和式求圆周率的近似值。
第1题程序改错功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面;例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”;------------------------------------------------------/ include <>include <>include <>void fun char s, char t{/FOUND/int i;sl = strlens;for i=0; i<sl; i++/FOUND/ti = ssl-i;for i=0; i<sl; i++tsl+i = si;/FOUND/t2sl = "0";}main{char s100, t100;printf"\nPlease enter string s:"; scanf"%s", s;funs, t;printf"The result is: %s\n", t;}答案:1. int i,sl;2. ti = ssl-i-1;3. t2sl = '\0'; 或 t2sl = 0;第2题程序改错功能:求出以下分数序列的前n项之和;和值通过函数值返回main 函数;2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:;------------------------------------------------------/ include <>include <>/FOUND/fun int n{int a, b, c, k; double s;s = ; a = 2; b = 1;for k = 1; k <= n; k++{/FOUND/s = doublea / 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 funint n2. s = s + doublea / b; 或 s += doublea / b; 或 s += a /doubleb; 或 s=s+a/doubleb;3. return s;第3题程序改错功能:读入一个整数m 5≤m≤20 ,函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序;例如:若输入整数7,则应输出:3 10 17 28 32 36 47;------------------------------------------------------/include ""include <>sortpb int n, int a{/FOUND/int i, j, p, tfor j = 0; j < n-1 ; j++{p = j;for i = j + 1; i < n ; i ++/FOUND/if ap > aj p = i;/FOUND/if p == j{t = aj;aj = ap;ap = t;}}}double rnd{static t = 29, c = 217, m = 1024, r = 0;r = rt + c %m; return double r/m ;}getarr int n, int x{int i;for i = 1; i <= n; i++, x++ x = int 50rnd ;}putarr int n, int z{int i;for i = 1; i <= n; i++, z++{printf "%4d", z ;if i%10 printf "\n" ;}printf"\n";}main{int aa20, n;printf "\nPlease enter an integer number between 5 and 20: " ; scanf "%d", &n ;getarr n, aa ;printf "\n\nBefore sorting %d numbers:\n", n ; putarr n, aa ; sortpb n, aa ;printf "\nAfter sorting %d numbers:\n", n ; putarr n, aa ;}答案:1. int i, j, p, t;2. if ap > ai p = i;3. if p = j第4题程序改错--------------------------------------------------------功能:以下程序能求出11+22+......+nn<=1000中满足条件的最大的n;------------------------------------------------------/include <>include ""main{int n,s;/FOUND/s==n=0;/FOUND/whiles>1000{++n;s+=nn;}/FOUND/printf"n=%d\n",&n-1;}答案:1. s=n=0;2. whiles<=10003. printf"n=%d\n",n-1;第5题程序改错-------------------------------------------------------- 功能:求出a所指数组中最大数和次最大数规定最大数和次最大数不在a0和a1中,依次和a0、a1中的数对调;例如:数组中原有的数:7、10、12、0、3、6、9、11、5、8, 输出的结果为:12、11、7、0、3、6、9、10、5、8;------------------------------------------------------/ include <>include <>define N 20void fun int a, int n{int k,m1,m2,max1,max2,t;max1=max2= -32768; m1=m2=0;for k = 0; k < n; k++if ak>max1{max2 = max1; m2 = m1;max1 = ak; m1 = k;}/FOUND/else if ak>max1{max2 = ak; m2 = k; }/FOUND/t = a0;am1=a0;am1 = t;/FOUND/t = a1;am2=a1;am2 = t;}main{int bN={7,10,12,0,3,6,9,11,5,8}, n=10, i;for i = 0; i<n; i++printf"%d ",bi;printf"\n";fun b, n;for i=0; i<n; i++printf"%d ",bi;printf"\n";}答案:1. else if ak>max22. t = a0; a0=am1; am1 = t;3. t = a1; a1=am2; am2 = t;第6题程序改错-------------------------------------------------------- 功能:读入一个整数k2≤k≤10000,打印它的所有质因子即所有为素数的因子;例如:若输入整数:2310,则应输出:2、3、5、7、11;请改正程序中的语法错误,使程序能得出正确的结果;------------------------------------------------------/ include ""include <>/FOUND/isPrimeinteger n{int i, m;m = 1;for i = 2; i < n; i++/FOUND/if n%i{m = 0;break;}/FOUND/return n ;}main{int j, k;printf "\nPlease enter an integer number between 2 and 10000: " ; scanf "%d", &k ;printf "\n\nThe prime factors of %d is are :", k ;for j = 2; j <= k; j++if k%j&& IsPrimej printf "\n %4d", j ;printf"\n";}答案:1. IsPrimeint n2. ifn%i3. return m ;第7 题程序改错--------------------------------------------------------功能:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换,输出数组元素;------------------------------------------------------/include <>main{int a10;void input;void output;void max_min;inputa,10;max_mina,10;outputa,10;}void inputint arr,int n{int p,i;p=arr;printf"please enter 10 integers:\n";fori=0;i<n;i++/FOUND/scanf"%d",p;}void max_minint arr,int n{int min,max,p,t;min=max=arr;forp=arr+1;p<arr+n;p++/FOUND/ifp<maxmax=p;else ifp<min min=p;t=arr;arr=min;min=t;/FOUND/ifmax=arr max=min;t=arr+n-1;arr+n-1=max;max=t;}void outputint arr,int n{int p,i;p=arr;printf"The changed array is:\n";/FOUND/whilei=0;i<n;i++printf"%3d",p++;printf"\n";}答案:1. scanf"%d",p ++; 或 scanf"%d",arri; 或 scanf"%d",p+i; 或 scanf"%d",arr+i;2. ifp>max 或 ifmax<p3. if max == arr4. fori=0;i<n;i++ 或 fori=0;n>i;i++ 或 forp=arr;p<arr+n; 或 fori=0;i<=n-1;i++ 或fori=0;n-1>=i;i++ 或 forp=arr;p<=arr+n-1; 或 forp=arr;arr+n-1>=p;第8题程序改错--------------------------------------------------------功能:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL;例如:当字符串中的内容为:"abcdabfabcdx",t中的内容为:"ab"时,输出结果应是:abcdx;当字符串中的内容为:"abcdabfabcdx",t中的内容为:"abd"时,则程序输出未找到信息:not found;------------------------------------------------------/include <>include <>include <>char fun char s, char t{char p , r, a;/FOUND/a == NULL;while s{p = s;r = t;while r/FOUND/if r == p{r++;p++;}elsebreak;/FOUND/if r ='\0' a = s;s++;}return a ;}main{char s100, t100, p;printf"\nPlease enter string S :"; scanf"%s", s ;printf"\nPlease enter substring t :"; scanf"%s", t ;p = fun s, t ;if pprintf"\nThe result is : %s\n", p;elseprintf"\nNot found \n" ;}答案:1. a = NULL;2. if r == p3. if r == '\0' a = s;第9题程序改错-------------------------------------------------------- 功能:从m个学生的成绩中统计出高于和等于平均分的学生人数, 此人数由函数值返回;平均分通过形参传回,输入学生成绩时,用-1结束输入,由程序自动统计学生人数;例如:若输入 8 名学生的成绩,输入形式如下:60 72 98 88 64 -1结果为:The number of students :4Ave = ;------------------------------------------------------/include <>include <>define N 20int fun float s, int n, float aver{float av, t ; int count , i;count = 0; t=;for i = 0; i < n; i++ t += s i ;av = t / n; printf "ave =%f\n",av ;for i = 0; i < n; i++/FOUND/if s i < av count++;/FOUND/aver = av;/FOUND/return count}main{float a, s30, aver;int m = 0;printf "\nPlease enter marks -1 to end:\n ";scanf"%f",&a ;while a>0{sm = 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;第10题程序改错--------------------------------------------------------功能:根据以下公式求π值,并作为函数值返回;例如:给指定精度的变量eps输入时,应当输出Pi=;π 1 1 2 1 2 3 1 2 3 4— = 1 + — + — x — + — x — x — + — x — x — x — + ...2 3 3 5 3 5 7 3 5 7 9------------------------------------------------------/include <>double fundouble eps{double s,t;int n=1;s=;t=1;/FOUND/whilet<=eps{s+=t;/FOUND/t=n/2n+1t;n++;}/FOUND/return s;}main{double x;scanf"%lf",&x;printf"\neps=%lf,Pi=%lf\n\n",x,funx;}答案:1. whilet>eps 或 whileeps<t 或 whilet>=eps 或 whileeps<=t 或 while t>eps 或 while eps<t 或 while t>=eps 或 while eps<=t2. t=tn/2n+1; 或 t=n/2n+1t; 或 t=n/2n+t; 或 t=n/n+1t; 或 t=n/n+t; 或 t=n/n+t;3. return 2 s ; 或 return 2s; 或 return2s; 或 return s2; 或 returns2;第11题程序改错--------------------------------------------------------功能:实现两个字符串的连接;例如:输入dfdfqe和12345时,则输出dfdfqe12345.------------------------------------------------------/include <>main{char s180,s280;void scatchar s1,char s2;getss1;getss2;scats1,s2;putss1;}void scat char s1,char s2{int i=0,j=0;/FOUND/whiles1i= ='\0'i++;/FOUND/whiles2j= ='\0'{/FOUND/s2j=s1i;i++;j++;}/FOUND/s2j='\0';}答案:1. while s1i = '\0' 或 whiles1i 或 while s1i = 02. while s2j = '\0' 或 whiles2j 或 while s2j = 03. s1i=s2j;4. s1i='\0'; 或 s1+i='\0'; 或 s1i=0;第12题程序改错-------------------------------------------------------- 功能:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积;例如:输入圆的半径值:输出为:s = ;------------------------------------------------------/ include <>include <>/FOUND/double fun r{double s;/FOUND/s=1/2 r r;/FOUND/return r;}main{float x;printf "Enter x: ";scanf "%f", &x ;printf " s = %f\n ", fun x ;}答案:1. float funfloat r 或 double funfloat r 或 double fundouble r2. s=2 r r;3. return s;第13题程序改错--------------------------------------------------------功能:利用二维数组输出如图所示的图形;------------------------------------------------------/include <>include <>/FOUND/define N= 7main{char aNN;int i,j,z;fori=0;i<N;i++forj=0;j<N;j++/FOUND/aij=;z=0;fori=0;i<N+1/2;i++{forj=z;j<N-z;j++aij='';z=z+1;}z=0;fori=N+1/2;i<N;i++{z=z-1;forj=z;j<N-z;j++aij='';}fori=0;i<N;i++{forj=0;j<N;j++/FOUND/printf"%d",aij;printf"\n";}}答案:1. define N 72. aij=' ';3. z=z-1; 或 z--; 或 z=-1+z;4. printf"%c",aij;第14题程序改错-------------------------------------------------------- 功能:读取7个数1-50的整数值,每读取一个值,程序打印出该值个数的;------------------------------------------------------/ include <>main{int i,a,n=1;/FOUND/whilen<7{do{scanf"%d",&a;}/FOUND/whilea<1&&a>50;/FOUND/fori=0;i<=a;i++printf"";printf"\n";}}答案:1. whilen<=7 或 whilen<82. whilea<1||a>50; 或 whilea>50||a<1;3. fori=1;i<=a;i++。
c程序改错题――有答案试卷编号:10578 所属语言:C语言试卷方案:TC_150522153552 试卷总分:440分共有题型:1种一、程序改错共44题(共计440分)第1题(10.0分)题号:380 难度:中第2章 /*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/#include #include #include/**********FOUND**********/double fun (double *a, *b)//double fun(double *a,double *b) {double c;/**********FOUND**********/ c = sqr(a*a + b*b);//sqrt/**********FOUND**********/ return *c; }main ( ) {double a, b, y;printf ( \scanf (\ y = fun (&a, &b); printf (\}第2题(10.0分)题号:438 难度:中第2章 /*------------------------------------------------ 【程序改错】--------------------------------------------------功能:编写函数fun,求两个整数的最小公倍数,然后用主函数main()调用这个函数并输出结果,两个整数由键盘输入。
C语言程序改错——答案(总33页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--程序改错--------------------------------------------------------请改正程序中的错误,使它能得出正确的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/题目1:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49 和21,则输出的最大公约数为7。
int fun(int a,int b) {int r,t;if(a<b){t=a;/**********FOUND**********/b=a;/**********FOUND**********/a=t;}r=a%b;while(r!=0){a=b;b=r;/**********FOUND**********/r=a/b;}/**********FOUND**********/return a;}int main(void){int num1,num2,a;scanf("%d%d",&num1,&num2);a=fun(num1,num2);printf("the maximum common divisor is %d\n\n",a);return 0;}答案:1). a=b;2). b=t;3). r=a%b;}4). return b; 或 return(b); 或 return(b);题目2:下列给定程序中,函数fun 的功能是:判断m是否为素数,若是返回1,否则返回0。
主函数的功能是:按每行5个输出1-100之间的全部素数。
请改正程序中的4个错误,使它能得出正确的结果。
C语言程序改错一、程序改错共 138 题(共计 1380 分)━━━━━━━━━━━━━━━━━━第 1 题(10.0 分)/*------------------------------------------------------ 功能:根据整型形参 m,计算如下公式的值:y=1+1/3+1/5+1/7+...+1/(2m-3)------------------------------------------------------*/ #include "stdio.h"double fun(int m){/**********FOUND**********/double y=1int i;/**********FOUND**********/for(i=3; i<m; i++)/**********FOUND**********/y+=1.0/(2i-3);return(y);}void main(void){int n;clrscr();printf("Enter n: ");scanf("%d", &n);printf("\nThe result is %1f\n", fun(n));getch();}答案:1). double y=1;2). for(i=3; i<=m; i++) 或 for(i=3; i<m+1;i++)3). y+=1.0/(2*i-3);第 2 题(10.0 分)/*------------------------------------------------------ 功能:用选择法对数组中的 n 个元素按从小到大的顺序进行排序。
------------------------------------------------------*/ #include <stdio.h>#define N 20void fun(int a[], int n){int i, j, t, p;for (j = 0 ;j < n-1 ;j++){/**********FOUND**********/p = jfor (i = j;i < n; i++)/**********FOUND**********/if(a[i] >a[p])/**********FOUND**********/p=j;t = a[p] ;a[p] = 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");getch();}答案:1). p = j;2). if(a[i] < a[p]) 或 if(a[p] > a[i])3). p = i;第 3 题(10.0 分)/*------------------------------------------------------ 功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
程序改错-------------------------------------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条错误语句,请改正错误。
------------------------------------- main(){int a[10];void input();void output();void max_min();input(a,10);max_min(a,10);output(a,10);}void input(int *arr,int n){ int *p,i;p=arr;printf("please enter 10 integers:\n");for(i=0;i<n;i++)/**********FOUND**********/sca("%d",&p++);}void max_min(int *arr,int n){int *min,*max,*p,t;min=max=arr;for(p=arr+1;p<arr+n;p++)if(*p>*max)/**********FOUND**********/*max=*p;else if(*p<*min) min=p;t=*arr;*arr=*min;*min=t;/**********FOUND**********/if(max=arr)max=min;t=*(arr+n-1);*(arr+n-1)=*max;*max=t;}void output(int *arr,int n){int *p,i;p=arr;printf("The changed array is:\n");/**********FOUND**********/while(i=0;i<n;i++);printf("%3d",*p++);printf("\n");}-------------------------------------『错误答案』:1 scanf("%d",p++);2 max=p;3 if(max==arr)4 for(i=0;i<n;i++) 或for(i=0;n>i;i++) 或 for(p=arr;p<arr+n;)-------------------------------------4题目:用起泡法对10个整数从小到大排序。
改错参考答案:(3)将字符串yy在屏幕上输出#include<stdio.h>void main(){/*********Found************/ char yy[100] = "ok??\n";/*********Found************/f0r (; *yy; yy++){putchar(*yy);}}#include<stdio.h>void main(){/*********Found************/ char*yy="ok??\n";/*********Found************/for (; *yy; yy++){putchar(*yy);}}(4)计算半径为2+3的圆的面积#include<stdio.h>#define PI3."14/*********Found************/#define S(r) PI*r*rvoid main(){/*********Found************/ int mianJi;mianJi = S(2+3);printf("mian ji=%5."2f\n", mianJi);}#include<stdio.h>#define PI3."14/*********Found************/#define S(r) PI*(r)*(r)void main(){/*********Found************/1floatmianJi; mianJi = S(2+3);printf("mian ji=%5."2f\n", mianJi);}(8)打开文件d:\te.c用于读并判断打开是否成功#include<stdio.h>void main(){FILE *fp;/*********Found************/char fileName[] = "d:\te.c";/*********Found************/fp = fopen(fileName, "w");/*********Found************/if (fp == EOF){puts("File Open Error!");exit(1);}putchar(fgetc(fp));fclose(fp);}#include<stdio.h>void main(){FILE *fp;/*********Found************/char fileName[] = "d:\\te.c";/*********Found************/fp = fopen(fileName, "r");/*********Found************/if (fp ==NULL){puts("File Open Error!");exit(1);}putchar(fgetc(fp));fclose(fp);}(9)申请100个字节的内存空间,显示其首地址,然后释放申请到的内存空间#include<stdio.h>#include<alloc.h>void main(){/*********Found************/char p[100];2/*********Found************/if (p = (char *)malloc(100) == NULL){printf("malloc memory fail!\n");return ;}printf("%p\n", p);/*********Found************/fclose(p);}#include<stdio.h>#include<alloc.h>void main(){/*********Found************/ char*p;/*********Found************/if ((p = (char *)malloc(100))== NULL){printf("malloc memory fail!\n"); exit(1);}printf("%p\n", p);/*********Found************/free(p);}(10)将字符串p显示在屏幕上#include<stdio.h>/*********Found************/#define BEGIN/*********Found************/#define ENDvoid main(){char *p = "";const int i = 0;for (printf("\n"); p[i]; )BEGINputchar(p[i]);i++;END}#include<stdio.h>/*********Found************/#define BEGIN{/*********Found************/#define END}3void main(){char *p = "";const int i = 0;for (printf("\n"); p[i]; )BEGINputchar(p[i]);/*********Found************/p++;END}(14)调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值#include<stdio.h>/*********Found************/void swap(int x, int y){int tmp;/*********Found************/______*x = *y;/*********Found************/y = x;}void main(){int a = 3, b = 4;swap(a, b);printf("a=%d b=%d\n", a, b);}#include<stdio.h>/*********Found************/void swap(int*x, int*y){int tmp;/*********Found************/tmp = *x;*x = *y;/*********Found************/*y = tmp;}void main(){int a = 3, b = 4;/*********Found************/swap(&a,&b);printf("a=%d b=%d\n", a, b);}4(15)调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值#include<stdio.h>void swap(int *x, int *y){int *tmp, xy;/*********Found************/*tmp = x;*x = *y;/*********Found************/y = *tmp;}void main(){int a = 3, b = 4;/*********Found************/swap(*a, *b);/*********Found************/printf("a=%d b=%d\n", &a, &b);}#include<stdio.h>void swap(int *x, int *y){int *tmp, xy;/*********Found************/xy=*x;*x = *y;/*********Found************/*y =xy;}void main(){int a = 3, b = 4;/*********Found************/swap(&a,&b);/*********Found************/printf("a=%d b=%d\n",a,b);}(16)worker的信息使用结构体存储,从键盘读入其各项信息并显示#include<stdio.h>void main(){struct WKER{long ID;long int num;char name[20];5char sex;/*********Found************/} ;worker.ID = 1L;/*********Found************/scanf("%d %s %s", &worker.num, , &worker.sex);/*********Found************/printf("worker's info:num=%d name=%s sex=%s\n",worker.num, , worker.sex);}#include<stdio.h>void main(){struct WKER{long ID;long int num;char name[20];char sex;/*********Found************/}worker;worker.ID = 1L;/*********Found************/scanf("%ld %s %c", &worker.num, ,&worker.sex);/*********Found************/printf("worker's info:num=%ld name=%s sex=%c\n",worker.num, , worker.sex);}(17)函数userLogin的功能主要是统计并返回登录的用户数,用户名最长30字节#include <stdio.h>long userLogin(char *userName){/*********Found************/long userCount = 0;userCount++;/*********Found************/return ;}void main( ){/*********Found************/char *userName;int i;while(1){printf("userName:");scanf("%s", userName);i = userLogin(userName);6}}#include <stdio.h>long userLogin(char *userName){/*********Found************/ staticlong userCount = 0;userCount++;/*********Found************/returnuserCount;}void main( ){/*********Found************/ charuserName[31];int i;while(1){printf("userName:");scanf("%s", userName);i = userLogin(userName);}}(19)将inBuf中字符串拆分成一个个的单词/*单词之间的分隔符由串divChar,程序中定义为“;?!,.>/\”。
试卷编号:10578所属语言:C语言试卷方案:TC_150522153552试卷总分:440分共有题型:1种一、程序改错共44题(共计440分)第1题(10.0分)题号:380 难度:中第2章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/#include <stdio.h>#include <conio.h>#include <math.h>/**********FOUND**********/double fun (double *a, *b)//double fun(double *a,double *b) {double c;/**********FOUND**********/c = sqr(a*a + b*b);//sqrt/**********FOUND**********/return *c;}main ( ){double a, b, y;printf ( "Enter a, b : ");scanf ("%lf%lf", &a, &b );y = fun (&a, &b);printf ("y = %f \n", y );}第2题(10.0分)题号:438 难度:中第2章/*------------------------------------------------【程序改错】--------------------------------------------------功能:编写函数fun,求两个整数的最小公倍数,然后用主函数main()调用这个函数并输出结果,两个整数由键盘输入。
------------------------------------------------*/#include <stdio.h>int fun(int m,int n){int i;/**********FOUND**********/if (m=n)//if(m==n){i=m;m=n;n=i;}for(i=m;i<=m*n;i+=m)/**********FOUND**********/if(i%n==1)//if(i%n==0)return(i);return 0;}main(){unsigned int m,n,q;printf("m,n=");scanf("%d,%d",&m,&n);/**********FOUND**********/q==fun(m,n);//q=fun(m,n);printf("p(%d,%d)=%d",m,n,q);}第3题(10.0分)题号:404 难度:易第2章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:编写函数求2!+4!+6!+8!+10+12!+14!。
------------------------------------------------------*/#include <stdio.h>long sum(int n){/**********FOUND**********/int i,j//int i,j;long t,s=0;/**********FOUND**********/for(i=2;i<=n;i++)//for(i=2;i<=n;i+=2){t=1;for(j=1;j<=i;j++)t=t*j;s=s+t;}/**********FOUND**********/return(t);//return (s);}main(){printf("this sum=%ld\n",sum(14));}第4题(10.0分)题号:360 难度:中第2章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:计算正整数num的各位上的数字之积。
例如:若输入:252,则输出应该是:20。
若输入:202,则输出应该是:0。
------------------------------------------------------*/#include <stdio.h>#include <conio.h>long fun (long num){/**********FOUND**********/long k=1//long k=1;do{k*=num%10 ;/**********FOUND**********/num\=10;//num/=10;/**********FOUND**********/}while(!num) ;//while(num)return (k) ;}main( ){long n ;printf("Please enter a number:") ; scanf("%ld",&n) ;printf("\n%ld\n",fun(n)) ;}第5题(10.0分)题号:413 难度:易第2章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*。
------------------------------------------------------*/#include <stdio.h>main(){int i,a,n=1;/**********FOUND**********/while(n<7)//while(n<=7){do{scanf("%d",&a);}/**********FOUND**********/while(a<1&&a>50);//while(a>=1&&a<=50)/**********FOUND**********/for(i=0;i<=a;i++)//for(i=1;i<=a;i++)printf("*");printf("\n");n++;}}第6题(10.0分)题号:553 难度:中第1章/*-------------------------------------------------------【程序改错】---------------------------------------------------------题目:列程序的功能为:已知圆锥半径r和高h,计算圆锥体积v。
请纠正程序中存在错误,使程序实现其功能。
-------------------------------------------------------*/#include <stdio.h>main(){/***********FOUND***********/float r=10,h=5;//float r=10,h=5,v;/***********FOUND***********/v=1/3*3.14159*r2*h;// v=1.0/3*3.14159*r*r*h;/***********FOUND***********/printf("v=%d\n",v);// printf("v=%f\n",v);}第7题(10.0分)题号:399 难度:易第2章/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/#include <stdio.h>#define N 20int fun(int m){/**********FOUND**********/int s=0,i;//int s=1,i;for(i=1;i<N;i++)/**********FOUND**********/if(i%m=0)//if(i%m==0)/**********FOUND**********/s=*i;//s*=i;return s;}main(){int sum;sum=fun(5);printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);}第8题(10.0分)题号:397 难度:中第2章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:输入两个实数,按代数值由小到大输出它们,并在fun() 函数中输出。
(输出的数据都保留2位小数)------------------------------------------------------*/#include <stdio.h>fun(){/**********FOUND**********/float t// float t;float a, b ;scanf("%f %f",&a,&b);/**********FOUND**********/if(a<b)// if(a>b){t=a;a=b;b=t;}/**********FOUND**********/printf("%5.2f ,%5.2f\n",&a,&b);// printf("%5.2f ,%5.2f\n",a,b); }main(){fun();}第9题(10.0分)题号:28 难度:中第1章/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:实现两个字符串的连接。