合肥学院
计算机C语言期末
(考试时间120分钟,总分150分)
准考证号:_________________________姓名:__________________________一、单项选择题(共20题,每题2分,共计40分)
()1、下列符号中,可以作为变量名的是________。
A、+c
B、*X
C、_DAY
D、next-day
【答案】C
()2、有如下程序 int a[10]={ 1,2,3,4,5,6,7,8,9,10 },*p=a; 则数值为9的表达式是________。
A、*P+9
B、*(P+8)
C、*P+=9
D、P+8
【答案】B
()3、设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是________。
A、b=1.0/a
B、b=(float)(1/a)
C、b=1/(float)a
D、b=1/(a*1.0)
【答案】D
()4、以下叙述中正确的是________。
A、逻辑"或”(即运算符||)的运算级别比算术运算要高
B、C 语言的关系表达式:0<x<10 完全等价于:(0<x)&&(x<10)
C、逻辑"非”(即运算符!)的运算级别是最低的
D、由&&构成的逻辑表达式与由||构成的逻辑表达式都有“短路”现象
【答案】D
【解析】
B 选项中,(x>0)&&(x<10)的值是 1 或 0,条件是 x>0 并且 x<10但是 0<x<10 这种写法的结果任何时候都是 1;
C 选项中,逻辑“非”(即运算符!)的运算级别是最高的;A 选项中,算术运算符优先级较高,关系和逻辑运算符优先级较低。因此
D 选项正确。
()5、下面程序的功能是将从键盘输入的偶数写成两个素数之和。请选择填空。
#include <stdio.h>
#include <math.h>
main()
{
int a, b, c, d;
scanf("%d", &a);
for (b = 3, b <= a / 2; b += 2)
{
for (c = 2; c <= sqrt(c); c++) if (b % c == 0) break;
if (c > sqrt(b)) d = ________;
else continue;
for (c = 2; c <= sqrt(d); c++) if (d % c == 0) break;
if (c > sqrt(d)) printf("%d=%d+%d\n", a, b, d);
}
}
A、a+b
B、a-b
C、a*b
D、a/b
【答案】B
()6、以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空: #include<stdio.h> findmax(int*s,int t,int*k)
{
int p;
for(p=0,*k=p;p<t;p++) if(s[p]>s[*k])________;
}
main()
{
int a[10],i,k;
for(i=0;i<10;i++)scanf("%d",&a[i]);
findmax(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
A、k=p
B、*k=p-s
C、k=p-s
D、*k=p
【答案】D
【解析】
k是―个指针,它的值是―个地址,要通过它为主函数的变量改变数据,必须使用*p,边样就可以把―个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。
()7、以下程序运行后的输出结果是
main() {
char c;
int n=100;
float f=10;
double x;
x=f*=n/=(c=50);
printf("%d %f\n", n, x);
}
A、2 20.000000
B、100,20.000000
C、2 40.000000
D、100 40.000000
【答案】A
【解析】
对于C语言中的赋值运算符,必须遵循以下规则:赋值运算符的优先级别只高于逗号运算符,比其他任何运算符的优先级都低,并且具有自右向左的结合性。因此先得到变量c的值为50,变量n经过计算结果为2,最后通过变量f的值10和n的值2相乘得到变量x的值,为20.000000。因此选项A)正确。
()8、下列定义数组的语句中不正确的是________。
A、static int a[2][3]={1,2,3,4,5,6};
B、static int a[2][3]={{1},{4,5}};
C、static int a[][3]={{1},{4}};
D、static int a[][]={{1,2,3},{4,5,6}};
【答案】D
()9、关于标识符,下列选项中描述错误的是________。
A、标识符只能由字母、数字和下划线组成
B、标识符不能以下划线作为第一个字符
C、标识符不能以数字作为第一个字符
D、标识符不区分大小写字母
【答案】D
【解析】
标识符区分大小写字母。
()10、以下能正确定义字符串的语句是________。
A、char str[]={′\064′};
B、char str="kx43";
C、char str=";
D、char str[]="\0";
【答案】D
()11、下面程序段的执行结果是________。
#include<stdio.h>
main()
{
int a[5][5],i,j;
for(i=1;i<5;i++) for(j=1;j<5;j++) a[i][j]=(i<j)*(j/i);
for(i=1;i<5;i++) {
for(j=1;j<5;j++) printf("%2d",a[i][j]);
printf("\n");
}
}
A、1111
1111
1111
1111
B、0001
0010
0100
1000
C、0234
0012
0001
0000
D、0000
大一期末c语言必考知识点0000
0000
0000
【答案】C
【解析】
本题使用一个双重循环对―个二维数组的一部分赋值(下标中含0的元素不赋值),赋值表达式是
a[i][j]=(i/j)*(j/i)。因为i和j都是正整数,所以当i大于j时,j/i为0,当i小于j时,i/j为
0,而0乘以任何数都为0,故表达式(i/j)*(j/i)在i和j不相等时的值为0。当i和j相等时,i/j
和j/i的值都为1,所以表达式(i/j)*(j/i)的值为1。故二维数组中的a[1][1]、a[2][2]、 a[3] [3]、a[4][4]被赋为1,其余下标不含0的元素被赋为0。故应该选择C。
()12、下面关于函数依赖的叙述中,不正确的是________。
A、若X→Y,Y→Z,则X→YZ
B、若X→Y,Y'包含Y,则X→Y'
C、若X→Y,Y→Z,则X→Z
D、若XY→Z,则X→Z,Y→Z
【答案】D
【解析】
设R(U)是属性集U上的关系模式,X,Y,Z是U的子集。若对R(U)的任意一个可能的关系r,r中不
可能存在两个元组在X上的属性值相等,而在Y上属性值不等,则称“X函数确定Y”或“Y函数依
赖于X”,记作X→Y,X称为决定因素。根据Armstrong公理系统的三条定律,可以知道:
根据合并律可知选项A正确:
根据增广律可知选项B正确;
根据传递律可知选项C正确。
()13、一个字符的ascii码占用的存储空间为________。
A、2个字节
B、1个字节
C、4个字节
D、8个字节
【答案】B
【解析】
本题考查的知识点是ASCII码占用的存储空间。
[要点透析] ASCII码是一种7位编码,但它存放时必须占全1个字节,也即占用8位,最高位为
0,其余7位表示ASCII码。
()14、设有以下程序段: int a[5]=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是________。
A、p+q
B、p-q
C、p*q
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论