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

Posted 跳动的bit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言入门必做踩坑题《篇五》相关的知识,希望对你有一定的参考价值。

第1题

🎗以下程序中 while 循环的循环次数是

void main()
{
	int i = 0;
	while (i < 10) {
		if (i < 1) continue;
		if (i == 5) break;
		i++;
	}
}

📝 分析:

注意区分循环中使用 continue 和 break

continue:终止本次循环

break:跳出循环

所以这里是死循环

第2题

🎗下面的程序,输出结果正确的是( )

int main()
{
	int a = 5;
	if(a = 0)
	{
		printf("%d", a - 10);
	}
	else
	{
		printf("%d", a++);
	}
	return 0;
}

A. -5

B. 6

C. 1

D. 0

📝 分析:

a = 0 是赋值,而不是判断,a = 0 后表达式为假,所以走 else,又因为 a++ 是后置的,所以选择 D

❗ 换个角度看这种方式可能还是个错误
对于小白来说要从五百行的代码中找出这种潜在错误是有些挑战的 ❕

在编程中所有的错误可以归并为三类:

1️⃣ 编译型错误

   这种类型属于语法错误,相对简单
   解决方法:直接看错误提示信息,(双击就可定位到有问题的代码上)

2️⃣ 链接型错误

   LNK (链接型错误) 这种错误只要了解它为什么会产生,也很好找

   主要原因是:

     ▶ 这个函数压根就未定义

     ▶ 调用函数名时与定义的函数名不一

   解决方法:错误信息上不可以定位到有问题的代码上,但是可以作为一些依据

3️⃣ 运行时错误

   这种错误没有错误信息提示,相对较难找。一般是输出结果与预想或与正确答案不符

   解决方法:借助调试,逐步定位问题


❗ 此题的错误是运行时错误 ❕

  针对于少写 1 个 = 的情况下,小白可以把 3 写在左边这样就变成了编译型错误
  当然也可以按部就班,后面代码量上来肯定会踩一波坑的;习惯了就不会再写错了,或者能讯速的定位到问题

第3题

🎗include <x.h> 和 include “y.h” ,以下说法正确的是( )

A. " " 表示先到源文件所在目录下搜索头文件

B. < > 表示先到源文件所在目录下搜索头文件

C. 两者用法没有区别

📝 分析:

❗ < > 和 " " 包含头文件的本质区别是:查找策略的区别 ❕

1️⃣ " "
   先在源文件所在的目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件,
如果找不到就提示编译错误 (所以 " " 也可以包含库文件,但是没必要 )

2️⃣ < >
   直接去库目录下查找

所以选择 A 选项

第4题

🎗定义变量 double **a[3][4] ,此变量占有内存空间是 ____ 字节

A. 12

B. 24

C. 48

D. 96

📝 分析:

因为 [ ] 的优先级大于 * , 所以 a 是指针数组,它有 12 个 double** 类型的元素。
对于一个地址求它的大小有 2 种情况,所以此题有歧义:

1️⃣ 在 32 (x86) 位平台下,地址占 4 个字节

   4 × 3 × 4 = 48

2️⃣ 在 64 (x64) 位平台下,地址占 8 个字节

   8 × 3 × 4 = 96

所以选择 C 或者 D

第5题 - 验证“哥德巴赫猜想”

🎗编程题 <难度系数⭐>

📝 题述:数学领域著名的 “哥德巴赫猜想” 的大致意思是:任何一个大于 2 的偶数总能表示为两个素数之和。比如:24 = 5 + 19,其中 5 和 19 都是素数。本实验的任务是设计一个程序,验证 20 亿以内的偶数都可以分解成两个素数之和。

🍳 输入描述:

  输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

🍳 输出描述:

  在一行中按照格式 “N = p + q” 输出 N 的素数分解,其中 p ≤ q 均为素数。又因为这样的分解不唯一(例如 24 还可以分解为 7 + 17),要求必须输出所有解中 p 最小的解。

💨 示例:

  输入,24

  输出,24 = 5 + 19

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h> 
int prime(int x)
{
	int i = 0;
	for (i = 2; i <= sqrt(x); i++)
	{
		if (x % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	for (i = 2;; i++)
	{
		if (i % 2 != 0 && prime(i) && prime(n - i))
		{
			printf("%d = %d + %d", n, i, n - i);
			break;
		}
	}
	return 0;
}

以上是关于C语言入门必做踩坑题《篇五》的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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