资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
班级: 自本一班 学号: 201028004 姓名: 徐艳改错题第1题1、 题目要求 函数fun的功能是:用递归算法计算斐波拉契级数数列中第n项的值。从第l项起,斐波拉契级数序列为1、1、2、3、5、8、13、21、;例如:当给n输入7,该项的斐波拉契级数值为13。#include long fun(int g)/*found*/ switch(g); case 0:return 0;/*found*/ case 1;case 2: return 1; return (fun(g-1)+fun(g-2);main() long fib; int n; printf(input n: ); scanf(%d,&n); printf(n=%dn,n); fib=fun(n); printf(fib=%dnn,fib);2、 错误分析语句swich(g);错误,swich(表达式)后不应该带有“;”,应该为:swich(g)语句case 1;case 2: return 1;错误,case语句常量后应该是“:”,应该为:case:case:return 1;第2题一、题目要求下列给定程序中,函数fun的功能是:将字符串p中的所有字符复制到字符串b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABC DEF GHI JK。#include void fun(char *p,char *b) int i,k=0; while(*p)/*found*/ i=1;/*found*/ while(i3 | *p) bk=*p; k+;p+;i+; if(*p)/*found*/ bk= ; bk=0;main() char a80,b80; printf(enter a string ); gets(a); printf(the original string: ); puts(a); fun(a,b); printf(nthe string after insert space: ); puts(b); printf(nn);二、错误分析题目中p是指针型变量作函数参数,因此给bk赋值时出现错误。应改为bk=*p;题目要求赋值3个字符后加一个空格,所以应该是先给bk赋值空格,然后变量k再加1。应改为bk= ;k+第3题一、题目要求下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。#include #include #define MAXLINE 20fun ( char *pstr6) int i, j ; char *p ; for (i = 0 ; i 5 ; i+ ) for (j = i + 1; j 0) p = *(pstr + i) ;/*found*/ *(pstr + i) = pstr + j ; *(pstr + j) = p ; main( ) int i ; char *pstr6, str6MAXLINE ; clrscr( ) ; for(i = 0; i 6 ; i+) pstri = stri ; printf( nEnter 6 string(1 string at each line): n ) ; for(i = 0 ; i 6 ; i+) scanf(%s, pstri) ; fun(pstr) ; printf(The strings after sorting:n) ; for(i = 0 ; i 6 ; i+) printf(%sn, pstri) ;二、错误分析根据for语句的格式,各表达式之间应用;割开,应该为for (j = i + 1; j 6; j+)根据用指针表示数组元素的方法,*(pstrI)表示pstr所指向数组的第I个元素,同理*(pstrj)表示pstr所指向数组的第j个元素。所以应该为)*(pstr + i) = *(pstr + j) ;第4题一、题目要求下列给定程序中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入252,则输出应该是20。若输入202,则输出应该是0。#include #include long fun (long num)/*found*/ long k; do k*=num%10;/*found*/ num=10; while(num); return (k);main( ) long n ; clrscr() ; printf(Please enter a number:); scanf(%ld,&n) ; printf(n%ldn,fun(n) ;二、错误分析k用来存放各位数字的积,初始值应为1,应该为long k=1;除号应用/来表示,所以应改为num/=10;第5题一、题目要求下列给定程序中,fun函数的功能是:求出以下分数序列的前n项之和。和值通过函数值返回main()函数。 例如,若n=5,则应输出8.391667。#include #include /*found*/fun(n)int n ; int a=2,b=1 ,c,k ; double s=0.0 ; for(k =1;k=n;k+ ) s=s+1.0*a/b ;/*found*/ c=a; a+=b;b+=c; return(s) ;main( ) int n = 5 ; clrscr( ) ; printf( nThe value of function is: %lfn,fun(n) ;二、错误分析由语句return(s)和变量s定义为double数据类型可知,该函数定义时其类型标识符为double类型。所以应该为double fun(int n)注意数据类型double的书写格式。所以应该为s=s+(double)a/b;第6题一、题目要求下列给定程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3。程序运行后a中的值为3,b中的值为8。#include #include int fun(int *x,int y) int t;/*found*/ t=x;x=y;/*found*/ return(y);main() int a=3, b=8; clrscr(); printf(%d %dn,a,b); b=fun(&a,b); printf(%d %dn,a,b);二、错误分析变量t作为中间变量,然后进行数据交换,因参数x是指针变量,交换时应使用*x,所以应该为t=*x;*x=y;确定返回值,根据代码bfun(8a,b)可以知道返回值将赋给变量b,而b中应存放交换前*中的值,所以函数应返回变量t,所以应该为return(t);第7题一、题目要求下列给定程序中,函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给numl和num2分别输入49和2l,则输出的最大公约数为7;若给numl和num2分别输入27和81,则输出的最大公约数为27。#include int fun(int a, int b) int r,t; if(ab)/*found*/ t=a;b=a;a=t; r=a%b; while(r!=0) a=b;b=r;r=a%b;/*found*/ return(a); main() int num1,num2,a; printf(input num1 num2: );scanf(%d%d,&num1,&num2); printf(num1=%d num2=%dnn,num1,num2); a=fun(num1,num2); printf(the maximun common divisor is %dnn,a);二、错误分析将a、b的值互换,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b,所以应该为t=a; a=b; b=t;当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b,所以应该为return(b);第8题一、题目要求下列给定程序中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。#include #include void fun (long s, long *t) int d; long sl=1;/*found*/ t = 0; while ( s 0) d = s%10;/*found*
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号