国家二级(C语言)机试模拟试卷404
选择题
1.有以下程序:
#include<stdio.h>
unsigned fun(unsigned num)
{
unsigned k=1:
do{
k*=num%10;
num/=10:
}while(num);
return k;
}
main()
{
unsigned n=26:
printf(\\(A)
A. 12
B. 10
C. 16
D. 8
解析:程序首先执行main函数,执行printf(\\
2.假定已建立以下数据链表结构,且指针p和q已指向如下图所示的结点:
(D)
A. (*)p.next=(*q).next;free(p)
B. b=q—>next;free(q)
C. p=q;free(q)
D. p—>next=q—>next;free(q)
解析:要删除结点q,应首先由q的上一个结点p的指针域指向q的指针域所指向的结点,即p—>next=q—>next;,然后才能释放结点q,即free(q)。
3.在数据库系统的组织结构中,下列( )映射把用户数据库与概念数据库联系了起来。(A)
A. 外模式/模式
B. 内模式/外模式
C. 模式/内模式
D. 内模式/模式
解析:数据库有两层映像,即外模式/模式和模式/内模式映像。模式/内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。
4.算法的有穷性是指( )。(A)
A. 算法程序的运行时间是有限的
B. 算法程序所处理的数据量是有限的
C. 算法程序的长度是有限的
D. 算法只能被有限的用户使用
解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。
5.下面说法正确的是( )。(C)
A. 一个C程序可以有多个主函数
B. 一个C语言的函数中只允许有一对花括号
C. C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内
D. 在对C程序进行编译时,可以发现注释行中的拼写错误
解析:本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;②C程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。
6.下列数组定义中错误的是( )。
B
解析:二维数组的初始化有以下几种形式:
①分行进行初始化;
②不分行的仞始化;
③部分数组元素初始化;
④省略第一维的定义,不省略第二维的定义。在选项B)中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。所以出现了边界的越界溢出错误。
7.有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母:
#include<stdio.h>
#include<ctype.h>
void fun(char*p)
{
int i=0;
while(p[i])
{
if(p[i]==’’&&islower(p[i-1]))
p[i-1]=p[i-1]-’a’+’A’;
i++;
}
}
main()
{
char s1[100]=\\(D)
A. ab cd EFg!
B. Ab Cd EFg!
C. ab cd EFG!
D. aB cD EFG!
解析:调用fun函数后,实参数组名s1传给形参指针p,p也指向数组s1。fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。程序中语句p[i-1]=p[i-1]-’a’+’A’;即p[i-1]=p[i-1]-32,意思是将p[i-1]中的字符转换为大写。因此D选项正确。
8.有以下程序:
#include<stdio.h>
#include<string.h>
typedef struct{
char name[9];
char sex;
float score[2];}STU;
void f(STU*a)
{
strcpy(a->name,\\(C)
A. Qian,f,95,92
B. Zhao,f,95,90
C. Zhao,m,95,90
D. Zhao,f,95,92
解析:f函数调用时,结构体数组名作为实参传给了形参指针,使结构体指针a指向了数组c的首地址。因此,f持有了主函数中数组c的指针,可以对数组c中的元素赋值,故返回主函数之后,数组c中的成员值已被更新。
9.下列函数的功能是( )。
fun(char *a,char *b)
{
while((*b= *a)!=’\0’
{a++;b++;}
}(A)
A. 将a所指字符串赋给b所指空间
B. 使指针b指向a所指字符串
C. 将a所指字符串和b所指字符串进行比较
D. 检查a和b所指字符串中是否有’\0’
解析:题中a和b是两个字符型指针,在while语句的表达式中将指针a所指向的字符赋给指针b所指向的内存单元,再判断指针b所指向的字符是不是字符串中的结尾符。若不是,则字符指针a和b的值分别自增,再执行循环语句,直至b所指向的字符为字符串中的结尾符。
10.若有定义:int a=1,b=2,c=3;,则执行表达式(a=b+c)‖(++b)后,a,b,c的值依次为( )。(C)
A. 1,2,3
B. 5,3,2
C. 5,2,3
D. 5,3,3
解析:||表示或运算,当第一个表达式为真时,第二个表达式就不会被执行。根据优先级规则,两边都是括号,所以先计算(a=b+c),将b+c的值赋值给a,则a=5,而右边的括争不会被执行,所以b=2,c=3。
11.C语言规定,在一个C程序中,main()函数的位置( )。(D)
A. 必须在系统调用的库函数之后
B. 必须在程序的开始
C. 必须在程序的最后
D. 可以在任意位置
解析:每个C程序有且只有一个主函数(main),且程序必须从main()函数开始执行,而且main()函数可以放在程序中的任意位置。
12.若x=4,y=5,则x&y的结果是( )。(B)
A. 0
本文档预览:3600字符,共14177字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载