C语言入门必做踩坑题《篇二》
Posted 跳动的bit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言入门必做踩坑题《篇二》相关的知识,希望对你有一定的参考价值。
第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;
}
以上是关于C语言入门必做踩坑题《篇二》的主要内容,如果未能解决你的问题,请参考以下文章