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

简介: 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;
}



相关文章
|
1月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
59 2
|
1月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
3月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
4月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
69 4
【C语言入门】初识C语言:掌握编程的基石
|
3月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
58 1
|
4月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
108 2
|
4月前
|
前端开发 C语言 C++
C语言入门02---环境搭建
C语言入门02---环境搭建
|
4月前
|
编译器 C语言 C++
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
|
5月前
|
程序员 编译器 C语言
详解C语言入门程序:HelloWorld.c
详解C语言入门程序:HelloWorld.c
下一篇
无影云桌面