第1题
🎗以下程序运行时,若输入 1abcedf2df<回车> 输出的结果是多少?
#include<stdio.h> int main() { char a = 0, ch; while((ch = getchar()) != '\n') { if(a % 2 != 0 && (ch >= 'a' && ch <= 'z')) ch = ch - 'a' + 'A'; a++; putchar(ch); } printf("\n"); return 0; }
A. 1abcedf2df
B. 1ABCEDF2DF
C. 1AbCeDf2dF
D. 1abceDF2DF
📝 分析:
此题需要对 ASCII 码有一些认识,如下图只要记住三个主要的标志就行了
❗ 执行步骤 ❕
a ch
0 1
1 A
2 b
3 C
4 e
5 D
6 f
7 2
8 d
9 F
所以结果选 C
第2题
🎗以下哪个选项一定可以将 flag 的第二个 bit 位置 0,且其它 bit 位不变
A. flag &= ~2
B. flag != 2
C. flag ^= 2
D. flag >>= 2
📝 分析:
0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 1 对于 15 这个数字我们只需要与上这一串数字即可
0 0 0 0 0 0 1 0 而 15 要与的那个值即是 ~2 的值
所以选择 A
第3题
🎗以下程序的输出结果是?
#include<stdio.h> int main() { int x = 1; do{ printf("%2d\n", x++); }while(x--); return 0; }
A. 1
A. 无任何输出
C. 2
D. 死循环
📝 分析:
此题虽然简单,但还是有需要注意的地方
x++:这种操作会破坏原本 x 的值
y = x + 1:这种操作不会破坏 x 的值
所以选择 D
第4题
🎗观察并判断以下代码的结果?
#include<stdio.h> #include<stdlib.h> int main() { int a = -3; unsigned int b = 2; long c = a + b; printf("%u\n", c); return 0; }
A. -1
B. 4294967295
C. 0x7FFFFFFF
D. 0xFFFFFFFF
📝 分析:
这里计算的一定是它们在内存中的补码
所以选择 B
第5题
🎗编程题<难度系数⭐>
📝 题述:有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
🍳 输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
🍳 输出描述:
输出为一行,N+1个有序排列的整数。
💨 示例:
输入:
5
1 6 9 22 30
8
输出:
1 6 8 9 22 30
🧷 平台:Visual studio 2017 && windows
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //输入的整数n int n = 0; scanf("%d", &n); int arr[51] = { 0 }; int i = 0; //入n个数据 for(i = 0; i < n; i++) { scanf("%d", &arr[i]); } //要插入的数据 int insert = 0; scanf("%d", &insert); for(i = n - 1; i >= 0; i--) { //arr[i] > insert时往后挪一个位置 if(arr[i] > insert) { arr[i + 1] = arr[i]; } //arr[i] <= insert时插入数据 else { arr[i + 1] = insert; break; } } //这是insert比所有数都小的情况(利用for循环中i的变化,i<0说明全部的数都往右挪了一个单位都没找到) if(i < 0) arr[0] = insert; //输出 for(i = 0; i <= n; i++) { printf("%d ", arr[i]); } return 0; }
❗ 当 arr[i] <= insert 时也可以直接跳出去处理 ❕
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //输入的整数n int n = 0; scanf("%d", &n); int arr[51] = { 0 }; int i = 0; //入n个数据 for(i = 0; i < n; i++) { scanf("%d", &arr[i]); } //要插入的数据 int insert = 0; scanf("%d", &insert); for(i = n - 1; i >= 0; i--) { //arr[i] > insert时往后挪一个位置 if(arr[i] > insert) { arr[i + 1] = arr[i]; } //arr[i] <= insert时跳出循环再插入数据 else { break; } } //这里就无需判断insert比所有数都小的情况 arr[i + 1] = insert; //输出 for(i = 0; i <= n; i++) { printf("%d ", arr[i]); } return 0; }