C语言试题

发布 2021-12-28 01:05:28 阅读 7363

9月试卷。

1、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c); 给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是___代表一个空格符)

a、1,2,3《回车》

b、123《回车》

c、1,2, 3《回车》

d、1,2,3《回车》

本题的考查点是scanf()函数的格式输入。

scanf()函数的一般格式:scanf(格式控制,地址列表)。在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格、tab或回车作间隔。

c编译在碰到空格,tab,回车或非法数据(如对"%d"输入"12a"时,a即为非法数据)时即认为该数据结束。如果在"格式控制"字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。本题由于格式控制符中用了逗号,所以在输入数据时,必须在输入的各数据间用逗号分隔,故选项b不正确。

故本题答案为b。

2、有以下程序。

#include <>

main()

int i=5;

doi++;

}while(i!=0);

printf("");

程序的运行结果是___

a、*7b、*3*5

c、*5d、*2*6

本题的考查点是do-while语句的运用。

do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的值为0时循环结束。break的特点:当break出现在循环体中,则在执行break后,跳出本层循环体。

本题执行过程如下:

i=5:不满足条件i%3==1,执行i++,此时i=6;

i=6:不满足条件i%3==1,执行i++,此时i=7;

i=7:满足条件i%3==1,执行内嵌if,判断条件i%5==2,满足,输出"*7",执行break,跳出do循环体,执行"printf("");结束。

故本题答案为a。

3、若有定义语句:int m[ ]i=4; ,则下面对m数组元素的引用中错误的是___

a、m[--i]

b、m[2*2]

c、m[m[0]]

d、m[m[i]]

本题的考查点是一维数组的引用。

一维数组的定义方式为:类型说明符数组名[常量表达式]。其常量表达式表示元素的个数,即数组长度。

元素的下标从0开始,最大下标是元素个数减一。本题定义了一个由5个元素(m[0]到m[4])组成的数组。选项a表示对m[3]的引用;选项b表示对m[4]的引用;由于m[0]的值为5,所以选项c表示了m[5],但由于m数组元素的最大下标为4,所以本引用下标越界;由于m[i]即m[4]的值为1,所以选项d表示对m[1]的引用。

故本题答案为c。

4、若有表达式(w)?(x):(y),则其中与w等价的表达式是___

a、w==1

b、w==0

c、w!=1

d、w!=0

本题的考查点是条件表达式的运算。

条件表达式的一般形式为:表达式1?表达式2:

表达式3,其执行顺序:先求解表达式1,若非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值,若表达式1的值为0(假),则求解表达式3,此时表达式3的值就作为整个条件表达式的值。本题中相当于先判断w的值是否为非0,所以与w等价的表达式是w!

=0。故本题答案为d。

5、以下关于宏的叙述中正确的是___

a、宏名必须用大写字母表示。

b、宏定义必须位于源程序中所有语句之前。

c、宏替换没有数据类型限制。

d、宏调用比函数调用耗费时间。

本题的考查点是宏的概念。

宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母,所以选项a错误;宏命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束,通常,宏命令写在文件开头,函数之前,作为文件的一部分,在此文件范围内有效,而并不必须位于源程序中所有语句之前,所以选项b错误;用宏名代替一个字符串,也就是作简单的置换,宏置换不占运行时间,只占编译时间,而且编译时并不分配内存单元,也不进行值的传递处理。而函数调用则占运行时间(分配单元、保留现场、值传递、返回),所以选项d错误;宏替换可以代替任何数据类型,不受数据类型的限制,所以选项c正确。

故本题答案为c。

6、有以下程序段。

int a,b,c;

a=10; b=50; c=30;

if(a>b) a=b, b=c; c=a;

printf ("a=%d b=%d c=%d",a,b,c);

程序的输出结果是___

a、a=10 b=50 c=10

b、a=10 b=50 c=30

c、a=10 b=30 c=10

d、a=50 b=30 c=50

本题的考查点是条件语句。

本题if条件表达式"a>b"的值为0,所以不执行其后的if语句"a=b,b=c;",直接执行下一条语句"c=a;",故c变量的值为10,所以输出结果为"a=10 b=50 c=10"。

故本题答案为a。

7、c源程序中不能表示的数制是___

a、二进制。

b、八进制。

c、十进制。

d、十六进制。

本题的考查点是c语言的数制表示。

c源程序中的整型常量可用三种形式表示:①十进制数;②八进制数:以0开头的数是八进制数;③十六进制数:以0x开头的数是十六进制数。

故本题答案为a。

8、假定已建立以下链表结构,且指针p和q已指向如图所示的结点:

则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是___

a、(*p).next=(*q).next; free(p);

b、p=q->next; free(q);

c、p=q; free(q);

d、p->next=q->next; free(q);

本题的考查点是链表结构。

本题题面要求删除q所指结点并释放该结点,而选项a中虽然是删除了q所指结点,但并未释放q这个结点,而释放的是p结点,所以选项a错误;选项b是将q的下一结点的地址赋值给指针变量p,这意味着p原来的成员变量内容被q的下一结点的成员变量内容所代替,即原p结点也被删除了,所以选项b错误;选项c相当于将q的所有成员变量内容代替了p的所有成员变量内容,即p结点被删除,所以错误;选项d是将q的下一结点的地址赋值给p的成员next(成员next用于存放一结点的地址),使得p的next成员不再指向q,而是指向q的下一结点,相当于删除了q这个结点,同时用free函数正确释放了q这一结点,所以选项d正确。

故本题答案为d。

9、以下选项中正确的定义语句是___

a、double a;b;

b、double a=b=7;

c、double a=7,b=7;

d、double,a,b;

本题的考查点是语句的定义。

c语言规定,每个语句和数据定义以分号结束,则说明选项a是两条语句,前一条是对变量a作双精度型定义的语句,而后一个"b;"是一个缺少类型的不正确的定义形式,如果是定义多个变量,则应用逗号隔开;当定义多个变量赋同一个值时,不能用等式连写的方式,如选项b的"double a=b=7;"应写成"double a=7,b=7;"所以选项b错误,选项c正确;在定义语句时,类型与变量名之间应用空格分隔,而不是逗号,所以选项d错误。

故本题答案为c。

10、有以下程序。

#include <>

int fun(int a, int b)

if(b==0) return a;

else return(fun(--a,--b));

main()

printf("%d",fun(4,2));

程序的运行结果是___

a、1b、2

c、3d、4

本题的考查点是函数的递归调用。

在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。本题考查的是函数递归调用。首先当a=4、b=2时,调用fun(4,2),不满足条件b==0,继续调用fun函数;此时a=3、b=1,即调用fun(3,1),不满足条件b==0,继续调用fun函数;此时a=2、b=0,满足条件b==0,返回a的值2。

故本题答案为b。

11、计算机能直接执行的程序是___

a、源程序。

b、目标程序。

c、汇编程序。

d、可执行程序。

本题的考查点是c程序的基本概念。

我们把由高级语言编写的程序称为"源程序",由二进制**表示的程序称为"目标程序",由汇编语言编写的程序称为"汇编程序"。对于计算机本身来说,它并不能直接识别由高级语言编写的程序,只能识别和执行由0和1组成的二进制指令。为了把源程序转换成机器能接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句一一翻译成二进制的机器指令,这种具有翻译功能的软件称为"编译程序"。

然后将编译后的目标程序与系统的函数库和其他目标程序连接起来,形成可执行程序由计算机直接执行。

故本题答案为d。

12、以下选项中不能作为c语言合法常量的是___

a、'cd'

b、0.1e+6

c、"\a"

d、'\011'

本题的考查点是c语言的常量。

c语言的常量分为整型常量、实型常量和字符型常量。用单引号(即撇号)括起来一个字符称为字符常量,由于字符常量只能包含一个字符,因此选项a错误;转义字符常量是将反斜杠(\)后面的字符转成另外的意义,选项d表示了一个ascii码为011的八进制数;选项b是用指数形式表示的实型常量。用"e"或"e"后的一个整数表示以10为底的幂数,以这种形式表示的实型常量需注意字母e(或e)之前必须有数字,且e后面的指数必须为整数;用一对双引号括起来的字符序列称为字符串常量,选项c就为一个正确的字符串常量。

故本题答案为a。

13、有以下程序

#include <>

int fun(int (*s)[4],int n,int k)

int m,i;

m=s[0][k];

for(i=1;im) m=s[i][k];

return m;

main()

int a[4][4]=,

printf("%d",fun(a,4,0));

程序的运行结果是___

a、4b、34

c、31d、32

本题的考查点是指向一维数组的指针变量的运用。

在主函数中,定义并初始化了4行4列的二维数组a,并通过调用fun函数,将fun函数中指向一维数组的指针变量s指向了二维数组a的首地址,使得指针变量s与数组a共用同一存储单元。在fun函数中,通过for循环,求得了数组a第0列中最大的值,并赋给m返回主函数。由于数组a第0列的值分别为,故其最大值是31。

C语言试题

鄂州高新技术学校1001班。c语言第二章试题。姓名分数。一 编写程序求出下面的数字表达式的值。每小题8分,共40分 1 v 2 r 3 y x3 3x 7 4 f g 其中g 6.637 10 3 二 设a 6,b 4,编写程序输出下列运算表达式的值,并写出下列运算表达式的结果。每小题5分,共30分...

C语言试题

鄂州高新技术学校1001班。c语言第四章试题。姓名分数。一 编写程序求1 2 3 4 5的值。10分 二 编写程序求1!2!3!4!5!的值。10分 三 编写程序,输入一个数,按相反次序输出。10分 四 编写程序,从键盘上输入10个整数,求其和。10分 五 编写程序,输入两个整数,求它们的最大公约数...

C语言试题

鄂州高新技术学校2011年秋季期末考试。1001班c语言试题。姓名分数。一 填空题 每小题5分,共20分 1 c语言的关系运算符中属于高优先级组的有 低优先级组的有。关系表达式是用关系运算符连接两个表达式组成的式子。2 若a 5,b 4,c 3,则逻辑表达式 a b c 1 b c 2 的值为 1 ...