【C语言基础知识】
1. `main`函数位置:在C语言中,`main`函数的位置是任意的,可以在程序的任何地方,只要程序能够找到它即可。因此,选项C是正确的。
2. 合法浮点数:在C语言中,合法的浮点数可以包含e或E来表示指数部分,例如1.2e3表示1200。选项B中的`.60 12e-4 -8e5`都是合法的浮点数表示。
3. 条件表达式:条件表达式`a < b ? a : b + 1`在a小于b时返回a的值,否则返回b+1。由于a为-14,b为3,a<b为真,所以返回a,即-14。答案是A。
4. 三目运算符:`n = i < j ? i++ : j++;`这个表达式在i小于j时将i的值赋给n并递增i,否则将j的值赋给n。初始i=1, j=2,所以i小于j,执行i++,i变成2,但此时已经完成了赋值,所以n等于1。因此,i和j的最终值是2和2,选项C是正确的。
5. 字符串比较:在C语言中,字符串比较应使用`strcmp`函数。如果两个字符串相等,`strcmp(s1, s2)`的结果为0,所以正确答案是D。
6. 函数的定义与调用:C语言中,函数的定义不能嵌套,但函数的调用可以嵌套。因此,选项B是正确的描述。
7. 函数描述:C语言允许函数递归调用,函数形参仅在函数内部有效,但数组名作为形参时,改变形参不会影响实参。选项D错误,因为子函数可以位于主函数之后。
8. 复合语句中的变量:在复合语句(如大括号包围的代码块)中定义的变量只在该复合语句内部有效,因此选项A是正确的。
9. 函数定义:正确的函数定义形式需要在返回类型后跟随函数名,然后是参数列表。选项D符合这个规则。
10. 输出结果:程序中的`F(y)`是宏定义,等价于`8.19 - y`。因此`x*F(3)`等于`2*(8.19 - 3)`,计算结果是`13`,所以输出是B。
11. 联合体(union):联合体内的成员共享同一段内存,当给一个成员赋值后,其他成员的值会被覆盖。选项C正确,因为它先将浮点数12.5赋给float类型的x,然后打印float类型的值。
12. 不合法运算:在C语言中,指针变量可以自增(p++),变量可以自减(a--),但字符变量c不能自减,因为c的值是字符类型,自减操作没有意义。因此,选项D的运算不合法。
13. `scanf`错误:在`scanf`中,应该传递变量a的地址,而不是它的值。`*p`表示的是变量a的值,而不是地址,所以选项B是错误原因。
14. 三元运算符:`num=(a=4,b=16,c=32);`这个表达式中,首先执行a=4,然后b=16,最后c=32。但num只会被c=32这一步的结果赋值,因此num的值是32。
15. 输入数据:要输入10,20,A和B,可以输入`10 20 A B`,每个数据之间用空格分隔,从第一列开始输入。
以上是对C语言试题中涉及的知识点的详细解释,涵盖了函数位置、浮点数、条件表达式、三目运算符、字符串比较、函数调用与定义、复合语句、变量作用域、函数返回值、宏定义、联合体、指针操作以及输入输出等基础知识。