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

简介: C语言入门必做踩坑题《篇三》

第1题

🎗设有定义 char *p[ ] = {“Shanghai”, Beijing", “Hongkong”}; 则结果为 j 字符的表达式是 ( )

A. *p[1] + 3

B. *(p[1] + 3)

C. *(p[3] + 1)

D. p[3][1]

📝 分析:

此题是对指针数组的考察,对于上面的定义我们可以画出如下关系图

对于这段代码必须得理解这张图,否则你对这个代码的理解是有问题的,此外还需要了解运算符之间的优先级

所以选择 B 选项

第2题

🎗执行以下函数后, i 的值是 ( )

int f(int x)
{
  return ((x > 2) ? x * f(x - 1) : 3);
}
int i;
i = f(f(2));

A. 30

B. 无限递归

C. 9

D. 2160

📝 分析:

所以选择 C 选项

第3题

🎗在 int p[ ][4] = { {1}, {3, 2}, {4, 5, 6}, {0} }; 中,p[1][2] 的值是 ( )

A. 1

B. 0

C. 6

D. 2

📝 分析:

此题是对二维数组的考查

对于二维数组的不完全初始化会主动赋值 0

所以选择 B 选项

第4题

🎗设有以下宏定义,则执行语句 z = 2 * (N + Y( 5 + 1))后,z 的值是 ( )

#define N 3+1
#define Y(n) ((N+1)*n)

A. 60

B. 190

C. 248

D. 以上全错

📝 分析:

    ❗ define替换规则 ❕

      在程序扩展 #define 定义符号和宏时,需要涉及以下几个步骤

      1️⃣ 在调用宏时,首先对参数进行检查,看看是否包含任何由 #define 定义的符号。如果是,它们优先被替换

      2️⃣ 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被它们的值替换

      3️⃣ 最后,再次对结果文件进行扫描,看看它是否包含任何由 #define 定义的符号。如果是,就要重复上述过程

    ⚠ 注意:

      ▶ 宏参数和 #define 定义中可以出现其它 #define 定义的常量。

        但是对于宏,不能出现递归,因为宏只做简单的文本替换,且只替换一次

      ▶ 当预处理器搜索 #define 定义的符号时,字符串常量的内容并不被搜索

    ❗ 代码步骤如下 ❕

所以选择 A 选项

第5题

🎗char a; int b; float c; double d; 则表达式 a * b + d - c 值的类型是 ( )

A. float

B. int

C. char

D. double

📝 分析:

    ❗ 算术转换 ❕

      如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行。

      下面的层次体系称为寻常算术转换

      long double

      double

      float

      unsigned long int

      long int

      unsigned int

      int

      如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算

      低字节 -> 高字节 (如果是相同字节的就向精度更高的转换)

所以选择 D 选项

第6题

🎗编程题<难度系数⭐>

📝 题述:

    Fibonacci 数列是这样定义的:

    F[0] = 0

    F[1] = 1

    for each i ≥ 2: F[i] = F[i-1] + F[i-2]

    因此,Fibonacci 数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在 Fibonacci 数列中的数我们称为 Fibonacci 数。

    给你一个 N,你想让其变为一个 Fibonacci 数,每一步你可以把当前数字 X 变为 X - 1 或者 X + 1 ,现在给

    你一个数 N 求最少需要多少步可以变为 Fibonacci 数。

🍳 输入描述:

    输入为一个正整数 N(1 ≤ N ≤ 1,000,000)

🍳 输出描述:

    输出一个最小的步数变为 Fibonacci 数

💨 示例:

    输入,15

    输入,2

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:

牛客网原题

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
  int n = 0;
  scanf("%d", &n);
  int f1 = 0;
  int f2 = 1;
  int f3 = 0;
  while(1)
  {
    if(n == f2)
    {
      printf("%d\n", 0);
      break;
    }
    else if(n < f2)
    {
      if(abs(f1-n) < abs(f2-n))
      {
        printf("%d\n", abs(f1-n));
        break;
      }
      else
      {
        printf("%d\n", abs(f2-n));
        break;
      } 
    }
    //说明n不在f1和f2的那个区间内,还需要迭代Fib数
    f3 = f1 + f2;
    f1 = f2;
    f2 = f3;
  }
  return 0;
}

第7题

🎗编程题 <难度系数⭐⭐>

📝 题述:

    请实现一个函数,将一个字符串中的每个空格替换成 “%20” 。

    例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy。

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:


    ❓ 无厘头 ❔

      相信肯定会有人觉得这道题很奇怪,但其实这道题并不奇怪。

      当我们去百度搜索关键字 “无 厘 头” 时

      发现上面的链接使用 “%20” 替换了空格

    ❓ 为什么会空格会替换成 %20 ❔

      豌豆在网上查询了下,大多数是这样说的:

      W3C标准规定,URL查询参数中空格都会被编成加号+;而在 RFC 2396 中 URI 里的保留字符都需转义成 %HH 格式

      当然也可以理解空格的 ASCII 码是 32,对应的十六进制是 20

      行哒!这里就不扯远了

牛客网原题

#include<stdio.h>
#include<string.h>
void ReplaceSpace(char* str, int length)
{
  //1.计算空格的个数
  int i = 0;
  int spcount = 0;
  for (i = 0; i < length; i++)
  {
    if (str[i] == ' ')
      spcount++;
  }
  //2.计算替换空格后新的长度和最后的位置
  int newlengh = length + spcount * 2;
  int pos = newlengh - 1;
  //3.从后往前填充
  for (i = length - 1; i >= 0; i--)
  {
    //空格
    if (str[i] == ' ')
    {
      str[pos--] = '0';
      str[pos--] = '2';
      str[pos--] = '%';
    }
    //非空格
    else
    {
      str[pos--] = str[i];
    }
  }
}
int main()
{
  char arr[20] = "We Are Happy.";
  ReplaceSpace(arr, strlen(arr));
  printf("%s\n", arr);
  return 0;
}


相关文章
|
4月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
93 2
|
1月前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
50 4
|
1月前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
45 1
|
2月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
124 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
4月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
56 1
|
4月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
6月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
7月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
87 4
【C语言入门】初识C语言:掌握编程的基石
|
6月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
74 1
|
7月前
|
编译器 C语言 C++
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决

热门文章

最新文章