(C语言)笔试选择题的错题总结(答案+解析)_1

1、  以下不正确的定义语句是( )
        A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
        B: char c2[] = {'\x10', '\xa', '\8'};
        C: char c1[] = {'1','2','3','4','5'};
        D: int y[5+3]={0, 1, 3, 5, 7, 9};

        解析:
        本题B选项考查转义字符,有如下格式:
                \ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
                \xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0

        但八进制数字是0-7,没有8,故B选项中'\8'是错误的

        正确答案:B

2、  test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】   

#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

        A: a B: b C: c D: d        

        解析:
        因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:

        int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该            类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型          的。所以 a,c,d才是指针类型

        正确答案:ACD

3、  以下程序段的输出结果是( )

#include<stdio.h>
int main()
{
    char s[] = "\\123456\123456\t";
    printf("%d\n", strlen(s));
    return 0;
}

        A: 12 B: 13 C: 16 D: 以上都不对

        解析:
        这里考查转义字符,注意:\\ 表示字符'\',\123表示字符'{',\t表示制表符,这些都是一          个字符

        正确答案:A

4、  以下程序的输出结果为( )
       

#include <stdio.h>
int i;
void prt()
{
    for (i = 5; i < 8; i++)
    printf("%c", '*');
    printf("\t");
} 

int main()
{
    for (i = 5; i <= 8; i++)
        prt();
    return 0;
}

        A: *** B: *** *** *** *** C: *** *** D: * * *

        解析:
        全局变量i,在main()中修改为5,第一次在prt()中执行循环输出三次'*',i被修改为8,回          到main()中第二次调用prt()时,i<8为假,循环结束没输出,执行一次print("\t"),再次回          到主函数后i++变为9,i<=8为假,循环结束;

        正确答案:A

5、  对于代码段,下面描述正确的是( )

t=0;
while(printf("*"))
{
    t++;
    if (t<3)
    break;
}

        A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与'0'等价
        C: 其中循环控制表达式是不合法的 D: 以上说法都不对

        解析:
        因print(“*”)函数调用的返回值是字符串中字符的个数,即为1。所以while后面的条件恒            为真,所以循环控制表达式与'0'是等价的(字符'0'不是0)

        正确答案:B

6、  我们知道C语言的 break 语句只能跳出离它最近的一层循环,可是有时候我们需要跳出          多层循环,下列跳出多层循环的做法正确的是【多选】( )
        A: 将程序写成函数用return结束函数,便可跳出循环
        B: 修改外层循环条件例如

for( int i = 0 ; i < MAX1 ; i ++ )
{
    for( int j = 0 ; j < MAX2 ; j ++ )
    {
        if( condition )
        {
            i = MAX1;
            break;
        }
    }
}

        C: 在外层循环设置判断条件例如

for( ; symbol != 1 && condition2 ; )
{
    for( ; symbol != 1 && condition3 ; )
    {
        if( condition1 )
            symbol = 1 ;
    }
}

        D: 在外层循环后面加入break例如

for( ; condition2 ; )
{
    for( ; condition3 ; )
    {
        if( condition1 )
            symbol = 1 ;
    } 
    if(symbol == 1 )
        break ;
}

        正确答案:ABCD

7、  设函数 fun 和实参数组的说明是如下形式,则对函数的调用语句中,正确的是( )

void fun(char ch, float x[]);
float a[10];

        A: fun("asd" , a[]); B: fun('x' , A); C: fun('68' , 2.8); D: fun(32 , a);

        解析:
        A选项数组传参只需要写数组名就行,a[]时错误的;

        B选项第二个参数写成了大写,错了;

        C选项第二个参数是浮点数,但是fun函数的第二参数是数组不匹配,fun函数参数x需要             传一个数组或者float *指针;

        D选项的形式是正确的。

        正确答案:D

8、  在C语言中,以下正确的说法是( )
        A: 实参和与其对应的形参各占用独立的存储单元
        B: 实参和与其对应的形参共占用一个存储单元
        C: 只有当实参和与其对应的形参同名时才共占用存储单元
        D: 形参是虚拟的,不占用存储单元

        解析:
        在调用函数的时候,真实传递给函数的是实参,函数定义部分函数名后的参数是形参。          形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分          别占用不同的内存空间,所以A正确,B错误,及时形参和实参的名字相同,也是占用不

        同的内存空间,所以B错误;函数如果不被调用时,函数的形参是形式上存在的,但是          函数在被调用的时候,形参是要分配内存空间的,所以D错误。

        正确答案:A

9、  下列定义数组的语句中正确的是【多选】( )
        A:

#define size 10
char str1[size], str2[size+2];

        B: char str[];

        C: int num['10'];

        D: int n=5; int a[n][n+2];

        解析:
        A选项:宏替换,没问题;

        B选项:非法定义,一维数组必须定义数组元素个数;

        C选项:字符'0',转换成十进制为48,所以该选项最终为int num[48];

        D选项:错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不                          做特殊考虑。

        正确答案:AC

10、 以下哪个选项可以正确描述 sizeof(double) ( )
        A: 一个整型表达式

        B: 一个双精度型表达式

        C: 一个不合法的表达式

        D: 一种函数调用

        解析:
        sizeof是C语言中的一个操作符,不是函数调用,简单的说其作用就是返回一个对象或者

        类型所占的内存字节数,结果是无符号整数,因此可以把它看作是整型表达式。

        正确答案:A

猜你喜欢

转载自blog.csdn.net/m0_64051621/article/details/126769602