二级C语言笔试-465_真题(含答案与解析)-交互

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二级C语言笔试-465
(总分91, 做题时间90分钟)
一、选择题
1.
与十进制数200等值的十六进制数为______。

A) A8 B) A4 C) C8 D) C4
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
[解析] 十进制数200转换成二进制数,其结果为1100 1000,1100 1000对应了十六进制数C8。

因此答案选C。

2.
下列叙述中正确的是______。

A) 一个逻辑数据结构只能有一种存储结构
B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构
C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率
D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[解析] 逻辑结构是反映了元素之间的逻辑关系的数据结构,存储结构是逻辑结构在计算机中的存放形式,它们都具有线性结构和非线性结构。

逻辑结构有顺序、链接、索引等存储结构,采用不同的存储结构,数据处理的效率不同。

3.
对于长度为n的线性表,在最坏的情况下,下列各排序法所对应的比较次数中正确的是______。

A) 冒泡排序为n/2 B) 冒泡排序为n
C) 快速排序为n D) 快速排序为n(n-1)/2
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[解析] 存最坏情况下,快速排序退化为冒泡排序,冒泡排序法的基本过程参见本题的理论链接。

冒泡排序的每个元素都要与它前面的元素相比较,因此比较次数为(n-1)+(n-2)+…+1=n(n-1)/2。

4.
冒泡排序在最坏情况下的比较次数是______。

n C) n(n-1)/2 D) n/2
A) n(n+1)/2 B) nlog
2
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[解析] 在最坏情况下冒泡排序法需要比较的次数为n(n-1)/2。

5.
关于结构化程序设计原则和方法描述错误的是( )。

A) 选用的结构只准许有一个入口和一个出口
B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现
C) 不允许使用GOTO语句
D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[解析] 限制使用GOTO语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用GOTO语句。

其他3项为结构化程序设计的原则。

6.
下列描述中正确的是______。

A) 程序就是软件
B) 软件开发不受计算机系统的限制
C) 软件既是逻辑实体,又是物理实体
D) 软件是程序、数据与相关文档的集合
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[解析] 计算机软件是包括程序、数据及相关文档的完整集合,软件是一种逻辑实体,软件的开发、运行对计算机系统具有依赖性.受计算机系统的限制。

7.
简单的交换排序方法是( )。

A) 快速排序B) 选择排序C) 堆排序D) 冒泡排序
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[解析] 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。

8.
SQL语言又称为( )。

A) 结构化定义语言B) 结构化控制语言C) 结构化查询语言D) 结构化操纵语言
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
[解析] 结构化查询语言(Structured Query Language,简称SQL)是集数据定义、数据操作和数据控制功能于一体的数据库语言。

9.
下列说法正确的是( )。

A) 一个C程序可以有多个主函数
B) 一个C语言的函数中只允许有一对花括号
C) C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内
D) 在对C程序进行编译时,可以发现注释行中的拼写错误
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[解析] 本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;②C语言的标识符是由字母、数字、下划线组成的,可以是大写字母,而且标识符区分字母的大小写;③C 程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释行中的错误。

10.
设变量已正确定义并赋值,以下正确的表达式是______。

(A) x=y*5=x+z
(B) int(15.8%5)
(C) x=y+z+5,++y
(D) x=25%5.0
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
11.
以下选项中不属于字符常量的是______。

(A) 'C'
(B) "C"
(C) '\xCC'
(D) '\072'
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:B
12.
阅读以下程序
#include <stdio.h>
main()
int case;float printF;
printf("请输入2个数:");
scanf("%d %f",&case,&printF):
printf("%d %f\n",case,printF);
该程序在编译时产生错误,其出错原因是
A) 定义语句出错,case是关键字,不能用作用户自定义标识符
B) 定义语句出错,PrintF不能用作用户自定义标识符
C) 定义语句无错,scanf不能作为输入函数使用
D) 定义语句无错,printf不能输出case的值
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:A
[解析] 标识符不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。

题目源程序中使用了已经预定义的关键字case,所以将出现错误。

13.
有以下程序
int add(int a,int b)return(a+b);
main()
int k,(*f)(),a=5,b=10;
f=add;
则以下函数调用语句错误的是
A) k=(*f)(a,b);B) k=add(a,b);
C) k=*f(a,b);D) k=f(a,b);
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
[命题目的] 函数的调用。

[解题要点] 在语句“k=*f(a,b)”中,由于“()”的优先级高于“*”,所以“*f(a,b);”表示其返回类型为指针的带有两个整型参数的函数。

14.
若变量a,b已正确定义,且b已正确赋值,则合法的语句是( )。

A) b=double(B) ; B) ++b; C) a=a++=5; D)
a=double(B);
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 要解答此题只要知道两个知识点:①在C语言中规定进行强制类型转换的格式是:(double)变量名;②在C语言中不允许给表达式赋值。

15.
若有定义int x, y;,并已正确给变量赋值,则以下选项中与表达式(x-
y)?(x++):(y++)中的条件表达式(x-y)等价的是______。

A) (x-y>0)
B) (x-y<0)
C) (x-y<0||x-y>0)
D) (x-y==0)
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
[解析] 条件运算表达式:“表达式1?表达式2:表达式3”,但表达式1的值为非0时,此时表达式2的值就是整个条件表达式的值,反之为表达式3的值。

故其等价于选项C中的逻辑或表达式。

16.
设有定义:float a=2,B=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是 ______。

A) (a十B) *h/2 B) (1/2)*(a+B) *h
C) (a+B) *h*1/2 D) h/2*(a+B)
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:B
[解析] 选项B错误,不符合题意。

17.
两次运行下列的程序,如果从键盘上分别输入3和1,则输出结果是
( )。

main()
int x;
scanf("%d",&x);
if(x++>2)printf("%d",x);
else printf("%d\n",x-);
A) 4和2 B) 4和1 C) 4和0 D) 3和1
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:A
[解析] 本题考查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。

18.
有以下程序:
main()
int n=0,m=l,x=2;
if(!n) x-=l:
if(!m) x-=2;
if(!x) x-=3;
printf (" %d\n",x);
执行后的输出结果是 ______。

A) 2 B) 1 C) 3
D) 6
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 因n=0,故!n为真,执行语句x-=1得x=x-1=2-1=1;条件!m和!x不成立,所以x=1,正确答案为1。

19.
有下列程序:
main()
int t,a=1,b=5,c=-2;
while(a>b>c)
t=a;a=b;b=t;c++;
printf("%d,%d,%d",a,b,c);
程序的输出结果是( )。

A) 1,5,0 B) 1,5,-2
C) 5,1,-1 D) 5,1,-2
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[解析] 本题考查while循环。

先判断while循环的控制表达式是否成立,发现a>b>c不成立,所以不执行循环。

直接输出a、b、c的值。

20.
有以下程序
#include<stdio.h>
main()
int a=1,b=2;
for( ;a<8;a++) b+=a;a+=2;
printf("%d,%d\n",a,b);
程序运行后的输出结果是
A) 9,18 B) 8,11 C) 7,11 D) 10,14
SSS_SIMPLE_SIN
A B C D
分值: 0
答案:D
[解析]初始值a=1,b=2,第一次循环:b=b+ a=2+1=3,a=a+2=1+2=3,
a=a+1=3+1=4;第二次循环:b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循环:b=b+a=7+7=14,a=a+2=7+2=9,a=a+1 =9+1=10,故本题答案选D。

21.
已定义下列函数:
int fun(int *p)
return *p;)
fun函数返回值是( )。

A) 不确定的值B) 一个整数
C) 形参p中存放的值D) 形参p的地址值
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 由函数int fun(int *p){return *p;}的定义可知,返回值为整型指针变量p所指向的数据。

22.
有如下程序:
#include <stdio.h>
main()
int x=23;
do
Printf("%d",x--);
while(! x);
该程序的执行结果是( )。

A) 321 B) 23 C) 不输出任何内容D) 陷入死循环
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:B
[解析] do-while语句的执行过程中要先执行一次循环体语句,本题中执行x--后判断 while中的表达式,表达式的值!x为假,程序结束循环。

23.
下列程序的输出结果是( )。

int f1(int x,int y)return x>y?x:y;
int f2(int x,int y)return x>y?y:x;
main()
int a=4,b=3,e=5,d=2,e,f,g;
e=f2(f1(a,b),f1(e,d));
f=f1(f2(a,b),f2(e,d));
g=a+b+c+d-e-f;
printf("%d,%d,%d\n",e,f,g);
A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[解析] 根据函数int f1(int x,int y){return x>y?x:y;)和int f2(int x,int y){return x>y?y:x;}的定义可知,如果x>y成立,则函数f1返回x 的值,函数f2返回y的值。

所以f1(a,b)=4,f1(c,d)=5,f2(a,b)=3,f2(c,d)=2故e=f2(4,5)=4,f=f1(3,2)=3,g=4+3+5+2-4-3=7。

24.
下列语句组中,正确的是
A) char*s;s=”Olympic";B) chars[7];s="Olympic";
C) char*s;s="Olympic";D) chars[7];s="Olympic";
SSS_SIMPLE_SIN
A B C D
分值: 0
答案:A
[解析] 若s被定义为指针,选项A,表示将指针 s指向一个字符串,选项C表示为指针s赋一个字符串的值,显然选项A正确,选项C错误;若s被定义为数组,且要为该数组直接赋值,则必须在定义时进行,因此选项B和选项D都错误。

25.
下列程序的输出结果是( )。

#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",fun(7));
A) 2 B) 8 C)
9 D) 5
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[解析] 本题考查函数的递归调用。

在函数递归调用时,fun(7):a=7-
fon(5)→fun(5):a=5-fon(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。

26.
下列循环体的执行次数是( )。

#include<stdio.h>
main()
int i,j;
for(i=0,j=1;i<j+1;i+=1,j--)
printf("%d\n",j);
A) 3 B) 2 C) 1 D) 0
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:C
[解析] 本题考查for循环。

第一次循环前先判断循环条件,此时i=0,j=1,i <j+1成立,循环第一次;第二次循环前先判断循环条件,此时i=1,j=0,(j--是先使用j的值再减1),i<j+1不成立,结束循环。

27.
有下列程序:
main()
int k=5;
while(--k) printf("%d",k-=3);
printf("\n");
执行后的输出结果是( )。

A) 1 B) 2
C) 4 D) 死循环
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[解析] 在程序语句中,k的初始值为5,进行第1次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出1,此时 k的值变为1。

程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。

所以程序的最后结果为1。

28.
为了避免在嵌套的条件语句if else中产生二义性,C语言规定,else子句总是与( )配对。

A.缩排位置相同if B.其前面最近的if
C.其后面最近的if D.同一行上的if
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:B
[解析] C语言规定,在if else语言中,else总是与它前面的最近的if配对。

29.
若要求从键盘读入含有空格字符的字符串,应使用函数
A) getc() B) gets() C) getchar() D) scanf()
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。

30.
有以下程序:
void f(int*q)
int i=0;
for(; i<5;i++)(*q)++;
main()
(int a[5]=1,2,3,4,5,i;
f(a);
for(i=0;i<5;i++)printf("%d",a[i]);
程序运行后的输出结果是______。

A) 2,2,3,4,5,B) 6,2,3,4,5,
C) 1,2,3,4,5,D) 2,3,4,5,6,
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 题目中定义了一个指针变量作为函数f()的参数。

主函数main()中调用f()函数,当i=0时,执行语句“(*q)++;”,此处*q就代表数组a[0]的地址,也即将q进行加1操作;当i=1时,q仍指向数组元素a[0]的地址,因为在函数f()中并未对指针变量q做任何变动,即*q仍代表数组元素a[0]的值,所以此次(*q)++即为2+1,a[0]的值变为3;直到i=4时,执行(*q)++后a[0]的值变为6,最后输出数组a的结果为6、2、3、4、5。

31.
有以下程序:
main()
char *p[]="3697","2584";
int i,j;long num=0;
for(i=0;i<2;i++)
j=0;
while(p[i][j]!='\0')
if((p[i][j]-'0')%2)num=10*/num+p[i]
[j]-'0';
j+=2;
printf("%d\n",hum);
程序执行后的输出结果是______。

A) 35 B) 37
C) 39 D) 3975
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[解析] 通过赋值表达式指针数组*p[]等价于数组p[2][4];表达式“p[i][j]-'0'”可用来表示该字符数组元素的数值,故表达式“(p[i][j]-'0')%2”为判
断该字符数组元素的数值的奇偶性,表达式“num=10*num+p[i][j]-'0'”中的数值运算表示直接加该字符数组元素的数值。

32.
分析下列程序:
#include<stdio.h>
main()
int *p1,*p2,*p;
int a=6,b=9;
p1=&a;p2=&b;
if(a<b)p=p1;p1=p2;p2=p;
printf("%d,%d",*p1,*p2);
printf("%d,%d",a,b);
程序的输出结果为( )。

A) 9,66,9 B) 6,9 9,6 C) 6,9 6,9 D) 9,69,6
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:A
[解析] 通过p1=&a,p2=&b分别将a、b的地址赋给指针p1、p2,接着执行if 语句,发现a<b成立,则通过交换p1、p2的值,即交换a、b所在存储单元的地址,但是a、b的值并没有发生变化。

33.
有以下程序
#inclUde <stdio.h>
void fun(int *s,int n1,int n2)
int i,j,t;
i=n1;j=n2;
while(i<j) t=s[i];s[i]=s[j];s[j]=t;i++;j--;
main()
int a[10]=1,2,3,4,5,6,7,8,9,0,k;
fun(a,0,3);fun(a,4,9);fun(a,0,9);
for(k=0;k<10;k++)printf("%d",a[k]);printf("\n");
程序的运行结果是
A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:C
[解析] 函数fun(int*s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。

所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

34.
以下4个选项中,不能看作一条语句的是
A) ;B) a=5,b=2.5,c=3.6;
C) if(a<5);D) if(b!=5)x=2;y=6;
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:D
[解析] 选项D为两条语句,每条语句以分号结束。

35.
有以下程序:
void sum(int a[])
a[0]=a[-1)+a[1];
main()
int a[10]=(1,2,3,4,5,6,7,8,9,10;
sum(&a[2]);
printf("%d\n",a[2]);
程序运行后的输出结果是 ______。

A) 6 B) 7 C) 5 D) 8
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:A
[解析] 调用sum(&a[2])时,a[0]=a[2]=3,a[-1]=a[1]=2,a[1)=a[3]=4,因此a[2]=6,可以看到sum函数的功能是将数组的一项的值改成其前一项的值与后一项的值之和。

36.
下面结构体的定义语句中,错误的是
A) struct ord int x;int y;int z;;struct ord a;
B) struct ord int x;int y;int z;struct ord a;
C) struct ord int x;int y;int z;a;
D) struct int x;int y;int z;)a;
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 定义结构体变量有三种方式:①先声明结构体类型,再定义变量名,如选项A)所示;②在声明类型的同时定义变量,如选项C)所示;③直接定义结构体类型变量,如选项D)所示。

37.
下面结构体的定义语句中,错误的是( )。

A) struct ordint x;int y;int z;;struct ord a;
B) struct ordint x;int y;int z;;ord a;
C) struct ordint x;int y;int z;a;
D) structint x;int y;int z;a;
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 在选项B)中,即使在定义完结构体ord后,不能把ord看成是一种数据类型。

38.
若x=2,y=3,则x&y的结果是( )。

A) 0 B) 2 C) 3 D) 5
SSS_SIMPLE_SIN
A B C D
分值: 2
答案:B
[解析] 本题主要考查按位与(&)运算的知识点。

“&”是对两个运算量相应的位进行逻辑与,“&”的规则与逻辑与“&&”相同。

x=2的二进制为00000010,y=3的二进制为00000011,x&y=00000010,转化为十进制即为2。

39.
有以下程序
point(char *p) p+=3;
main()
char b[4]='a','b','c','d',*p=b;
point(p); printf("%c\\n",*p);
程序运行后的输出结果是______。

A) a B) b C) c D) d
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:A
[解析] 本题考查的是函数传值调用。

在C语言中,传值调用是将实参的值复制一份作为函数的形参。

在函数中,改变形参不会影响到实参。

而对于传址调用,函数改变的是形参指针变量所指内存中的值。

实际上,还是将实参指针的值复制了一份给形参指针变量,它们是两个独立的变量,只不过指向同一个内
存地址。

本题的函数只是改变了形参指针变量p的值,对于实参没有任何影响,虽然函数参数是指针,但函数内部并未对指针所指内容进行操作,所以,实际上是传值调用。

所以主函数中的p始终指向b[0],最后输出的是“a”,选项A正确。

40.
以下语句或语句组中能正确进行字符串赋值的是( )。

A) ehar以*sp; * sp = "right!"; B) char s[10] ;s = "right!";
C) char s [10]; * s = "right !"; D) char * sp =
"right !";
SSS_SIMPLE_SIN
A B C D
分值: 1
答案:D
[解析] 选项A)应将*sp="right!";中的*叩改为sP,即把字符串"right!”的首地址赋给指针变量sp;选项B)中的s代表数组的首地址,不能给它赋字符串,只能在定义数组时,对其进行初始化;选项C)中的。

s指的是数组的第一个元素,不能给它赋字符串。

二、填空题
41.
某二叉树中度为2的节点有18个,则该二叉树中有______个叶子节点。

SSS_FILL
分值: 2
答案:19
[解析] 对任何一棵二叉树T,如果其叶子结点数为n0.度为2的结点数为
n2,则n0=n2+1,即叶子结点数总是比度为2的结点数多1。

42.
按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于______。

SSS_FILL
分值: 2
答案:线性结构
[解析] 数据的逻辑结构是指数据元素之间的逻辑关系,分为线性结构和非线性结构。

常见的线性结构有线性表、栈和队列等,常见的非线性结构有树、二叉树等。

43.
数据结构分为逻辑结构和存储结构,循环队列属于______结构。

SSS_FILL
分值: 2
答案:存储结构
44.
在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么“学生”和“可选课程”的联系为______。

SSS_FILL
分值: 2
答案:多对多
[解析] 一名学生可以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。

45.
诊断和改正程序中错误的工作通常称为______。

SSS_FILL
分值: 2
答案:调试
[解析] 程序设计的任务是诊断和改正程序中的错误。

程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性、原因和位置;其二是对程序进行修改,排除这个错误。

46.
请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。

(double, double);
main()
double x, y;
scanf("% lf % lf", &x, &y);
printf("% 1f\\n", max(x, y));
double max(double a, double b)
return(a>b? a:b);
SSS_FILL
分值: 2
答案:double max
[解析] 本题考查函数的声明。

C语言中函数声明的一般形式为:
(1)函数类型函数名(参数类型1,参数类型2,…)
(2)函数类型函数名(参数类型1参数名1,参数类型2参数名2,…)
题目中函数类型是double。

函数名是max。

故答案是double max。

47.
设int a=5,b=6,表达式(++a= =b--)? ++a:--b的值
是。

SSS_FILL
分值: 2
答案:7
[解析] 此表达式由三日运算符连接,进行++a==b--中的“==”运算时,++a的值为 6,b--的值为6,则整个表达式的值为++a的值,++a的值为7。

这里要注意前缀++,--和后缀++,--的区别。

48.
以下程序在运行时若输入:1234567,则程序的运行结果是______。

#include<stdio.h>
main()
int x, y;
scanf("%2d%1d", &x, &y); printf("%d\n", x+y);
SSS_FILL
分值: 2
答案:15
[解析] scanf中"%2d"指定了变量x的位数为2位,"%1d",指定了变量y的位数为1位,所以x的值为12,y的值为3,x+y=15。

49.
下列表达式用于判断y是否为闰年。

闰年的判断条件是:年号能被4整除但不能被100整除或年号能被400整除,请填空______。

SSS_FILL
分值: 2
答案:(y%4==0)&&(y%100!=0)‖(y%400==0)
[解析] 本题考查逻辑表达。

年号能被4整除(y%4==0)但不能被100整除
(y%100!=0),两者是与的关系,年号能被400整除即y%400==0,与前两项是或的关系。

50.
下列程序的运行结果是______。

#include<stdio.h>
main()
int a=10,b=3;
printf("%d,",a%b);
printf("%d,",(a-b,a+b));
printf("%d\n",a-b?a-b:a+b);
SSS_FILL
分值: 2
答案:1,13,7
[解析] 本题考查3个知识点:①余数的计算,题中的a=10,b=3,a%b=1;
②(表达式1,表达式2)形式的结果为最后一个表达式的值,题中的a=10,
b=3,(a-b,a+b)=a+b=13;③条件运算符的使用,题中的a-b?a-b:a+b,判断语句a-b=7不为0,所以执行a-b,结果为7。

51.
有以下程序,若运行时从键盘输入:18,11<回车>,则程序的输出结果是______。

main()
int a,b;
printf("Enter a,b:");scanf("%d,%d",&a,&b);
while(a!=b)
while(a>b)a-=b;
while(b>a)b-=a;
printf("%3d%3d",a,b);
SSS_FILL
分值: 2
答案:1 1
[解析] 键盘输入后变量a=18,b=11,在循环语句“while(表达式)”循环体中,表达式控制循环体是否执行,a-=b等价于a-=a-b。

52.
当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行______次。

#include<stdioh>
main()
char ch;
while((ch=getchar())=='0')printf("#");
SSS_FILL
分值: 2
答案:0
[解析] “ch=getchar()”的功能是从终端读入一个字符赋给变量ch,由于getchar()只能接收一个字符,所以输入的字符1被赋给ch,即
“'1'!='0'”,循环体不执行,直接退出while循环.所以循环体执行的次数为0。

53.
函数调用语句:“fgets(buf,n,fp);”从中指向的文件中读入n个字符放到buf字符数组中,函数返回值为______。

SSS_FILL
分值: 2
答案:buf的首地址
[解析] 考查fsets()函数的功能,f8ets()函数用来从文件中读入字符串。

调用格式为:f8ets(buf,n,fp)。

此处, fp是文件指针,buf是存放字符串的起始地址,n是一个 int型变量。

调用函数fsets()时,最多能读入n-1个字符,系统自动在最后加字符串结束标志,并以buf作为函数值返回。

54.
以下程序运行后的输出结果是。

#include <stdio.h>
int f( iht a[] ,int n)
if(n>=1) returnf(a,n-1) +a[n-1];
else return 0;
main( )
int aa[5] = 1,2,3,4,5 ,s;
s = f(aa,5); prinff(" % d \\n" ,s);
SSS_FILL
分值: 2
答案:15
[解析] 程序通过递归调用实现求数组aa各元素之和,即
a[4]+a[3]+a[2]+a[1]+a[0]=15。

55.
下面程序的运行结果是______。

#include<stdio.h>
main()
int a=25;
fun(&a);
fun(int *x)
printf("%d\n",++*x);
SSS_FILL
分值: 2
答案:26
[解析] 在主函数中只调用了fun函数,调用时把变量a的地址传递给形参。

fun函数的形参x是一个指针,其基类型与主函数中a的类型一致,因此在调
用时得到的是a的地址,输出项是++*x,*x代表的就是主函数中变量a的存储单元,++*x就是使主函数中a的值加1,输出26。

1。

相关文档
最新文档