文章目录
- 1题
- 2题
- 3题
- 4题
- 5题
- 6题
- 7题
- 8题
- 9题
- 10题
单纯的记录自己刷题后的错误 【牛客网刷题记录(1)】
1题
以下程序的k最终值是:
int i = 10;
int j = 20;
int k = 3;
k *= i + j;
解法:
考虑优先级,+的优先级高于 *= ;
计算为 k = k * (i + j); 答案是90
2题 这个程序的结果是:
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b
解法:
主要判断 && 的运算方式,只有在左边的值是正确的情况才继续运算。
左边(n = b < a)是一个错误的,返回值为0,右边不再执行也为0.
所以答案是: 0 , 0
3题 在64位系统以及64位编译器下,以下描述正确的是
struct T {
char a;
int *d;
int b;
int c:16;
double e;
};
T *p;
文章图片
解法:
主要考结构体的计算和偏移。这里是64位系统,所以int *d; 占用8个字节,所以整题结构的大小应该是 (1+7)+8+4+(1+3)+7 = 32
4题 若有说明:int a[][3]={1,2,3,4,5,6,7}; 则 a 数组第一维的大小是()。
解法:
定义二维数组时,若第一维不确定第二维确定,则数组必须初始化; 初始化后数组中元素个数除以第二维大小加上1得到第一维大小; 若第一二维全部确定,可以不初始化,默认元素全部为0; 不允许第二维不定.
所以这里定以后的数组是: int a[][3] = {1,2,3}{4,5,6}{7,0,0}
5题
void main()
{
char c;
scanf(“%c”,&c);
switch(c)
{
case’1’:
printf(“1”);
case’2’:
printf(“2”);
case’3’:
printf(“3”);
default:
printf(“error”);
}
}
解法:
这是一个坑,这里没有break,所以按照顺序一直打印到最后。
6题
文章图片
解法:
- 预处理命令行可以出现在源程序的任何位置上,因此选项A的说法是错误的。
- 源程序的一行上只能出现一条预处理命令,因此选项B的说法也是错误的。
- 宏名只要是符合要求的标识符都可以,没有规定一定要大写,因此选项C的说法也是错误的。
- 宏替换在程序编译时,就由编译程序对出现的宏名进行了相应的宏替换,因此宏替换不占用程序的运行时间。选项D的说法是正确的。
char *str1 = “Hello”, str2[] = “Hello”; ,
则以下语句 printf("%d %d", sizeof(str1), sizeof(str2)); 的输出结果是()
解法:
*str1是指针,占用4字节(32位)
最后有一个’\0’占位符,所以是6字节
8题 参加位运算的数据其类型不能是()。
解法:
按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用。
9题
fun(int a, int b, int c)
{ c = a * b;
}
int main(void)
{int c;
fun(2, 3, c);
printf(”%d\n”, c);
return 0;
}
解答:
这也是坑,函数fun()的参数为值传递,在函数体内的操作不能对传入的值进行修改,所以无法确定 。正确的方法应该是将C改为一个指针或者地址,通过指针和地址进行值传递。
10题 struct T {},sizeof(struct T)的值为
解答:
若结构体为空,其大小为1;若不为空,结构体的存储比较复杂,需要考虑内存存储的字节对齐。
推荐阅读
- c语言学习|c语言深入浅出,玩爆常见字符串,内存操作库函数(爆肝最长时间之作)
- C语言学习|C Primer Plus,C语言精华,截图+代码+学习笔记【10000字】【原创】
- C语言学习|C语言做一个简易的登陆验证(功能)界面