错题整理1

1、以下程序的运行结果是()

#include <stdio.h>
int main(void) {
printf("%s , %5.3s\n", "computer", "computer");
return 0;
}
A computer , puter
B computer , com
C computer , computer
D computer , compu.ter

答案:B

解析:此题涉及printf函数的格式控制使用。打印字符串是%s。第二个“%s”中的5.3可以看成格式“m.n”,其中m代表了打印所占屏幕像素(空格)个数,如果m小于字符串个数,就会把字符串全部打印出来,大于字符串个数的时候,就会补上空格位置,默认是向左对齐。

char* str1 = "hello";
printf("%3s", str1);  // 这里依旧打印五个字符hello
printf("%7s", str1);  // 这里会打印  hello,但是不同的是这里前面会补两个像素(空格)位置

如果格式是%-ms,那么就会向右对齐,像素会在后面补充。

n代表要输出几个字符,并且从左向右一次取出字符。

本题是%5.3s,代表先向左对齐取出5个屏幕的像素数,然后取出三个字符,因此选B。

2、下面程序输出是什么?

#include <stdio.h>
int main()
{
int a=1,b=2,c=3,d=0;
if(a == 1 && b++==2)
if(b!=2||c--!=3)
printf("%d,%d,%d\n" ,a,b,c);
else
printf("%d,%d,%d\n" ,a,b,c);
else
printf("%d,%d,%d\n" ,a,b,c);
return 0;
}
A 1,2,3
B 1,3,2
C 3,2,1
D 1,3,3

答案:D

解析:本题考察逻辑运算符&&(与)和||(或)以及后置++的优先级。

&&(与)是必须两边都是真才为真

||(或)是有一边为真就为真,并且当或运算判断一边为真之后,就不会判断另一边,并且判断顺序必须是先左边表达式再右边表达式。

本题进入第5行的if判断是,左边为真,右边是后置++,先判断后加加,因此也为真,在运行之后b的值为3。在进入第6行的时候左边为真,右边表达式未进入,c仍为3,因此是D。

3、

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};
中,p[1][2]的值是()
A 1
B 0
C 6
D 2
答案:B
解析:本题考察二维数组,根据题意我们取出的是第二行第三列的数据,但是这里第二行只初始化了两个数据,因此其他位置补0,答案为B。
4、 请找出下面程序中有哪些错误()
int main(){
int i = 10;
int j = 1;
const int *p1;//(1)
int const *p2 = &i; //(2)
p2 = &j;//(3)
int *const p3 = &i;//(4)
*p3 = 20;//(5)
*p2 = 30;//(6)
p3 = &j;//(7)
return 0;
}
A 1,2,3,4,5,6,7
B 1,3,5,6
C 6,7
D 3,5

答案:C

解析:本题保持const修饰指针的情况。const在*前时,修饰的是指针指向的内容,const在*之后,修饰的是指针变量。p1和p2的const军修饰其指向内容不可改变,而p3的const修饰的是这个指针不能改变。因此选C

变形:

下面3段程序代码的效果一样吗()
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A (2)=(3)
B (1)=(3)
C (1)=(2)
D 都不一样
答案:C
解析:1和2没有区别,const都在*前,为常量指针,3的const在*后是指针常量
5、 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h>
int main(){
long long a = 1, b = 2, c = 3;
printf("%d %d %d\n", a, b, c);
return 0;
}
A 1,2,3
B 1,0,2
C 1,3,2
D 3,2,1

答案:B

解析:在小端环境下,高字节存放在高地址,低字节存放在低地址,lomglong类型占8个字节,但是printf中又是以%d整形输出的,只会取出4个字节,因此会打印出1 0 2,选B

6、有以下程序

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int m=0123, n=123;
printf("%o %o\n", m, n);
return 0;
}
程序运行后的输出结果是()
A 0123 0173
B 0123 173
C 123 173
D 173 173

答案:C

解析: 此题考察进制转换。二进制的前缀是0B,八进制的前缀是0,十进制无前缀,十六进制前缀为0X。此题m是一个8进制数,n是一个十进制数,打印时要用八进制打印,因此n转换是173,但是C。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值