![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
小胡同学~
一个热爱代码的小猿~
展开
-
C语言文件总结
文件文件的基本概念 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。普通文件是指驻留在磁盘或其它外部介质上...转载 2019-08-31 17:26:54 · 414 阅读 · 0 评论 -
/杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
#define row 4#define col 4#include <stdio.h>#include <stdlib.h>int main() { int arr[row][col] = { 1, 2, 8, 9, 2, 4, 9, 12, 4, 7, 10, 13, 6, 8, 11...原创 2019-07-21 17:11:27 · 118 阅读 · 0 评论 -
不使用(a+b)/2这种方式,求两个数的平均值。(位操作实现)
#include <stdio.h>int Add(int a, int b){ int add = 0; int Move = 0; //求和 do{ add = a ^ b; Move = (a & b) << 1; a = add; b = Move; ...原创 2019-07-24 16:19:10 · 93 阅读 · 0 评论 -
1.调整数组使奇数全部都位于偶数前面。 题目: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。
#include <stdio.h>void swap(int* x, int* y){ int temp; temp = *x; *x = *y; *y = temp;}void fun(int* arr, int size){ int bound; for(bound = 0; bound < size; bound+...原创 2019-07-12 15:33:32 · 153 阅读 · 0 评论 -
扫雷游戏
#include <stdio.h>#include <stdlib.h>//创建两个二维数组b来表示地图//a)show_map 表示给玩家展示的b内容(数字表示翻开,*表示未翻开)//b)mine——map 表示l地雷的布局(0b表示不是地雷,1表示是地雷)#define MAX_ROW 9#define MAX_COL 9#define MINE_CO...原创 2019-07-06 23:20:41 · 327 阅读 · 0 评论 -
C语言操作符总结
要学懂操作符,首先我们要知道什么是操作符。“操作符”是嵌在每一条指令中的,也就是说指令系统的每一条指令都有一个操作符。首先操作符分为以下10个大类:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用,函数调用和结构成员现在详细介绍每一种操作符:1.算术操作符符号: + - * / %+:分别用于整...原创 2019-07-06 16:24:22 · 263 阅读 · 0 评论 -
编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7
#include <stdio.h>int different_bits(int m, int n){ int count = 0; for(int i = 0; i < 32; i++){ if((m & (1 << i)) != ((n & (1 << i)))){ count+...原创 2019-07-05 23:51:44 · 134 阅读 · 0 评论 -
输出一个整数的每一位。
#include <stdio.h>void all_bits(int num){ for(int i = 0; i < 32; i++){ if((num & (1 << i)) != 0){ printf("1 "); }else{ printf("0 "); ...原创 2019-07-05 23:32:33 · 160 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
#include <stdio.h>void odd_bits(int num){ for(int i = 1; i < 32; i = i + 2){ if((num & (1 << i)) != 0){ printf("1 "); }else{ printf("0 ...原创 2019-07-05 23:25:08 · 128 阅读 · 0 评论 -
写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) {
#include <stdio.h>int count_one_bits(unsigned int value){ int i; int count = 0; for(i = 0; i < 32; i++){ if((value & (1 << i)) != 0){ count++; ...原创 2019-07-05 22:44:37 · 213 阅读 · 0 评论 -
将二进制位的某一位变为1或0。
#include <stdio.h>int main(){ int num = 9; int n = 3; // n为想将第n位变为1或0; //将二进制的第n位变为1. int ret = num | (1 << 3); printf("%x\n", ret); //将二进制的第n位变为0. int ret = n...原创 2019-07-05 14:54:31 · 9164 阅读 · 2 评论 -
编写代码实现:求一个整数存储在内存中的二进制中1的个数。
#include <stdio.h>//方法一:int main(){ int num = -10; int i; int count = 0; for(i = 0; i < 32; i++){ //如果这个表达式的值为0, 说明这个数字的第i 位就是0p; if((num & (1 << i)...原创 2019-07-04 23:35:46 · 204 阅读 · 1 评论 -
不创建临时变量实现两个数的交换。
#include <stdio.h>方法一:int main(){ int a = 10, b = 20; a = a ^ b; b = a ^ b; a = a ^ b; printf("a = %d, b = %d\n", a, b); return 0;}方法二:int main(){int a = 10, b = 20...原创 2019-07-04 22:31:30 · 149 阅读 · 0 评论 -
编写一个程序,提示用户输入天数,然后将其转换成周数和天数。通过while循环让用户重复输入天数,当用户输入一个非正值,循环结束。
#include <stdio.h>int main(){ int days; printf("请输入天数:"); scanf("%d", &days); while (days > 0){ int weeks = days / 7; printf("%d days are %d weeks, %d days\n", da...原创 2019-07-04 20:16:46 · 4241 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student". 要求: 不能使用库函数。 只能开辟有限个空间(空间个数和字符串的长度无关)。
#include <stdio.h>void reveser_word(char* arr, int left, int right) { while (left < right) { char tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; ...原创 2019-07-09 21:53:30 · 133 阅读 · 0 评论 -
实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
#include <stdio.h>#include <stdlib.h>void change(char* a, char* b){ char c; c = *a; *a = *b; *b = c;}void left_rot(char arr[], int size){ int bound = 0; int i...原创 2019-07-22 15:29:54 · 119 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCD
#include <stdio.h>#include <stdlib.h>void change(char* a, char* b){ char c; c = *a; *a = *b; *b = c;}void left_rot(char s1[], char s2[], int size){ int i = 0; ...原创 2019-07-22 17:13:33 · 147 阅读 · 0 评论 -
C语言实现通讯录
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#define PERSONS_MAX_SIZE 200#define NAME_MAX_SIZE 1024#define PHONE_MAX_SIZE 100typedef struct...原创 2019-08-31 17:20:12 · 476 阅读 · 0 评论 -
模拟实现memmove
memmove它在标准库中:void * memmove ( void * destination, const void * source, size_t num );它的用法主要是来弥补memcpy的不足,因为memcpy复制的两个内存位置不能有重叠,memmove和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 如果源空间和目标空间出现重叠,就得使用mem...原创 2019-08-23 15:24:17 · 176 阅读 · 0 评论 -
模拟实现memcpy
** memcpy 在标准库中:void * memcpy ( void * destination, const void * source, size_t num)**这个函数的用法是:函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 ‘\0’ 的时候并不会停下来。 如果source和destination有任何的重叠,...原创 2019-08-23 14:55:19 · 197 阅读 · 0 评论 -
模拟实现strcat
strcat函数的用法是字符串拼接,将源字符串拼接到目标字符串的结尾位置。实现strcat的方法就是:找到目标函数的终止位置,也就是 ‘\0’ 的位置.然后我们将 ‘\0’ 和之后的内容替换成源字符串的内容。#include <stdio.h>#include <stdlib.h>#include <assert.h>//因为我们是将源字符串拷贝给目...原创 2019-08-17 15:55:06 · 278 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。 编程实现。
在这个问题中我们需要注意的就是每次喝完的空瓶都可以来兑换新的汽水,而新的汽水也会带来新的空瓶。如果将这一点相同这道题就比较简单。所以这道题需要的注意的就是怎么计算出新产生的空瓶,并且更新喝过汽水的总数。首先这是一个循环的过程,循环的终止条件就是当空瓶数 <= 1 时,循环终止。我们第一次的到的空瓶数和喝掉汽水的总数就是给的钱数。而两个空瓶可以换一瓶,所以新的得到的饮料为上一次的空瓶数除...原创 2019-08-17 15:25:28 · 442 阅读 · 0 评论 -
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。(详解)
之前的问题是一个数组中只有一个数字出现一次,其他所有数字都出现了两次。在这个问题中用的异或方法:因为两个数字异或,也就是数字所对应的二进制位进行异或。相同为0,相异为1。两个数字相同,所以她们的异或结果也为0。将数组中所有的数字全部异或后得到的就是那个只出现一次的数字。所以解决这道题依然用异或的方法。下面就是解题的思路:看到这道题首先的想法就是如果能将那两个不同的数字分开在两个数组中,再分别找...原创 2019-08-17 15:06:08 · 366 阅读 · 0 评论 -
模拟实现strcmp
strcmp函数是用来比较字符串的大小。它是用一种称为字典序的方法来比较,也就是如果第一个字符串中的第一个字符比第二个字符串中的第一个字符大,那它就整体大于第二个字符串,并且返回一个大于0的数字,如果小于,那么久返回一个小于0的数字,等于则比较第二个字符,以此类推,直道比较完整个字符串,如果还没返回一个大于0或者等于0的数字,那么就代表他们两个字符串相等,于是返回0;通常我们利用字符串相等返回0...原创 2019-08-21 17:21:49 · 242 阅读 · 0 评论 -
模拟实现qsort
qsort函数是一个标准库中快速排序的函数,他将数组中两个相邻元素进行相减(左边减右边),根据返回值来进行排序,如果返回值小于等于0 他们的位置不变,大于0将右边至于左边前面,但是排序的规则(生序还是降序)由我们来定。并且需要排序的内容中,它们的类型都是要一样的,否则就不能使用 qsort 函数。如果要模拟实现 qsort 那我们就要了解 qsort 函数的原理。首先使用 qsort 函数时我们...原创 2019-08-21 16:47:32 · 471 阅读 · 0 评论 -
模拟实现strchr
strchr函数是用来在字符串中查找是否存在某个字符,如果存在,则返回在字符串中第一次出现的地址,否则返回NULL。我们的思路就是遍历一遍字符串,看是否存在字符,如果存在,则立即返回这个地址。下面实现strchr,代码如下:#include <stdlib.h>#include <stdio.h>#include <assert.h>const c...原创 2019-08-21 16:19:44 · 198 阅读 · 0 评论 -
模拟实现实现strstr
strstr函数是用来判断字符串1中的是否存在子字符串和字符串2相等,如果存在返回字符串1中子字符串首字符的地址,如果不存在则返回NULL。例如:str1[] = “abcdefg”;str2[] = “def”;strstr(str1, str2);它的返回值就是 str1 中 d 的地址。明白了它的用法,我们就可以来实现 strstr 函数。首先我们的思路就是连续对 str1...原创 2019-08-21 15:55:01 · 248 阅读 · 0 评论 -
模拟实现strcpy
strcpy函数的用法是将源字符串复制到目标字符串上。需要注意的是首先在使用时我们要考虑目标字符串是否足够大,也就是说是否有足够的空间来容纳源字符串。如果可以那么就可以复制,否则会产生内存越界,发生未定义行为。如果要模拟实现strcpy,我们的方法是将源字符串中的每个字符依次复制到目标字符串中。代码如下:#include <stdio.h>#include <stdlib...原创 2019-08-21 15:10:41 · 104 阅读 · 0 评论 -
C语言小结(思维导图)
原创 2019-08-15 16:38:13 · 184 阅读 · 0 评论 -
C语言指针总结
C语言指针的学习主要包括以下6个重点:指针是什么指针和指针类型指针运算指针和数组二级指针指针数组下来就分条详细总结以上6个重点。1.什么是指针在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电 脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将 地址形象化的称为“指针”。通俗来说就是...原创 2019-08-19 15:24:32 · 220 阅读 · 0 评论 -
3.在屏幕上打印杨辉三角。
#include<stdio.h>int main(){ int row = 1; int col; int i, j; printf("请输入你想打印多少行的杨辉三角:"); scanf("%d", &col); printf("1\n"); for(i = 2; i <= col; i++){ ...原创 2019-07-03 21:47:28 · 199 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
#include <stdio.h>int different(int arr[], int size){ int i; int different_num = arr[0]; for(i = 0; i < size - 1; i++){ different_num = different_num ^ arr[i + 1]; }...原创 2019-07-09 12:51:46 · 143 阅读 · 0 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。#include<stdio.h>int main(){ int Murderer; for(Murderer = '...原创 2019-07-03 15:15:19 · 195 阅读 · 0 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.h>int DigitSum(int n){ if(n < 10){ return n; } return n % 10 +DigitSum(n / 10);}int main(){ int n; printf("请输入你想求的数:"); scanf("%d", &n);...原创 2019-06-29 22:17:41 · 278 阅读 · 0 评论 -
编写一个函数 reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>void reverse_string(char* string){ if(*string == '\0'){ printf("%c", *string); }else{ reverse_string(++string); printf("%c", *string);...原创 2019-06-29 22:25:00 · 169 阅读 · 0 评论 -
递归方式实现打印一个整数的每一位
#include <stdio.h>void fun(int n){ if(n > 9){ fun(n / 10); } printf("%d ", n % 10); }int main(){ int n; printf("请输入数字:"); scanf("%d", &n); fu...原创 2019-06-29 22:57:08 · 252 阅读 · 0 评论 -
递归和非递归分别实现求n的阶乘
//递归实现求n的阶乘#include <stdio.h>int fun(int n){ if(n == 1){ return 1; }else{ return n * fun(n - 1); }}int main(){ int n; printf("请输入想求几的阶乘:"); scanf("%d"...原创 2019-06-29 23:21:35 · 176 阅读 · 0 评论 -
递归和非递归分别实现strlen
//非递归代码:#include<stdio.h>int mystrlen(char* string){ int count = 0; while (*string != '\0') { count++; string++; } return count;}int main(){ char st...原创 2019-06-29 23:26:28 · 84 阅读 · 0 评论 -
着重复习:定义一个函数可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)
#include<stdio.h>void fun(int n, int arr[], int size){ int left = 0; int right = size - 1; while(left <= right){ int mid = (left + right) / 2; if(n > arr[mid])...原创 2019-06-30 21:25:23 · 613 阅读 · 0 评论 -
创建一个有20个值的数组,前两项的值为2,3,之后的每一个值等于前两项的和.
#include <stdio.h>int main(){ int i = 2, j = 3; int count = 0; int result; int arr[20]; for(int k = 1; k <= 20; k++){ if(k == 1){ arr[k] = 2; ...原创 2019-07-01 18:14:04 · 609 阅读 · 0 评论