【牛客网】每天刷题--第十天

目录

一.以下程序段的输出结果为( )

二.以下叙述中正确的是()

三.下面程序的输出结果是() 

四.下面可以检测运算过程中出现整型溢出的办法有()

五.在32位小端的机器上,如下代码输出是什么: 

六.有以下类定义 

七.请问运行Test 函数会有什么样的结果? 


一.以下程序段的输出结果为( )

for(int i = 4; i > 1; i--)
    for(int j = 1; j < i; j++)
        putchar('#');

答案:######

解析:             i=4   j=1 #

                        j=2 #

                        j=3 #

                        j=4

                        i=3   j=1 #

                        j=2 #

                        j=3

                        i=2   j=1 #

                        j=2

                        i=1


二.以下叙述中正确的是()

答案:D 

解析:复合语句可以包含多条语句 , 在其中可以定义局部变量 , 所以 A 错误。花括号对 {} 不仅用来表示函数的开头和结尾 , 也可以用于表示复合语句 , 所以 B 错误。 C 语言中的语句必须以分号 ";" 结束 , 所以空语句表示为 ";", 不是空行 , 所以 C 错误。


三.下面程序的输出结果是() 

#include <iostream>
using namespace std;
int i = 0;
int fun(int n) {
    static int a = 2;
    a++;
    return (a * n);
}

int main() {
    int k = 5;
    {
        int i = 2;
        k += fun(i);
    }
    k += fun(i);
    cout << k;
    return (0);
}

答案:11

这题学习了,原来不知单纯只是 { } 也能组成作用域。

1. 所以上题 { } 内使用的 i 是局部变量 i,i=2,在第一句 k += fun( i ) 后k变成了11;

2. 第二句k += fun( i ) 是在 { } 外,使用的i是全局变量,i=0,所以 k += fun( i ) 后k加上了0等于11; 


四.下面可以检测运算过程中出现整型溢出的办法有()

 答案:B C

解析:

选项1 : 运算结果进行比较的话,已经溢出导致结果变化,去比较也为时已晚。 所以不正确

选项2 : 检测符号为变化可以防止符号溢出,正确。

选项3 : a+b = c   c - a != b 则c溢出 正确

选项4 : 参数长度    0000000000000000000000000 这个长度算溢出么 不正确


五.在32位小端的机器上,如下代码输出是什么: 

char array[12] = {0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08};     
 short *pshort = (short *)array;     
 int *pint = (int *)array;     
 int64 *pint64 = (int64 *)array;     
 printf("0x%x , 0x%x , 0x%llx , 0x%llx", *pshort , *(pshort+2) , *pint64 , *(pint+2));

 答案:B

解析:

B。

小端机器的数据高位字节放在高地址,低位字节放在低地址。

char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

1,char一字节,直观呈现的结果为:0x08-07-06-05-04-03-02-01(从后到前下标为0-7);

2,short两字节,直观呈现 的结果 为: 0x0807-0605-0403-0201 (从后到前 下标 为0-3) :

*pshort从0开始,所以0x201;

*(pshort+2)从2开始,所以0x605;

3,int64八字节,直观呈现 的结果 为 0x0807060504030201 (从后到前 下标 为0) :

*pint64从0开始,所以0x807060504030201;

4,int四字节,直观呈现为0x08070605-04030201(从后到前 下标 为0-1) :

*(pint+2))从2开始,但是最多只到下标1,后面位置默认为0。


六.有以下类定义 

#include<iostream>
using namespace std;
class Clock{
public:
    Clock(int NewH=0, int NewM=0, int NewS=0){Hour=NewH; Minute=NewM;Second=NewS;}
    void ShowTime() {cout<<Hour<<":"<<Minute<<":"<<Second;}
    Clock  operator ++();
private:
    int Hour, Minute, Second;};
    Clock Clock::operator ++(){ 
        Second++;
        if(Second>=60){  
            Second=Second-60;
            Minute++;
            if(Minute>=60){
                Minute=Minute-60;
                Hour++;
                Hour=Hour%24;}}
        return ________;
    }
};

int main() {   
    Clock c1;
    (++c1).ShowTime();
    return 0;
}

答案:*this

解析:选B。return *this返回的是当前对象的克隆或者本身,return this返回当前对象的地址,这里很明显是返回当前对象。c1是定义在主函数里面的对象,很明显不对。Clock是类名,也不对。


七.请问运行Test 函数会有什么样的结果? 

char* getmemory(void){ 
    char p[]= " hello world";
    return p;
}
void test(void){ 
    char *str=NULL;
    str=getmemory(); printf(str);
} 

答案:输出乱码

解析:getmemory 返回的指针,是内部变量,  调用之后会被回收。 所以输出是不确定的。 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟瑟发抖的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值