【C语言试题及答案】
1. C语言中,字符型数据在存储中的存储形式是ASCII码。这表示每个字符由一个字节的二进制数表示,对应于标准的ASCII字符集。
2. 十进制数47在C语言中可以等价地表示为'57',因为字符常量可以用其对应的ASCII码值表示,47的ASCII码是'5'(53)和'7'(55)。
3. 表达式x%=(n%2)中,假设x=12, n=5,n%2的结果是1,因此x%=1相当于x = x % 1,x的值将被转换为1,因为任何数除以1的余数都是它本身。
4. 定义语句`char str[][20]={"Beijing","中国石油大学"},*p=str;`中,`strlen(p+20)`会计算从字符串"中国石油大学"的末尾开始的空字符后的字符数,由于没有找到空字符,所以输出结果是0。
5. 函数`fun(int *p)`的返回值是形参p所指存储单元中的值,即`*p`解引用后得到的值。
6. C语言中,函数返回值的类型是在定义函数时所指定的函数类型决定的。
7. 对函数`fun`的正确调用语句是`fun(10, 12.5);`,因为函数定义需要指定参数类型,但在调用时类型会根据实际传入的值自动推断。
8. 选项B是错误的,因为不能直接用字符串字面量给字符数组赋值,需要使用双引号包围,如`b="Hello!";`会导致编译错误。
9. 不能代表字符g的表达式是`ps+=3,*ps`,因为`ps+=3`之后,`*ps`指向的是'e',而不是'g'。
10. 当对两个字符串进行比较时,应该使用的函数是`strcmp`,它会比较两个字符串的字符序列,直到找到不匹配或遇到空字符为止。
11. 以下循环的次数是0次,因为`for(i=2;i==0;)printf("%d",i--);`的条件`i==0`在初始化时就不成立,所以不会执行循环体。
12. 正确的描述是C)数组大小固定,所有元素的类型必须相同。在C语言中,数组一旦定义,其大小是固定的,且所有元素必须是同一类型的。
13. 能正确定义数组并正确赋初值的语句是D)`int d[3][2]={{1,2},{34}};`,虽然第二行只给出了一个数值,但C语言会自动填充到数组边界。
14. 设有定义`int a[]={1,5,7,9,11,13}, *p=a+3;`,则`*(p-2)`的值是5,`*(a+4)`的值是11。
15. 正确的赋值语句是C)`p="abcd";`,因为指针p可以指向字符串常量的首地址。
16. 用数组名作为函数调用时的实参,实际传递给形参的是数组的首地址。
17. 不正确的叙述是D)在一个函数的复合语句中定义的变量在本函数围有效。复合语句内的变量只在其所在的复合语句内有效。
18. 当对两个字符串进行比较时,应该使用的函数是`strcmp`,它用于比较两个字符串的字面内容。
这些题目覆盖了C语言的基础知识,包括数据类型、运算符、函数、数组、字符串以及指针的使用。掌握这些知识点对于理解和编写C语言程序至关重要。