当前位置:首页 > 全国计算机等级考试二级C语言资料(机试) - 图文
{s=s/100;
*t=s*sl+*t; sl=sl*10; } }
main() {long s,t; clrscr();
printf(\ fun(s,&t);
printf(\}
【参考答案】
(1)void fun (long s, long *t) (2)while (s>0) 【解题技巧】符号出错会表现在以下七个方面: (1)“%”和除号“/”混淆,如int i=j/k;——>int i=j%k;有时候反过来考,将“%”改为“/”
(2)赋值号“=”和等号“= =”混淆
如if(i=j)——>if(i==j) while(i=j)——>while(i==j)
(3)复合赋值出错,如:i\\=10——>i/=10,除号是左下的斜线
(4)强制转换出错,如int i=int(f)——>int i=(int)f强制转化是在类型上加括号 (5)大小写问题,如IF(){ }—>if(){ }或For( ){ }—>for(){ }注:所有的关键字都是小写字母
(6)条件判断时的符号问题(要根据具体题意来修改)
如if(fabs(n-m)<0.0001) ——>if(fabs(n-m)> 0.0001) if(*s<*p)——>if(*s>*p) for(;j<=n;)——>for(;j
4、程序的功能更是求方程2x3-4x2+3x-6=0的一个根,求要求绝对误差不超过0.001。例如,若给m输入 -100,给n输入90,则函数求得的一个根值为2.000。 请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第 5 页 #include
double funx(double x)
{ return(2*x*x*x-4*x*x+3*x-6); } double fun( double m, double n) {
/************found************/ int r; r=(m+n)/2;
/************found************/ while(fabs(n-m)<0.001)
{ if(funx(r)*funx(n)<0) m=r; else n=r; r=(m+n)/2; }
return r; }
main( )
{ double m,n, root;
printf(\ m n : \\n\ root=fun( m,n );
printf(\}
【参考答案】:
(1)double r;(2)while(fabs(m-n)>0.001)
【解题技巧】变量定义可能会出现以下三种错误:
(1)变量定义时没有初始化,或者初始化的值不对,如int s=1——>int s=0,一般在累加求和时容易出现此类错误
(2)变量定义出错,如int sum=0.0——>double sum=0.0 或者是使用变量前并没有定义
(3)变量定义的类型和程序中使用的类型不匹配,如int r——>double r; ? 题型四:赋值出错
共 30 页
5、给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:7531。 请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include
void fun (long s, long *t) { int d; long sl=1;
/************found************/ t = 0;
while ( s > 0) { d = s;
/************found************/ if (d%2 == 0)
{ *t = d * sl + *t; sl *= 10; }
s /= 10; } }
main()
{ long s, t;
printf(\ fun(s, &t);
printf(\}
【参考答案】:
(1)*t=0;(2)if(d%2!=0)
6、下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60
请改正程序中的错误,使程序能得出正确的结果。
注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!
第 6 页 #include
/**************found**************/ void fun (int a,b) {int t;
/**************found**************/ t=b;b=a;a=t; }
main() {int a,b; clrscr();
printf(\ fun(&a,&b);
printf(\}
【参考答案】
(1)void fun (int *a,int *b) (2)t=*b;*b=*a;*a=t; 【解题技巧】在解题时,要注意以下几种常见的错误: (1)赋值时类型不匹配。
如char *r,*p;if(r= =p)——>if(*r= =*p),*r,*p才是内容
char ch=\——>char ch='\\0';字符是用单引号括起来
char ch='0'——>char ch='\\0';此时是将字符0赋给ch变量,而不是\\0 ——> char ch=0;'\\0'的ASCII码就是0,可直接用0进行赋值
(2)指针类赋值出错(左右两边类型不一致)
如:int *a;int x=10,t=20;a=&x;
a=t;——>a=&t;指针只能存放变量的地址 a=t;——>*a=t;将变量赋给指针所指向的变量
(3)实现交换时赋值出错
如:if(aif(a
void fun(int *a,int *b) void fun(int *a,int *b) 共{ int t;t=b;b=a;a=t;} 30 页 { int t; t=*b;*b=*a;*a=t;} 分类二:固定语法格式搭配错误
? 题型一:输入输出格式出错
1、给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。
请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include
int a [3] [3], sum, i, j;
*********************************** _____;
for (i=0;i<3;i++) { for (j=0;j<3;j++)
***************************************** scanf (“%d”,a [i] [j]); }
for (i=0; i<3; i++) sum=sum*a[i] [i];
printf (“Sum=%dn”, sum); }
main ()
{ fun (); } 【参考答案】
(1)sum = 1; (2)scanf(\
2、给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
第 7 页 #include
/************found************/ int fun(int n, int xx[][]) { int i, j, sum=0;
printf( \ for( i = 0; i < M; i++ ) { for( j = 0; j < M; j++ )
/************found************/ printf( \ printf(\ }
for( i = 0 ; i < n ; i++ )
sum += xx[i][i]+xx[i][ n-i-1 ]; return( sum ); }
main( )
{ int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; printf ( \}
【参考答案】
(1)int fun(int n,int xx[][M])(2)printf(\
【解题技巧】注意输入输出的正确格式,关注容易出错的地方,如下图
正确形式 错误形式
scanf(“%d”,&a[i][j]) scanf(“%d”,a[i][j]) int i,*p=&i; scanf(“%d”,p); int i=10;printf(“%d”,i); int i,*p=&i; scanf(“%d”,&p); printf(“%s”, “string”); int i=10;printf(“%f”,i); printf(“%d”, “string”); 如:scanf(“%d”,a[i][j]) ——>scanf(“%d”,&a[i][j])
int i,*p=&i; scanf(“%d”,&p) ——>scanf(“%d”,p);
int i=10; printf(“%f”,i);——>printf(“%d”,i);
共 30 页
printf(“%d”, “string”); ——> printf(“%s”, “string”); ? 题型二:选择结构中的基本格式问题
3、给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、?? 例如,若给n输入7,该项的斐波拉契数值为:13。请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include
/**********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(\ \ fib=fun(n);
printf(\}
【参考答案】:
(1)switch(g)(2)case 1: return 1; case 2:return 1;
【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图
正确形式 错误形式 switch() switch() ; 分号多余 { case 1:语句1;break; { case 1:语句1;break; case 2: case 2; 此处应该为冒号 case 3:语句3; case3:语句3 case与常量表达式之间} 有空格
? 题型三:循环结构中的基本格式问题
4、给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。
1 1 1 t = 1 - ----- - ----- - …… - -----
2*2 3*3 m*m
例如,若 m 中的值为: 5,则应输出: 0.536389。 请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include
/**************found**************/ for(i = 2 ; i < m ; i++)
/**************found**************/ y -= 1 /(i * i) ; return( y ) ; }
main( )
{ int n = 5 ;
printf( \}
【参考答案】:
(1)for(i=2;i<=m;i++)(2)y-=1.0/i/i;
【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图
正确形式 错误形式 for(i=0;i<10;i++) for(i=0,i<10,i++)以分号为间隔符 for(i=0;i
共分享92篇相关文档