二级C语言-6-1
(总分72, 做题时间90分钟)
一、选择题
1.
以下程序运行后的输出结果是
#define F(X,Y)(X) * (Y)
main
{ int a=3,b=4;
printf("%d\n",F(a++,b++));
#define F(X,Y)(X) * (Y)
main
{ int a=3,b=4;
printf("%d\n",F(a++,b++));
∙A. 12
∙B. 15
∙C. 16
∙D. 20
A B C D
分值: 2
答案:A
[解析] 本题考查带参数的宏定义,参数只是简单的字符替换,而不是参数的传递。本题中用a++替换X,用b++替换Y,再计算(a++)*(b++)的值,即3*4的值,其结果为12。
2.
有以下程序
struc t STU{
char name [10]
int num;
struc t STU{
char name [10]
int num;
void f1(struct STU c)
{ struct STU b={"LiSiGuo",2042};
c=b;
}
void f2(struct STU *c)
{ struct STU b={"SunDan",2044);
*c=b;
}
main ( )
{ struct STU a={"YangSan",2041},b={"WangYin",2043};
f1 (a); f2 (&b);
printf ( "%d %d\n" ,a.num,b.num);
}
执行后输出结果是
{ struct STU b={"LiSiGuo",2042};
c=b;
}
void f2(struct STU *c)
{ struct STU b={"SunDan",2044);
*c=b;
}
main ( )
{ struct STU a={"YangSan",2041},b={"WangYin",2043};
f1 (a); f2 (&b);
printf ( "%d %d\n" ,a.num,b.num);
}
执行后输出结果是
∙A. 2041 2044
∙B. 2041 2043
∙C. 2042 2044
∙D. 2042 2043
A B C D
分值: 1
答案:A
[解析] 本题考核的知识点是结构体类型的综合应用。本题中首先定义了一个结构体类型STU,它由一个字符数组和一个整形变量 num组成。然后定义两个函数n和n。其中n是值传递的,n是地址传递的。主函数中定义两个结构体变量a和b并分别赋初值,接着调用函数f1(a),由于函数f1是值传递,故执行该函数后并没有改变 a的值,在接着调用函数f2(&b),由于该函数是地址传递,执行该函数后将使变量b的值为{“SunDan”, 2044},故函数最后输
出的a.num和b.num的值为 2041和2044。所以,4个选项中选项A符合题意。
3.
数据的存储结构是指
∙A. 数据所占的存储空间
∙printf函数属于B. 数据的逻辑结构在计算机中的存放形式
∙C. 数据在计算机中的顺序存储方式
∙D. 存储在计算机外存中的数据
A B C D
分值: 2
答案:B
[解析] 数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。数据的存储结构有顺序结构、链式结构、散列结构和索引结构等。
4.
有下列程序:
main()
{ int x=5;
do
{printf("%d",x-=4);}
while(!(--x));
}
程序的输出结果是( )。
main()
{ int x=5;
do
{printf("%d",x-=4);}
while(!(--x));
}
程序的输出结果是( )。
∙A. 1
∙B. 20
∙C. 1 4
∙D. 死循环
A B C D
分值: 1
答案:C
[解析] 本题考查do…while循环。①执行printf语句,x=x-4 1,输出1,判断while循环的控制条件,--x=0,则(!(--x))非零,循环条件成立,执行下一次循环;②执行printf语句,x=x-4=-4,输出-4,判断while循环的控制条件,--x=-5,则(!(--x))为零,循环条件不成立,结束循环。
5.
请读程序段:
char str[]="ABCD",*p=str,
printf("%d\n",*(p+4));
程序段的输出结果是______。
char str[]="ABCD",*p=str,
printf("%d\n",*(p+4));
程序段的输出结果是______。
∙A. 68
∙B. 0
∙C. 字符'D'的地址
∙D. 不确定的值
A B C D
分值: 1
答案:B
[解析] 在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志“\0”,故指向字符数组的指针p的*(p+4)的值为“\0”。由于“\0”的编码值就是0,所以本题输出为0。
6.
已定义以下函数
fun(int *p)
{ return *p; }
该函数的返回值是
A)不确定的值
B)形参p中存放的值
C)形参p所指存储单元中的值
D)形参p的地址值
A B C D
分值: 1
答案:C
[解析] 在表达式中出现*p,表示引用指针变量所指存储单元的内容。
7.
软件设计中模块划分应遵循的准则是
∙A. 低内聚低耦合
∙B. 高内聚低耦合
∙C. 低内聚高耦合
∙D. 高内聚高耦合
A B C D
分值: 2
答案:B
[解析] 模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立;模块的内聚程度尽可能地高,即遵循高内聚、低耦合的原则。
8.
关系表中的每一横行称为—个______。
∙A. 元组
∙B. 字段
∙C. 属性
∙D. 码
A B C D
分值: 2
答案:A
[解析] 在关系数据库中,关系模型采用二维表来表示,简称“表”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。
9.
下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,请选择填
空。
#include<stdio.h>
main()
{ int i=0,j,k;
do{i++;k=316-13*i}while(______);
j=k/11; printf("316=13*%d+11,%d”,i,j);
}
#include<stdio.h>
main()
{ int i=0,j,k;
do{i++;k=316-13*i}while(______);
j=k/11; printf("316=13*%d+11,%d”,i,j);
}
∙A. k/11
∙B. k%11
∙C. k/11==0
∙D. k%11==0
A B C D
分值: 1
答案:B
[解析] 本题的关键是两个加数分别能被13和11整除。当k%11的值为0时,则退出循环,将执行j=k/11;语句,输出结果,所以该表达式合理的条件是k%11。
10.
C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是______。
∙A.关键字可用做用户标识符,但失去原有含义
∙B.预定义标识符可用做用户标识符,但失去原有含义
∙C.在标识符中大写字母和小写字母被认为是相同的字符
∙D.用户标识符可以由字母和数字任意顺序组成
A B C D
分值: 1
答案:B
[解析] 关键字不可用作C语言的标识符,所以A选项错误。在标识符中大写字母与小写字母作为不同字符处理,所以C选项错误。标识符由下画线、字母或数字组成,且必须以下画线和字母开始,所以D错误。
11.
有以下程序
#include<stdlib.h>
struct NODE
{ int num;struct NODE*next;};
main()
{ struct NODE*p,*q,*r;
#include<stdlib.h>
struct NODE
{ int num;struct NODE*next;};
main()
{ struct NODE*p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf("%d\n",p->num+q->next->num);}
程序运行后的输出结果是
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf("%d\n",p->num+q->next->num);}
程序运行后的输出结果是
∙A. 10
∙B. 20
∙C. 30
∙D. 40
A B C D
分值: 1
答案:D
[解析] 该题中考查的是简单的单链表,下图就是赋完值后的示意图:容易看到p->num=10,而 q->next就是r,所以q->next->num=30,故答案为40。
12.
下面程序的输出是______。
main()
{char *s="12134211";
int v1=0, v2=0,v3=0,v4=0,k;
for(k=0;s[k];k++)
switch(s[k])
{ default,v4++;
main()
{char *s="12134211";
int v1=0, v2=0,v3=0,v4=0,k;
for(k=0;s[k];k++)
switch(s[k])
{ default,v4++;
case'1':v1++;
case'3':v3++;
case'2':v2++;
}
printf("vl=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
}
case'3':v3++;
case'2':v2++;
}
printf("vl=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论