二级C语言选择题专项强化真题试卷48
选择题
1.在满足实体完整性约束的条件下( )。(A)
A. 一个关系中应该有一个或多个候选关键字
B. 一个关系中只能有一个候选关键字
C. 一个关系中必须有多个候选关键字
D. 一个关系中可以没有候选关键字
解析:实体完整性约束要求关系的主键中属性值不能为空值,因此本题答案为A。
2.有以下程序:
#include<stdio.h>
#include<stdlib.h>
void fun(double*p1,double*p2,
double*s)
{
s=(double*)calloc(1,sizeof(double));
*s=*p1+*(p2+1);
}
main()
{
double a[2]={1.1,2.2),b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf(\\(B)
A. 11.10
B. 1.10
C. 12.10
D. 21.10
解析:函数fun()的功能是用calloc()函数重新分配了1个长度为sizeof(double)的连续空间,并把返回的内存地址赋值给s,之后往新分配的内存中写入数据。由于函数传递过程中形参指针指向的变化不能影响到实参指针的指向,所以函数fun()并不能改变s的指向,*s与a[0]等价,格式输出的结果为1.10,答案选B。
3.以下叙述正确的是( )。(C)
A. 有些算法不能用3种基本结构来表达
B. C语言程序不编译也能直接运行
C. 结构化程序的3种基本结构是循环结构、选择结构、顺序结构 .
D. 如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序
解析:算法的3种基本结构可以表达任何算法,只是不同的实现复杂度不相同,因此A选项错误。C语言是编译型语言,程序必须先编译、链接才能运行,因此B选项错误。C语言是高级程序语言,计算机不能识别除了机器语言以外的任何语言,因此C程序代码转换为机器语言才能在计算机上运行,因此选项D错误。答案为C选项。
4.对于以下函数声明
void fun(int array[4],int*ptr);
以下叙述中正确的是( )。(A)
A. array,ptr都是指针变量
B. 调用fun函数时,实参的值将逐一复制给array
C. 调用fun函数时,array按值传送,ptr按地址传送
D. array是数组,ptr是指针,它们的性质不同
解析:void fun(int array[4],int*ptr);第一个参数虽然是数组类型,但是会退化为指针,并且形参数组的个数没有用。第二个参数是指针,因此实际上两个形参都是指针,传递的都是地址,而不是值。可知选项B、C、D错误。答案为A选项。
5.有以下程序:
#include<stdio.h>
#include<string.h>
typedef struet{char name[9];char sex;float score[2];}STU;
void f(STU a)
{
STU b={\\(D)
A. Zhao,m,85,90
B. Qian,m,85,90
C. Zhao,f,95,92
D. Qian,f,95,92
解析:本题考杏结构体的相关操作以及传值、传址的区别.该题中调用f函数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D正确。
6.设表的长度为20。则在最坏情况下,冒泡排序的比较次数为( )。(A)
A. 190
B. 20
C. 19
D. 90
解析:对长度为n的线性表排序,在最坏情况下,冒泡排序需要比较的次数为n(n-1)/2。本题中n=20,20×(20-1)/2=190。故本题答案为A选项。
7.有以下程序:
#include
main()
{ int a=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
else d=3;
printf(\\(C)
A. 1,1,2,0
B. 0,0,0,3
C. 编译有错
D. 0,1,2,0
解析:本题中if(a=1)b=1;与else d=3;之间多了语句c=2;,所以会出现else语句的位置错误的编译失败提示。
8.以下程序段中的变量已正确定义:
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf(\\(C)
A. *
B. ****
C. *
D. ********
解析:由于内层循环for(k=1;k<3;k++)后面直接跟了空语句“;”,所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个“*”,因此选择C)。
9.设有定义:char s[81];int i=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读人的语句或语句组是( )。
C
解析:字符串的输入不能使用scanf(\\
10.有以下程序段:
int m[2][3],(*p)[3];
p=m;
则以下对m数组元素的引用正确的是( )。(C)
A. (p+1)[0]
B. *(*(p+2)+1)
C. *(p[1]+1)
D. p[1]+2
解析:数组元素a[i][j]可表示为*(a[i]+j),因此,在定义数组m和指针变量p后,*(p[1]+1)表示指向数组m[1][1],因此答案为C选项。
11.有以下程序:
#include
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf(\\(A)
A. 9
B. 8
C. 7
D. 10
解析:题目中静态局部变量a,在静态存储区内分配存储单元,在程序整个运行期间都不释放。所以第一次调用函数执行n+=a++;时a先与n相加在再进行自增。n的值为4,a的值为2,且a变量执行完后空间没有释放。再执行s=s+f(A)时,s的值为4,调用f(A)函数时n的返回值为n=3+2=5,且此时a的值为3了。所以s的值为9。
12.有以下程序:
#include
int k=5;
void f(int*s)
{s=&k;
*s=7;
}
main()
{int m=3;
f(&m);
printf(\\(D)
A. 7,7
B.
本文档预览:3600字符,共8960字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载