牛客网练习题积累part1:

1.概念:若二维数组a有m列,则在a[i][j]前的元素个数为 i*m+j 个。

解析:a[i][j]那一行(第i+1行,i下标从0开始的)之前的元素共i*m个,再+j(a[i][j]在第j+1列,j下标从0开始)个。

2.以下程序的输出结果为:12

#include <stdio.h>
#define M(x, y, z) x *y + z
int main() {
    int a = 1, b = 2, c = 3;
    printf("%d\n", M(a + b, b + c, c + a));
    return 0;
}

解析:宏定义原样替换,不要自行按照习惯加括号!!

宏定义M(x,y,z)=x*y+z      则直接原样替换:M(a+b,b+c,c+a)=a+b*b+c+c+a=12

千万不要多此一举给出典型错误答案!!(M(a+b,b+c,c+a)=(a+b)*(b+c)+(c+a)=19(错误!!))

3.执行以下代码后a的值为:16

#define SUM(x,y) x+y

int a=3;

int b=2;

a+=a*SUM(a,b)*b;

和第二题一样的考法!宏定义是原样替换的!!不要擅自做任何改动!!

解析:a=a+(a*SUM(a,b)*b) =a+(a*a+b*b)=16! 

典型错误答案:a=a+(a*SUM(a,b)*b) =a+(a*(a+b)*b)=33(错误!!)

4.请问在 64 位平台机器下 sizeof(string_a),sizeof(string_b) 大小分别是:8  100

char *string_a=(char *)malloc(100*sizeof(char));
char string_b[100]; 

解析:size(string_a):只要是指针类型变量,在32位平台下永远是4个字节!!在64位平台下永远是8个字节!!(与自身类型无关!) 所以sizeof(string_a)=8!  sizeof(string_b):定义了一个char类型的开辟了100个内存空间大小的数组,故sizeof(string_b)=100*sizeof(char)=100*1=100

ps:只有在指针进行加一运算时才会涉及到自身类型

5.语句printf(“a\bre\’hi\’y\\\bou\n”);的输出结果是:re'hi'you

解析:考察转义字符\b~退格符,光标左移一位,并删除该位置的字符;\n~熟悉的换行符;\'~即输出一个\后的字符';\\~即输出\后面的字符\;\a~响铃符... 还有很多,大家可以自己去了解)

所以输出结果为(为了方便大家看,用括号把转义字符整体括起来了):a ( \ b ) r e ( \ ' ) h i ( \ ' ) y ( \ \ ) ( \ b ) o u ( \ n ) =re'hi'you

6.下面选项中的程序段,没有编译错误的是:A

A.char* sp, s[10]; sp = "Hello"; //正确,sp为一个字符型指针变量,通过赋值获得了“Hello”的地址;”Hello“表达式使用的值就是这些字符在常量区所存储的地址!!不是字符本身!

B.char* sp, s[10]; s = "Hello"; //错误!字符数组的数组名代表的是数组首元素地址(s=&(s[0]))!!地址是常量!!不能被赋值!!!

C.char str1[10] = "computer", str2[10]; str2 = str1; //str2代表字符数组str2[10]首元素地址!地址是常量!!不能被赋值!!!

D.char mark[]; mark = "PROGRAM"; //字符数组的数组名代表的是数组首元素地址!地址是常量!!不能被赋值!!!

 7.c/c++,下列运算符中,能够被重载的是:&&   !=   ->

解析:除了 类属关系运算符"."成员运算符"."指针运算符"*"作用域运算符"::"sizeof运算符三目运算符"?:" 以外,C++中的所有运算符都可以重载!!(赋值运算符"="、"[]"、"()"、"->"这四个运算符只能通过成员函数来重载!)

8.(附加一道数据结构的简单题) a - (b * c + d) / e的后缀表达式是:abc*d+e/-

解析:求后缀表达式  先写运算对象再写符号!(按照符号优先级拆分,一组一组拆着累加写!拆的部分在原表达式左边就写在新的表达式左边)

步骤:1)bc*    2)bc*d+    3)bc*d+e/   4)abc*d+e/-(结果)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值