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语言入门必做踩坑题《篇二》的主要内容,如果未能解决你的问题,请参考以下文章

Java入门必做踩坑题(篇二)

C语言入门必做踩坑题《篇七》

C语言入门必做踩坑题《篇七》

C语言入门必做踩坑题《篇一》

C语言入门必做踩坑题《篇一》

C语言入门必做踩坑题《篇六》