【知识点详解】
1. **C语言程序结构**:C语言程序是由函数构成的,但主函数`main`并不一定要放在程序的开始。程序的执行从`main`函数开始,用户自定义的函数可以被其他函数多次调用。
2. **标识符规则**:在C语言中,标识符可以由字母、数字和下划线组成,但不能以数字开头,`&`符号不能用于标识符。
3. **整型数据输出**:在C语言中,`int`类型数据通常占2个字节,整数32768超出了`int`类型的范围。输出32768应使用`long`或`long int`,因此正确答案是`B.printf("%ld",32768);`。
4. **逻辑运算符优先级**:在C语言中,逻辑与`&&`的优先级高于逻辑或`||`,而逻辑非`!`的优先级最高。表达式`a&&b`和`a<=b`的值都不是0,`a||b&&c`中,只要`a`或`b`和`c`至少有一个为真,值就不为0;`!(!c||1)`等价于`!(0||1)`,即`!1`,其值为0。
5. **移除整数最高位**:要去掉整数x的最高位,可以用x对10的(n-1)次方取模。所以正确答案是`C.y=x%(long)pow(10,n-1)`,但这里需要注意,如果x是`long`类型,需要确保幂运算的结果也是`long`类型。
6. **条件赋值语句**:C语言中,`if`语句和三目运算符`? :`都可以实现条件赋值。选项C的`switch()`语法错误,因为没有提供表达式。选项D的`switch`语句中,`case x>=0`和`default`分支重复了,是错误的。
7. **数组引用**:在C语言中,数组下标从0开始,`m[++i]`、`m[2*2]`和`m[5]`都是合法的引用,但`m[m[4]]`是错误的,因为数组下标不能是数组元素的值。
8. **字符串输入**:使用`scanf`读取字符串时,应该用`"%s"`,并将数组名作为参数,如`scanf("%s", s);`。选项B中`s[0]`是错误的,选项C和D的`gets`和`getchar`用于读取单个字符,不适合读取字符串。
9. **函数参数**:在函数调用时,实参和形参占用不同的存储单元,它们之间通过值传递或引用传递来交互信息。选项A、B和C的描述都是错误的。
10. **数组赋值**:将1~10赋值给数组`a`,可以使用循环或指针。选项A、B和C都是正确的赋值方式,但选项D中`*a++=i++;`会导致数组元素的顺序错误,因为`a++`会改变数组首地址。
**填空题知识点**
1. **逻辑运算符优先级**:逻辑非`!`的优先级高于算术运算符。
2. **sizeof运算符**:`sizeof`用于计算数据类型或变量所占内存大小,对于`2*3.14*r`,由于`r`是`int`类型,结果会被转换为整数,所以`sizeof`的值取决于编译器如何处理浮点数表达式的整数转换,一般情况下是4个字节。
3. **数学表达式转C语言表达式**:需提供具体数学表达式才能转换成C语言表达式。
4. **格式化输出**:`printf`函数按照指定的格式输出,`p`指向的字符串`"%d,%d\n"`表示两个整数和换行符,所以输出`1,2`后会自动换行。
5. **默认存储类别**:在C语言中,如果局部变量声明时没有指定存储类别,那么默认使用`auto`存储类别。
**程序阅读题目**:这部分需要阅读程序代码并分析其运行结果,但由于题目中未给出具体的程序代码,无法在这里提供解答。