一、试题

程序设计入门—C 语言
期中测评

试题下载地址:

http://nos.netease.com/edu-lesson-pdfsrc/217E194E46A6595A3F55438033749061-1519633077802?Signature=Anos05NiH%2B7uB0aMTm87OqfWlOz38TBUVYhQnBfoNtY%3D&Expires=1535260083&NOSAccessKeyId=7ba71f968e4340f1ab476ecb300190fa&download=%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%85%A5%E9%97%A8-C%E8%AF%AD%E8%A8%80-week4%E6%9C%9F%E4%B8%AD%E6%B5%8B%E8%AF%84.pdf
1 在代码:
while ( !e )
中,!e 等价于:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
2. 以下代码片段的输出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(“*”); break;
case 2: printf(“#”);
}
}
A.****## B. ***# C. *# D. ****# E. ****
3. 下列可用于 C 语言程序标识符的一组是(名字间以逗号分隔):(多选)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
4. 对于以下代码:
int i,j=6;
以下哪句话是对的?
A.i 和 j 的初始值都是 6 B. i 被初始为 0,而 j 是 6
C. i 不会被初始化,而 j 是 6 D. 不能通过编译
5. 对于以下代码:
int i;
scanf("%d", &i);
i %= 4
执行后,i 会有几种可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
6. 对于以下代码:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句话是对的?(多选)
A. 打印出"hello" B. 无法编译 C. 打印出"bye-bye"
D. 不能通过编译 E. 打印出"hello bye-bye"
7. 对于以下代码:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句话是对的?
A. 打印出 5 B. 因为 while(0),无法编译
C. 打印出 6 D. 打印不出东西
8. 对于以下代码:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循环后,i 的值是多少?
A.11 B. 9 C. 10 D. 不确定
9. 下列程序段输出结果为:
int x=1, y=12;
printf(“%d”,y*x++);
A.20 B. 10
C. 24 D. 12
10. 对
for(表达式 1;;表达式 3)
可理解为
A. for(表达式 1;表达式 1;表达式 3) B. for(表达式 1;1;表达式 3)
C. for(表达式 1; 表达式 3;表达式 3) D. for(表达式 1;0;表达式 3)
11. 以下表达式
x&&1
用在 if 的条件中时,和哪个是等价的(多选)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x

二、分析及答案

程序设计入门—C 语言
期中测评
1 在代码:
while ( !e )
中,!e 等价于:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
 
* 只有当e的逻辑为false时这个表达式才成立,!false=true  
* 而对于整数e而言,任何非0的整数值都是逻辑的true,换句话说只有整数0才代表逻辑false,因此!e换一个写法既是e == 0
因此选 A
 
2. 以下代码片段的输出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(“*”); break;
case 2: printf(“#”);
}
}
A.****## B. ***# C. *# D. ****# E. ****
 
表格模拟:
j     i    循环条件   i/j       输出
4    4    4<=8    1    *
4    5    5<=8    1    *
4    6    6<=8    1    *
4    7    7<=8    1    *
4    8    8<=8    2    #
4    9    9<=8    break    break
****#
因此选D
 
3. 下列可用于 C 语言程序标识符的一组是(名字间以逗号分隔):(多选)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
 
知识点:
* c语言是大小写敏感的语言
* 标识符以字母或下划线开头,有数字字母下划线构成
* 不能使用c语言关键字(保留字)
 
A 符合
B 符合,file不是c语言的关键字
C 不能有关键词(保留字)void
D -abc "-"减号不能出现在标识符中
E 2_a 不能以数字开头
因此选 A B
 
 
4. 对于以下代码:
int i,j=6;
以下哪句话是对的?
A.i 和 j 的初始值都是 6 B. i 被初始为 0,而 j 是 6
C. i 不会被初始化,而 j 是 6 D. 不能通过编译
 
这个语句做了两件事情:
1. 声明了变量i,和j
2. 对j赋初始值6
 
因此选C
 
5. 对于以下代码:
int i;
scanf("%d", &i);
i %= 4
执行后,i 会有几种可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
 
用户输入一个整数i,然后i对于4做取余运算。
这里i可能是正整数0或负整数
对于取余4而言,取余的结果可能是 0、1、2、3、-1、-2、-3
题目问的是有几种可能,那么一共是7种
因此选:A
 
 
6. 对于以下代码:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句话是对的?(多选)
A. 打印出"hello" B. 无法编译 C. 打印出"bye-bye"
D. 不能通过编译 E. 打印出"hello bye-bye"
 
* 在没有大括号的情况下这里if后面多出来的分号会导致if和else无法联接,多个分号代表一个空的语句,if在没有大括号的情况下只会和if后面第一条语句结合形成一个if判断分支,如果加赛一条语句,if就是一个独立的判断了,所以不能和后面的else联接上了。
* 我们建议在所有的if分支的后面都加上大括号
因此选 B D
 
 
7. 对于以下代码:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句话是对的?
A. 打印出 5 B. 因为 while(0),无法编译
C. 打印出 6 D. 打印不出东西
 
* do-while循环至少会执行一次
* i--是i减以前的值,先计算后减,而--i是i减以后的值,先减后运算。
* 0完全等价于逻辑false,但是整数1只是逻辑true的一个子集,任何非零整数都为逻辑true
i的初始值为6,第一次打印为6,i--是减以前的值因此为6,printf执行完后i为5,while条件0始终为false因此循环体只会执行一次。
因此选 C 
 
8. 对于以下代码:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循环后,i 的值是多少?
A.11 B. 9 C. 10 D. 不确定
 
我们知道当i < 10 不成立时循环才会终止,也就是说i>=10 那么步进1的情况下i的临界值就是10
因此选 C
 
 
9. 下列程序段输出结果为:
int x=1, y=12;
printf(“%d”,y*x++);
A.20 B. 10
C. 24 D. 12
 
我们知道++、--的优先级要低于四则运算的,并且这是一个后置的自增,++i是加1以前的值,先参与运算在做自增。
1*12  输出12 ,然后x自增一,x=2,y不变,当然我们并不推荐这样的写法,不利于阅读,正确的写法可以把x++拆分到下一个语句执行:
printf(“%d”,y*x);
x++;
 
因此选D
 
 
10. 对
for(表达式 1;;表达式 3)
可理解为
A. for(表达式 1;表达式 1;表达式 3) B. for(表达式 1;1;表达式 3)
C. for(表达式 1; 表达式 3;表达式 3) D. for(表达式 1;0;表达式 3)
 
这个循环的条件判断被省略掉了,只有初始化和步进的语句,因此也可以当做是一个终止条件始终为1的循环。
也可以用for改写为:for(表达式 1;1;表达式 3);  或 while改写  表达式 1;   while(1){表达式 3}; 当然这个循环如果循环体内部没有break等跳出循环结构的语句的话就是一个死循环。如果有明确的终止条件,我们还是推荐将循环继续条件写在循环体规定的地方,便于阅读。
因此此题选B
 
11. 以下表达式
x&&1
用在 if 的条件中时,和哪个是等价的(多选)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x
 
这里x&&1右边的1始终成立,因此可以看成 x
当x的值不为0逻辑则为true,因此等价于 x != 0 或者 x 
x == 1 只是逻辑true x取值范围的一个子集,因此 x == 1 不等价于 x != 0 或者 x
因此选 C E
 
我们来运行下面一段代码:
```c
#include <stdio.h>
 
void main(int argc, char *argv[])
{
 
 if (-1)
 {
  printf("-1\n");
 }
 
 if (0)
 {
  printf("0\n");
 }
 
 if (1)
 {
  printf("1\n");
 }
 
 if (2)
 {
  printf("2\n");
 }
}
 
```
测试样例:
```
-1
1
2
 
--------------------------------
```
 
我们发现在逻辑表达式的判断中, 当x取非0的任意值时,x会被转换为逻辑true。当然我们并不推荐这种做法,比如你要判断x是否大于0,可以用if(x)来做这件事,看起来很聪明,但是并不好理解,推荐的做法是  int isPositive = x > 0;  if(isPositive)

程序设计入门-C语言基础知识-翁恺-期中测试的更多相关文章

  1. 程序设计入门-C语言基础知识-翁恺-第一周:简单的计算程序-详细笔记(一)

    目录 第一周:简单的计算程序 1.1 第一个程序 Hello World! 1.2 变量 1.3 计算 1.4 编程作业及课后讨论 第一周:简单的计算程序 1.1 第一个程序 Hello World! ...

  2. 程序设计入门-C语言基础知识-翁恺-第七周:指针与字符串-详细笔记(七)

    目录 第七周:指针与字符串 7.1 指针初步 7.2 字符类型 7.3 字符串 7.3 课后练习 第七周:指针与字符串 7.1 指针初步 sizeof 是一个运算符,给出某个类型或变量在内存中所占据的 ...

  3. 程序设计入门-C语言基础知识-翁恺-第五周:函数-详细笔记(五)

    目录 第五周:函数 5.1 函数 5-2 使用函数 5.3 课后习题 第五周:函数 5.1 函数 什么是函数? 函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值. 函数声明语法 返回 ...

  4. 程序设计入门-C语言基础知识-翁恺-第四周:循环控制-详细笔记(四)

    目录 第四周:循环控制 4-1 for循环 4-2 循环控制 各运算符优先级(图) 4-3 课后习题 4-4 讨论题 第四周:循环控制 4-1 for循环 for循环像一个计数循环:设定一个计数器,初 ...

  5. 程序设计入门-C语言基础知识-翁恺-第二周:简单的计算程序-详细笔记(二)

    目录 第二周:判断 2.1 比较 2.2 判断 2.3 课后习题 第二周:判断 2.1 比较 简单的判断语句: if(条件成立){ //执行代码 } 条件 计算两个值之间的关系,所以叫做关系运算 关系 ...

  6. 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)

    目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...

  7. 程序设计入门-C语言基础知识-翁恺-第三周:循环-详细笔记(三)

    目录 第三周:循环 3.1 循环 3.2 循环计算 3.3 课后习题 3.4 讨论题(不需要掌握) 第三周:循环 3.1 循环 while循环 语法: while(条件表达式){ //循环体语句 } ...

  8. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  9. 程序设计入门——C语言 习题汇总

    <img width="108" height="40" alt="浙江大学" src="http://imgsize.ph ...

随机推荐

  1. Spring Boot 之restful风格

    步骤一:restful风格是什么? 我们知道在做web开发的过程中,method常用的值是get和post.可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富 ...

  2. UVA 1393 Highways(数学思想)

    题意:给你n.m(n,m<=200),问你有多少条非水平.非垂直的直线有多少条经过至少两个点 题解:我们需要枚举的是只画一条线的矩形,对于大小a*b的矩形必须保证gcd(a,b)=1才能不重复 ...

  3. 【分类】AlexNet论文总结

    目录 0. 论文链接 1. 概述 2. 对数据集的处理 3. 网络模型 3.1 ReLU Nonlinearity 3.2 Training on multiple GPUs 3.3 Local Re ...

  4. Python学习札记(十二) Function3 函数参数一

    参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...

  5. MySQL行锁、间隙锁、Next-Key锁

    InnoDB是一个支持行锁的存储引擎,它有三种行锁的算法: Record Lock:行锁,单个行记录上的锁. Gap Lock:间隙锁,锁定一个范围,但不包括记录本身.GAP锁的目的,是为了防止幻读. ...

  6. Java虚拟机组成详解

    导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心”,想忘记都难. Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我 ...

  7. Windows command line monitor

    一个可以查看当然系统中进程参数的小工具 下载地址

  8. Centos7 使用Dockerfile 制作自己的Dotnetcore程序镜像

    准备Centos7环境及Docker环境 从Docker hub拉取 Microsoft/dotnet 基础镜像(可以使用国内加速) 向Centos7指定目录上传Dotnet Core程序,目录: / ...

  9. tkinter模块常用参数

    tkinter模块常用参数   1.使用tkinter.Tk() 生成主窗口(root=tkinter.Tk()):root.title('标题名')    修改框体的名字,也可在创建时使用class ...

  10. lspci能看到ifconfig -a看不到网卡

    随着宽带技术的快速发展,服务器使用万兆网卡的概率越来越高.最近装了几台服务器都用的万兆网卡,为了图便宜,网卡和模块都是淘宝上买的,这部还真遇到不少问题. 我的服务器都是centos6.4 64位的,网 ...