国家二级(C语言)笔试模拟试卷140(题后含答案及解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级(C语言)笔试模拟试卷140(题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(1-10、21-40每题2分,11-20每题1分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。
1.算法的时间复杂度是指( )。
A.执行算法程序所需要的时间
B.算法程序的长度
C.算法执行过程中所需要的基本运算次数
D.算法程序中的指令条数
正确答案:C
解析:所谓的算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
2.下列描述中,不是线性表顺序存储结构特征的是( )。
A.不便于插入和删除
B.需要连续的存储空间
C.可随机访问
D.需另外开辟空间来保存元素之间的关系
正确答案:D
解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。
数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此,不需要另外开辟空间来保存元素之间的关系。
3.按照”先进后出”原则组织数据的数据结构是( )。
A.队列
B.栈
C.双向链表
D.二叉树
正确答案:B
解析:栈是一种特殊的线性表,其插入和删除运算都只在线性表的一端进行,而另一端是封闭的。
进行插入、删除的一端称为栈顶,封闭的一端称为栈底。
栈顶元素是最后被插入的元素,不是最后被删除的,是按先进后出的原则组织数据的。
4.有下列二叉树,对此二叉树前序遍历的结果为( )。
A.ACBEDGFH
B.ABDGCEHF
C.HGFEDCBA
D.ABCDEFGH
正确答案:B
解析:对二叉树的前序遍历是指:先访问根结点,然后访问左子树,最后访问右子树,并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。
5.对建立良好的程序设计风格,下列描述正确的是( )。
A.程序应该简单、清晰、可读性好
B.符号名的命名只需要符合语法
C.充分考虑程序的执行效率
D.程序的注释可有可无
正确答案:A
解析:“清晰第一,效率第二”,在考虑到程序的执行效率的同时,一定要保证程序清晰、可读;对符号名的命名,除了要符合语法要求外,还要具有一定的含义:程序的注释可以帮助程序员理解程序,不是可有可无的。
6.下列不属于软件工程的3个要素的是( )。
A.工具
B.过程
C.方法
D.环境
正确答案:D
解析:软件工程包括3个要素,即方法、工具和过程。
方法是完成软件工程项目的技术手段;工具支持软件的开发、管理和文档生成:过程支持软件开发的各个环节的控制、管理。
7.下列选项中不属于软件生命周期开发阶段任务的是( )。
A.软件测试
B.概要设计
C.软件维护
D.详细设计
正确答案:C
解析:软件的生命周期可分为软件定义、软件开发及软件运行维护3个阶段。
其中软件定义阶段的主要工作有可行性研究与计划制定和需求分析等:软件开发阶段的主要工作有概要设计、详细设计和测试等;软件运行维护阶段的主要工作是软件的运行及后期的维护等。
8.使用白盒测试法时,确定测试数据应该根据( )和指定的覆盖标准。
A.程序的内部逻辑
B.程序的复杂结构
C.使用说明书
D.程序的功能
正确答案:A
解析:白盒测试是把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构及相关信息宋设计或选择测试用例,对程序所有的逻辑路径进行测试。
所以,白盒测试的对象基本上是源程序,以程序的内部逻辑和指定的覆盖标准测试数据。
9.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。
A.DB包括DBS和DBMS
B.DBMS包括DB和DBS
C.DBS包括DB和DBMS
D.没有任何关系
正确答案:C
解析:数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台5个部分组成,可见DB和DBMS都是DBS的组成部分。
10.对关系S和只进行集合运算,结果中既包含S中的所有元组也包含只中的所有元组,这样的集合运算称为( )。
A.并运算
B.交运算
C.差运算
D.积运算
正确答案:A
解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。
11.C语言可执行程序的开始执行点是( )。
A.包含文件中的第一个函数
B.程序中第一个函数
C.程序中的main( )函数
D.程序中第一条语句
正确答案:C
解析:每个C程序有且只有一个主函数main( ),且程序必须从main函数
开始执行,并在main( )函数中结束。
12.可以在C语言程序中用做用户标识符的一组标识符是( )。
A.void 123 BBN
B.aa _abc cas
C.as+b3 -123 If
D.6f Do SIG
正确答案:B
解析:C语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。
13.下列正确的实型常量是( )。
A.E3.4
B.-12345
C.2.2e0.8
D.4
正确答案:B
解析:实型常量有两种书写形式。
①小数形式,它由符号、整数部分、小数点及小数部分组成;②指数形式,由+进制小数形式加上指数部分组成,其形式为:+进制小数e指数或+进制小数E指数。
注:e或E后面的指数必须是整数,并且在e或E的前面必须有数字。
本题中,选项A)中E的前面没有数字,因此错误。
选项C)中0.8不是整数,因此错误。
选项D)中4是整型常量而不是实型常量。
14.下列表达式中,可以正确表示x≤0或x≥1的关系是( )。
A.(x>=1)‖(x<=0)
B.x>1‖x=0
C.x>=10Rx<=0
D.x>=1&&x<=0
正确答案:A
解析:题中要求x的取值是小于等于0或者大于等于1,这说明表达式是或的关系,所以在写成C语言表达式应是逻辑或的关系,逻辑或运算符是“‖”。
15.若有定义int a=5,b=7;,则表达式a%=(b%2) 运算后,a的值为( )。
A.0
B.1
C.11
D.3
正确答案:A
解析:本题考查“%”运算符的使用。
运算符“%”要求两个运算对象都为
整型,其结果是整数除法的余数。
本题中表达式a%=(b%2) 等价于a=a% (b%2)=5%(7%2)=5%1=0。
16.已知i、j、k为血型变量,若要从键盘输入2、3、4<CR>,使i、j、k的值分别为2、3、4,下列正确的输入语句是( )。
A.scanf( “%3d,%3d,%3d”,&i,&j,&k);
B.scanf(“%d,%d,%d”,&i,&J,&k);
C.scanf(“%d%d%d”,&i,&j,&k);
D.scanf(“i=%d,%d,k=%d”,&i,&j,&k);
正确答案:B
解析:函数scanf( )的调用形式是:scanf(格式字符串,输入项地址表)。
其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。
若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。
17.下列程序的输出结果是( )。
main( ) {int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf(“%d\n”,j); }
A.42
B.45
C.56
D.60
正确答案:B
解析:在C语言中,数组的下标默认为0,因此数组p的下标范围为:0~7。
程序循环过程为:第1次循环i=0,执行循环,并且i自加,得i=1,因此p[i]为p[1]=12,12%2=0,不执行后面的语句:接着进行第2次循环,此时i=1,小于7执行循环,并且i自加,得i=2,因此p[i]为p[2]=13,13%2=1,执行后面的语句;这样一直到退出循环。
最后i的值为i=13+15+17=45。
18.若有下列定义(设int类型变量占2个字节):int i=8,j=9; 则下列语句:printf(“i=%u,j%x\n”,i,j); 输出的结果是( )。
A.i=8,j=9
B.8.9
C.8 9
D.i=8,j=8
正确答案:A
解析:本题考查函数printf( )的格式。
“%x”表示以+六进制输出整型数据;“%u”表示以+进制无符号型输出整型数据。
printf函数中格式说明符之前插入的任何字符都原样输出。
19.设有定义:int k=1,m=2;float f=7;则下列选项中错误的表达式是( )。
A.k=k>=k
B.-k++
C.k%int(f)
D.k>=f>=m
正确答案:C
解析:在C语言中,求余运算符“%”两边的运算对象都应为整型数据,所以需要对变量f进行强制类型转换,正确的写法为k%(int)f。
在C语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、‖(逻辑“或”)、赋值运算符。
根据运算符的优先级与结合性,对于选项A),先计算k>=k的值(为真,即1),再用1对k进行赋值。
对于选取项B,先计算k++的值,再对其取负数。
对于选项D),先计算k>=f的值(为假,即0),再用0与m进行比较,故最终结果为0。
20.若执行下列程序时从键盘上输入2,则输出结果是( )。
#inClude <Stdio.h>main( ) { int a; scanf(“%d”,&a); if(a++<3) printf(“%d\n”,a); elseprintf(“%d\n”,a--); }
A.1
B.3
C.2
D.4
正确答案:B
解析:本题考查if else语句。
程序中首先使用函数scanf( )通过键盘读入a的值,并通过第1个if语句,先判断条件,取a的值2和3比较,然后将a的值加1,发现条件成立,执行下列的pfintf语句,输出a的值3。
21.已定义下列函数:int fun(int*p) {return*p;) fun函数返回值是( )。
A.不确定的值
B.一个整数
C.形参p中存放的值
D.形参p的地址值
正确答案:B
解析:由函数int fun(int *p){return *p;}的定义可知,返回值为整型指针变量p所指向的数据。
22.下列程序的输出结果是( )。
#include<stdio.h>main( ) { int a=2,b=3,p; p=f(a,B) ; pdntf(“%d”,p); } int f(a,B) { int c; if(a>B) c=1; else if(a==B) c=0; elSe c=-1; return(C) ; }
A.-1
B.0
C.1
D.2
正确答案:A
解析:本题考查if else语句。
在int f(a,b)中:第一个if语句,先判断条件,发现a>b条件不成立,则执行与其配对的else语句:第二个if语句,先判断条件,发现a==b条件不成立,则执行与其配对的else语句,c=-1。
23.有下列程序:fun(int x,int y) {statlc int m=0,i=2; i+=m+1;m=i+X+y;return m; } main( ) {int j=1,m=1,k; k=fun(j,m);printf(“%d,”,k); k=fun(j,m);printf(“%d\n”,k); } 执行后的输出结果是( )。
A.5,5
B.5,11
C.11,11
D.11,5
正确答案:B
解析:子函数fun(int x,int y),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m=1”时,i的值为9,因此最终m的值为11。
24.下列循环体的执行次数是( )。
#include<stdio.h>main( ) { inti,j; for(i=0,j=1;i<j+1;i+=1,j--) phntf(“%d\n”,j); }
A.3
B.2
C.1
D.0
正确答案:C
解析:本题考查for循环。
第一次循环前先判断循环条件,此时i=0,j=1,i<j+1成立,循环第一次;第二次循环前先判断循环条件,此时i=1,j=0,(j--是先使用i的值再减1),i<j+1不成立,结束循环。
25.设变量x和y均已正确定义并赋值。
下列if语句中,在编译时将产生错误信息的是( )。
A.if(x++);
B.if(x>y&&y!=0);
C.if(x>0)x-- elsey++;
D.if(y<0){;} else x++;
正确答案:C
解析:选项A)和选项B)在条件判断语句的后面是空语句,什么都不做;在
选项D)if后面是一个复合空语句;而在选项C)中,在X--后面少了一个分号,所以程序段在编译时,会出现语法错误。
26.下列字符数组初始化语句中,不正确的是( )。
A.char c[]=‘goodmorning’;
B.char c[20]”goodmoming”;
C.charc[]={‘a’,’b’,’c’,’d’};
D.char c[]={“goodmorning”};
正确答案:A
解析:本题考查两个概念:①用单引号括起来的一个字符常量只能存放一个字符;②C语言中没有字符串变量,只能用字符数组来存储字符串。
选项A)中一个单引号内放了若干个字符是错误的;选项B)和选项D)选项中将一个字符串赋值给一个字符数组是允许的。
27.下列程序的输出结果是( )。
#include<stdio.h>VOid p(int *x) { printf(“%d”,++*x); } void main( ) { int y=3; p(&y); } A.3
B.4
C.2
D.5
正确答案:B
解析:本题考查函数调用时的参数传递。
在函数调用时,形参是指向实参的指针变量,则printf的执行结果为3+1=4。
28.下列程序的运行结果为( )。
#include<stdio.h>voidabc(Char*str) { inta,b,i,j; for(i=j=0;str[i]!=‘\0’;i++) if(str[i]!=‘a’) str[j++]=str[i]; str[j]=‘\0’; } void main( ) { char str[]=“abcdef”; abc(str); printf(“str[]=%s”,str); }
A.str[]=bcdef
B.str[]=abcdef
C.str[]=a
D.str[]=ab
正确答案:A
解析:本题考查函数调用时的参数传递。
通过函数abc的执行,将字符串中的字母a去掉,保留剩下的。
由于是通过指针调用,所以改变字符串的结果。
29.变量m的值为8,m的地址为1010,若欲使p为指向m的指针变量,则下列赋值正确的是( )。
A.&m=8
B.*p=8
C.*p=1010
D.p=&m
正确答案:D
解析:指针变量是通过指向变量地址来指定变量值的。
这里只要取m的地址赋给p,即可实现使p为指向m的指针变量。
30.在下列语句中,其含义为“q为一个指针的函数,该指针指向整型数据”的定义语句是( )。
A.int**q;
B.int(*q)( );
C.int*q;
D.int*q( );
正确答案:B
解析:本题考查的是指针函数。
指针函数定义的基本格式为:类型说明符(*函数名)( )。
其中,类型说明符表示返回的指针值指向的数据类型。
31.下列二维数组初始化语句中,不正确的是( )。
A.int b[][2]={1,2,3,4,5,6,7};
B.int b[3][5]={0,0,0};
C.intb[][4]={{1,2},{3,4,5},{6}};
D.int b[3][2]={(1,2) ,(3,4) ,(5,6) };
正确答案:D
解析:在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0;C语言规定,对于二维数组,只可以省略第1个方括号中的常量表达式,而不能省略第2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。
在选项D)赋值表达式中对每一维的元素赋初值应用{},而不是( )。
32.下列程序中函数sort( )的功能是对数组a中的数据进行由大到小的排序。
#include<stdio.h>voidsort(int a[],int n) { int i,j,t; for(i=0;i <n-1;i++) for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t; } } main( ) { int a [10]={1,2,3,4,5,6,7,8,9,10},i; sort(&a[1],7) ; for(i:0;i<10;i++)printf(“%d,”,a[i]); } 程序运行后的输出结果是( )。
A.1,2,3,4,5,6,7,8,9,10,
B.10,9,8,7,6,5,4,3,2,1,
C.1,8,7,6,5,4,3,2,9,10,
D.1,2,10,9,8,7,6,5,4,3,
正确答案:C
解析:本程序中的函数sort(int a[],int n)实现的功能是将数组a中的前n个数进行从大到小排序。
sort(&a[1],7)是将数组中从a[1]到a[7]这7个数进行从大
到小排序,其他数不变。
33.下列判断正确的是( )。
A.char a=“ABCD”;等价于char*a:*a=“ABCD”;
B.char str[10]={“ABCD”};等价于char str[10];str[]={“ABCD”};
C.char*s=“ABCD”;等价于char s;*s=“ABCD”;
D.char c[5]=“ABCD”,d[5]=“ABCD”;等价于char c[5]=d[5]=“ABCD”;
正确答案:D
解析:a=“ABCD”书写错误,因为“=”左边不能出现常量;数组名s是代表s数组首地址的地址常量,而不是变量;字符串只有在定义时维数可以省略。
34.下列语句中,在字符串s1和s2相等时显示”they are Equal”的是( )。
A.if(*s1==*s2) puts(“they are Equal”);
B.if(!strcmp(s1,s2)) puts(“they are Equal”);
C.if(s1==s2) Puts(“they are Equal”);
D.if(strcmp(s1,s2) ) puts(“they are Equal”);
正确答案:B
解析:字符串比较不能用两个等于号(==)来进行比较,应使用函数strcmp(s1,s2)来比较。
函数strcmp(s1,s2)的功能是:当字符串s1和s2相等时,返回值为0。
因此,当表达式!strcmp(s1,s2)=1时,条件成立,执行后面的语句,输出they are Equal。
35.下列叙述中错误的是( )。
A.在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值B.在C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容C.在C语言中,外部变量的隐含类型是自动存储类别
D.在C语言中,函数形参的存储类型是自动(auto)类型的变量
正确答案:C
解析:外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。
36.下列程序的输出结果是( )。
#include<stdio.h>#define F(x)2.84+x #define w(y)printf(“%d”,(int)(y)) #define P(y)w(y)putchar(‘\n’) main( ) { int x=2; P(F(5) *x); }
A.12
B.13
C.14
D.16
正确答案:A
解析:本题考查带参数的宏的定义及相关运算。
P(P(5)*x)=P(2.84+5*2)=P(12.84),调用w(12.84),输出(int)(12.84)=12。
37.若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是( )。
Stmct stu { int i; int name; }st,*p; p=&st;
A.st.i
B.*p.i
C.(*p).i
D.p->i
正确答案:B
解析:本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式即(*p).i和p->i。
38.下列说法错误的是( )。
A.下列结构体定义时,占据了5个字节的空间struct student “nt num; int age; char sex; }
B.结构体的成员名可以与程序中的变量名相同
C.对结构体中的成员可以单独使用,它的作用相当于普通变量
D.结构体可以嵌套定义
正确答案:A
解析:本题主要考查定义结构体的几个特点:①结构的定义明确了结构的组成形式,定义了一种C语言中没有而用户需要的新的数据类型。
与其他的数据类型不同,在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;②结构体的成员名可以与程序中的变量名相同:⑧结构体中的成员可以单独使用,它的作用相当于普通变量:④结构体可以嵌套定义。
39.若x=10010111,则表达式(3+(int)(x))&(~3) 的运算结果是( )。
A.10011000
B.10001100
C.10101000
D.10110000
正确答案:A
解析:本题主要考查运算表达式的运算。
3+(int)(x)的结果是10011010,~3的结果是11111100,二者逻辑与得10011000。
40.若要用函数fopen打开一个新的二进制文件,该文件要既能读也能写,则应以哪种方式打开文件( )。
A.wb
B.wb+
C.rb+
D.rb
正确答案:B
解析:本题考查文件使用方式标识符。
方式“wb”为输出打开一个二进制文件;方式“wb+”为读写建立一个新的二进制文件:方式“rb+”为读写打开一个二进制文件;方式“rb”为输入打开一个二进制文件。
填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。
注意:以命令关键字填空的必须拼写完整。
41.在程序设计阶段应该采取______和逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,继而用某种程序设计语言写成程序。
正确答案:自顶向下
解析:在程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。
42.注释一般分为序言性注释和______注释。
正确答案:功能性
解析:注释一般分为序言性注释和功能性注释。
序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么。
43.在面向对象方法中,类的实例称为______。
正确答案:对象
解析:在面向对象的程序设计方法中,类是具有相同的属性或方法的对象的抽象,对象是类的实例。
44.某二叉树中度为2的结点有18个,则该二叉树中有______个叶子结点。
正确答案:19
解析:在任意一棵二叉树中,度数为0的结点(即叶子结点)总比度为2的结点多一个,因此该二叉树中叶子结点为18+1=19。
45.数据流图的类型有——和事务型。
正确答案:变换型
解析:典型的数据流类型有两种:变换型和事务型。
46.若a=1,b=2,则表达式!(x=a)‖(y=b)&&0的值是______。
正确答案:0
解析:根据运算符的运算顺序可知,该表达式最后运算的是与(&&) 运算,而任何表达式与“0”进行“与”运算,结果都为0。
47.设x、y、z均为int型变量,请写出描述“x或y中至少有一个小于z”的表达式______。
正确答案:x<z‖y<z
解析:本题考查逻辑运算符和逻辑表达式。
x或y中至少有一个小于z,即x<z或y<z,是“或”的关系。
48.下列程序的输出结果是______。
#include<stdio.h>main( ) { intx=3,y=2,z=1; if(x<y) if(y<0)z=0; else z+=1; printf(“%d\n”,z); }
正确答案:1
解析:if else语句的功能是:若表达式的值为真,执行语句1,并跳过其他语句,执行ifelse语句的下一条语句,若表达式的值为假,跳过语句1,执行语句2,依次往下判断。
题中,x=3,y=2,第一个汀语句的控制条件x<y就不满足,又没有与之配对的else语句,所以直接执行printf语句,在整个过程中变量z的值都没发生变化。
49.在循环中,continue语句与break语句的区别是:______语句只是结束本次循环,然后进行循环的条件判定。
正确答案:contioue
解析:continue语句只是结束本次循环,然后进行循环的条件判定。
break 语句是终止整个循环的执行,不再进行条件判定。
50.若有定义:int a[4][4]={{1,2,3,4},{0},{4,6,8,10},{1,3,5,7}},则初始化后,a[2][2]得到的初值是______。
正确答案:8
解析:二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,a[4][4]可以分解为4个一维数组,其数组名分别为a[0]、a[1]、a[2]、a[3],这4个一维数组都有4个元素,a[0]的元素为a[0][0]、a[0][1]、a[0][2]、a[0][3]。
51.下列语句的输出结果是______。
char s[20]=“aaaa”,*sp=s; puts(strcat(sp,”AAAAA”));
正确答案:aaaaAAAAA
解析:函数strcat(sp,”AAAAA”)的作用是将字符串“AAAAA”连接到字符
串sp的末尾,并自动覆盖字符数组sp末尾的’0’。
52.下列程序的运行结果是______。
#define POWER(x)((x)*(x)) main( ) { int i=1; printf(“%d,%d”,POWER(i++),i); }
正确答案:1,1
解析:POWER(i++)中先引用i的值1,再将i的值加1,POWER(i++)=1*1=1。
53.下列程序的输出结果是______。
main( ) { int i,sum; for(i=1;i<7;i++) sum+=i; printf(“%d”,sum); }
正确答案:无定值
解析:for(i=1;i<7;i++)决定了循环次数为6次,每次执行的操作是sum+=i,但由于sum没有初始化,并不知道sum的初值是多少,所以结果无定值。
54.设有下列的程序段:char str[]=“Hello”; char*ptr; ptr=str; 执行上面的程序段后,*(ptr+5)的值为______。
正确答案:’\0’
解析:本题涉及字符数组和指针的两个知识点:①在C语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符’\0’,所以题中数组str 有6个元素。
②ptr指向数组str的首地址,ptr+5是指向str[5],*(ptr+5)是引用str[5]的值,即’\0’。
55.下列程序的输出结果是______。
#include<stdio.h>fun( ) { static int a=0; a+=3;printf(“%d”,a); } main( ) { int cc; for(cc=1 ;cc<5;cc++)fun( ); printf(“\n”); }
正确答案:3 6 9 12
解析:本题考查最基本的for循环:for(cc=1;cc<5;cc++)规定循环次数为4次,每次a+=3即每次a的值增3,但因为fun函数中变量a为static类型,所以每次调用完子函数之后,变量a所做的改变都要保存。