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