C语言
草里多
这个作者很懒,什么都没留下…
展开
-
给定一个十进制整数, 如何转成二进制形式? 如何转成十六进制形式?---C语言
给定一个十进制数字,如何将其转换成二进制、十六进制。首先可以模拟一下我们平时是如何将十进制转换成二进制和十六进制的,大家应该使用短除法更多一些。那么我们可以使用短除法的思想将十进制转化为其他进制。可以使用递归实现。下面,我们看一下实现的二进制转换代码:void transTwo(int n){ if (n == 0 || n == 1){ printf("%d", n); } else{ transTwo(n / 2); printf("%d", n % 2); }}十进制转换原创 2020-07-17 17:41:48 · 371 阅读 · 0 评论 -
C语言的文件操作---避免入坑
最近写了一些关于文件的代码,发现关于文件的一些内容,有很多坑啊。所以我总结了一下各种关于文件的函数,避免在使用的时候入坑。文件操作函数1.fopen函数2.fclose函数3.fprintf函数4.facanf函数5.feof函数6.EOF1.fopen函数该函数的原型是 FILE * fopen ( const char * filename, const char * mode),该函数的第一个参数是指文件名,第二个参数是以什么样的形式打开。它的返回值是一个文件指针变量。假如该文件打开成功,则该原创 2020-07-09 17:45:02 · 361 阅读 · 0 评论 -
动态内存分配的通讯录--C语言
这里写一个可以自动增长空间的通讯录,各个函数的实现方法类似于我的上上一篇博文。只不过这里不是定长的通讯录,被改做自动申请内存的通讯录。使用malloc函数和realloc函数实现动态增长。下面来看一下,具体的代码实现:#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)#define SIZE 3struct add{ char name[64]; char sex[10]; int原创 2020-07-07 14:39:14 · 174 阅读 · 0 评论 -
关于枚举类型--C语言
枚举类型,顾名思义就是列举出来,即把可能的情况都一一列举出来,枚举类型的定义,例如:enum corlor{RED,WHITE,BLACK,YELLOW};看着这种定义方式,和结构体很相似,但是一定要注意细节,结构体的每个成员后面带的是“;”。而枚举类型每个成员后面带的是“,”----逗号。另外枚举类型的元素在习惯上时大写的,枚举类型元素的本质是int类型的,并且在默认情况下,元素的值是从0开始递增的,也就是默认情况下,第一个元素是0,第二个元素是1,一次类推。原创 2020-07-02 20:03:17 · 263 阅读 · 0 评论 -
写一个通讯录-----C语言
写通讯录的方法有很多种,今天我写一个最容易想到的方法完成通讯录。使用结构体存储通讯录里面的相关内容具体的想法也是很简单的,。就是定义一个结构体数组,数组的大小为1000,由于要存储足够多的成员信息。在结构体内部,结构体成员有姓名,性别,年龄,电话,地址。里面具体每个功能都由一个函数实现。需要注意的是结构体数组传参,其实和数组传参类似。下面看一下代码:#include<stdio.h>#include<windows.h>#pragma warning(disab原创 2020-07-02 15:25:00 · 241 阅读 · 0 评论 -
memmove函数的模拟实现--C语言
memmove是一个可以实现各种类型的复制的函数。与其他有类似功能的函数相比,这个函数可以在两个目标内存有重复情况下,很容易地出错。该函数的原型是: void *memmove(void *dest, const void *src, unsigned int count);参数说明:dest:是目标内存的地址。src:被复制内容的内存地址。count:需要复制的字节数。具体实现如下:#include<stdio.h>#include<windows.h>#pragm原创 2020-06-17 17:04:04 · 141 阅读 · 0 评论 -
写一个特殊矩阵---C语言
#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)void Print(int n){ int i = 0, j = 0; for (; i < n; i++){ if (i == 0){ for (int i = 0; i < 2 * n - 1; i++){ printf("%d ", 1); }printf("\n"); continue;原创 2020-06-10 17:22:06 · 353 阅读 · 0 评论 -
实现一个函数,可以左旋字符串中的k个字符。---C语言
实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB.实现字符串的左旋即将字符串的字谜放在字符串的后面,然后在将字符串向前挪。其实要实现该功能,实现方法很多,我这里写两种。方法一:将要左旋的字母个数n通过键盘输入得到。根据个数取字符串前n个字母,将其放在一个数组里,然后将字符串后面的字符向前挪,之后将数组里面的内容放在字符串的后面即可完成。下面看一下这个方法的代码:内容其实很简单,关键要将变量分清,并且要用指针对字符串的内容进行操作。原创 2020-06-06 14:29:53 · 456 阅读 · 0 评论 -
qsort函数的使用--C语言
qsort函数是一种可以实现多种类型数据比较的函数,可int,可float,可double等等void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));函数参数介绍:1,要比较的数组的地址,2.数组的个数,3.数组元素的类型长度,4.比较函数的地址。使用该函数,需要为相应类型写一个比较的函数即可。以下是代码的实现:#include<stdio.h>#include<W原创 2020-06-05 07:17:35 · 153 阅读 · 0 评论 -
重写库函数qsort(只比较int)---C语言
#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)#define N 10int compareint(void *t, void *t1){ int *a = (int*)t; int *b = (int*)t1; return *a - *b;}void swap(void *a,void *b){ int *c = (int *)a; int *d = (int *)b; i原创 2020-06-04 22:13:11 · 220 阅读 · 0 评论 -
将三阶矩阵旋转90度---C语言
将三阶矩阵旋转90度,先找到其规律,对应下标,以及数字的转化,就可以写出代码,具体如下:#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)#define N 3void rotate(int t[N][N], int n){ for (int i = 0; i < n-1; i++){ int a = t[0][i]; t[0][i] = t[2 - i][0]; t[2 -原创 2020-06-03 22:36:57 · 1749 阅读 · 0 评论 -
会场安排问题----C语言
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排。这个问题先要使用贪心算法,那么将所有活动用贪心算法排一遍,然后将剩下活动里剩下的活动继续用贪心算法解决,一直到把所有的活动都安排完。每用一次贪心算法,会场数+1.直到吧活动安排结束。使用贪心算法的前提是:将活动按照活动结束时间非减序排列。这样就把整个问题解决了。下面看看具体实现:#include<stdio.h>#include<Windows.h>#pragma warnin原创 2020-06-02 21:34:03 · 1433 阅读 · 0 评论 -
逻辑推理---确定比赛名次
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。关于该题,代码实现如下:#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)void Print(){ int a = 1; for (;原创 2020-05-31 19:02:32 · 557 阅读 · 0 评论 -
输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
具体要求。输入:两个已经排好顺序(升序)的两个字符串输出:一个合并在一起的有序(升序)的字符串要求:设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。如果采用先进行串连接,然后再进行排序的算法,则效率太低了。输入:abcdefbcefghi输出:abbccdeeffghi通过分析写出如下代码:#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)#define SIZE 1原创 2020-05-29 23:11:00 · 5334 阅读 · 0 评论 -
计算m个A,n个B可以组合成多少个不同排列的问题。---C语言
计算m个A,n个B可以组合成多少个不同排列的问题。例如计算3个A,2个B可以组成多少种排列?(如:AAABB, AABBA………………)根据题目,我们要计算出其排列组合的个数,需要先把组合中的各个字母拿出来,并且计算有多少个,然后根据个数,计算其排列组合的数目。具体实现如下:#include <stdio.h>#include<Windows.h>#pragma warning(disable:4996)void Print(int n1, int num){ int原创 2020-05-29 11:54:42 · 1543 阅读 · 0 评论 -
实现写入i love you!,输出you!love me----C语言
将这个题目实现的方法:先将字符串逆序,然后将单词逆序。最终得到输出结果。具体代码如下#include<stdio.h>#pragma warning(disable:4996)#include<Windows.h>#include<string.h>void reverse(char *p, char *pl){ while (p<pl){ char temp = *p; *p = *pl; *pl = temp; pl--; p+原创 2020-05-27 21:31:21 · 1237 阅读 · 0 评论 -
逻辑推理编程---C语言
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单写出代码如下:#include<stdio.h>#pragma warning(disable:4996)#include<Windows.h>int main(){ char a = 'x'; for (; a <= 'z'; a++){ char b = 'x';..原创 2020-05-27 14:02:19 · 670 阅读 · 0 评论 -
浮点型数据在内存里面的存储
浮点数,即带有小数点的数字。任何浮点型数据在内存里的存储形式是:(-1)^s * M* 2^e ,这里的s取值0或者1,当该数为负数的时候,s=1,当这个数为正数的时候,s=0. M表示有效数字,取值范围是大于1小于2。e 表示指数,是将数字写成二进制科学计数的指数。我们观察 (-1)^s * M* 2^e ,这个表达式,里面的s,M,e是未知数,其他都是常数,所以计算机并不会存储,计算机只会存储s,M,e。这样节省了计算机的内存。在二进制里面,M使用科学计数法只会写成:1.xxxxx。而且小数点前面原创 2020-05-26 22:35:53 · 681 阅读 · 0 评论 -
打印个位数为6并且可以被3整除的五位数--C语言
看到这个问题,首先想五位数的范围,10000-99999.然后各位数为6,表示该数模10为6,。最后将每一位上的数字取出来,相加,并判断是否能够被3整除。具体代码如下int main(){ int i = 0; int sum = 0; for (i = 10000; i < 100000; i++){ sum = i % 10 + i / 10 % 10 + i / 100 % 10 + i / 1000 % 10; if (sum % 3 == 0 && i原创 2020-05-25 22:27:22 · 2675 阅读 · 0 评论 -
对一串整数序列排序,左边为奇数,右边为偶数---C语言
对一串整数序列排序,使得左边为奇数,右边为偶数。有很多方法,可以遍历一遍找出奇数,在遍历一遍找出偶数;除此之外也可以使用从量变向中间遍历的方法,本篇讲的就是后者。具体的遍历方法:1.判断第一个元素和最后一个元素是奇数还是偶数。2.如果都是奇数,那么前面的元素位置正确,后面的元素位置错误,则使前者元素的右相邻元素。3,如果都是偶数,则后面元素的位置正确,取后者元素的做相邻元素;4如果两个数字前者为偶数,后者为奇数,则交换两元素的位置;5如果前者为奇数,后者为偶数,则取前者的右相邻元素,后者的做相原创 2020-05-18 15:53:44 · 889 阅读 · 0 评论 -
求两个整数的最小公倍数---C语言
求两个整数的最小公倍数:首先分析一下,两个数的最小公倍数的可能取值范围一定是:两个数中最大的那个数到两个数的乘积。那么久可以将最小公倍数的情况分类:1.是两个数中最大的这个数。2.是两数的乘积。3.12情况之间的数,也不知道哪一个,所以可以在期间遍历一遍,找出这个数。所以一下就是代码的实现:#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)int Large(int n1, int n2){原创 2020-05-18 11:00:29 · 2893 阅读 · 0 评论 -
库函数strcpy重写---C语言
#include<stdio.h>#include<Windows.h>#include<math.h>#pragma warning(disable:4996)void Strcpy(char *s,char *s2){ char *p = s2; while (*p != '\0'){ *s = *p; *p++; *s++; }}int main(){ char str[10] = "0"; char str1[] = "world原创 2020-05-18 10:16:18 · 377 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以有多少汽水----C语言
喝汽水问题:1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以有多少汽水?首先先用20元买汽水,然后假设把这个汽水都喝完了,然后用这些空瓶子换汽水,再把这些汽水喝掉,再用空瓶子换,知道自己只有一个空瓶子或者没有空瓶子为止。以下就是实现的过程:#include<stdio.h>#include<Windows.h>#include<math.h>#pragma warning(disable:4996)void Num(int m){ int n1 = m原创 2020-05-15 19:23:04 · 873 阅读 · 0 评论 -
打印乘法口诀表---C语言
学习了C语言,我们可以用C语言打印出以前学的乘法口决标。具体代码如下:test.h# ifndef _TEST_H_//预处理符#define _TEST_H_#include<stdio.h>#include<Windows.h>#include<math.h>#pragma warning(disable:4996)//void Swap_(int * num1_, int * num2_);void Multiplication();#e原创 2020-05-13 13:05:43 · 348 阅读 · 0 评论 -
打印出菱形---C语言
打印图片,如下:观察菱形的组成,可根据规律分别打印空格和星星来实现菱形打印。第一行6空格1星星第二行5空格3星星很容易得到规律。具体可通过循环(对每一行打印)。又可以以第7行作为分界线,分两种情况打印。具体代码如下:#include<stdio.h>#include<Windows.h>#include<math.h>#pragma warning(disable:4996)#define col 13#define row 13void pri原创 2020-05-13 12:55:15 · 321 阅读 · 0 评论 -
打印“水仙花数”---C语言
首先我们要了解什么是水仙花数:水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。通过举得例子,容易知道,要判断一个数是不是“水仙花数”要对该数作如下处理:1.知道这个数有多少位,比如153有三位。2.将该数的每一位都拿出来,比如1 、 3、5.3.将每一位对应的指数运算加起来,比较该数与得到的总和是否相等。4.根据所给范围,遍历每一个数,重复123操作。这就可以实现水仙花数的打印。以下是代码的实现:其中原创 2020-05-10 20:56:23 · 642 阅读 · 0 评论 -
写一个函数实现字符串的逆序--C语言
写一个函数实现字符串的逆序。一般来讲,实现字符串的逆序有两大类主要途径。一、改变字符串的内容–逆序。二、不改变字符串的内容逆序。这里是实现了改变字符串的内容,实现逆序。要改变字符串对的内容,那么就会用到指针。具体功能函数代码如下:void Reversestring(char *a, int n){ char* start = a, *end = a+strlen(a)-1; while (start <end){ char temp =* start; *start = *end原创 2020-05-10 17:58:05 · 6534 阅读 · 0 评论 -
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 例如:2 + 22 + 222 + 2222 + 22222(c语言实现)
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 例如:2 + 22 + 222 + 2222 + 22222.首先看到这个题目要求,我们先思考如何做到将2 、22 、222 、2222等打印出来,并实现相加。我们可以看出:22=2x10+2222=22x10+22222=222x10+2;22222=2222x10+2所以可以通过对变量的更新,求得每一个数,最终使得这些数字相加,才得到最终的结果。具体实现如下:#include<stdio.h>#原创 2020-05-10 17:44:55 · 1526 阅读 · 1 评论 -
使用指针输出数组的内容---C语言
使用C语言将数组的内容打印出来,如下代码:#include <stdio.h>#pragma warning(disable:4996)int main(){int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };int *p = arr;int i = 0;for (; i < 10; i++){printf("%d ", *(p + i));}system("pause");return 0;}指针原创 2020-05-09 15:03:34 · 2217 阅读 · 0 评论 -
获取二进制序列的所有的偶数位和奇数位,二进制输出序列---C语言
要获取一个数的奇数位或者偶数位,还是需要通过移位实现。#include<stdio.h>#include<Windows.h>#pragma warning(disable:4996)void Printodd(int n){ while (n != 0){ if (n % 2 == 0){//最后一位为0 printf("%d ", 0); } ...原创 2020-04-27 10:02:32 · 292 阅读 · 0 评论 -
不允许创建临时变量,交换两个整数的内容----C语言
不允许创建临时变量,交换两个整数的内容,这就用到了我们在长元音中所学的按位异或。按位异或支持交换律,并且有0与任何数按位异或都为原数。则x异或y异或x就等同于x异或x异或y也等同于0异或Y,这样就可以实现两个数不创建第三个变量实现交换。代码如下:#include<stdio.h>#include<Windows.h>#pragma warning(disable:49...原创 2020-04-26 15:57:00 · 490 阅读 · 0 评论 -
求两个整型数的二进制形式的不同位数--C语言(按位异或和移位操作)
首先看这个题目,需要连个整形术,所以先要开辟两个整型数的空间,存放数字。由于一个数在计算机里储存是以二进制的形式存放,所以我们可以让计算算计帮我们做这个操作。比较二进制的数,可以采用按位异或(相同为0,相异为1),这样两个数按位异或后悔得到一个新的数,这个新的数的二进制,其中的1表示的是两个原二进制数这一位不同,0表示这一位是相同的。则我们只需要数一下这个新的二进制数的1的个数。那么如何数着新...原创 2020-04-26 15:01:40 · 877 阅读 · 0 评论 -
简单的扫雷-----C语言
以前,肯定都玩过扫雷,学了C语言后,我们也可以用C语言写一个简单的扫雷。首先,思考一下,扫雷是怎么玩的。玩家进入扫雷之后就会有一个界面,看到一个完整的盘。然后点击一个区域,如果有雷,则被炸死,如果没有雷,则继续游戏,被点击的部位会出现雷的个数。然后继续游戏。这里的需要两个棋盘,一个是玩家看到的带有面板的棋盘,还有一个是显示雷分布的棋盘。这两个盘都可以用二维数组来表示。以下是主要逻辑的代码(这...原创 2020-04-25 12:24:07 · 170 阅读 · 0 评论 -
输出100-200的素数---C语言
要输出一定范围的素数,就先要了解素数。素数也就是质数,也就是除数只有1和本身。再分析,其实一个数的两个除数,是一个大一个小的,在特殊情况下就是两个除数相等。那么我们也就只用思考在1-sqrt(n)(n表示这个数,sqrt(n)表示根号n).只要在这个范围里,n只能被一个数整除,那必定是1,即n是素数。下面是实现的过程。第一步是写在主函数里的框架:#include"test.h"int ma...原创 2020-04-24 09:53:42 · 652 阅读 · 0 评论 -
C语言----打印数组中的每一个元素,并对数组逆序,最后将数组的值初始化为0
我们可以先创建一个整型数组,利用函数对该数组实现一系列的操作。如下是一个主函数#include"test.h"int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int num = sizeof(arr) / sizeof(arr[0]); printf("数组:\n"); print(arr, num);//打印数组。...原创 2020-04-23 22:51:27 · 1440 阅读 · 0 评论 -
简单的三子棋---C语言
学完C语言,我们可以写很多好玩的小游戏。今天就介绍一个用C语言写的简单的小游戏------三子棋。首先,分析一下:三子棋也就是平常的井字棋,用C语言写的话,界面上应该给玩家的展现的。首先应该是空的棋牌,这个棋牌如何呈现给玩家呢,可以用二维数组实现。其次是玩家如何下棋?玩家通过棋盘的坐标,告诉棋子要落在哪里,以我们平时的习惯,应该在棋盘上画x,o.这里和使用宏定义,在以下的代码中将会展示。最...原创 2020-04-23 17:46:52 · 164 阅读 · 0 评论