(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:70.00)
1.下列程序段的输出结果为( )。
#include<stdio.h> main()
static char a[]=\"language\"; char*p; p=a;
for(p=a;p<a+8;p+=2)
putchar(*p);
(分数:2.00) A.language B.lnug √ C.有语法错误 D.lang
解析:[解析] 本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地址。
第1次for循环,p=a,p指向数组的第1个元素,*p是取指针p所指地址的内容,输出1;第2次for循环, p=p+2,则p指向数组的第3个元素,*p是取指针p所指地址的内容,输出n;第3次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出u;第4次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出g,结束循环。 2.下列选项中不合法的+六进制数是( )。
(分数:2.00) A.Oxff B.OXll C.Oxlg √ D.OXabc
解析:[解析] +六进制是以“0x”或“0X”开头的字符串,字符串中只能含有0~9这10个数字和a、b、c、d、 s、f这6个字母。 3.有下列函数定义:
int fun(double a,double B)
return a*b;
若下列选项中所用变量都已正确定义并赋值,错误的函数调用是( )。
(分数:2.00) A.if(fun(x,y))……
B.z=fun(fun(x,y),fun(x,y)); C.z=fun(fun(x,y)x,y); √ D.fun(x,y);
解析:[解析] 本题考查函数调用时的参数传递。C项中第一个参数的表达式不正确,因此不能得到正确的结果。
4.下列叙述中正确的是( )。
(分数:2.00)
A.算法的执行效率与数据的存储结构无关
B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 √ D.以上三种描述都不对
解析:[解析] 算法的执行效率与数据的存储结构密切相关。算法的空间复杂度是指算法执行过程中所需的存储空间。
5.在C语言中,函数返回值的类型最终取决于( )。
(分数:2.00)
A.函数定义时在函数首部所说明的函数类型 √ B.return语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型 D.函数定义时形参的类型
解析:[解析] 在C语言中,应当在定义函数时指定函数值的类型。凡不加类型说明的函数,默认按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数值的类型为准,由系统自动进行转换。即函数类型决定返回值的类型。
6.下列程序的运行结果是( )。
#include<stdio.h>
voidfun(int*s,int*p)
static int t=3; *p=s[t]; t--;
void main()
int a[]=2,3,4,5,k; int x;
for(k=0;k<4;k++)
fun(a,&x);
printf(\"%d,\
(分数:2.00) A.5,4,3,2 √ B.2,3,4,5, C.2,2,2,2, D.5,5,5,5,
解析:[解析] 分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素逆置赋给数组p。由于fun中函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。
7.语句“printf(\"a/bhow/'are/'y///bou/n\");”的输出结果是( )。
(分数:2.00)
A.a/bhow/'are/'y//bou B.a/bhow/'are/'y/bou C.how'are'you √ D.ahow'are'y/bou
解析:[解析] “/b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“/b'’ 格式符前面的字母不能输出;“/'”格式符表示输出单引号字符;“//”格式符表示输出反斜线字符。 8.若变量已正确定义,下列正确的程序段是( )。
(分数:2.00)
A.while(ch=getchar()=='/N')putchar(ch); B.while((ch=getchar())=='/n')putchar(ch); C.while((ch=getchar())!='/N')putchar(ch); D.while((ch=getchar())!='/n')putchar(ch); √
解析:[解析] 本题考查两个知识点:①C语言用'/n'这个字符常量表示换行:②getchar函数的作用是从终端输入一个字符,当遇到换行时结束输入。
9.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。下列不能将变量c中的大写字母转换为对应小写字母的语句是( )。
(分数:2.00) A.c=(c-'A')%26+'a'
B.c=c+32 C.c=c-'A'+'a' D.c=('A'+ √
解析:[解析] 由题意可知,小写字符a和大写字符A的 ASCⅡ代码相差为32,所以选项C)能将大写字符c的 ASCⅡ代码转换为小写字符c的ASCⅡ代码:选项A)和C)左侧的表达式都是大写字符c与大写字符A的差与'a'的ASCⅡ代码的和就是小写字符c的ASCⅡ代码。而选项D)中应该是加上'a',而不是减去'a'。 10.数据库系统的核心是( )。
(分数:2.00) A.数据模型
B.数据库管理系统 √ C.数据库 D.数据库管理员
解析:[解析] 数据库系统由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台5个部分构成。其中数据库管理系统是数据库系统的核心,它负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等工作。 11.下列程序的运行结果是( )。
#include<stdio.h>
#include<string.h> main()
char*s1=\"abDuj\";
char*s2=\"ABdUG\"; int t;
t=strcmp(s1,s2) ;
printf(\"%d\
(分数:2.00) A.正数 √ B.负数 C.零
D.不确定的值
解析:[解析] 本题考查字符串比较函数和两个字符串比较的原则两个知识点:①原则是依次比较两个字符串同一位置的一对字符,若它们的ASCII码值相同,则继续比较下一对字符,若它们的ASCII码值不同,则ASCII码值较大的字符所在的字符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部i个字符与另一个字符串的前i个字符相同,则字符串较长的较大。② strcmp(s1,s2)的返回值,当str1<str2时,返回值<0:当 str1=str2时,返回值为0;当str1>str2,返回值>0。
12.下列标识符不是关键字的是( )。
(分数:2.00) A.break B.char C.Switch √ D.return
解析:[解析] break、char、return、switch都是C语言中的关键字,Switch不是。因为C语言区分字母的大小写。 13.有下列函数:
int fun(char*S)
char*t=s;
while(*t+ +);
return(t-s);
该函数的功能是( )。
(分数:2.00)
A.比较两个字符串的大小
B.计算s所指字符串占用内存字节的个数 C.计算s所指字符串的长度 √ D.将s所指字符串复制到字符串t中
解析:[解析] 在函数fun(char*s)中,首先用字符指针变量t指向s,而循环语句while(*t++);的功能是使指针变量 t指向字符串变量s的末尾,这时退出循环,因而语句 return(t-s);返回的就是字符串s所指字符串的长度。
14.下列程序段的运行结果是( )。
#include<stdio.h>
void main()
char str[]=\"ABC\
printf(\"%d/n\
(分数:2.00) A.67 B.0 √
C.字符'C'的地址 D.字符'C'
解析:[解析] 先定义了一个指向字符型数组str的指针p,指针p指向数组str的首地址,p+3将指针指向str[3],又因为字符型数组在存放字符串时会自动在末尾加上'/0',所以*(p+3)=0。 15.标准库函数fgets(s,n,file)的功能是( )。
(分数:2.00)
A.从文件file中读取长度为n的字符串存入字符数组s中
B.从文件file中读取长度不超过n-1个字符的字符串放到字符数组s中 √ C.从文件file中读取n个字符串存入字符数组s中
D.从文件file中读取长度为n-1个字符的字符串存入字符数组s中
解析:[解析] 字符串输入函数fgets()的调用形式为: fgets(s,n,fp)。fgets函数参数说明:“s”可以是一个字符数组名,也可以是指向字符串的指针;“n”为要读取的最多的字符个数;“fp”是指向该文件的文件型指针。
fgets函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串放到字符数组 s中;读入字符串后会自动在字符串末尾加入“'/0'”结束符,表示字符串结束。
16.已知i、j、k为int型变量,若要从键盘输入2、3、4<CR>,使i、j、k的值分别为2、3、4,下列正确的输入语句是( )。
(分数:2.00)
A.scanf(\"%3d,%3d,%3d\ B.scanf(\"%d,%d,%d\√ C.scanf(\"%d%d%d\
D.scanf(\"i=%d,j=%d,k=%d\
解析:[解析] scanf函数的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。
若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。
17.下列叙述中正确的是( )。
(分数:2.00)
A.break语句只能用于switch语句体中
B.continue语句的作用是使程序的执行流程跳出包含它的所有循环 C.break语句只能用在循环体内和switch语句体内 √ D.在循环体内使用break语句和continue语句的作用相同
解析:[解析] 只能在循环体内和switch语句体内使用 break语句。当break出现在循环体的switch语句体内时,其作用只是跳出该switch语句体,并不能中止循环体的执行。若想强行中止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。 18.设有下列定义:
struct sk int m; float x;
data,*q;
若要使q指向data中的m域,正确的赋值语句是( )。
(分数:2.00) A.q=&data.m; B.*q=data.m;
C.q=(struct sk*)&data.m; √ D.q=(struct sk*)data.m;
解析:[解析] 利用强制类型转换(street sk*),把整数型地址&data.m转换成结构体变量指针赋给结构体指针变量q。
19.若w、x、y、z、m均为int型变量,则执行下列的语句后m的值是( )。
w=2,x=3,y=4,z=5;
m=(w<x)?W:x:
m=(m<z)?m:Z;
m=(m<y)?m:y;
(分数:2.00) A.2 √ B.3 C.5 D.4
解析:[解析] 条件表达式“a?b:c”的含义是:当a为真时,其值等于表达式b的值,当a为假时,其值等于表达式c的值。
表达式运算过程:第1个表达式:w=2<x=3为真,所以返回w的值,即m=w=2;第2个表达式:m=2<z=5为真,所以返回m的值,即m=2;第3个表达式:w=2<y<4为真,所以返回m的值,即m=2。 20.下列程序的执行结果是( )。
#include<stdio.h> main()
inta,b,c; a=b=2;
c=(a++)-1;printf(\"%d,%d\
c+=-a+++(++b) ;printf(\"%d,%d\
(分数:2.00) A.3,1 4,1 √ B.3,1 4,2 C.2,04,1 D.2,1 4,1
解析:[解析] 本题主要考查自加运算符(++、--)的使用。①前缀变量“++i、--i”,在使用i之前,先使i的值加1或者减1,再使用此时的表达式的值参与运算;②后缀变量“i++、i--”,先使用此时的表达式的值参与运算,在使用i之后,再使i的值加1或者减1。
本题中计算表达式c=(a++)-1时先使用a的值进行计算,结果为c=2-1=1,然后将a的值加1,即执行完此语句后a的值是3;表达式c+=-a+++(++b)等价于 c=c+(-a++)+(++b), c=1+(-3)+3=1, 此时a=4,b=3。 21.下列描述中正确的是( )。
(分数:2.00)
A.软件工程只是解决软件项目的管理问题 B.软件工程主要解决软件产品的生产率问题
C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 √ D.软件工程只是解决软件开发过程中的技术问题
解析:[解析] 软件工程是指将工程化的思想应用于软件的开发、应用和维护的过程,包括软件开发技术和软件工程管理。
22.判断字符串s1是否大于字符串s2,应该使用( )。
(分数:2.00)
A.if(strcmp(s1,s2)<0) B.if(s1>s2)
C.if(strcmp(s2,s1)<0) √ D.if(strcmp(s1,s2))
解析:[解析] 本题考查字符串比较函数strcmp()。调用形式:strcmp(s1,s2),其中s1、s2分别是字符串存储区的首地址。函数功能:比较字符串str1和str2,当str1<str2时,返回值为负数;当str1=str2时,返回0;当str1>str2,返回值为正数(注意:不能使用关系运算符比较两个字符串的大小)。 23.下列程序的运行结果是( )。 main()
int a=-5,b=1,c=1;
int x=0,y=2,z=0;
if(c>0) x=x+y;
if(a<=0)
if(b>0)
if(c<=0) y=x-y;
else if(c>0) y=x-y;
else z=y;
printf(\"%d,%d,%d/n\
(分数:2.00) A.2,2,0 √ B.2,2,2 C.0,2,0 D.2,0,2
解析:[解析] 本题考查if else语句的使用。 先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。第1个 if语句,因为a=-5<0,所以进入下列的复合语句。经判断发现,复合语句中第2个汀语句的条件均不满足,不执行任何语句退出,在这个过程中y和x的值没有发生变化。 24.为了提高软件模块的独立性,模块之间最好是( )。
(分数:2.00) A.控制耦合 B.公共耦合 C.内容耦合 D.数据耦合 √
解析:[解析] 耦合性与内聚性是模块独立性的两个定性标准,是互相关联的。在程序设计中,各模块间的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,有利于提高模块的独立性。
25.下列程序中c的二进制值是( )。
char a=2,b=4,C;
c=a^b>>2;
(分数:2.00) A.00000011 √ B.00010100 C.00011100 D.00011000
解析:[解析] 本题主要考查按位异或和右移运算。b=4的二进制为00000100,b>>2后为00000001,a=2的二进制为00000010,两者异或为00000011。 26.栈和队列的共同点是( )。
(分数:2.00) A.都是先进先出 B.都是先进后出
C.只允许在端点处插入和删除元素 √ D.没有共同特点
解析:[解析] 栈和队列都是操作受限制的线性表,只允许在端点插入和删除。不同点是:栈只允许在表的一端进行插入和删除操作,而队列允许在表的一端进行插入操作,而在另一端进行删除操作。 27.数据的存储结构是指( )。
(分数:2.00)
A.数据所占的存储空间
B.数据的逻辑结构在计算机中的存放形式 √ C.数据在计算机中的顺序存储方式 D.存储在计算机外存中的数据
解析:[解析] 数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式,数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
28.待排序的关键码序列为(33,18,9,25,67,82,53,95,12,70) ,要按关键码值递增的顺序排序,采取以第一个关键码为基准元素的快速排序法,第一趟排序后关键码33被放到第 ( )个位置。
(分数:2.00) A.3 B.5 √ C.7 D.9
解析:[解析] 快速排序的基本思想是:从表中选取一个元素(如本题中的33),将表中小于此元素的移到前面,大于此元素的移到后面,结果把线性表分割成两部分(两个子表),此元素插入到其分界线的位置处。然后分别对两个子表再次分割……本题中33作为分割的中界线,第一趟排序后排在比它小的18、9、25、12后面。
29.下列合法的字符型常量是( )。
(分数:2.00) A.'/x13' √ B.'/081' C.'65' D.\"/n\"
解析:[解析] C语言的字符常量是用单引号(')括起来的一个字符,也可以用以一个“/”开头的字符序列来表示字符常量。其中形式/ddd表示1到3位8进制数所代表的字符;形式/xhh表示1到2位16进制数所代表的字符。在本题中'/x13'表示回车符,是一个字符常量;而'/081'用8进制数所代表的字符形式不正确,因为8进制数所表示的字符中不会出现数字“8”;'65'单引号(即撇号)括起来的不是一个字符,而是一个+进制数字:\"/n\"是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。 30.下列说法不正确的是( )。
A) C程序是以函数为基本单位的,整个程序由函数组成 C) C语言程序的一条语句可以写在不同的行上
B) C程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写 D) C程序的每个语句都以分号结束
(分数:2.00) A.
B. C. √ D.
解析:[解析] 本题涉及C语言基本的3个知识点:①C语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;②C语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;⑧注释行虽然对程序的运行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性,所以书写注释行还是很有必要的。 31.下列4个关于C语言的结论中错误的是( )。
(分数:1.00)
A.可以用do…while语句实现的循环一定可以用while语句实现 B.可以用for语句实现的循环一定可以用while语句实现 C.可以用while语句实现的循环一定可以用for语句实现
D.do…while语句与while语句的区别仅是关键字“while”出现的位置不同 √
解析:[解析] 本题考查几个循环语句的关系。①do…while语句、while语句、for语句所实现的循环可以相互替代;②do…while语句和while语句的区别是do…while语句至少执行一次。 32.源程序的文档化不包括( )。
(分数:1.00)
A.符号名的命名要有实际意义 B.正确的文档形式 √ C.良好的视觉组织 D.正确的程序注释
解析:[解析] 源程序的文档化主要包括3点:①符号名应具有一定实际的含义,便于理解程序功能;②正确的程序注释;⑧良好的视觉组织(利用空格、空行、缩进等技巧使程序层次清晰)。 33.有下列二叉树,对此二叉树中序遍历的结果为( )。
(分数:1.00) A. B. √ C. D.
解析:[解析] 对二叉树的中序遍历是指:首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,注意依旧按照“左子树一根结点一右子树”的顺序。
34.两次运行下列的程序,如果从键盘上分别输入3和1,则输出结果是( )。 main() int x;
scanf(\"%d\
if(x++>2) printf(\"%d\
else printf(\"%d/n\
(分数:1.00) A.4和2 √ B.4和1 C.4和0 D.3和1
解析:[解析] 本题考查if else语句。首先scanf函数通过键盘读入x的值。,当x=3时,第一个if语句,先判断条件,取x的值3和2比较,然后将x的值加1,发现条件成立,执行下列的printf语句,输出x的值4。当x=1时,第一个if语句,先判断条件,取x的值1和2比较,然后将x的值加1(x的值变为2),发现条件不成立,执行下列的else语句,先输出x的值2,再将x的值减1。 35.下列二维数组初始化语句中,不正确的是( )。
(分数:1.00)
__________________________________________________________________________________________ 解析:[解析] 在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0;C语言规定,对于二维数组,只可以省略第1个方括号中的常量表达式,而不能省略第2个方括号中的常量表达式:赋的初值不能多于事先定义好的数组元素个数。选项D)赋值表达式中对每一维的元素赋初值应用{ 36.#define能作简单的替代,用宏来替代计算多项式5*x*x+5*x+5的值的函数f,正确的宏定义语句为( )。
(分数:1.00)
A.#define f(x)5*x*x+5*x+5 B.#define f5*x*x+5*x+5 C.#define f(A) ( √ D.#define(5*x*x+5*x+5) f(x)
解析:[解析] 带参数宏的格式为:#define标识符(形参表)形参表达式。其功能是:预处理程序将程序中出现的所有带实参的宏名,展开成由实参组成的表达式。
37.对长度为n的线性表进行顺序查找,在最坏情况下需要比较的次数为( )。
(分数:1.00) A.125 B.n/2 C.n √ D.n+1
解析:[解析] 对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。 38.若有说明int a[][3]=0,0;,则不正确的叙述是( )。
(分数:1.00)
A.数组a的每个元素的初值都是0 B.数组a的第一维大小为1
C.数组a的行数为1
D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 √
解析:[解析] 本题考查给二维数组元素赋值。给二维数组元素赋值时应注意下列两点:①在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。②二维数组第一维的大小由下列规则确定:当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小:所得商数+1。 39.下列程序的输出结果是( )。
#include<stdio.h>
int fun(int x) int a;
if(x==0‖x==1)
return 3; else
a=x-fun(x-2) ;
return a;
void main()
printf(\"%d\
(分数:1.00) A.2 √ B.8 C.9 D.5
解析:[解析] 本题考查函数的递归调用。在函数递归调用时,fun(7):a=7-fun(5)→fun(5):a=5-fun(3)→ fun3:a=3-fun(1)→fun(1):a=3,反推回去fun(3):a=3-3=0→ fun(5):a=5-0=5→fun(7):a=7-5=2,最后的计算结果为2。
40.下列程序的输出结果是( )。
#include<stdio.h> main() stmct st
int y,x,z; ; union long i; int j; char k; un;
printf(\"%d,%d/n\
(分数:1.00) A.6,2 B.6,4 √ C.8,4 D.8,6
解析:[解析] 本题主要考查结构体和联合内存使用的区别:结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立;联合所占用的内存空间为最长的成员所占用的空间。
二、填空题(总题数:15,分数:30.00)
41.在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间 1的信息。
(分数:2.00)
填空项1:__________________ (正确答案:前后件关系)
解析:[解析] 在数据存储结构中,除了要存储数据,还要存储数据的前后件关系,对于顺序存储的数据结构,前后件之间的关系,是通过存储空间的位置来实现的,而对于链式存储来说,数据元素之间的前后件关系是通过指针来实现的。
42.按照“先进先出”的原则组织数据的结构是 1。
(分数:2.00)
填空项1:__________________ (正确答案:队列)
解析:[解析] 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫做“队尾”,删除元素的一端叫做“队头”,先插入的元素先被删除,是按先进先出的原则组织数据的。
43.深度为5的满二叉树中,叶子结点的个数为 1。
(分数:2.00)
填空项1:__________________ (正确答案:16)
解析:[解析] 满二叉树的叶子结点都在最后一层,即第4层,且第4层的结点达到最大数,即25=16。 44.在面向对象的方法中, 1描述的是具有相似属性与操作的一组对象。
(分数:2.00)
填空项1:__________________ (正确答案:类)
解析:[解析] 在面向对象的方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。
45.Jackson方法是一种面向 1的结构化方法。
(分数:2.00)
填空项1:__________________ (正确答案:数据结构)
解析:[解析] Jackson方法是一种结构化分析方法,它是一种面向数据结构的结构化方法。 46.若a是血型变量,则表达式(a=2*3,a*2) ,a+6的值为______。
(分数:2.00)
填空项1:__________________ (正确答案:12)
解析:[解析] 本题考查逗号表达式的运算规则。逗号表达式的基本格式为:“表达式1,表达式2,…”,其整个表达式的结果取最后一个子表达式的值。
本题中首先计算逗号表达式中的第1个表达式 a=2*3=6,然后计算第2个表达式a*2,这时整个表达式的值为12,但要注意,因为第2个表达式并没有给a赋值,因此a的值不变;接下来执行最后一个表达式a+6=12,所以整个表达式最后的值为12。
47.表达式1/2*(int)3.7/(int)(2.4*(1.5+2.5) )值的数据类型为 1。
(分数:2.00)
填空项1:__________________ (正确答案:整型)
解析:[解析] 上面的表达式中,通过强制类型转换把最后参与运算的数据都转换成了int型,所以最后得到的结果也是int类型。
48.下列程序段的输出结果是______。 int n='C'; switch(n++)
default:printf(\"error\");break; case'a':printf(\"good\");break; case'C':printf(\"moming\"); case'd':printf(\"class\");
(分数:2.00)
填空项1:__________________ (正确答案:morningclass)
解析:[解析] 本题考查了两个知识点:①“++、--”运算后缀形式是先使用变量原来的值,使用完后再使其增1或减1;②在switch语句中,当n='c'时,执行“case'c':”,输出morning;因为此句中没有break语句,因此接着执行“case'd':”,输出class,最终输出结果为morningclass。 49.写出下列程序的输出结果______。 main() int n=0;
-1
while(n++<=1) ; printf(\"%d,\printf(\"%d\
(分数:2.00)
填空项1:__________________ (正确答案:3,3)
解析:[解析] 本题在while(n++<=1”语句后,直接加了分号,说明如果while()的条件为真时,该循环什么都不做; n++是先取n的当前值和1做比较,然后再将n加1。第一次循环,n=0时,循环条件n++=0<=1成立,执行循环,然后得到n=1。第二次循环,n=1时,循环条件a++=1<=1成立,执行循环,然后得到n=2。第三次循环,n=2时,循环条件n++=2<=1不成立,不执行循环,但在判断循环条件时仍将n加1,得到n=3。退出循环后执行printf语句,第二个printf语句输出n++,是先输出n的当前值3,然后再将n加1,即程序结束后得到n=4,但输出的是3。
50.下列程序的功能是对输入的一行字符中的数字字符的字面值累加,输出此累加和,请填空。 #include<stdio.h> #include<ctype.h> main() char c; int a,s=0; while(______) if(isdigit(C) ) a=c-'0';s+=a; printf(\"s=%d\
(分数:2.00)
填空项1:__________________ (正确答案:(c=getchar())!='/n')
解析:[解析] 分析题目可知,程序中运用函数c=getchar()从标准输入设备读取下一个字符,而且是一行的字符(即没有换行),所以条件为(c=getchar())!='/n'。 51.下列程序输出的结果是______。 int m=17;
int fun(int x,int y) int m=3; return(X*y-m); main() int a=5,b=7;
printf(\"%d/n\
(分数:2.00)
填空项1:__________________ (正确答案:1)
解析:[解析] 本题考查局部变量和全局变量的区别:局部变量是指作用域在函数级和块级的变量,全局变量是指作用域在程序级和文件级的变量。
本程序首先定义了一个全局变量m=17,m=17的作用域在整个程序内。在fun函数内部定义了一个局部变量
m=3,m=3的作用域仅在fun函数内部,通过fun函数返回两个形参的积再减m。在主函数中,输出fun(a,b)/ m2(5*7-3)/17=1。 52.设有下列的程序段: char str[]=\"Hello\"; char*ptr; ptr=-str;
执行上面的程序段后,*(ptr+5) 的值为______。
(分数:2.00)
填空项1:__________________ (正确答案:'/0')
解析:[解析] 本题涉及字符数组和指针的两个知识点:①在c语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符'/0',所以题中数组str有6个元素。②ptr指向数组s仕的首地址,ptr+5是指向str[5],*(ptr+5)是引用str[5]的值,即'/0'。
53.若有定义int a[4][4]=1,2,3,4,0,4,6,8,10,1,3,5,7,则初始化后,a[1][1]得到的初值是______。
(分数:2.00)
填空项1:__________________ (正确答案:0)
解析:[解析] 二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,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]o 54.设有下列程序: #include<stdio.h> #include<string.h> main() int i;
char s[10],t[10]; gets(t);
for(i=0;i<2;i++) gets(s);
if(strcmp(t,s)<0) strcpy(t,s);
printf(\"%s/n\
程序运行后,从键盘上输入(<CR>代表回车符):CDEF<CR>BADEF<CR>QTHRG<CR>,则程序的输出结果是______。
(分数:2.00)
填空项1:__________________ (正确答案:QTHRG)
解析:[解析] strcmp (t,s)函数用来比较t和s所指字符串的大小,若t>s,则函数值大于0;若t=s,则函数值等于 0;若t<s,则函数值小于0。strcpy(t,s)函数的功能是把字符数组s所指字符串的内容复制到字符数组t所指的存储空间中。
本题中,t[10]=\"CDEF\"。第一次循环,s[10]= \"BADEF\",if语句的控制条件strcmp(t,s)<0不成立,接着执行第二次循环,s=\"QTHRG\",if语句的控制条件 strcmp(t,s)<0成立,执行下列的语句,将字符数组s所指字符串的内容复制到字符数组t所指的存储空间中,然后输出字符数组t。 55.下列程序的输出结果是______。 #define P(A) printf(\"%d,\
#definePRINT(A) P(A) ;printf(\"the end\") main() int i,a=0; for(i=1;i<5;++) PRINT(a+i); printf(\"/n\");
(分数:2.00)
填空项1:__________________ (正确答案:1,2,3,4,the end)
解析:[解析] 本题考查带参数的宏的定义。第1次循环,i=1时,调用PRINT(1),P(1)输出1;第2次循环,i=2时,调用PRINT(2),P(2)输出2;第3次循环,i=3时,调用 PRINT(3),P(3)输出3;第4次循环,i=4时,调用 PRINT(4),P(4)输出4,the end。
因篇幅问题不能全部显示,请点此查看更多更全内容