admin 管理员组

文章数量: 887021


2024年2月18日发(作者:中国最大的编程网站)

合肥学院计算机C语言期末(考试时间120分钟,总分150分)准考证号:_________________________姓名:__________________________一、单项选择题

(共20题,每题2分,共计40分)(

)1、下列符号中,可以作为变量名的是________。A、+cB、*XC、_DAYD、next-day【答案】C(

)2、有如下程序 int a[10]={ 1,2,3,4,5,6,7,8,9,10 },*p=a; 则数值为9的表达式是________。A、*P+9B、*(P+8)C、*P+=9D、P+8【答案】B(

)3、设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是________。A、b=1.0/aB、b=(float)(1/a)C、b=1/(float)aD、b=1/(a*1.0)【答案】D(

)4、以下叙述中正确的是________。A、逻辑"或”(即运算符||)的运算级别比算术运算要高B、C 语言的关系表达式:0<x<10 完全等价于:(0<x)&&(x<10)C、逻辑"非”(即运算符!)的运算级别是最低的D、由&&构成的逻辑表达式与由||构成的逻辑表达式都有“短路”现象第1/13页

【答案】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+%dn", a, b, d); }}A、a+bB、a-bC、a*bD、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,%dn",k,a[k]);}A、k=p第2/13页

B、*k=p-sC、k=p-sD、*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 %fn", n, x);}A、2 20.000000B、100,20.000000C、2 40.000000D、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、标识符不能以下划线作为第一个字符第3/13页

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

1B、1000C、0000D、第4/13页

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→YZB、若X→Y,Y'包含Y,则X→Y'C、若X→Y,Y→Z,则X→ZD、若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+qB、p-qC、p*q第5/13页

D、p%q【答案】B【解析】本题考核指针的运算。C语言中,指向同一字符串的指针之间能且只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。(

)15、设有如下程序段:union{ int i; char c;} a;a.i=12;a.c='a';printf("n%d",a.i);这段程序执行后,屏幕输出的结果是………………………………………( )A、12B、97C、65D、A【答案】C(

)16、运行下面程序时,从键盘输入字母a,则输出结果是________。

#include<stdio.h>main()

{ char ch; ch=getchar(); switch(ch)

{ case'a':printf("aaaan"); case'b':printf("bbbbn"); default:printf("ccccn"); }}A、AAAAB、AAAA BBBBC、AAAA BBBB CCCCD、AAAA CCCC【答案】C【解析】第6/13页

【解析】本题考查switch语句。因为ch=A,所以第一个switch语句,执行ease'A'后面的语句,输出AAAA,没有遇到break语句,所以接着再执行case'B'和default,分别输出BBBB和CCCC。(

)17、以下对 c 语言中共用体类型数据的叙述正确的是______。A、可以对共用体变量名直接赋值B、一个共用体变量中可以同时存放其所有成员C、一个共用体变量中不可以同时存放其所有成员D、共用体类型定义中不能出现结构体类型的成员【答案】C(

)18、程序片段:short i=65536; printf("%dn",i);的输出结果是________。A、65536B、0C、有语法错误,无输出结果D、-1【答案】B【解析】short类型的取值范围是-32768~32767,再加1时发生溢出,变为0。(

)19、下述对c语言字符数组的描述中错误的是________。A、字符数组可以存放字符串.B、字符数组中的字符串可以整体输入、输出.C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值.D、不可以用关系运算符对字符数组中的字符串进行比较.【答案】C(

)20、若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是________。

struct stu

{ int i; int name;} st,*p;p=&st;A、siB、*iC、(*.i第7/13页

D、p->i【答案】B【解析】本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式即(*p).i和 p->i。二、判断题

(共10题,每题2分,共计20分)(

)1、空语句什么都没有

【答案】错误(

)2、判断一个数是否为偶数,可以通过%运算来实现

【答案】正确(

)3、关系表达式的值是一个逻辑值,即"真"或"假",并且用0表示"假",用1表示"真"。

【答案】正确(

)4、do-while 语句构成的循环至少执行一次

【答案】正确(

)5、宏定义是用宏名来表示一个字符串,在宏代换时以该字符串取代宏名。

【答案】正确(

)6、c语言中简单变量作为实参时,它和对应的形参之间的数据传递方式是双向值传递。

【答案】错误(

)7、一个c源程序可由一个或多个函数组成。( )

【答案】正确(

)8、c程序可以省略main( )函数。

【答案】错误(

)9、使用strcpy(字符数组,字符串)函数时,字符串后面的'0'并没有一起拷贝到字符数组中。

【答案】错误(

)10、c语言程序只能有一个文件。

【答案】错误第8/13页

三、填空题

(共5题,每题4分,共计20分)1、以下程序的输出结果是________。main(){ int x; printf("%dn",(x=2*4,x+5));}

【答案】132、已知t=5,则表达式"t-=t+=3"的值是______。

【答案】03、符合结构化原则的三种基本控制结构是:选择结构、循环结构和 ________ 。

【答案】['顺序结构']4、在scanf函数中,用符号______表示变量的地址。

【答案】&5、在c语言中,二维数组元素在内存的存放顺序是________.

【答案】['按行存放']四、程序分析题

(共4题,每题5分,共计20分)1、写出下列程序的运行结果。main()

{ int n; for(n=3; n<=10; n++)

{ if(n%6==0) break; printf("%d",n); }}

【答案】3 4 5第9/13页

2、以下程序的运行结果是________。main()

{ int a = 2, b = 3, c; c = a; if (a > b) c = 1; else if (a == b) c = 0; else c = -1; printf("%dn", c);}

【答案】-13、有以下程序main( )

{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf("%dn",x);}执行后输出结果是 ________。

【答案】['–4']4、以下程序输出x,y,z三个数中的最小值,请填空使程序完整___________。main ()

{ int x=4,y=5,z=8 ; int u,v; u = x < y ?_______; v = u < z ?_______; printf ("%d",v);}

【答案】['x:y', 'u:z']五、编程题

(共3题,每题分值不等,共计50分)1、我国古代有一种回文诗,倒念顺念都有意思,例如“人过大佛寺”,倒读起来便是“寺佛大过人”。还有经典的对联“客上天然居,居然天上客”。此种例子举不胜举。在自然数中也有第10/13页

类似情形,比如1991就是一个很特殊的四位数,从左向右读与从右向左读竟是完全一样的,这样的数称为“回文数”。编程序输出1到10000内的所有回文数并统计个数。 (本题12分)【答案】#include #include void main(){ int i,oldi,newi,t,count=0; for(i=1;i<=10000;i++) { //以下代码用于产生i的逆序数 newi=0; oldi=i; do { t=oldi%10; oldi=oldi/10; newi=newi*10+t; }while(oldi!=0); //如果产生的逆序数跟原数相同刚说明是回文数 if(newi==i) {printf("%8d",i); count++; } } printf("n共有%d个!n",count);}2、编写程序:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。 (本题18分)【答案】#include<stdio.h>#include<stdlib.h>#include<string.h>

// 删除字符串中指定字母函数char* deleteCharacters(char * str, char * charSet){ int hash [256]; if(NULL == charSet) return str; for(int i = 0; i < 256; i++) hash[i] = 0; for(int i = 0; i < strlen(charSet); i++) hash[charSet[i]] = 1; int currentIndex = 0;第11/13页

for(int i = 0; i < strlen(str); i++) { if(!hash[str[i]]) str[currentIndex++] = str[i]; } str[currentIndex] = '0'; return str;}

int main(){ char s[2] = "a"; // 要删除的字母 char s2[5] = "aca"; // 目标字符串 printf("%sn", deleteCharacters(s2, s)); return 0;}3、给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。输出格式:在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。输入样例:3Programming in C 21.5Programming in VB 18.5Programming in Delphi 25.0输出样例: 25.00, Programming in Delphi 18.50, Programming in VB (本题20分)【答案】#include struct message{ char name1[30]; char name2[30]; char name3[30]; double price;第12/13页

} ; struct message d[10]; int main() { int N; scanf("%d",&N); int i,j; for(i=0;id[j].price) { min=d[j].price; t=j;} if(max


本文标签: 字符串 输出 数组 变量 本题