C语言
文章平均质量分 54
关于C语言中的诸多小知识点小代码
人气小姜
这个作者很懒,什么都没留下…
展开
-
C语言:关于指针数组和数组指针
一、指针数组 按照语文的理解,我们知道指针数组的中心词是数组,而指针是用来修饰数组的定语。事实上在C语言中也确实是这样,指针数组,就是一个数组,一个存放指针的数组。它常用于指向若干字符串,这样使字符串处理更加灵活方便。 下面我们通过几个例子来理解一下指针数组:int* arr1[10];char* arr2[4];char** arr3[5];这三个语句是指针还是数组...原创 2018-04-25 16:13:06 · 311 阅读 · 0 评论 -
C语言:浅谈函数指针、函数指针数组与函数指针数组的指针
一、函数指针 我们知道,函数其实就是一段程序的子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。而指针是一个变量,用于存放地址的变量。那么函数指针,从语文的角度讲,中心词是指针,函数是修饰指针的定语。事实上C语言中也是这样的:函数指针,是一个指针,一个指向函数的指针。这时大家可能就会纳闷了,函数有地址吗?怎么可...原创 2018-04-26 15:05:16 · 335 阅读 · 0 评论 -
C语言:模拟实现strcpy函数与strcat函数
strcpy函数: 首先我们来了解一下strcpy函数的功能和用法:strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。也就是将一个字符串拷贝到另一个字符串中。那接下来我们看如何具体实现。我们的基本思想是定义两个指针src和dest,分别指向源字符串和目标字符串。当源字符串指针没有走到’\0...原创 2018-04-24 14:12:42 · 512 阅读 · 0 评论 -
C语言:模拟实现strcmp函数
首先我们来看下strcmp函数的功能和用法:比较两个字符串。设这两个字符串为str1,str2,若str1等于str2,则返回零;若str1小于str2,则返回负数;若str1大于tr2,则返回正数。那么下面我们就来看看具体怎么实现这个strcmp函数: 我们的基本思想是:先定义两个指针分别指向这两个字符串,然后当两个字符串都不为’\0’并且指针所指向的位置字符相等时,两个指针变量都向后移动...原创 2018-04-24 15:36:40 · 1960 阅读 · 0 评论 -
C语言:模拟实现memmove函数
首先模拟实现memmove函数之前,我们需要先明白这个函数的功能和用法:memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。也就是说,他可以处理memcpy函数不能处理的如果拷贝时出现重叠的情况。那么下...原创 2018-04-23 17:18:40 · 724 阅读 · 0 评论 -
C语言:模拟实现strstr函数与strchr函数
strstr函数:要模拟实现strstr函数,首先我们应该了解一下strstr函数的定义与功能:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。那么下面我们来具体说明一下怎么模拟实现strstr函数:首先我们要知道它具体是怎么判断一个字符串是否为另一个字符串的子串,我们的基本思想...原创 2018-04-22 19:05:32 · 579 阅读 · 0 评论 -
C语言:模拟实现memcpy函数
模拟实现memcpy函数之前,我们首先来了解一下memcpy函数的功能和用法:memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。它的函数原型是void *memcpy(void *dest, const void *src, size_t n);此处dest代表目标变量,s...原创 2018-04-23 11:01:57 · 1341 阅读 · 0 评论 -
C语言:三种方法模拟实现strlen函数
在模拟实现strlen函数之前,我们首先来看下strlen函数的定义即功能:strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。即strlen函数计算的是不算结束标志符’\0’在内的字符串的长度。了解了strlen函数的定义即功能,下面...原创 2018-04-22 11:28:47 · 6279 阅读 · 0 评论 -
C语言:浅谈可变参数函数
说起函数,我们可能第一时间就想到参数是不能改变的。但有一种可变参数的函数,通过将函数实现为可变参数的形式,可以使得函数可以接受1个以上的任意多个不固定的参数,是不是很神奇呢,下面我们就通过一个例子来详细说一下这个可变参数到底是怎么一回事首先看代码,这个代码里面有比较详细的注释,大家可以先看看是否可以看懂#include<stdio.h>#include<stdlib...原创 2018-04-19 17:17:27 · 286 阅读 · 0 评论 -
C语言:浅谈函数的调用过程及栈帧的创建和销毁
说起函数调用,我们可能很快就想到:程序从main函数走起,遇到调用函数的语句,就跳转到此函数所在的语句块执行此函数,执行完之后再返回main函数继续执行程序。但是这只是笼统的描述,其实在函数内部,函数调用要经过一系列的复杂的过程,下面为大家一一详细叙述。 说到函数调用,我们不可避免的要说到栈帧的创建和销毁。函数调用过程要为函数开辟空间,用于本次函数的调⽤用中临时变量的保存、现场保护。这块栈空间...原创 2018-04-17 22:20:05 · 352 阅读 · 0 评论 -
C语言实现扫雷小游戏
我们首先说一下基本思路:首先我们需要两个面板,一个显示面板,一个雷面板,这两个面板需要用二维数组来实现。其次,要在雷面板中布置雷,然后需要输入坐标,排查雷,继而判断是否踩到雷,如果踩到雷,那么玩家死翘翘,游戏结束,如果没有踩到雷,需要判断此坐标周围雷的个数。如果最后设置雷的总个数全部被排查出来,那么玩家赢,游戏结束。我们需要创建一个头文件lei.h来存放需要用到的函数。创建一个源文件lei.c...原创 2018-04-15 17:44:16 · 513 阅读 · 0 评论 -
C语言三种方法求一个数二进制序列中出现1的次数
第一种方法,模2除2法。一个二进制序列通过模2运算,可以求得它的最末位数字,通过除2运算,可以去掉最末位的数,如此循环,如果模2的结果是1,那么给计数器加1,最后输出计数器的值,即出现1的个数。但这种方法只能求一个正数二进制序列出现1的次数,因为如果是负数模2的结果会永远都是0,而count也就永远都是0。具体实现代码如下:#define _CRT_SECURE_NO_WARNINGS 1#inc...原创 2018-04-01 14:23:19 · 1713 阅读 · 0 评论 -
三种方法交换两个数的值
第一种,也是最原始的方法,使用中间变量,将a与b的值进行交换#include<stdio.h>int main(){ int a = 10; int b = 20; int c = 0; printf("交换之前:%d %d", a, b); c = a; a = b; b = c; printf("\n交换之后:%d %d", a, b); system("pause"); retu...原创 2018-03-23 23:24:12 · 1115 阅读 · 0 评论 -
打印输出100-200之间的素数
打印输出100-200之间的素数,三种方法,下面一一介绍第一种,也是最原始的方法#include<stdio.h>int main(){ int i = 0; int j = 0; printf("100-200之间的素数:"); for (i = 100; i <= 200; i++) //100-200之间的数 { for (j = 2; j &...原创 2018-03-21 11:31:04 · 10570 阅读 · 0 评论 -
猜数字游戏
```#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<time.h>//菜单打印函数void menu(){printf("*****************************\n");printf("******* 1.pla...原创 2018-04-04 15:19:11 · 156 阅读 · 0 评论 -
C语言操作符总结
C语言操作符是说明特定操作的符号,它是构造C语言表达式的工具。下面对C语言操作符做一个小小的总结:C语言操作符具体分为算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。下面一一介绍: 1.算术操作符。 算术操作符包含+ - * / %五个操作符。 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数...原创 2018-03-31 10:28:07 · 182 阅读 · 0 评论 -
打印菱形
使用C语言代码打印菱形的一种方法,具体思想是将菱形分为上下两部分,分别打印出上半部分和下半部分。上半部分又分为打印空格和星号,此时注意星号后面的空格不需要再打印。具体实现代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; int j =...原创 2018-03-29 09:24:06 · 305 阅读 · 0 评论 -
求两个数的最大公约数
下面用两种方法求两个数的最大公约数第一种,用递减循环从较小的数开始到0依次查找能同时整除两个数的数,则这个数就为这两个数的最大公约数,代码如下#include<stdio.h>#include<stdlib.h>int main(){ int a = 0; int b = 0; int tmp = 0; int i = 0; printf("请输入两个数:"); scanf...原创 2018-03-24 15:57:54 · 475 阅读 · 0 评论 -
判断两个数组中是否有相同元素,有就输出有,没有就输出没有
第一种方法,将两个数组的值一一遍历,找寻有没有相等的数,代码如下#include<stdio.h>#include<stdlib.h>int main(){ int arr1[] = { 1, 2, 3, 5, 6, 7}; int arr2[] = { 1, 3, 4 }; int i = 0; int j = 0; for (i = 0; i <= sizeof(...原创 2018-03-24 17:16:47 · 2175 阅读 · 0 评论 -
求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!的值
对于此道编程题,一般的做法是写两个循环,大循环是1到10的阶乘之和,小循环是各个阶乘的计算,代码如下#include<stdio.h>#include<stdlib.h>int main(){int i = 0;int j = 0;int mul = 1; int sum = 0;for (i = 1; i <= 10; ...原创 2018-03-26 11:06:35 · 13097 阅读 · 1 评论 -
交换两个长度一样的数组的内容
交换两个数组的内容,也就是将两个数组内的各个元素对应交换,可以将两个数组一一遍历,如果下标相等,则交换,否则不交换,具体代码实现如下#include<stdio.h>#include<stdlib.h>int main(){ int arr1[] = { 1,3,4 }; int arr2[] = { 2,5,6 }; int i = 0; int j = 0; int n...原创 2018-03-26 18:21:43 · 445 阅读 · 0 评论 -
计算1/1-1/2+1/3-1/4+1/5......+1/99-1/100的值
计算这个算式的值,一般方法就是将所有分母为奇数的分数加起来,再将所有分母为偶数的分数加起来,最后用分母为奇数的分数和减去分母为偶数的分数和,即为最后的答案。具体实现代码如下#include<stdio.h>#include<stdlib.h>int main(){ double i=0; double j = 0; double max1 = 0, max2 = 0, ma...原创 2018-03-26 18:48:16 · 1882 阅读 · 0 评论 -
C语言实现折半查找
折半查找是有序数组查找的最简单的方法。算法描述就是将要查找的数先与此组数中间的数比较,若要查找的数比此组数中间的数大,则将这个中间的数变为新的数组第一个元素,若要查找的数比此组数中间的数小,则将这个中间数变为新的数组最后一个元素,再在新的数组里面找寻最中间的数,与要查找的数比较,以此循环,直到找到要找的数。具体实现代码如下:#include<stdio.h>#include<st...原创 2018-03-28 09:21:11 · 4608 阅读 · 0 评论 -
C语言数组部分小总结
数组,即一组相同类型元素的集合。数组的创建:1. 一维数组:type_t arr_name [const_n],其中,type_t是指数组的元素类型,arr_name是指数组的名字,const_n是一个常量表达式,用来指定数组的大小,注意,[ ]内一定要是一个常量或常量表达式,不能使变量。2. 二维数组:二维数组的创建于一维数组类似,只是多了一个维度。即type_t arr_name ...原创 2018-04-03 16:39:52 · 239 阅读 · 0 评论 -
三种方法判断一个数二进制序列中1的个数
第一种方法,也是比较容易想到的,就是模2除2法。模2运算得到这个数二进制序列中的最低位,除2去掉这个数二进制序列中的最低位。当这个数进行模2运算的结果为1时,那么它的最低位就是1,然后再进行除2运算,将倒数第二位的数置为最末位,如此循环,当这个数为0时,也就判断完了每一位是否为1。同时应该注意,这个方法只能判断正数,不能判断负数,因为负数进行模2运算的结果只能是0,这是这个方法的一大缺陷。下面是具...原创 2018-04-04 18:54:34 · 7687 阅读 · 1 评论 -
C语言冒泡排序法
下面说两种方法,一种是数组下标法,一种是指针法。数组下标法:#include<stdio.h>#include<stdlib.h>void bubble_sort(int arr[], int sz){ int i = 0; int j = 0; for (i = 0; i < sz - 1; i++) { ...原创 2018-04-04 19:34:55 · 3388 阅读 · 0 评论 -
判断并输出一个数二进制序列中偶数位序列和奇数位序列
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int num = 0; int i = 0; scanf("%d", &num); //判断偶数序列 printf("偶数序列为:"); for (...原创 2018-04-04 19:10:28 · 360 阅读 · 0 评论 -
C语言求水仙花数
水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。下面前两种方法是求3位数的水仙花数,最后一种方法扩展到n位,供大家参考。第一种方法代码如下:#include<stdio.h>#include<stdlib.h>#include<math.h>int mai...原创 2018-04-05 16:14:20 · 6228 阅读 · 0 评论 -
C语言实现三子棋小游戏
一、首先说一下具体思路: 我们首先要想到的是三子棋的棋盘是一个3*3的正方形棋盘,那么这个棋盘我们可以用一个二维数组来实现。接下来就要想到具体要怎么玩儿,首先让电脑下一个棋子走一步,然后玩家再下一个棋子走一步。电脑下棋我们要产生一些随机数,玩家下棋需要输入具体的坐标。最后就是判断输赢了:我们知道,三行三列还有两斜如果都是电脑或者玩家的棋子,那么对应的电脑或玩家获胜。如果棋盘全部被占满,...原创 2018-04-11 19:27:31 · 339 阅读 · 1 评论 -
C语言:浅谈大小端存储模式
首先说一下大小端的定义:所谓大端(存储)模式,是指把数值的高位字节放在内存的低位地址上,把数值的低位字节放在内存的高位地址上。所谓小端(存储)模式,是指把数值的高位字节放在内存的高位地址上,把数值的低位字节放在内存的低位地址上。为什么会有大端小端之分呢?我们知道,一个大于BYTE的数据类型在内存中存放要有先后顺序。对于像char这样的数据类型,本身只占一个字节的大小,不会产生什么问题,但是当数...原创 2018-04-13 16:27:06 · 1148 阅读 · 0 评论