全国计算机等级考试二级C语言资料(机试)_第1页
全国计算机等级考试二级C语言资料(机试)_第2页
全国计算机等级考试二级C语言资料(机试)_第3页
全国计算机等级考试二级C语言资料(机试)_第4页
全国计算机等级考试二级C语言资料(机试)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、全国计算机等级考试二级C语言考前复习资料(机试)机试做题技巧概述一、程序填空题【解析】该类型主要考察学员对一个C程序的整体把握能力。首先须通读整个源程序,了解程序的功能后试着边填空边调试,分析输出结果,以找到正确答案。因此,不像程序修改题那么简单。【程序填空题的特点和注意事项】(1)程序填空的试题中通常包含三个空需要填写。(2)试题中用"*found*/"来提示在下一行或下二行注明填空的位置及编号,如_1_。(3)程序填空考核对程序的整体把握,出题点可能是:for循环语句的初始化或条件判断、函数返回值、if语句的条件判断、链表中指针如何移动、文件操作相关函数的参数等。(4)

2、特别要注意的是:只能在填空的位置填写语句或表达式,不要增行或删行,不要改动程序行的顺序,更不要改动程序的结构。【建议答题步骤】(1)首先仔细审题,了解试题的要求,看清题目给出的输入和输出例示,以便检验程序运行的结果是否正确。(2)审视"/*found*/"所在函数,根据题义理解程序所采用的基本算法,做到心里有数。(3)填好空后对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。(4)当不再出现语法错时,执行程序, 按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一

3、步检查程序中的逻辑错误。(5)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。 二、程序修改题【解析】该类型主要考察学员对C程序部分结构或算法的分析和理解能力。因此,对学员的知识把握能力要求不高,通常可以借助计算机帮我们改错(仅限语法错误)。若非语法错误,则需对程序边调试边找错,分析输出结果,找出错误所在并改正。【程序填空题的特点和注意事项】(1)上机改错的试题中通常包含两个(或三个)错误需要修改。(2)试题中用"*found*/"来提示在下一行(或下面第二行)有错。(3)错误的性质基本分语法错误和逻辑错误两种,也有些试题要求把语句添加在下划线处。(4)特别注意:

4、只能在出错的行上进行修改,不要改动程序行的顺序,更不要自己另编程序。【建议答题步骤】(1)首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。(2)审视"/*found*/"所在函数,根据题义理解程序所采用的基本算法,做到心里有数。(3)先对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。(4)当不再出现语法错时,执行程序, 按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。(5)当程序存在

5、逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。例如,题目要求数据按由小到大排序,而结果数据是按由大到小进行了排序,问题可能出现在条件判断上。又如,输出的字符串比预期的短,就有可能字符串的结束标志放错了位置。再如做循环的时候数组上限下限错误了,下标是从0开始 而不是1开始的。修改程序中的逻辑错时,要求考生认真读懂程序代码。(6)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。三、程序设计题【解析】主要考察学员对C语言综合理解能力和上机实践能力,能够对所给问题,运用所学知识,按照程序设计的步骤独立编写出一段程序,学会用计算机语言描述日常生活中

6、所见到的现象和拟题,通过实际上机操作积累经验,锻炼用C语言描述问题的逻辑思维能力。【建议答题步骤】(1)首先仔细审题,了解试题的要求,记下试题给出的输入和输出例示,以便检验在完成指定的函数后程序运行的结果是否正确。(2)调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。(3)理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数(如把函数值赋给某个对象),则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。(4)选择适当的算法进行编程,输

7、入程序语句。不要忘记及时存盘!(5)编译程序,直到没有语法错误。(6)调试程序,利用试题中给出的例示数据进行输入(若要求输入的话),运行程序,用示例的输出数据检验输出结果,直到结果相同。 特别要注意:程序设计题要求完全设计正确才会给分,因此,要么是40分,要么是0分,不会给中间分。那么想通过机试,程序填空题和程序修改题通常来说必须全部正确才能容易通过,否则不容易通过。第 30 页 共 30 页上机改错题重点题型归类分析分类一:简单语法错误u 题型一:符号遗漏1、下列程序的功能是:读入一个整数 k(2k10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:

8、2、3、5、7、11。请改正程序中的语法错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include “conio.h”#include “stdio.h”/*found*/IsPrime ( int n ); int i, m;m = 1;for ( i = 2; i < n/ i+ )/*found*/ if !( n%i ) m=0; break ; return ( m );main () int j, k;clrscr ();printf (“nPease enter an integer number between 2 a

9、nd 10000:”); scanf (“%d”,&k );printf ( “nn The prime factor (s) of % d is ( are ):”, k );for ( j = 2; j <= k; j+ )if ( ( ! k%j ) ) && ( IsPrime ( j ) ) printf ( n % 4d, j );printf (n);【参考答案】(1) IsPrime(int n) (2) if(!(n%i)【解题技巧】常见的符号遗漏问题包括以下两种:(1)分号问题l 遗漏分号:k+>k+; break>break; r

10、eturn sum>return sum; l 分号多余:if(k>1); >if(k>1) while(k>1); >while(k>1) switch( ); > switch( ) (2)遗漏括号if k>1 > if(k>1) if !(n%i) > if (!(n%i) while k>1 > while(k>1)u 题型二:符号出错2、给定程序MODI1.C中函数 fun 的功能是:用下面的公式求的近似值,直到最后一项的绝对值小于指定的数(参数num )为止: 1 1 1 1 - + - +

11、. 4 3 5 7 例如, 程序运行后, 输入0.0001, 则程序输出3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include <math.h>#include <stdio.h>float fun ( float num ) int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ;/*found*/ while(t >= num) pi = pi + t ; n = n + 2 ; s = -s ;/*found*

12、/ t = s % n ; pi = pi * 4 ; return pi ;main( ) float n1, n2 ; printf("Enter a float number: ") ;scanf("%f", &n1) ; n2 = fun(n1) ; printf("%6.4fn", n2) ;【参考答案】(1)while(fabs(t)>=num) (2)t=s/n3、下列给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。例如,当s中的数为7654321时,t是

13、的数为642。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>/*found*/void fun (long s, long t)long sl=10; s/=10; *t=s%10;/*found*/ while (s<0) s=s/100; *t=s%10*sl+*t; sl=sl*10; main()long s,t; clrscr(); printf("nPlease enter s:");scanf(&

14、quot;%ld",&s); fun(s,&t); printf("The result is : %ldn",t);【参考答案】(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/=1

15、0,除号是左下的斜线(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<n;) int *a10 >int (*a)10(7)浮点数不能比较大小,只能用绝对值来比

16、较u 题型三:变量定义出错4、程序的功能更是求方程2x3-4x2+3x-6=0的一个根,求要求绝对误差不超过0.001。例如,若给m输入 -100,给n输入90,则函数求得的一个根值为2.000。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include <stdio.h>#include <math.h>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

17、=(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("Enter m n : n"); scanf("%lf%lf",&m,&n); root=fun( m,n ); printf("root = %6.3fn",root);【参考答案】:(1)double r;(2)while(fabs(m-n)&g

18、t;0.001)【解题技巧】变量定义可能会出现以下三种错误:(1)变量定义时没有初始化,或者初始化的值不对,如int s=1>int s=0,一般在累加求和时容易出现此类错误(2)变量定义出错,如int sum=0.0>double sum=0.0 或者是使用变量前并没有定义(3)变量定义的类型和程序中使用的类型不匹配,如int r>double r;u 题型四:赋值出错5、给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:7531。 请改

19、正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void fun (long s, long *t) int d; long sl=1;/*found*/ t = 0; while ( s > 0) d = s%10;/*found*/ if (d%2 = 0) *t = d * sl + *t;sl *= 10; s /= 10; main() long s, t; printf("nPlease enter s:"); scanf("%ld"

20、;, &s); fun(s, &t); printf("The result is: %ldn", t);【参考答案】:(1)*t=0;(2)if(d%2!=0)6、下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>/*found*/void fun (int a,b) int t;/*fou

21、nd*/ t=b;b=a;a=t; main()int a,b; clrscr(); printf("Enter a,b:");scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%d b=%dn",a,b);【参考答案】(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才

22、是内容char ch="0">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(a<b) t=a

23、;b=a;b=t->if(a<b) t=a;a=b;b=t; 错误形式 正确形式 void fun(int *a,int *b) int t;t=b;b=a;a=t;void fun(int *a,int *b) int t; t=*b;*b=*a;*a=t;分类二:固定语法格式搭配错误u 题型一:输入输出格式出错1、给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#i

24、nclude <stdio.h>int fun ()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*ai i;printf (“Sum=%dn”, sum);main () fun (); 【参考答案】(1)sum = 1; (2)scanf("%d", &aij);2、给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数

25、。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>#define M 5/*found*/int fun(int n, int xx) int i, j, sum=0; printf( "nThe %d x %d matrix:n", M, M ); for( i = 0; i < M; i+ ) for( j = 0; j < M; j+ )/*found*/ printf( "%f ", xxij ); printf("

26、;n"); for( i = 0 ; i < n ; i+ ) sum += xxii+xxi n-i-1 ; return( sum );main( ) int aaMM=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 ( "nThe sum of all elements on 2 diagnals is %d.",fun( M, aa );【参考答案】(1)int fun(int n,int xxM)(2)printf("%d",xxij);【解题技巧】注意输入输出

27、的正确格式,关注容易出错的地方,如下图正确形式 错误形式scanf(“%d”,aij)int i,*p=&i; scanf(“%d”,&p);int i=10;printf(“%f”,i);printf(“%d”, “string”);scanf(“%d”,&aij)int i,*p=&i; scanf(“%d”,p);int i=10;printf(“%d”,i);printf(“%s”, “string”);如:scanf(“%d”,aij) >scanf(“%d”,&aij) int i,*p=&i; scanf(“%d”,&

28、p) >scanf(“%d”,p);int i=10; printf(“%f”,i);>printf(“%d”,i); printf(“%d”, “string”); > printf(“%s”, “string”);u 题型二:选择结构中的基本格式问题3、给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、例如,若给n输入7,该项的斐波拉契数值为:13。请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include &

29、lt;stdio.h>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);【参考答

30、案】:(1)switch(g)(2)case 1: return 1; case 2:return 1;【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图正确形式 错误形式switch() ; 分号多余 case 1:语句1;break;case 2; 此处应该为冒号case3:语句3 case与常量表达式之间有空格switch() case 1:语句1;break;case 2:case 3:语句3;u 题型三:循环结构中的基本格式问题4、给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。 1 1 1 t = 1 - - - - - - - 2

31、*2 3*3 m*m 例如,若 m 中的值为: 5,则应输出: 0.536389。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>double fun ( int m ) double y = 1.0 ;int i ;/*found*/ for(i = 2 ; i < m ; i+)/*found*/ y -= 1 /(i * i) ; return( y ) ;main( ) int n = 5 ; printf( "nThe result is %lfn"

32、;, fun ( n ) ) ;【参考答案】:(1)for(i=2;i<=m;i+)(2)y-=1.0/i/i;【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图正确形式 错误形式for(i=0,i<10,i+)以分号为间隔符for(i=0;i<n;i+)循环的次数以具体题目来判断(改错中的经常考)for(i=0;i<10;i+)for(i=0;i<n-1;i+)分类三:函数类错误(考试重点、难点,出现的频率非常高)u 题型一:函数定义时出错1、给定程序MODI1.C中函数fun的功能是:根据形参m的值(2m9,在m行m列的二维数组中存放如下所示规

33、律的数据,由main函数输出。例如,若输入 2 | 若输入 4 则输出: | 则输出: 1 2 | 1 2 3 4 2 4 | 2 4 6 8 | 3 6 9 12 | 4 8 12 16 请改正程序函数中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>#define M 10int aMM = 0 ;/*found*/void fun(int *a, int m) int j, k ; for (j = 0 ; j < m ; j+ )for

34、 (k = 0 ; k < m ; k+ )/*found*/ ajk = k * j ;main ( ) int i, j, n ; printf ( " Enter n : " ) ; scanf ("%d", &n ) ; fun ( a, n ) ; for ( i = 0 ; i < n ; i+) for (j = 0 ; j < n ; j+) printf ( "%4d", aij ) ; printf ( "n" ) ; 【参考答案】:(1) void fun(int a

35、M, int m)(2)ajk=(k+1)*(j+1);2、给定程序MODI1.C中函数 fun 的功能是:求S的值。 例如,当k为10时,函数值应为:1.533852。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <math.h>/*found*/void fun( int k ) int n; double s, w, p, q; n = 1; s = 1.0; while ( n <= k ) w = 2.0 * n; p = w - 1

36、.0; q = w + 1.0; s = s * w *w/p/q;n+; /*found*/ return smain ( ) printf("%fn", fun (10);【参考答案】(1) float fun(int k)(2)return s;3、给定程序MODI1.C中函数fun的功能是: 比较两个字符串,将长的那个字符串的首地址作为函数值返回。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!#include <stdio.h>/*found*/char fun(ch

37、ar *s, char *t) int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss) sl+;/*found*/ (*ss)+; while(*tt) tl+;/*found*/ (*tt)+; if(tl>sl) return t; else return s;main() char a80,b80; printf("nEnter a string : "); gets(a); printf("nEnter a string again : "); gets(b); printf("n

38、The longer is :nn"%s"n",fun(a,b);【参考答案】(1) char *fun(char *s,char *t)(2)ss+;(3)tt+;【解题技巧】函数头部容易出错的几个地方:(1)int fun(int m);->int fun(int m)函数定义时末尾的分号是多余的(2)int fun(int m) int i=20;char ch;->int fun(int m) 函数名后必须要有大括号(3)void fun(int a,int b)->void fun(int *a,int *b)参数类型不对(4)void

39、 fun(int a,b)->void fun(int a,int b)相同类型的参数也要分开定义(5)void fun(int a,int n)->void fun(int a10,int n)数组定义时二维下标不能省略(6)voidfun(int n)->void fun(int n)返回值类型和函数名之间有空格注意函数定义的一般格式,关注容易出错的地方,如下图:正确形式 错误形式int fun(int a,b);int k=2;while(k<=m&&(k%b)k+;.if(k=a)return 1.0;else return 0.0double

40、fun(int a,int b)int k=2;while(k<=m&&(k%b)k+;.if(k= =a)return 1.0;else return 0.0当+、- -与*结合问题,搞清楚什么时候应该加括号。搞清楚什么时候该加*号+、- -和*是同一优先级,结合性是从右向左*p+; 是指针p向后移动一个存储单元 然后取指针p所指变量的值。(*p)+; 是将指针p所指变量的值自增1.u 题型二:返回值错误4、下列给定程序中,函数fun的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。例如:若输入THIs is a boot,则输出

41、应该是1、0、2、2、0。请改正程序中的错误,使它能得出正确结果。#include <conio.h>#include<stdio.h>/*found*/fun(char *s,int num5)int k,i=5;for(k=0;k<i;k+)/*found*/numi=0;for(;*s;s+)i=-1;/*found*/switch(s) case a:case A:i=0;break;case e:case E:i=1;break;casei:caseI:i=2;break;case0:case 0:i=3;break;caseu:caseU:i=4;br

42、eak;if(i>=0)numi+;main()int i;char s30;int num5=0;printf("请输入一个字符串:n");gets(s);fun(s,num);for(i=0;i<5;i+)printf("%d、",numi);【参考答案】(1)void fun(char *s,int num5) (2)numk=0; (3)switch(*s)【解题技巧】返回值错误主要表现在以下四个方面:(1)有return语句,但缺少返回值类型,fun(int n)->double fun(int n) 经常考(2)缺少返回值。

43、函数定义时有返回值类型,但程序中缺少return 语句(3)返回值类型和函数定义时的类型不一致。如调用函数时返回值为double类型,但定义时为int类型,int fun(int a) >double fun(int a) (4)返回值不对,如:return (a)->return (b);分类四:编译预处理、链表类错误u 题型一:带参数的宏定义出错1、给定程序MODI1.C中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为 -3.50。

44、请改正程序中的错误,使它能得出正确结果。#include <stdio.h>#include <math.h>#include <stdlib.h>/*found*/#define FU(m,n) (m/n)float fun(float a,float b,float c) float value; value=FU(a+b,a-b)+FU(c+b,c-b);/*found*/ Return(Value);main() float x,y,z,sum; printf("Input x y z: ");scanf("%f%f%f

45、",&x,&y,&z); 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);【参考答案】:(1)#define FU(m,n) (m)/(n) (2)return (value);【解题技巧】带参数的宏定义,要注意宏替换部分有没有括号,一般情况下是缺少括号或者括号的位置不正确,如 #define

46、 F(m,n) (m/n)>#define F(m,n) (m)/(n)u 题型二:链表指针向后移动节点时出错2、给定程序MODI1.C是建立一个带头结点的单向链表, 并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。#include <stdio.h>#include <stdlib.h>typedef struct aa int data; struct aa *next; NODE;int fun ( NODE *h ) int

47、max=-1;NODE *p;/*found*/ p=h ; while(p) if(p->data>max ) max=p->data;/*found*/ p=h->next ; return max;outresult(int s, FILE *pf) fprintf(pf,"nThe max in link : %dn",s);NODE *creatlink(int n, int m) NODE *h, *p, *s; int i; h=p=(NODE *)malloc(sizeof(NODE);h->data=9999; for(i=1

48、; i<=n; i+) s=(NODE *)malloc(sizeof(NODE); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; p->next=NULL; return h;outlink(NODE *h, FILE *pf) NODE *p; p=h->next; fprintf(pf,"nTHE LIST :nn HEAD "); while(p) fprintf(pf,"->%d ",p->data); p=p->

49、;next; fprintf(pf,"n"); main() NODE *head; int m; head=creatlink(12, 100); outlink(head , stdout); m=fun(head); printf("nTHE RESULT :n"); outresult(m, stdout);【参考答案】(1)p=h->next;(2)p=p->next;【解题技巧】在链表题中,一般会有多个结构体指针,要注意每个指针的指向,尤其是在指针间相互赋值时,指针的指向就会发生变化,这时就容易出现改错题,建议在做此类型的题目时在

50、纸上画一个指针的指向图。指针在链表中的移动是常考题型,指针向后移动一个节点的固定形式是:p=p->nex,如上题中,应将p=h->next应该改为p=p->next。上机编程题重点题型归类分析加双下划线和灰背景的为可出填空的地方,请注意!上机编程题重点题型归类分析加双下划线和灰背景的为可出填空的地方,请注意!分类一:数学问题u 题型一:整数合并1、函数fun的功能是: 将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。 例如,当a45,b=12。调用该函数后,c=1425。请编写fun函数实现该功能:void fun(int a, int b, long *c)*c=a/10*100+a%10+b/10*1000+b%10*10;/取多位数各位上的数字【解题思路】本题主要考了以下几个知识点:(1)如何获得一个二位数的个位和十位:不管是几位数,获得个位数的方法:a%10即可获得个位两位数获得十位的方法:a/10(2)十进制中四位数的构成:如十进制的1234=1*1000+2*100+3*10+4*1也就是说:只要知道该四位数的各位上的数码,通过以上组合的方式就可以组合成一个四位数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论