【C语言】验证哥德巴赫猜想
问题来源这是学校的一个作业,原题如下 题目先给出了哥德巴赫猜想的背景知识(我还真不知道) 2000以内的正偶数都能分解成两个质数(素数)之和 题目要求下面来梳理一下题目的要求: 输出样式为a=b+c,使用%4d=%4d+%4d输出 每行输出4个,每行最后一个输出无空格 每个偶数只需要一个结果即可(后续较大的偶数有很多种解) 弄懂了题目要求,下面就来一步一步写代码 如何判断素数?在上篇博客里面提到了如何判断素数==>【链接】,这里不再赘述 我们需要搞定的是判断是那两个素数b、c相加等于我们需要的那个数a 因为需要多次判断,这里我们使用自定义函数 12345678910111213141516int SuShu(int a){ if (a == 2) { return 1; } int j = 0; for(j = 2; j <=sqrt(a); j++) { if (a % j == 0) {...
【C语言】printf函数的执行顺序,涉及函数传参
问题产生偶然在c语言学习交流群看到了这么一串让人费解的代码 1234567891011#include <stdio.h>int main(){ int i = 0; int j = 0; scanf("%d", &i); j = -i++; printf("%d %d %d", i, j, i++); return 0;} 这里让我疑惑的是,为什么打印的第一个i是6而不是5? printf语句的执行顺序这里要涉及到一个之前我并不清楚的知识点 123scanf("%d", &i);j = -i++;printf("%d %d %d", i, j, i++); 按照以往我的理解,代码的运行顺序是这样的 1.用scanf将数字赋值给i 2.将-i赋值给j,然后i++...
【C语言】简单的printf递归
简单的Print递归 说句题外话,很多时候单词我是认识的,但是如果它全大写了,我总要反应老一会才能想出来它的意思 有和我一样的人吗? 今天的c语言课讲到了一道非常经典的递归题目 代码如下: 12345678910111213141516#include <stdio.h>void Print(int n){ if (n > 9) Print(n / 10); printf("%d ", n % 10);}int main(){ int num = 0; scanf("%d", &num); Print(num); return 0;} 结果如下 运行顺序谈到递归的时候,最重要的就是要弄明白它究竟是怎么运行的 老师上课讲的方法非常直观的表示了它的运算顺序 这里我用粘贴代码块的方式来展示 刚开始执行的是scanf输入,这里不再赘述 123456void Print(int n){ if (n > 9)...
【VS】如何解决VS编译器scanf报错问题
问题来源当我们使用vs编译器编译c语言代码,并需要用到一些非常常用的库函数的时候(如scanf) vs编译器通常会报出如下错误 有的时候即便报错了,程序也可以正常运行。但有的时候就会同图中一样,程序无法运行!这时候就头大了。 出现这个错误的原因是vs编译器认为这些库函数是“不安全的”(我可真谢谢你,担duo心guan那xian么shi多,微软) 解决方法解决这个报错问题的方法有两种 1.使用_s函数步骤如图所示,我们可以在库函数后面加一个_s,这时候vs就会把它认为是“安全的函数”,程序就可以正常运行了。 12double m;scanf_s("%lf",&m); 如下图所示,代码编译运行成功。 这个方法本质上是调用了win下vs重写过后的scanf_s,因为是vs重写过后的,所以自然是安全的函数。 方法一的致命缺点但是这么做有一个非常大的弊端:该代码只能在vs编译器里运行。 如图,如果我们将这一串带_s的代码复制到 dev-c++...
【C语言】二级指针
二级指针什么是二级指针?我们通常使用的int*p就是一个一级指针,而二级指针存放的变量就是一个一级指针代码示例如下: 123456789int main(){ int a =10; int*pa= &a; //有两个*号 的原因 int ** ppa= &pa;//int*是代表变量pa的类型,*ppa表明这是一个指针变量 return 0;} 这里面pa是指针变量,一级指针 ppa是二级指针变量,&pa取出pa在内存中的起始地址 如图所示 小结简单的说,指针变量也是变量,变量就有属于它的地址,而二级指针就是用来存放指针变量的地址的 希望这对你有帮助!
【C语言】野指针是什么?指针在什么情况下会出错?
@toc 什么是野指针?概念︰野指针就是指针指向的位置是不可知的(如:随机的、不正确的、没有明确限制的) 说人话就是:野指针是错误的指针引用形式,通常有以下几种情况 指针未初始化 越界访问 指针指向的空间已释放 悬垂指针(dangling pointer):是指在程序中仍然存在,但不再指向有效内存地址的指针。当指针指向的对象被释放或销毁后,指针仍然保留着先前所指向的内存地址,这时指针就成为悬垂指针。 1.指针未初始化这个概念非常容易理解,同变量一样,指针同样需要我们的初始化 123//初始化指针int a = 10;int*p = &a; 指针未初始化 通常是以下情况 12345int main(){ int*p; *p=20;} 这里的指针并没有指向某个内存地址,即便我们更改它的内容也是无效的 指针会默认赋予一个随机值,属于非法访问内存 当然,编译器遇到这种情况会直接报错 2.越界访问越界访问的情况通常出现在数组中 12int arr[10]={1,2,3,4,5};int*...
【VS】如何下载VS2019并初始化C/C++环境
VS的全称是Visual Studio,和vscode不是一个东西,可不要下错了哦。 1.下载,百度Visual...
【C语言】数组练习题分享
好久没记录(氵)博客了,今天记录一下昨天学习的数组练习题中的内容 数组练习题[TOC] 昨天学习的练习题挺多的,下面只记录了几个我个人认为比较重要和典型的内容 (1)错误的引用数组题目: 1int arr[10]={0}; 下面错误的引用方式是: A. arr[0]=1 B.arr[0]=5*2 C. arr[10]=2 D.arr[1]=arr[2]*arr[0] arr[10]代表数组中有10个元素,但是arr[10]的引用是下标,指第11个元素 这超出了数组10个元素的范围 答案是 C (2)数组中的逗号表达式请问以下代码输出的结果是什么? 1234567#include<stdio.h>int main(){ int arr[]={1,2,(3,4),5}; printf("%d\n", sizeof(arr)); return...
【C语言】童年经典游戏-扫雷
想必屏幕前的你,肯定玩过windows XP系统自带的那个游戏,扫雷 回想当年,我根本没看懂这个游戏是怎么玩的 比起扫雷,三维弹球对我更有吸引力 跑题了 本篇博客就让我们一起来试试,如何通过C语言代码,制作出一个“扫雷游戏se” 1.游戏程序主函数在编写这类游戏代码时,我们要用到的主函数基本是一致的 扫雷游戏的主函数和猜数字游戏的主函数相差很小 小白必学!简单的C语言应用==>猜数字游戏 123456789101112131415161718192021222324252627282930void menu()//简易目录{ printf("***************************\n"); printf("**** 1. play 0. exit*****\n"); printf("***************************\n");}int main(){ int input = 0; do ...