国家二级C语言机试(选择题)模拟试卷602
选择题
1.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。(C)
A. 课号,成绩
B. 学号,成绩
C. 学号,课号
D. 学号,姓名,成绩
解析:学号是学生表s的主键,课号是课程表C的主键,所以选课表SC的关键字应该与前两个表能够直接联系且能唯一定义元组,学号和课号的组合满足条件。
2.若有定义:char c;int d;,程序运行时输入:c=1 d=2<回车>,能把字符1输入给变量c、把整数2输入给变量d的输入语句是( )。(A)
A. scanf(”c=%c d=%d”,&c,&d);
B. scanf(”c=%cd=%d”,&c,&d);
C. scanf(”c=%d d=%d”,&c,&d);
D. scanf(”c=%dd=%d”,&c,&d);
解析:在scanf()函数中格式控制字符串的形式必须与地址格式保持一致,所以BD选项错误。C选项中c=%d是以数值格式存入c变量。
3.若有定义:char*ps[]={”aa”,”bb”,”cc”,”dd”};,则以下叙述正确的是( )。(D)
A. *ps[0]是字符串”aa”
B. *ps[0]是字符串”aa”的首地址
C. ps[0]是字符’a’
D. ps[0]是字符串”aa”的首地址
解析:对于指针数组,ps[0]代表的就是第一个字符串的地址。
4.有以下程序:
#include <stdio.h>
main()
{
int a[]:{2,3,5,4},i;
for(i:0;i<4;i++)
switch(i%2)
{
case 0:switch(a[i]%2)
{
case 0:a[i]++;break;
case 1:a[i]–;
}break;
case 1:a[i]=0;
}
for(i=0;i<4;i++)
printf(”%d”,a[i]);
printf(”\n”);
}
程序运行后的输出结果是( )。(C)
A. 3 3 4 4
B. 2 0 5 0
C. 3 0 4 0
D. 0 3 0 4
解析:main函数的函数体是一个for循环语句,for循环中包含一个switch语句,如果判断条件为0,则进入第二个switch语句,如果判断条件为1,则执行“a[i]=0”,最后将数组按顺序输出。因此,程序功能是将数组的偶数项设为0,奇数项如果为奇数则减1,为偶数就加1,最后得到结果。
5.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为( )。(C)
A. 9
B. 10
C. 45
D. 90
解析:冒泡排序法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,故C选项正确。
6.若有说明:
typedef struct{
int a;char c;
}w;
则以下叙述正确的是( )。(D)
A. 编译后系统为w分配5个字节
B. 编译后系统为w分配6个字节
C. 编译后系统为w分配58个字节
D. 编译后系统不为w分配存储空间
解析:w是一个自定义类型,而不是变量,故编译后系统不为w分配存储空间。当使用w定义变量时才会为其定义的变量分配存储空间。
7.有以下程序:
#include <stdio.h>
#define M 5
#define f(x,y) x*y+M
main()
{
int k;
k=f(2,3)*f(2,3);
printf(”%d\n”,k);
}
程序运行后的输出结果是( )。(B)
A. 22
B. 41
C. 100
D. 121
解析:宏定义中的函数在调用时只做简单的替换功能,所以k=2*3+5*2*3+5=41。
8.若主函数中有定义语句:int a[10],b[10],c;,在主函数前定义的fun函数首部为:void fun(int x[]),则以下选项中错误的调用语句是( )。(D)
A. fun(b);
B. fun(&c);
C. fun(&a[3]);
D. fun(b[11]);
解析:fun函数的形式参数应为一个数组,而b[11]是一个整型元素,参数类型不一致,且b[11]已经溢出,故D选项错误。
9.下列数据结构中,属于非线性结构的是( )。(C)
A. 循环队列
B. 带链队列
C. 二叉树
D. 带链栈
解析:线性结构的特点:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可以有两个后件结点,属于非线性结构。
10.以下叙述中正确的是( )。(C)
A. 转义字符要用双引号括起来,以便与普通的字符常量区分开
B. 字符常量在内存中占2个字节
C. 字符常量需要用单引号括起来
D. 字符常量是不能进行关系运算的
解析:A选项中,转义字符是以反斜线“\”开头,后跟1个或几个字符;B选项中,字符常量在内存中占1个字节;D选项中,字符常量可以进行关系运算,不能参与数值运算。因此C选项正确。
11.有以下程序:
#include <stdio.h>
main()
{
int i,j;
for(i=1;i<4;i++)
{
for(j=i;j<4;j++)
printf(”%d*%d=%d”,i,j,i*j);
pnnff(”\n”);
}
}
程序运行后的输出结果是( )。(B)
A. 1*1=1 1*2=2 1*3=3
2*1=2 2*2=4
3*1=3
B. 1*1=1 1
本文档预览:3600字符,共9335字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载