广工05-1-C语言试卷B
【C语言基础知识】 1. 变量命名规则:在C语言中,合法的变量名由字母、数字和下划线组成,并且不能以数字开头。选项A中的`xY_0`是合法的,而`long`和`int`是保留关键字,不能作为变量名,选项D中的`6K`因为以数字开头而不合法。 2. `%d`、`%u`、`%x`、`%o`是C语言中printf函数的格式化输出符号。对于整型变量,`%d`用于十进制输出,`%u`用于无符号十进制输出,`%x`用于十六进制输出,`%o`用于八进制输出。已知`int a = -1;`,在大多数系统中,`int`是带符号的16位整数,因此`a`的无符号十六进制表示为`ffff`,八进制表示为`177777`。所以选项D是正确的输出。 3. 浮点数运算:在C语言中,浮点数运算会进行精度丢失。表达式`x=2,y=x+3/2`中,由于`3/2`在整数除法中结果为1,`y`将被赋值为2,而不是3.5。因此,`x`将保持其初始值2,所以选项C是正确答案。 4. 逻辑与(&&)和赋值操作:在C语言中,逻辑与操作符`&&`具有短路特性,意味着如果左侧表达式为假,右侧不会被执行。因此,`a=100`会被赋值,`b=0`也会被赋值,而`c=200`不会执行。由于逻辑与的结果只关心是否全为真,所以`x`最终为0。因此,选项A是正确答案。 5. 赋值语句:在C语言中,合法的赋值语句包括简单赋值(如`x=100`)、复合赋值(如`x+=10`)以及条件赋值(如`x=a>b? a : b`)。选项B的`d--`是一个递减操作,不是赋值语句;选项C的`x+y;`不是一个赋值语句,因为它没有赋值操作符;选项D尝试将表达式的结果强制转换为`int`类型并赋值给`c`,是合法的。所以,选项D是合法的赋值语句。 6. 字符串初始化:C语言中,字符串必须以空字符`\0`结尾。选项A和D的字符串长度不足,不足以容纳末尾的空字符,因此是非法的初始化。选项B和C是合法的字符串初始化方式。 7. 格式化输出:`printf("%2d\n",a)`会尝试输出一个宽度为2的整数,不足部分会自动填充空格。如果`a`的值为1234,它将按默认宽度输出,不考虑`%2d`,所以选项C的"1234"是正确答案。 8. 函数:函数可以在函数体内调用自身,这称为递归,选项A错误。没有返回值的函数确实需要声明为`void`类型,选项B正确。函数可以在任何其他函数内部调用,不仅仅是在`main()`中,选项C错误。函数如果没有`return`语句,但其所在作用域有返回值类型,编译时会报错,选项D错误。 9. 控制结构:`break`语句可以用于退出`for`、`while`和`do-while`循环,但不能用于跳出`goto`与`if`组成的循环,因为`goto`语句本身不受`break`控制。选项D是正确答案。 10. 指针赋值:指针`p`指向`i`,要使`i`等于`j`的值,应该使用`*p=j;`。选项B尝试将`j`的地址赋给`*p`,这不正确;选项C尝试让`i`等于`j`的地址,也不正确;选项D的`**p`等价于`*(*p)`,即解引用`p`,再解引用得到的值,同样不正确。选项A是正确的赋值语句。 【填空题答案】 1. `3<5&&5<7` 的值为 `1`(真) 2. `!(2<=10)` 的值为 `0`(假) 3. `!5||(4>>10)` 的值为 `1`(真) 4. `!(2<4)||(5<3?0:10)` 的值为 `1`(真) [2] 未提供具体表达式,无法给出答案 [3] `3<=a<=5`是一个不合法的比较表达式,因为C语言不支持连续比较。但若当作两步比较处理,`3<=a`和`a<=5`都是真,那么`if (3<=a<=5)`等同于`if (1)`,会执行`printf(“a+1=%d”,a+1)`。所以输出为`a+1=13` [4] 该段代码会打印除了'a'之外的所有字符,输入`basketball`,输出`basketball`的非'a'字符:`bsektbl` [5] 存储类型分为静态存储(static storage duration)和动态存储(dynamic storage duration) [6] 三种基本程序结构是顺序结构、选择结构(条件分支)和循环结构 [7] 代码将字符串"Hello,you"的第五个字符(索引从0开始)设为'\0',因此输出结果是`Hello` [8] `strlen`计算字符串的长度,不包括末尾的空字符。所以`strlen("world!")`为6,`strlen("e:\\test.txt")`为12。运行结果为`6,12` [9] `x=y=z=100`,`z+=(x++)+(--y)`先计算`x++`(此时`x`为100,之后变为101),然后`--y`(此时`y`为100,之后变为99),加法操作中,`x++`和`--y`都作为100处理。因此`z`增加201,最后`z`为301。`x`变为101,`y`变为99。 [10] `p+1`指向`ls[2]`的第二个字符,即't'。因此输出`word=two` 【程序分析题答案】 [1] 语句`w=++x&&++y||++z;`中,`++x`使`x`变1,`++y`使`y`变1,所以`++x&&++y`为真(1),`||`操作符的短路性质使得`++z`不会执行。因此,`w=1`,`x=1`,`y=1`,`z=0`。打印结果是`x=1, y=1, z=0, w=1` [2] 未提供完整语句,无法给出答案 以上内容涵盖了C语言的基础知识,包括变量命名、运算符优先级、类型转换、字符串处理、函数、循环、指针以及表达式求值等方面。这些知识点是C语言学习的基础,对于理解程序的运行机制至关重要。
剩余6页未读,继续阅读
- 粉丝: 1
- 资源: 78
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助