C语言刷题笔记 day007 2021.8.27

1.在某个类A中存在一个方法:void set(int x),以下不能作为这个方法的重载的声明的是

    void set(int y) int set(int x,double y) double set(int x,int y) void set(int x,int y)

解析:

方法重载:方法名称相同,参数列表不同(可以是参数的类型,个数,顺序不同)

注意:如果两个方法只有返回值类型不同,编译器看还是同一个方法。

2.下面的函数原型声明中存在语法错误的是

    AA(int a, int b) AA(int, int) AA(int a; int b;) AA(int a, int)

解析:

如果被调用函数(自定义函数)在主调函数的后面,则需要提前声明函数。

声明的作用是把函数名,参数类型和个数等通知给编译系统,以便编译系统正确识别并检查函数调用是否合法。

而函数就是通过函数原型进行声明,函数原型包含检查函数是否合法的基本信息

函数原型与函数的首行相同,其中形参名可以省略,只写类型。

3.在标准C中,while和do_while的功能完全相同。请问这句话的说法是正确的吗?

解析:错误

while先判断在执行,do.while先执行在判断,这样机制一般会导致后者多执行一次

4.下列变量说明语句中,正确的是

    char:a b c; char a;b;c; int x;z; int x,z;、

5.函数调用不可以

    出现在执行语句中 出现在表达式中 作为一个函数的实参 作为一个函数的形参

解析:

6.对于条件表达式(k)?(i++):(i–)来说,其中的表达式k等价于

    k==0 k==1 k!=0 k!=1

解析:

条件表达式

逻辑表达式?表达式1:表达式2

逻辑表达式的值非零则条件表达式的值为表达式1,反之为表达式2

也就是==0为假,!=0为真

void main(void) {
    char *s = "1314520";
    int v1 = 0, v2 = 0, v3 = 0, v4 =0;
    for (int i = 0; s[i]; i++) {
        switch(s[i]) {
            default: v4++;
            case 1: v1++;
            case 2: v2++;
            cas3 3: v3++;
        }
    }
    printf("%d, %d, %d, %d", v4,v1,v2,v3)
}

输出:

解析:

3,5,6,7

default顾名思义是缺省情况,只有任何条件都不匹配的情况下才会执行,故会匹配到s[i]为‘4’,‘5’,‘0’ 的情况。于是v4++三次,v4=3.并且这个default后没有使用break语句,于是case‘1’、‘2’、‘3’都会执行三次。注意到所以语句都没有加break,则语句执行过之后会继续下面的case语句,另外由于s[i]中有两个1,故v1,v2,v3此时为5.另外有一个2,v2,v3++后为6,还有一个case3 于是v3++.最终v3为7.

8.以下叙述中正确的是

    即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同 如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息 设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL; 指针变量之间不能用关系运算符进行比较

解析:

指针变量只能赋予地址,不能赋予其他且必须与指向对象的基类型相同。

指针变量之间进行关系运算可比较他们所指元素的关系。

空指针不指向任何类型的数据。

9.假设已经有定义“ const char*name=" chen " ;”,下面的语句中错误的是

    name[3]=‘q’; name=“lin”; name=new char[3]; name=new char(‘q’);

解析:

指针变量引用字符串实际是把第一个字符的地址赋给了指针变量,而字符串是存储在一个无名的字符数组中。

10.下列关于bool,int,float,指针类型的变量a 与“零”的比较语句正确的有?

    bool : if(!a) int : if(a == 0) float: if(a == 0.0) 指针: if(a == nullptr)

解析:

由于计算机二进制表示浮点数有精度的问题,0.0(浮点double)实际上不是0,而是非常接近零的小数,所以C错! 在ANSIC C中定义了FLT_EPSILON/DBL_EPSILON/LDBL_EPSILON来用于浮点数与零的比较,一般if(fabs(a)<FLT_EPSILON)或if(fabs(a)< DBL_EPSILON)就可以表示a是否“为0”。而if(a==0.0)是永远不会成立的,达不到要求!

经验分享 程序员 微信小程序 职场和发展