1、内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题1上机考试考点总结注意事项:1.上机:改错 18 分+编程 22 70 分钟(占总成绩的 40%) 改错的试题通常包含两个(或三个)错误需要修改,试题中用“*found*”来提示下一行(或下面第二行)有错。错误的性质基本分语法错和逻辑错两种,也有些少量的试题把语句添加在下划线处。特别要注意的是,只能在出错行上进行修改,不要改动程序行的顺序,更不要自己另编程序。最后,在二级 C 语言程序设计上机考试编程中,要求完成一个独立的函数的编程。内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题2本资料对上机考试
2、中编程部分题目划分为 6 大类,对每种类型的题目进行了分析。1. 对一维数组(排序)和字符串(指针)操作该类型的题目在以往的机试中占有比例较大,约 40%,考生应该对该知识点做全面的复习和掌握,一维数组可以分成数值型和字符型,其中数值型数组的数据类型为整型和实型,字符串数组的数据类型为字符型,我们通常会把字符型数组叫做字符串,但是应该注意字符型数组与字符串之间是存在区别的,也就是0结束标识符问题。在复习该部分时,考生应该注意掌握以下两个问题:(1)对一维数组的操作对一维数组操作时,不可避免的要访问相关的数组元素,在 C 语言中访问数组元素一般采用单层循环的方法进行遍历,假设数组长度为 n,数组
3、下标是在 0 到(n-1)之间的,考生应该牢固掌握在一维数组中求最大值、最小值、移动元素、查找特定值(通过具体数值或通过下标)、存储数组元素等的方法。其中一个非常重要的操作一定要重视:两种排序算法,冒泡排序额和选择排序,具体的过程和实现代码要求考生必须掌握。(2)对字符串的操作(指针)该类问题是每次考试的重点和难点,特别是将字符串同指针结合起来以后,难度就更大了。考生在解决此类问题时应特别注意字符串的结束标志0,它不仅用来作为字符串的结束标志,而且对字符串进行操作时,它也是循环的结束标志。考生在复习该部分的时候应该注意这样几个基本问题:大小写字母的转换、奇偶数判别、添加或删除指定的字符和字符的
4、移动。此外,考生应该牢固掌握指针的特性及字符串操作函数的使用和实现方法,曾出现过考题要求考生自己编程完成字符串操作函数,特别是字符串连接函数和求子串函数,应当引起足够重视。另外对于指针应该清楚指针的建立、遍历、添加或删除一个结点的操作代码。2. 数值计算该类型的题目在历年的机试中占 20%,考查的机率也非常高。该类题目一般给定一个数列计算公式,然后要求考生编写一个函数实现求数列的前 n项的值、累加和或积,在解决该类问题时,首先重要的找到给定数列的变化规律,然后其变化规律来编写一个单层或者双层的循环来求相应的值。在编写程序的过程中,往往还会用到一些数学函数,如 sqrt()、fabs()、pow
5、()等,考生应该牢固掌握 math.h 中一些常用的数学函数的用法和使用方法。另外还应注意数据类型之间的区别,特别是 float 和 int 类型,不同的数据类型产生的运算结果是不一样的。3. 对结构体的操作这部分对非计算机专业的学生来说是个难点,但以往的机试中,有 17%的题目是属于该类型。考生在复习这部分的时候,首先应该注意结构体成员的两种不同的引用方法:结构体变量和指向结构体的指针,也就是结构体成员运算符.和指向运算符- ,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体外,其他的特性和普通数组是一内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型
6、预测题3样的,结构体除了定义、赋值和初始化以外,其他的操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就大幅度的降低。4. 对二维数组的操作该类问题在历年的机试中占 16%,考生应该对二维数组的元素遍历方法、存储方式、矩阵转换等问题做重点掌握。在 C 语言中,访问二维数组的数族元素一般采用双层循环的方法实现,因为二维数组具有两个下标:行下标和列下标;二维数组可以按行或者按列转化成一维数组进行存储;对二维数组进行行列转换的时候,要将行下标和列下标进行互换。考生还应该掌握上三角矩阵、下三角矩阵的特
7、性,在考试中,矩阵的表达形式经常考到二维数组的坐标转换。5. 数制转换该部分在以往的机试中占 11%,包括两类问题:一是整数合并,而是类型转换,例如对一个数的各位进行一系列的变化。在复习该部分时,考生应该注意 C 语言中 int、long、float、double 类型数据所占的存储空间大小和精度,注意%(模)运算和/(整除)运算的特点,特别应该灵活的使用模运算与除法运算求数据相应位数上的数值,掌握强制类型转换的方法以及按规定的位数保留小数的方法。6. 素数该部分在历年机试中占 6%,考生应该牢固掌握素数的基本概念和判断素数的方法,特别要求考生注意整数 1 不是素数,所以在判断素数时应该从 2
8、开始,到(n-1)结束,能够除尽的不是素数,不能除尽的是素数。判断素数是 C 语言中的一个基本算法,不仅会在程序填空和程序改错中也会有所涉及,应该重点复习。内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题4上机开始改错题常见错误1. 书写标识符时,忽略了大小写字母的区别。main()int a=5;Printf(“%d”,A);2. 忽略了变量的类型,进行了不合法的运算。main()float a,b;printf(“%d”,a%b);3. 将字符常量与字符串常量混淆。char c;c=“a”;4. 忽略了“=”与“=”的区别。if(a=3) if(a=3)5. 忘记加
9、分号。a=1 b=16. 多加分号。 z=x+y;t=z/100;printf(“%f”,t);int a10;for(i=0;i#define N 20int fun(int n , int *a) int i,j,k,sum;/*found*/sum=j=0;for(k=3,i=0;iint fun( char *p ) int n;/*found*/n= *p-o;p+;while( *p!=0 ) /*found*/n=n*8+*p-o;p+;return n;main() char s6; int i; int n;printf(“Enter a string (Ocatal dig
10、its): “); gets(s);if(strlen(s)5) printf(“Error: String too longer !nn“);exit(0); for(i=0; si; i+)if(si7) printf(“Error: %c not is ocatal digits!nn“,si);exit(0); printf(“The original string: “); puts(s);n=fun(s);printf(“n%s is convered to integer number: %dnn“,s,n);3给定程序 MODI1.C 的功能是:读入一个整数 k(2k10000
11、),打印它的所有质因子(即所有为素数的因子) 。例如,若输入整数:2310,则应输出:2、3、5、7、11。请改正程序中的语法错误,使程序能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include /*found*/内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题8IsPrime ( int n ); int i, m;m = 1;for ( i = 2; i #include char* fun( char tt )int i;for( i = 0; tti; i+ )/*found*/if( a #define N 20
12、int fun ( int * a, int n ) int i, m, t, k ;for(i=0;iam) k=m;t=ai;ai=am;am=t;main( ) int x, bN=11,5,12,0,3,6,9,7,10,8, n=10, i;for ( i=0; i/*found*/fun (char a) if ( *a ) fun(a+1) ;内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题10/*found*/printf(“%c“ *a) ;main( ) char s10=“abcd“;printf(“处理前字符串=%sn 处理后字符串=“, s);
13、fun(s); printf(“n“) ;7给定程序 MODI1.C 中函数 fun 的功能是:根据整型形参 m,计算如下公式的值。11y234m例如,若 m 中的值为: 5,则应输出:1.463611。请改正程序中的错误,使它能得出正确的结果。注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include double fun ( int m ) double y = 1.0 ;int i;/*found*/for(i = 2 ; i high,查找结束。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。#
14、include #define N 10/*found*/void fun(int a, int m ) int low=0,high=N-1,mid;while(low amid)low=mid+1;else return(mid);return(-1);main() int i,aN=-3,4,7,9,13,45,67,89,100,180 ,k,m;printf(“a 数组中的数据如下:“);for(i=0;i=0) printf(“m=%d,index=%dn“,m,k);else printf(“Not be found!n“);9: 给定程序 MODI1.C 中函数 fun 的功能
15、是:按以下递归公式求函数值。 10 (n=1)fun(n)= fun(n-1)+2 (n1)内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题12例如,当给 n 输入 5 时,函数值为 18;当给 n 输入 3 时,函数值为 14。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。#include /*found*/fun ( n ) int c;/*found*/if(n=1)c = 10 ;else c= fun(n-1)+2; return(c);main() int n;printf(“Enter n :
16、 “); scanf(“%d“,printf(“The result : %dnn“, fun(n);10.给定程序 MODI1.C 中函数 fun 的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a 中的值原为 8,b 中的值原为 3, 程序运行后 a 中的值为 3,b 中的值为 8。请改正程序中的错误,使它能得出正确的结果。注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include int fun(int *x,int y)int t ;/*found*/t = x ; x = y ;/*found*/return(y) ;m
17、ain()int a = 3, b = 8 ;内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题13printf(“%d %dn“, a, b) ;b = fun(printf(“%d %dn“, a, b) ;11.给定程序 MODI1.C 中函数 fun 的功能是:从低位开始取出长整型变量 s 中奇数位上的数,依次构成一个新数放在 t 中。高位仍在高位 ,低位仍在低位。例如,当 s 中的数为:7654321 时,t 中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include /*
18、found*/void fun (long s, long t) long sl=10;*t = s % 10;while ( s 0) s = s/100;*t = s%10 * sl + *t;/*found*/sl = sl*100;main() long s, t;printf(“nPlease enter s:“); scanf(“%ld“, fun(s, printf(“The result is: %ldn“, t);12. 给定程序 MODI1.C 中函数 fun 的功能是: 从 3 个红球,5 个白球, 6 个黑球中任意取出 8 个作为一组,进行输出。在每组中,可以没有黑球,
19、但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表红球数, j 的值代表白球数,k 的值代表黑球数。请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!#include int fun() int i,j,k,sum=0;printf(“nThe result :nn“);/*found*/for(i=0; i=0 if( *a*c ) k=*c; *c=*a; *a=k; if( *b#include float fun ( float num ) int s ;fl
20、oat n, t, pi ;t = 1 ; pi = 0 ; n = 1 ; s = 1 ;/*found*/while(t = num)pi = pi + t ;n = n + 2 ;s = -s ;/*found*/t = s % n ;pi = pi * 4 ;return pi ;main( ) float n1, n2 ;printf(“Enter a float number: “) ;scanf(“%f“, n2 = fun(n1) ;printf(“%6.4fn“, n2) ;15.给定程序 MODI1.C 中函数 fun 的功能是:计算函数 F(x,y,z)=(x+y)/(x
21、-y)+(z+y)内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题16/(z-y)的值。其中 x 和 y 的值不等, z 和 y 的值不等。例如,当 x 的值为 9、y 的值为 11、z 的值为 15 时,函数值为 -3.50。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。#include #include #include /*found*/#define FU(m,n) (m/n)float fun(float a,float b,float c) float value;value=FU(a+b,a-
22、b)+FU(c+b,c-b);/*found*/Return(Value);main() float x,y,z,sum;printf(“Input x y z: “);scanf(“%f%f%f“,printf(“x=%f,y=%f,z=%fn“,x,y,z);if (x=y|y=z)printf(“Data error!n“);exit(0);sum=fun(x,y,z);printf(“The result is : %5.2fn“,sum);16. 给定程序 MODI1.C 中函数 fun 的功能是: 求整数 x 的 y 次方的低 3 位值。例如,整数 5 的 6 次方为 15625,
23、 此值的低 3 位值为 625。请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!#include long fun(int x,int y,long *p ) int i;long t=1;/*found*/for(i=1; idouble fun ( int x)/*found*/int sum = 0.0;int c=0, i=0;while (xi != 0) if (xi 0) sum += xi; c+; i+;/*found*/sum = c;return sum;main( ) int x1
24、000; int i=0;printf( “nPlease enter some data (end with 0): “ );do scanf(“%d“, while (xi+ != 0);printf(“%fn“, fun ( x );18. 给定程序 MODI1.C 中函数 fun 的功能是: 根据输入的三个边长 (整型值), 判断能否构成三角形; 构成的是等边三角形 , 还是等腰三角形。若能构成等边三角形函数返回 3,若能构成等腰三角形函数返回 2, 若能构成一般三角形函数返回 1, 若不能构成三角形函数返回 0。内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题
25、18请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!#include #include /*found*/void fun(int a,int b,int c) if(a+bc else if(a=b|b=c|a=c)return 2;/*found*/else retrun 1else return 0;main() int a,b,c,shape;printf(“nInput a,b,c: “); scanf(“%d%d%d“,printf(“na=%d, b=%d, c=%dn“,a,b,c);sh
26、ape =fun(a,b,c);printf(“nnThe shape : %dn“,shape);19. 给定程序 MODI1.C 中 fun 函数的功能是:将 n 个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include #include fun ( int n, int *a ) int i, j, p, t;for ( j = 0; jai )/*found*/t=i;if ( p!=j ) t = aj; aj = ap; ap = t; 内部资料 严禁销售2010 年计算机二级 C 冲刺
27、班 上机考试典型预测题19putarr( int n, int *z ) int i;for ( i = 1; i #define N 100int fun(int *s, int n) int i,j,k,a,b,c;j=0;for(i=100; i 1000);内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题20num = fun( a,n );printf(“nnThe result :n“);for(i=0; idouble fun(int n)main() int n; double s;printf(“nInput n: “); scanf(“%d“,s=f
28、un(n);printf(“ns=%fn“,s);NONO();NONO()/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */FILE *rf, *wf ; int n, i ; double s ;rf = fopen(“c:testin.dat“,“r“) ;wf = fopen(“c:testout.dat“,“w“) ;for(i = 0 ; i #include #define N 10typedef struct ss char num10; int s; STU;fun( STU a, STU *s )main ( ) STU aN= “A0
29、1“,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77,“A06“,90,“A07“,79,“A08“,61,“A09“,80,“A10“,71 ,m ;int i;printf(“* The original data *n“);for ( i=0; ivoid fun( int m, int *k, int xx )main()int m, n, zz100;printf( “nPlease enter an integer number between 10 and 100: “ );scanf( “%d“, fun( n, printf( “nnThere
30、are %d non-prime numbers less than %d:“, m, n );for( n = 0; n unsigned fun ( unsigned w )main( ) unsigned x;printf ( “Enter a unsigned integer number : “ ); scanf ( “%u“, printf ( “The original data is : %un“, x );if ( x shanghai (为回车键),函数将返回 shanghai。注意: 部分源程序存在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容
31、 ,仅在函数 fun 的花括号中填入你编写的若干语句。#include char *fun ( char *s, char *t)main( ) char a20,b20;printf(“Input 1th string:“) ;gets( a);printf(“Input 2th string:“) ;gets( b);printf(“%sn“,fun (a, b );NONO ();NONO ( )/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *fp, *wf ;int i ;char a20, b20 ;fp = fopen(“c:testin.dat
32、“,“r“) ;wf = fopen(“c:testout.dat“,“w“) ;内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题25for(i = 0 ; i void fun ( int a33, int b33)main( ) /* 主程序 */ int a33 = 1, 2, 3, 4, 5, 6, 7, 8, 9, t33 ;int i, j ;fun(a, t) ;for (i = 0 ; i void fun( char *a, char *p )main() char s81,*t;printf(“Enter a string:n“);gets(s);t
33、=s;内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题27while(*t)t+;t-;while(*t=*)t-;fun( s , t );printf(“The string after deleted:n“);puts(s);NONO();NONO()/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *in, *out ;int i ; char s81,*t ;in = fopen(“c:testin.dat“,“r“) ;out = fopen(“c:testout.dat“,“w“) ;for(i = 0 ; i double
34、 fun(int n)main() int n; double s;printf(“nInput n: “); scanf(“%d“,内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题28s=fun(n);printf(“nns=%fn“,s);NONO();NONO()/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */FILE *rf, *wf ; int n, i ; double s ;rf = fopen(“c:testin.dat“,“r“) ;wf = fopen(“c:testout.dat“,“w“) ;for(i =
35、 0 ; i #include void fun(char *s, char t)main()char s100, t100;printf(“nPlease enter string S:“); scanf(“%s“, s);fun(s, t);内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题29printf(“nThe result is: %sn“, t);NONO();NONO ( )/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */char s100, t100 ;FILE *rf, *wf ;int i ;rf = fopen(“c:te
36、stin.dat“,“r“) ;wf = fopen(“c:testout.dat“,“w“) ;for(i = 0 ; i void fun(int a, int b, long *c)main() int a,b; long c;printf(“Input a, b:“);scanf(“%d,%d“, fun(a, b, printf(“The result is: %ldn“, c);NONO();内部资料 严禁销售2010 年计算机二级 C 冲刺班 上机考试典型预测题30NONO ( )/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE *rf, *wf ;int i, a,b ; long c ;rf = fopen(“c:testin.dat“, “r“) ;wf = fopen(“c:testout.dat“,“w“) ;for(i = 0 ; i #include float fun()main()printf(“Root =%fn“, fun();