1、二级 C 语言笔试-305 及答案解析(总分:84.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.若下列各选项中所有变量已正确定义,函数 fun 通过 return 语句返回一个函数值,以下选项中错误的程序是( )。(分数:1.00)A.main( )x = fun(2,10);float fun(int a, intb)B.float fun( int a,intb)main( )x = fun(i,j);C.float fun(int, int);main( )x=fun(2,10);float fun(iht a, intb)D.main( )float f
2、un(int i, intj);x = fun(i,j);float fun(int a,intb) 2.若有定义:float x=1.5;int a=1,b=3,c=2; 则正确的 switch 语句是( )。(分数:1.00)A.switch(x)case 1.0: printf(“*/n“);case 2.0: printf(“ * * /n“ );B.switch(iht)x);case 1: printf(“ * /n“ );case 2: printf(“ * * /n“ );C.switch(a +b)case 1: printf(“ * /n“ );case 2 + 1: pr
3、intf(“ * * /n“ );D.switch(a +b)case 1: pfintf(“ * /n“ );case c: pfintf(“ * * /n“);3.有以下程序:#include stdio.hint fun(int x, int n)static int sum =0,i;for(i=0;in;i + )sum + =xi;return sum;int a =1,2,3,4,5,b=6,7,8,9,s=0;s = fun(a,5) + fun(b,4) ;printf( “%d /n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45B.50C.60D.554
4、.下列关于栈的描述正确的是( )。(分数:1.00)A.在栈中只能插入元素而不能删除元素B.在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素5.以下叙述中错误的是( )。(分数:1.00)A.C 语言源程序经编译后生成后缀为.obj 的目标程序B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令6.以下叙述中正确的是( )。(
5、分数:1.00)A.预处理命令行必须位于 C 源程序的起始位置B.在 C 语言中,预处理命令行都以“#”开头C.每个 C 程序必须在开头包含预处理命令行:#include stdio.hD.C 语言的预处理不能实现宏定义和条件编译的功能7.有以下程序:#include stdio.hvoid swap(char * x,ehar * y)char t;t= *x; *x: *y; *y=t;main ( )char *s1 =“abc“, * s2 =“123“;swap(s1 ,s2); printf(“%s,%s /n“ ,s1 ,s2);程序执行后的输出结果是( )。(分数:1.00)A
6、.123,abeB.abe,123C.1bc,a23D.321,cba8.有以下程序:#include stdio.hfun( char p 10)int n=0,i;for(i=0;i7;i +)if(pi0 =T) n+;return n;main( )char sir 10 = “Mon“ ,“Tue“ ,“Wed“ ,“Thu“ ,“Fri“ ,“Sat“ ,“Sun“ ;prlnff(“ % d/n“ ,fun(str) );程序执行后的输出结果是( )。(分数:1.00)A.1B.2C.3D.09.有以下程序:#includo stdio.hmain()int y=10;while
7、(y-)printf(“y=%d/n“,y);程序执行后的输出结果是( )。(分数:1.00)A.y=0B.y= -1C.y=1D.while 构成无限循环10.有以下程序:#include stdio.hmain( )char * p = “3697“ ,“2548“ ;int i,j; long num =0;for(i =0;i2;i + )j =0;while(pij! =/0)if(pij-0)%2) num=10*num+pij-0;j+ =2;printf( “%d /n“ ,num);程序执行后的输出结果是( )。(分数:1.00)A.35B.37C.39D.397511.若有
8、说明语句:double * p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是( )。(分数:1.00)A.*p= sCanf(“%1f“,p);B.*p= scanf(“%f“,p);C.p= scanf( “% 1f“ , * p);D.p = scanf( “% 1f“ , p);12.下面的叙述正确的是( )。(分数:1.00)A.程序设计就是编制程序B.程序的测试必须由程序员自己去完成C.程序经份试改错后还应进行再测试D.程序经调试改错后不必进行再测试13.设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为 ( )。(分数:1.0
9、0)A.EOFB.非 0 值C.0D.NULL14.以下不合法的用户标识符是( )。(分数:1.00)A.j2_KEYB.DoubleC.4dD._815.下列叙述中正确的是( )。(分数:1.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率16.有以下程序:#include stdio.hmain( )ehar c1,c2,c3,c4,c5,c6;scanf( “% c% c% c% c“, c5
10、= getehar( ); c6 = getchar( );putehar(c1); putehar(c2);printf(“%c%c/n“, c5, c6);23 回车45678 回车(分数:1.00)A.1267B.1256C.1278D.124517.现有以下结构体说明和变量定义,如图所示,指针 P,q,r 分别指向一个链表中连续的三个结点。(分数:1.00)A.q-next=r-next;p-next=r;r-next=q;B.p-next=r;q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;P-n
11、ext=r;q-next=r-next;18.若要求从键盘读人含有空格字符的字符串,应该使用函数( )。(分数:1.00)A.getc()B.gets()C.getchar()D.scanf()19.设有如下关系表:(分数:1.00)A.T=RSB.T=RSC.T=RSD.T=R/S20.有以下程序:#include stdio.hmain( )int i,t 3 = 9,8,7,6,5,4,3,2,1;for(i=0;i3;i+) printf(“%d “,t2-il-i);程序执行后的输出结果是( )。(分数:1.00)A.7 5 3B.3 5 7C.3 6 9D.7 5 121.以下不合
12、法的数值常量是( )。(分数:1.00)A.011B.le1C.3.0E0.5D.0xabcd22.以下叙述中错误的是( )。(分数:1.00)A.算法正确的程序最终一定会结束B.算法正确的程序可以有零个输出C.算法正确的程序可以有零个输入D.算法正确的程序对于相同的输入一定有相同的结果23.要求通过 while 循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是( )。(分数:1.00)A.while( ch = getchar( ) ! =N) printf(“ %c“,ch);B.while(ch = getehar() ! =N)printf(“%c“,ch
13、);C.while (ch = getehar() = = N)printf( “%c“, ch);D.while (ch = getchar( ) = N)printf(“%c“, ch );24.下列描述中正确的是( )。(分数:1.00)A.软件工程只是解决软件项目的管理问题B.软件工程主要解决软件产品的生产率问题C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D.软件工程只是解决软件开发中的技术问题25.已定义以下函数:int fun(int *p)return *p;函数 fun 的返回值是( )。(分数:1.00)A.不确定的值B.一个整数C.形参 p 中存放的值D.
14、形参 p 的地址值26.以下叙述中错误的是( )。(分数:1.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参27.数据库设计的根本目标是要解决( )。(分数:1.00)A.数据共享问题B.数据安全问题C.大量数据存储问题D.简化数据维护28.有以下程序:#include stdio.hmain()unioncharch2;int d;s;s.d=0x4321;printf(“%x,%x/n“,s.ch0,s.ch1);在 16 位编译系统上,程序执行后的输出结果是(
15、 )。(分数:1.00)A.21,43B.43,21C.43,00D.21,0029.设有以下定义和语句:char str20=“Program“, *P;p=str;则以下叙述中正确的是( )。(分数:1.00)A.*p 与 str0中的值相等B.str 与 p 的类型完全相同C.str 数组的长度和 p 所指向的字符串长度相等D.数组 str 中存放的内容和指针变量 p 中存放的内容相同30.有以下程序:#include stdio.hint fun(int n)if(n = 1) return 1;else return( n + fun( n - 1 ) );main( )int x;
16、seanf(“% d“ ,x = fun(x) ;pfinff( “% d /n“ ,x);执行程序时,给变量 x 输入 10,程序的输出结果是( )。(分数:1.00)A.55B.54C.65D.4531.设有以下语句:int a=1,b=2,c;c=a(b2);执行后,c 的值为( )。(分数:1.00)A.6B.7C.8D.932.有以下程序:#include stdio.hvoid funl (char * p)char * q;q=p;while( *q! =/0) (*q) +;q+;mains( )char a = “Program“ , * p;p = fun1 (p); pr
17、intf(“% s /n“ ,(分数:1.00)A.;程序执行后的输出结果是( )。A33.有以下程序:#include stdio.hmain( )int a =0,b =0,c =0,d =0;if(a = 1) b=1;c=2;else d=3;pfintf( “%d,%d,%d ,%d /n“ ,a,b,c,d);(分数:1.00)A.0,1,2,0B.0,0,0,3C.1,1,2,0D.编译有错34.表达式 3.6-5/2+1.2+5%2 的值是( )。(分数:1.00)A.4.3B.4.8C.3.3D.3.835.有以下程序:int fun1 (double(分数:1.00)A.r
18、eturn a * =a;int fun2 ( double x, double y )double a=0,b=0;a = fun1 (x) ;b = fun1 (y); return(int) (a +B.;int * y; * pt;int a = 1,2 ,b = 3,4;struct st c2 = 10,a,20,b;pt=c;以下选项中表达式的值为 11 的是( )。(分数:1.00)A.*pt-yB.pt-xC.+pt-xD.(pt+)-x37.以下叙述中错误的是( )。(分数:1.00)A.C 程序中的#include 和#define 行均不是 C 语句B.除逗号运算符外,
19、赋值运算符的优先级最低C.C 程序中,j+;是赋值语句D.C 程序中,+、-、*、/、%是算术运算符,可用于整型和实型数的运算38.有以下程序:#include stdio.hmain( )int i,s=0,t = 1,2,3,4,5,6,7,8,9;for(i=0;i9;i+=2) s+=*(t+i);prinff(“% d /n “,s);(分数:1.00)A.45B.20C.25D.3639.执行以下程序后,test.txt 文件的内容是(若文件能正常打开) ( )。#include stdio.h#include stdlib.hmain( )FILE * fp;char * s1
20、= “Fortran“ , * s2 = “Basic“;if(fp = fopen( “test. txt“ ,“ wb“ ) = = NULL)prinff( “Cant open test. txt file /n“); exit(1); fwrite( s1 ,7,1 ,fp); /* 把从地址 s1 开始到 7 个字符写到 fp 所指文件中*/fseek(fp,OL,SEEK_SET); /*文件位置指针移到文件开头*/fwrite (s2,5,1,fp);felose (fp);(分数:1.00)A.BasieanB.BasieFortranC.BasicD.FortranBasi
21、e40.以下能正确定义字符串的语句是( )。(分数:1.00)A.char str=/064;B.char str=“/x43“;C.char str=“;D.char str=“/0“;41.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。(分数:1.00)A.(! E=0)B.(E0 EO)C.(E=0)D.(E! =0)42.以下不合法的字符常量是( )。(分数:1.00)A./018B./“C./D./xcc43.在软件设计中,不属于过程设计工具的是( )。(分数:1.00)A.PDL(过程设计语言)B.PAD 图C.N-S 图D.DFD 图44.以下四个程
22、序中,完全正确的是( )。(分数:1.00)A.#include stdio.hmain( );/* programmlng* /printf( “programming! /n“ );B.#include stdio.hmain( )/*/programmingprintf(“programming! /n“);C.#include stdio.hmain( )/*programming* /printf( “programming! /n“ );D.include stdio.hmain ( )/*/* programming*/*/printf( “programming! /n“ );
23、45.下列叙述中正确的是( )。(分数:1.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令46.有以下程序:#inelude stdio.hmain( )int i,j,x=0;for(i=0;i2;i+ )x+;for(j=0;j=3;j +)fi(j%2) continue;x+;x+;pfinff( “x = % d/n“,x);程序执行后的输出结果是( )。(分数:1.00)A.x=4B.x=8C.x=6D.x=1247.下列数据结构中,能用二分法进行查找的是( )。(分数:1.00)
24、A.顺序存储的有序线性表B.线性链表C.二叉链表D.有序线性链表48.数据库系统的核心是( )。(分数:1.00)A.数据模型B.数据库管理系统C.数据库D.数据库管理员49.以下叙述中错误的是( )。(分数:1.00)A.可以通过 typedef 增加新的类型B.可以用 tyPedef 将已存在的类型用新的名字来表示C.用 typedef 定义新的类型名后,原有类型名仍有效D.用 tyPedcf 可以为各种类型起别名,但不能为变量起别名50.以下数组定义中错误的是( )。(分数:1.00)A.int x3=0;B.int x2 3=1,2,3,4,5,6;C.int x3=1,2,3,4,5
25、,6;D.int x23=1,2,3,4,5,6;二、填空题(总题数:16,分数:34.00)51.在面向对象方法中 【1】 描述的是具有相似属性与操作的一组对象。(分数:2.00)填空项 1:_52.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为 【2】 。(分数:2.00)填空项 1:_53.在关系模型中,把数据看成是二维表,每一个二维表称为一个 【3】 。(分数:2.00)填空项 1:_54.程序测试分为静态分析和动态测试。其中 【4】 是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中
26、的错误。(分数:2.00)填空项 1:_55.对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 【5】 。(分数:2.00)填空项 1:_56.以下程序的功能是输入任意整数给 n 后,输出 n 行从大写字母 A 开始构成的三角形字符阵列图形。例如,输入整数 5 时(注意:n 不得大于 10),程序运行结果如下:A B C D EF C H IJ K LM NO请填空完成该程序。#include stdio.hmain( )int i.j,n;char ch =A;scanf(“ % d“ ,if( n11 )for(i=1; i=n;i+)for(j =1; j =n-i+1;
27、j+)printf( “%2c“ ,ch);【6】 ;【7】 ;else printf (“n is too large! /n“ );prinff(“/n“);(分数:2.00)填空项 1:_57.以下函数 fun 的功能是返回 str 所指字符中中以形参 c 中字符开头的后续字符串的首地址,例如:str所指字符串为“Hello!”,c 中的字符为e,则函数返回字符串“ello!“的首地址。若 str 所指字符串为空中或不包含 c 中的字符,则函数返回 NULL。请填空。char *fun (char *str,char c)int n=0;char*p=str;if(p!=NULL)whi
28、le(Pn! =cfor(i=0;i3;i+) s+ =aii + ai3-i-1;pfintf(“% d /n“ ,s);(分数:2.00)填空项 1:_59.以下 isprime 函数的功能是判断形参 a 是否为素数,如果是素数,函数返回 1,否则返回 0。int isprime( int a)int i;for(i =2;i= a/2;i + )if(a%i=0) 【10】 ;【11】 ;(分数:4.00)填空项 1:_60.下面程序的运行结果是 【12】 。#include stdio.hfun(int t,int n)int i,m;if(n=1) return t0;elseif(
29、n=2) | m:fun(t,n-1); return m; main( )int a = 11,4,6,3,8,2,3,5,9,2;printf( “% d /n“ ,fun( a, 10);(分数:2.00)填空项 1:_61.有两个 C 程序文件 T18.c 和 myfun.c 同在 VC 系统目录(文件夹)下,其中 T18.c 文件如下:#include stdio.h#include “myfun.c“main( )fun(); prinff(“/n“); myfun.c 文件如下:void fun( )char s80,c;int n=0;while(c=getchar()! :/
30、n) sn+ =c;n-;while ( n=0) prinff(“%c“ , s n- );当编译连接通过后,运行程序 T18 时,输入“Thank!”,则输出结果是 【13】 。(分数:2.00)填空项 1:_62.若变量 a,b 已定义为 int 类型并分别赋值 21 和 55,要求用 printf 函数以 a=21,b=55 的形式输出,请写出完整的输出语句行: 【14】 。(分数:2.00)填空项 1:_63.以下程序的功能是:输出 100 以内(不含 100)能被 3 整除且个位数为 6 的所有整数,请填空。#include stdio.hmain()int i,jfor(i=0;
31、 【15】 ;i+)j=i*10+6;if( 【16】 )continue:Printf(“%d”“,j);(分数:2.00)填空项 1:_64.以下程序中函数 fun()的功能是构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。函数 disp 的功能是显示输出该单向链表中所有结点中的字符串。请填空完成函数 disp。(分数:2.00)填空项 1:_65.当运行以下程序时,输入 abcd,程序的输出结果是 【19】 。insert(char str )int i;i = stolen(str);while (i0)str2*i =stri; str2 * i-1
32、 = * ; i-;printf( “% s /n“, sir);main( )char str40;seanf( “% s“ ,str); insert(str);(分数:2.00)填空项 1:_66.以下程序用于判断 a,b,c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a,b,c 输入三角形三条边长时,确定 a,b,c 能构成三角形的条件是需同时满足三个条件:a+bc, a+cb,b+ca。请填空。#include stdio.hmain( )float a,b,c;scanf( “% f% f% f“, if( 【20】 )printf(“YES/n“); /*a.b.
33、c 能构成三角形*/else prinff( “NO /n“ ); /* a.b.c 不能构成三解形*/(分数:2.00)填空项 1:_二级 C 语言笔试-305 答案解析(总分:84.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.若下列各选项中所有变量已正确定义,函数 fun 通过 return 语句返回一个函数值,以下选项中错误的程序是( )。(分数:1.00)A.main( )x = fun(2,10);float fun(int a, intb) B.float fun( int a,intb)main( )x = fun(i,j);C.float fun
34、(int, int);main( )x=fun(2,10);float fun(iht a, intb)D.main( )float fun(int i, intj);x = fun(i,j);float fun(int a,intb) 解析:解析 C 语言程序从 main 函数开始执行,当程序中定义了多个函数时,通常情况下是先定义后调用。若被调用函数定义在主调函数之后,则必须先声明后调用。在选项 A)中,先执行 main 函数,并调用了 fun 函数,而 fun 函数在此调用之前无定义也无声明,故无法正常识别调用,所以错误。2.若有定义:float x=1.5;int a=1,b=3,c=2
35、; 则正确的 switch 语句是( )。(分数:1.00)A.switch(x)case 1.0: printf(“*/n“);case 2.0: printf(“ * * /n“ );B.switch(iht)x);case 1: printf(“ * /n“ );case 2: printf(“ * * /n“ );C.switch(a +b)case 1: printf(“ * /n“ );case 2 + 1: printf(“ * * /n“ );D.switch(a +b)case 1: pfintf(“ * /n“ );case c: pfintf(“ * * /n“);解析:
36、解析 选项 A)中 case 后面的表达式为浮点型,选项 D)中 case 后面的表达式存在字符变量 c,故选项 A)、D)错误;在选项 B)中,switch 后面的表达式加了分号显然有错。3.有以下程序:#include stdio.hint fun(int x, int n)static int sum =0,i;for(i=0;in;i + )sum + =xi;return sum;int a =1,2,3,4,5,b=6,7,8,9,s=0;s = fun(a,5) + fun(b,4) ;printf( “%d /n“,s);程序执行后的输出结果是( )。(分数:1.00)A.45
37、B.50C.60 D.55解析:解析 静态变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。在 main 函数中调用 fun(a,5),执行for 循环得到 sum=0+a0+a1+a2+a3+a4=15;然后调用 fun(b,4),因为 sum 为静态变量,再次调用时 sum 保留上次函数调用结束时的值,所以 sum: 15+b0+b1+b2+b3=45;返回 sum 的值,main 函数中输出的 s=15+45=60。4.下列关于栈的描述正确的是( )。(分数:1.00)A.在栈中只能插入元素而不能删除元素B.
38、在栈中只能删除元素而不能插入元素C.栈是特殊的线性表,只能在一端插入或删除元素 D.栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素解析:解析 栈实际上也是线性表,只不过是一种特殊的线性表。在这种特殊的线性表中,其插入和删除只在线性表的一端进行。5.以下叙述中错误的是( )。(分数:1.00)A.C 语言源程序经编译后生成后缀为.obj 的目标程序B.C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用 C 语言编写的程序称为源程序,它以 ASCII 代码形式存放在一个文本文件中D.C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 解析:
39、解析 在 C 语言中,非执行语句不会被转换成二进制的机器指令。例如,注释用于帮助读者更好地理解程序,它不会被系统转换成二进制。6.以下叙述中正确的是( )。(分数:1.00)A.预处理命令行必须位于 C 源程序的起始位置B.在 C 语言中,预处理命令行都以“#”开头 C.每个 C 程序必须在开头包含预处理命令行:#include stdio.hD.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析 选项 B)正确,预处理命令行之前都有一个“#”符号。C 语言提供三种预处理:宏替换,文件包含,条件编译。7.有以下程序:#include stdio.hvoid swap(char * x,e
40、har * y)char t;t= *x; *x: *y; *y=t;main ( )char *s1 =“abc“, * s2 =“123“;swap(s1 ,s2); printf(“%s,%s /n“ ,s1 ,s2);程序执行后的输出结果是( )。(分数:1.00)A.123,abeB.abe,123C.1bc,a23 D.321,cba解析:解析 C 语言中,字符串常量在内存中是以字符数组的形式存放的,形参字符指针 x 和 y 指向的是各字符串的首地址,在 swap 函数中,*x 与*y 交换的是字符串的第一个字符,即字符 a与1的交换,而字符串中其他字符保持不变。8.有以下程序:#
41、include stdio.hfun( char p 10)int n=0,i;for(i=0;i7;i +)if(pi0 =T) n+;return n;main( )char sir 10 = “Mon“ ,“Tue“ ,“Wed“ ,“Thu“ ,“Fri“ ,“Sat“ ,“Sun“ ;prlnff(“ % d/n“ ,fun(str) );程序执行后的输出结果是( )。(分数:1.00)A.1B.2 C.3D.0解析:解析 数组名 str 作为函数参数将实参数组的起始地址传给形参数组 p,当形参数组发生变化时主函数中的实参数组中的值也随之发生变化。调用 fun 函数执行 for 循环
42、语句后,n 为 2,返回给 main 函数输出。9.有以下程序:#includo stdio.hmain()int y=10;while(y-)printf(“y=%d/n“,y);程序执行后的输出结果是( )。(分数:1.00)A.y=0B.y= -1 C.y=1D.while 构成无限循环解析:解析 程序首先判断 y 值是否非 0,显然 y=10 满足条件,y 自减 1,再次执行 while 语句,判断y 为 9 的值是否满足条件,满足条件,y 自减 1,直到 y 为 0,条件不成立,结束循环,y 自减 1 后变为-1,所以输出结果为 y=-1。10.有以下程序:#include stdi
43、o.hmain( )char * p = “3697“ ,“2548“ ;int i,j; long num =0;for(i =0;i2;i + )j =0;while(pij! =/0)if(pij-0)%2) num=10*num+pij-0;j+ =2;printf( “%d /n“ ,num);程序执行后的输出结果是( )。(分数:1.00)A.35B.37C.39 D.3975解析:解析 执行 main 函数中的 for 语句,当 i=0,j=0 时,pij=p0)0=3,满足 while 循环条件,执行循环体中的 if 语句得 num=3,j=2,此时 pij=p02=9,满足循
44、环条件,执行 while 循环体得 num=39,j=4,判断 while 条件,不满足并退出 while 循环;再次执行 for 语句,当i=1,j=0,pij=p10=2,满足 while 条件,执行循环体中的 if 语句,但不符合 if 条件,所以num 不进行运算,j 进行加 2 运算 j=2,此时 pij=p12=4,if 条件为假,num 不进行运算,j 进行加 2 运算 j=4,再执行 while 语句,条件不符合退出循环。所以结果为 39。11.若有说明语句:double * p,a;则能通过 scanf 语句正确给输入项读入数据的程序段是( )。(分数:1.00)A.*p=
45、sCanf(“%1f“,p);B.*p= scanf(“%f“,p);C.p= scanf( “% 1f“ , * p);D.p = scanf( “% 1f“ , p); 解析:解析 p=scanf( “% c% c% c% c“, c5 = getehar( ); c6 = getchar( );putehar(c1); putehar(c2);printf(“%c%c/n“, c5, c6);23 回车45678 回车(分数:1.00)A.1267B.1256C.1278D.1245 解析:解析 getchar 函数只能接收一个字符,即使输入多个字符也只能将第一个字符读入。当输入123回
46、车时:seanf 函数分别读人字符1、2、3、回车;再输入 45678回车,则getehar 读人字符4赋值给 c5,字符5赋值给 c6,所以输出结果为 1245。17.现有以下结构体说明和变量定义,如图所示,指针 P,q,r 分别指向一个链表中连续的三个结点。(分数:1.00)A.q-next=r-next;p-next=r;r-next=q;B.p-next=r;q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;P-next=r;q-next=r-next; 解析:解析 选项 D)中首先将 q 赋给 r-
47、next,也就是将结点 q 的地址存放在结点 r 的指针域中;接着将 r 赋给 p-next,也就是将结点 r 的地址存放在结点 p 的指针域中,此时完成了 q 和 r 所指结点的交换。q-next=r-next 的目的是想将 q 的指针域指向下一个结点的数据地址,但由于一开始执行了 r-next=q,即已将 r 的指针域甲存放了 q 结点的地址,此时 q-next=r- next 就相当于将 q 指向了其本身,也就是和下一个结点断开了,所以选项 D)错误。18.若要求从键盘读人含有空格字符的字符串,应该使用函数( )。(分数:1.00)A.getc()B.gets() C.getchar()D.scanf()解析:解析 gete()函数是从文件指针指定的文件中读入一个字符,并把它作为函数值返回; getchar()函数是从终端(或系统隐含指定的输入设备)输入一个字符,getc()和 getehar()都不能读字符串(可以与循环语句结合输入一个字符