东秦C改错题库
- 格式:doc
- 大小:114.50 KB
- 文档页数:20
第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[sli];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[sli1];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个随机整数从小到大排序。
第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <>#include <>#include <>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,则应输出:。
------------------------------------------------------*/#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 = (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个随机整数从小到大排序。
第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个随机整数从小到大排序。
改错参考答案:(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,程序中定义为“;?!,.>/\”。
北京石油化工学院12级复习题程序改错一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1234nmain(){ long int sum;int n,i=1;scanf("%d",n);printf(“\n”);while(i<n){ sum=sum*i;i++;}printf("sum=%d",sum);}2.求一个数组中最大值及其下标。
main( ){ int max,j,m;int a[5];for(j=1;j<=5;j++)scanf(“%d”,a);max=a[0];for(j=1;j<=5;j++)if(max>a[j]){ max=a[j];m=j;}printf(“下标:%d\n最大值:%d”, j, max)}*3. 求3+4int a=3,b=4;main(){ int a,c;c=a+b;printf(“c=%d”);}4.用一个函数求两个数之和。
sum(x,y){ float z;z=x+y;return;}main(){ float a,b;int c;scanf("%f,%f",&a,&b);c=sum(a,b);printf("\nSum is %f",sum);}5.用指针作函数参数,对输入的两个整数按大小顺序输出。
swap(int *p1,*p2){ int *p;*p=*p1;*p1=*p2;*p2=*p;}main(){ int a,b;int *q1,*q2;scanf("%d,%d",&a,&b);&q1=a,&q2=b;if(a<b) swap(*q1,*q2);printf("\n%d,%d\n",q1,q2);}前五题答案:1.sum应初始化即加入sum=1第四行改为:scanf(“%d”,&n);第六行改为:while(i<=n)第十行改为:printf("sum=%ld",sum);2. 第四行改为:for(j=0;j<5;j++)第五行改为:scanf(“%d”,&a[j]);第七行改为:for(j=0;j<5;j++)第八行改为:if(max<a[j])第十三行改为:printf(“下标:%d\n最大值:%d”, m,max)3. 第三行改为:int c;第五行改为:printf(“c=%d”,c);4. 第一行改为:float sum(float x, float y );第四行改为:return(z);第八行:float c;第十一行:printf("\nSum is %f",c);5. 第2、3行:{ int t;t=*p1;*p1=*p2;*p2=t;第9行:q1=&a,q2=&b;第10行:if(a<b) swap(q1,q2);第11行:printf("\n%d,%d\n",*q1,*q2);6.程序读入20个整数,统计非负数个数,并计算非负数之和.#include “stdio.h”main(){int i, a[20], s , count ;s=count=1; s=count=0;for( i=1; i<20; i- -) for(i=0;i<20;i--)scanf(“%d”, a[i] );scanf(“%d”,&a[i]);for(i=0;i<20;i++){if(a[i]<0)break; continue;s +=a[i];count++;}printf(“s=%f count=%f\n”, s, count);}printf(“s=%d count=%d\n”,s,count);7. x , y两个数中,让x中存较大的数,y存较小的数#include<stdio.h>main( ){int x , y=200 , z=0;x=180;if ( x<y)z=x; x=y; y=z; { z=x;x=y;y=z;}printf(“x=%d,y=%d\n”,&x,&y);}printf(“x=%d,y=%d\n”,x,y); }8. 从键盘输入整数x的值,并输出y的值.main(){ float x,y; 正确的: int x; float y;scanf(“%d”,&x);y=3.5+x;printf(“y=%d”); printf(“y=%f”,y);}9. 从1加到100,并输出.Main ( ){int i , sumi=1;While ( i<=100 ){ sum=sum*i;i++ ;}printf ( “%c”, sum )}10、求一个4×4矩阵的对角线元素之和main( ){int a[4][4], sum=0;int i,j;printf(“Enter data:\n”);for(i=0;i<=4;I++)for(j=0,j<=4;j++)scanf(“%d”,&a[i][j]);for(i=0;i<4;I++)for(j=0;j<4;j++)sum=sum+a[i][j];printf(“sum=%5d\n”,sum);}12.求1+2+3+4+……n的值。
/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:求如下表达式: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语言程序改错——答案(总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个错误,使它能得出正确的结果。
.下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII 值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAAD (1)错误: { if (*p<=*q)正确:{ if (*p>=*q)(2)错误:k++正确:k++;2.下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)例如:m中的值为5,则应输出0.838611。
(1)错误:int j=1;正确:double j=1.0;(2)错误:y+=1/(i * i);正确:y+=j/(i * i);3.下列给定程序中,函数fun的功能是按以下递归公式求函数值。
例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。
(1)错误:fun(int n);正确:fun(int n)(2)错误:if(n=1)正确:if(n==1)4.下列给定程序中函数fun()的功能是计算1/n!的值。
例如:给n输入5,则输出0.008333。
(1)错误:int fun(int n)正确:double fun(int n)(2)错误:result *=n++ ;正确:result *=n-- ;5.下列给定程序中函数fun()的功能是计算正整数num的各位上的数字之平方和。
例如:输入352,则输出应该是38;若输入328,则输出应该是77。
(1)错误:long k=1;正确:long k=0;(2)错误:while(num)正确:while(num);6.下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0位中)。
例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI。
(1)错误: void fun(char s, char t[ ])正确:void fun(char *s, char t[ ])(2)错误: if(i%2=0||s[i]%2!=0)正确:if(i%2==0||s[i]%2!=0)7.下列给定程序中,函数fun()的功能是找出100~n(不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
(1)错误:k=n;正确:k=i;(2)错误:s[j]=i;正确:s[j++]=i;8.下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a[0]中的数对调,次最小数和a[1]中的数对调。
请改正程序中的错误,使它能得到正确结果。
(1)错误: for(i=0; i<n; i++)正确:for(i=0; i<2; i++)(2)错误:k=m;正确:m=k;9.下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。
high由主函数传给fun()函数。
若high的值为100,则函数的值为1060。
(1)错误:ifhigh%j==0正确:if(high%j==0)(2)错误:if(yes==0)正确:if(yes)。
10.下列给定程序中,函数fun()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。
例如:输入dafhc,则应输出hfdca。
(1)错误:int fun(char t[ ])赞2011-3-26 01:21 回复LZJJ短小据说哥叫YY1995位粉丝2楼正确:void fun(char t[ ])(2)错误: t[j]=t[i++];正确:t[j]=t[i];11.在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。
下列给定程序中,函数fun()的功能是计算数组元素中值为负数的平均值(不包括0)。
例如:数组中元素的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-25.333333。
正确:while(x[i]!=0)(2)错误:sum=sum\c;正确:sum=sum/c;12.下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。
(1)错误:if((s[i]>= 'A'&&s[i]<= 'Z')&&(s[i]>= 'a'&&s[i]<= 'z')) 正确:if((s[i]>= 'A'&&s[i]<= 'Z')||(s[i]>= 'a'&&s[i]<= 'z'))(2)错误:s[j]= "\0";正确:s[j]='\0';13.下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。
请改正程序中的错误,使它能得到正确结果。
(1)错误:for(j=0;j<n-1;j++) ;正确:for(j=0;j<n-1;j++)(2)错误:a[p]=t;正确:a[j]=t;14.下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。
(1)错误:void fun(char p)正确:void fun(char *p)(2)错误:p=q+i;正确:q=p+i;。
15.下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。
例如输入8名学生的成绩:85 65.5 69 95.5 87 55 62.5 75则高于平均分的学生人数为4(平均分为74.312500)。
(1)错误:int fun(int m)正确:double fun(int m)(2)错误:for(i=1;i<m;i++)正确:for(i=2;i<=m;i++)16.下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。
t=1-1/2+1/3-1/4+…+(-1)(m+1)/m例如,若输入5,则应输出0.783333。
(1)错误:int fun(int m)正确:double fun(int m)正确:for(i=2;i<=m;i++)17.下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。
K的值由主函数传入,若k的值为500,则函数的值为2925。
(1)错误:int fun(long s,long *t)正确:void fun(long s,long *t)(2)错误:s=s%100;正确:s=s/100;18.下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
例如,当s中的数为4576235时,t中的数为4725。
(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))(2)错误:if((k%7=0)||(k%11=0))正确:if((k%7==0)||(k%11= =0))(3)错误:m=k;正确:m=m+k;19.下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。
(1)错误:for (i=0;j<3;j++)正确:for (j=0;j<3;j++)(2)错误:mul=mul*a[i][j];正确:mul=mul*a[i][i];2011-3-26 01:21 回复LZJJ短小据说哥叫YY1995位粉丝3楼20.下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。
例如,若输入"edS,dAd",则输出"EDS,DAD"。
(1)错误:char fun(char tt[])正确:char *fun(char tt[])(2)错误:if((tt[i]>='A')&&(tt[i]<= 'Z'))正确:if((tt[i]>='a')&&(tt[i]<= 'z'))21.下列给定程序中函数fun()的功能是:将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。
高位在低位,低位在高位。
例如当s中的数为25846513时,t中的数为6482。
(1)错误:if(d%2!=0)正确:if(d%2==0)(2)错误:t=d*s1+t;正确:*t=d*s1+*t;22.已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相邻的前3项之和。
下列给定的程序中,函数fun()的功能是:计算并输出该数列前n项的和sum。
n的值通过形参传入。
例如,当n=10时,程序的输出结果应为96.000000。
(1)错误:for (k=4;k<n;k++)正确:for (k=4;k<=n;k++)(2)错误:s2=s;正确:s2=s;}23.下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从低到高的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
(1)错误:*t=calloc(m,sizeof(STU));正确:t=calloc(m,sizeof(STU));(2)错误:for (i=j=0;i<N;j++)正确:for (i=j=0;i<N;i++)(3)错误:t[k].s=b[j].s;正确:t[k] =b[j];24.下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串反着连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串DEG,ac,df反着串联起来,结果是dfacDEG。
(1)错误:for(k=m;k>0;k--)正确:for(k=m-1;k>=0;k--)(2)错误:pt=j;正确:pt-=j;。