C语言程序设计(2018-2019学年第一学期测试卷)

一、选择

1.
函数调用,把数组名作为函数参数。
涉及到函数调用时 实参和形参的问题。
我们知道,在c语言中,常量,变量,指针,数组,都可以作为参数,传递到函数中。

值传递引用传递
常量、变量指针、数组
实参和形参各自开辟不同的内存单元形参不占内存单元,形参指向实参的首地址
改变形参不会影响实参的值修改实参会影响形参,修改形参会影响实参

常量和变量的传递,属于值传递,实参和形参各自开辟不同的内存单元,改变形参不会影响实参的值
指针和数组,则是属于引用传递,形参不占内存单元,形参指向实参的首地址,修改实参会影响形参,修改形参会影响实参,做到了双向值传递。

选A

2.
C
注意看题,题目说在一个函数中的复合语句中。复合语句,就是带有 { }的代码,c语言的{ }限定函数和变量的作用域,所以选C,局部变量,只在本复合结构中有效。
3
B
main函数是c程序的总入口,都是从这个地方开始调用用户代码,在函数中可以定义函数,但一般在c语言中,都是在函数外进行定义。
4
看代码,求输出的问题。
main中的语句分别是
定义一个整型变量i,一个整型数组a,a的大小是10。(也就是说a这个数组中可以存是个像i一样的整型变量)。
做一个循环,循环定义i最初为9,条件是i>=0,每循环一次i就减一,每循环一次还要执行以下后面的语句,即a[i]=10-i;
那么
第一次
i=9,a[9]=1;
i=8,a[8]=2;

i=0,a[0]=10;
所以,a[2]=8;a[5]=5;a[8]=2;
选C
5
选B
char 类型为字符型,所定义的变量 只能是单个字符,比如’a’。
6
做一个循环,5次
每次都执行一遍,s=s*10+a[i];
那么,

//第一次
i=0,s=0*10+a[0];s=0+1=1;
//第二次
i=1,s=1*10+a[1];s=10+2=12;
i=2,s=0*10+a[0];s=12*10+3=123;
i=3,s=0*10+a[0];s=1230+4=1234;
i=4,s=0*10+a[0];s=1230+4=12345;

所以选A,没有空格
7
考察运算符优先级的问题,逻辑运算符优先级低于算术运算符;
首先x=y=z=1;连等赋值,这三个变量均被赋值为1;
所以式子看成
t= (++x) || (++y&&++z);因为式子最外面是逻辑运算,那么t最后的值要么是true要么是false,转换成int类型的话就是1和0.

|| 如果左边的值不为0,那么后面的代码就不会执行。
++x,先把x自增1,x=2,也就是x不等于0,那么后面代码就不执行,t等于true,即等于1.
选C
8
仔细看大括号里用大括号分开成了多少项,数组大小为10.
选A
9
C
10
if只和最近 的else对应。
C

二、填空

:1.
第一个空,初始化sum的数据,

sum=0;

第二个空,在循环内,n每一次都加1,一直到n>m;那么每次只要把n的值加到sum上就可以了。

sum=sum+n;或者
sum+=n;

:2.求一维数组中素数的和。
要做到遍历数组,找出素数,加起来求和。
素数,就是大于1,因数只有1和他本身的数。
第一个空,初始化s,

s=0;

第二个空,

a[i]

此时是满足是素数条件,那么只要把当前的a[i]加到s中就可以了

三、结果分析

:1.
考察循环、
第一次
num=0,满足num<=2,那么num++;此时num=1
num=1,满足num<=2,那么num++;此时num=2
num=2,满足num<=2,那么num++;此时num=3
num=3,不满足num<=2,终止循环,输出num。等于

3

:2.
考察switch事件,
注意case语句之后的break;如果有break,那么switch语句就结束,如果没有,那么下一个case也要执行。
当键盘输入A时,进入switch语句,判断是否满足case ‘A’,满足,那么执行printf语句,打印A;后面没有break,继续下一个语句的代码,这个时候下面的就不用判断是否满足case,只管执行,遇到break就跳出来。那么B也会被打印。然后遇到break,跳出。
结果是

AB

:3.
考察dowhile循环语句
dowhile 和while的区别是,dowhile不管满不满足条件,都先执行一遍里面的代码;while是先判断满不满足条件,满足才执行。
sum=0,i=1,满足i<=10,那么执行sum=1,i=2;
sum=1,i=2,满足i<=10,那么执行sum=sum+i=1+2=3,i=3;
sum=3,i=3,满足i<=10,那么执行sum=6,i=4;
sum=6,i=4,满足i<=10,那么执行sum=10,i=5;
sum=10,i=5,满足i<=10,那么执行sum=15,i=6;
sum=15,i=6,满足i<=10,那么执行sum=21,i=7;
sum=21,i=7,满足i<=10,那么执行sum=28,i=8;
sum=28,i=8,满足i<=10,那么执行sum=36,i=9;
sum=36,i=9,满足i<=10,那么执行sum=sum+i=36+9=45,i=10;
sum=45,i=10,满足i<=10,那么执行sum=sum+i=55,i=11;
sum=55,i=11,不满足,退出;
sum=55;
其实看出规律之后就可以自己算了,1+2+3+…+10=11*5=55;

55

:4.

1 2 3 5
8 13 21 34

注意转义字符“\n”代表换行 ,所以有两行。
:5.

result=3

printf是打印函数,引号里 的字符串要照写下来,%d 要替换成result的值,这个值经过调用sub函数得来,6-3=3。
:6.

r=15

:7.
do while循环
n=26;
num=26;
带入到函数中,进行循环
k=1;
k*=num%10;百分号运算是求余运算。这一步可以看成是 k=k*(num%10)=1*(26%10)=16=6;
num/=10;除法运算,c语言中,除法运算只会得到整数。所以,这一步num=num/10=26/10=2;
判断num是否不等于0,满足。继续
k=6;
k=6
2=12;
num=2/10=0;
判断是否满足条件,不满足。

return k;k这个时候等于12;
所以打印结果:

12

:8.
输入3,调用函数,发起循环,从1开始循环,每次循环完加一,要保证不能大于3;
所以循环三次,i分别是1,2,3
那么
f=11=1;
f=1
2=2;
f=2*3=6;
fac函数返回6;s=fac(j);那么s就等于6;
j是3;
打印结果:

3!=6
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
说明:答案必须填写在答题卡的相应位置上,否则不得分。 1.C语言中字符型(char)数据在内存中的存储形式是________。 A、原码 B、反码 C、补码 D、ASCII码 2.C语言中基本的数据类型包括________。 A、整型、实型、逻辑型 B、整型、实型、字符型 C、 整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 3.在C语言中,int类型数据在内存中占用________。 A、2字节 B、4字节 C、由编译系统决定 D、由用户决定 4.运算符有优先级,C语言中关于运算符优先级的正确叙述是________。 A、逻辑运算符高于算术运算符,算术运算符高于关系运算符; B、算术运算符高于关系运算符,关系运算符高于逻辑运算符; C、算术运算符高于逻辑运算符,逻辑运算符高于关系运算符; D、关系运算符高于逻辑运算符,逻辑运算符高于算术运算符。 5.下面关于C语言语句的叙述,错误的是________。 A、C语言一行可以允许写多条语句; B、C语言语句用分号结束; C、语句一行写不下时,可以用逗号换行 ; D、语句一行写不下时,可在任意一空格处回车换行 。 6.下面数据中不属于字符型常量的是________。 A、“\n” B、‘\0’ C、‘A’ D、‘\t’ 7.11.以下选项中,当x为大于1的奇数时,值为0的表达式__________ 。 A、 x%2==1 B、 x/2 C、x%2!=0 D、x%2==0 8.C语言源程序名的后缀是__________ 。 A 、 .exe B、 .C C、 .obj D、 .cp 9.设所有变量均为int型,则表达式(a=5,b=2,b++,a-b)的值是________。 A、7 B、8 C、6 D、2 10.若有说明语句:int a;float b;,以下输入语句正确的是________。 A、scanf("%f%f",&a,&b); B、scanf("%f%d",&a,&b); C、scanf("%d,%f",&a,&b); D、scanf("%6.2f%6.2f",&a,&b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值