![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
C语言学习之路
Xn.er
你可以放弃,但坚持下来一定很酷。
展开
-
C语言常见字符串函数实现
1.获取字符串的长度(strlen)#include<assert.h>//计数器方式int mystrlen(const char* str) { assert(str != NULL); int cnt = 0; while (*str++) { ++cnt; } return cnt;}//递归方式int mystrlen(const char* str) { assert(str != NULL); if (*s原创 2020-07-17 10:40:24 · 208 阅读 · 0 评论 -
什么是指针?什么是指针数组?数组指针?指针函数?函数指针??用函数指针数组实现转移表
指针概念在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”,意思是通过它能找到以它为地址的内存单元。我们简单总结一下:指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小在32位平台是4个字节,在64位平台是8个字节。指针有很多种不同的类型,比如char* pc、int* pi、short* ps原创 2020-07-14 11:37:06 · 412 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少瓶汽水
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水给20元,可以多少汽水,编程实现代码:#include<stdio.h>int main(){ int money = 20; int total = money; //汽水1元1瓶,有20元买20瓶 int empty_bottle = total; //喝完后空瓶有20个 while (empty_bottle > 1) { total += empty_bottle / 2; empty_bottle =原创 2020-05-09 21:31:13 · 276 阅读 · 0 评论 -
编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值
编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值是value的二进制位模式从左到右翻转后的值如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果返回:255...原创 2020-05-04 21:40:48 · 148 阅读 · 0 评论 -
左旋和右旋字符串中的k个字符
实现一个函数,可以右旋字符串中的k个字符ABCD右旋一个字符得到DABCABCD右旋两个字符得到CDABABCD右旋三个字符得到BCDA代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>void reverse(char* str, int left, int ...原创 2020-04-30 17:51:27 · 191 阅读 · 0 评论 -
杨氏矩阵-有一个二维数组数组的每行从左到右是递增的, 每列从上到下是递增的, 在这样的数组中查找一个数字是否存在?
杨氏矩阵有一个二维数组数组的每行从左到右是递增的, 每列从上到下是递增的.在这样的数组中查找一个数字是否存在?#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int Reseach(int a[][3], int row, int col, int num){ int i = 0; int j = col - 1;...原创 2020-04-28 10:00:42 · 205 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
输入一个整数数组, 实现一个函数来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分代码如下:#include<stdio.h>void Adjust(int* a, int n){ int i, j; for (j = n - 1; j > 0; j--) { for (i = 0; i < j; i++) ...原创 2020-04-28 09:34:57 · 283 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student"
有一个字符数组的内容为: “student a am i”, 请你将数组的内容改为"i am a student"要求: 不能使用库函数 .student a am ii ma a tnedutsi am a student代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void reserve_size(...原创 2020-04-25 23:02:28 · 141 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次, 其他所有数字都是成对出现的. 请找出这个数字(使用位运算)
一组数据中只有一个数字出现了一次, 其他所有数字都是成对出现的请找出这个数字(使用位运算)代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int arr[] = { 1, 2, 3, 4, 5, 3, 2, 1, 5 }; int i = 0; int ret = 0; int ...原创 2020-04-25 22:21:54 · 248 阅读 · 0 评论 -
不使用(a+b)/2这种方式, 求两个数的平均值
不使用(a+b)/2这种方式, 求两个数的平均值方法一:这种方法的优点在于, 当num1和num2的值非常大时, 相减能够保证结果不会溢出#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int num1 = 0; int num2 = 0; printf("Input two number:...原创 2020-04-25 21:35:35 · 104 阅读 · 0 评论 -
输入行数打印杨辉三角
输入行数打印杨辉三角:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main(){ int a[50][50] = {0}; int i, j, n; printf("输入要打印的行数n:\n"); scanf("%d", &n); for (i = 0; i < n; i++) { ...原创 2020-04-23 18:29:28 · 574 阅读 · 0 评论 -
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子:1999 2299输出例子:7代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int differ_bits(int x, int y){ int count = 0; int res = x ^ y; while (...原创 2020-04-23 16:51:52 · 109 阅读 · 0 评论 -
获取一个数的二进制序列中所有的偶数位和奇数位, 分别输出其二进制序列
获取一个数的二进制序列中所有的偶数位和奇数位, 分别输出其二进制序列代码:#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main(){ int i, j = 0; //定义2个数组来存放二进制序列 char arr1[16]; char arr2[16]; int num = 0; printf...原创 2020-04-22 22:22:43 · 147 阅读 · 0 评论 -
求一个整数二进制位中1的个数
写一个函数返回参数二进制中 1 的个数比如:unsigned int value = 15;00000000 00000000 00000000 00001111函数返回这个整数的二进制位中有4个1代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int count_one_bits(unsigned int va...原创 2020-04-22 15:03:25 · 126 阅读 · 0 评论 -
递归方式实现打印一个整数的每一位
递归方式实现打印一个整数的每一位:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void Print(int n){ if (n > 9) { Print(n / 10); } printf("%d\n", n % 10);}int main(){ int num = 0; printf("输...原创 2020-04-21 21:02:20 · 140 阅读 · 0 评论 -
递归和非递归分别实现求n的阶乘
递归和非递归分别实现求n的阶乘:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>//递归int fac_R(int num){ if (num == 1) { return 1; } return num * fac_R(num - 1);}//非递归int fac_nonR(int num){ i...原创 2020-04-21 19:48:18 · 152 阅读 · 0 评论 -
四种方法求字符串长度
使用四种方法求字符串的长度话不多说, 直接上代码:#include<stdio.h>#include<string.h>//计数器方法int my_strlen1(char* str){ int count = 0; while (*str++ != '\0') { count++; } return count;}//递归int my_...原创 2020-04-15 17:23:21 · 5779 阅读 · 0 评论 -
编写一个函数 reverse_string(char* string)(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)实现: 将参数字符串中的字符反向排列要求: 不能使用C函数库中的字符串操作函数#include<stdio.h>int my_strlen(char* str){ int count = 0; while (*str++ != '\0') { count++; } return...原创 2020-04-15 14:22:23 · 209 阅读 · 0 评论 -
写一个递归函数DigitSum(n), 输入一个非负整数, 返回组成它的数字之和
写一个递归函数DigitSum(n), 输入一个非负整数, 返回组成它的数字之和例如, 调用DigitSum(1729), 则应该返回1+7+2+9, 它的和是19#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int DigitSum(int num){ if (num < 10) return num;...原创 2020-04-15 10:47:04 · 410 阅读 · 0 评论 -
编写一个函数实现n^k, 使用递归实现
编写一个函数实现n^k, 使用递归实现指数为负的时候, 很容易翻车, 注意好这点就行了~#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>double func(int n, int k){ if (k == 0) return 1; else if (k > 0) return n * func(n, k...原创 2020-04-14 21:30:54 · 232 阅读 · 0 评论 -
递归和非递归分别实现求第n个斐波那契数
斐波那契数列(Fibonacci sequence), 又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入, 故又称为“兔子数列”, 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……这个数列从第3项开始, 每一项都等于前两项之和int Recursive(int n){ if (n <= 2) return 1; else return ...原创 2020-04-14 20:15:42 · 143 阅读 · 0 评论 -
创建一个数组, 实现函数init( )初始化数组, 函数empty( )清空数组, 函数reverse( )完成数组元素的逆置
创建一个数组实现函数init()初始化数组实现函数empty()清空数组实现函数reverse()完成数组元素的逆置代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void init(int* a, int n){ printf("初始化数组:\n"); for (int i = 0; i < n...原创 2020-04-14 16:51:10 · 164 阅读 · 0 评论 -
编写一个程序, 可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符, 就输出对应的小写字符, 如果是数字不输出
编写一个程序, 可以一直接收键盘字符如果是小写字符就输出对应的大写字符如果接收的是大写字符, 就输出对应的小写字符如果是数字不输出#include<stdio.h>int main(){ int ch; printf("请输入一个字符:\n"); while ((ch = getchar()) != EOF) { if (ch >= 'a' &&...原创 2020-04-13 20:54:16 · 234 阅读 · 0 评论 -
编写代码模拟三次密码输入的场景
编写代码模拟三次密码输入的场景最多能输入三次密码, 密码正确, 提示“ 登录成功 ”密码错误, 可以重新输入, 最多输入三次, 三次均错, 则提示退出程序#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>int main(){ int i = 0; char passw...原创 2020-04-13 20:29:55 · 257 阅读 · 0 评论 -
C语言二分查找 -在有序数组中查找目标数字
二分查找(Binary Search) 也叫折半查找, 是一种效率较高的查找方法前提条件是被查找的元素首先要有序排列现有一个整型有序数组, 我们用代码实现一下二分查找:在 [left, right] 区间内搜索目标数字, 首先求出区间的中间位置, 然后用中间位置的数字和目标数字作比较1.如果这个数大于目标数字, 说明要查找的目标在整个区间的左半部分, 修改右侧区间为mid - 1, 在[l...原创 2020-04-13 13:59:12 · 1347 阅读 · 0 评论 -
C语言 -猜数字游戏
这里实现一个猜数字游戏, 具体的游戏环节就是:1.由计算机随机产生一个数字;2.我们玩家再输入一个数字;3.比较这两个数字的大小关系;4.没有猜对的话会让玩家一直猜, 直到猜对为止我们先上一段代码:void Game(){ srand((unsigned int)time(0)); //时间戳 int num = rand() % 100 + 1; //产生1-100的随机整...原创 2020-04-10 20:39:36 · 602 阅读 · 0 评论 -
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和, 其中a是一个数字
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和, 其中a是一个数字例如:2+22+222+2222+22222首先我们思考一下每项之间的关系:22 = 2* 10 + 2222 = 22* 10 + 22222 = 222* 10 + 222222 = 2222* 10 + 2因此我们要借助一个变量temp保存这个数字代码如下:#define _CRT_SECURE_...原创 2020-04-10 16:45:23 · 139 阅读 · 0 评论 -
求出1000以内所有“水仙花数”并输出
水仙花数是指一个3位数, 它的每个位上的数字的3次幂之和等于它本身水仙花数也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数例如153、370、371及407就是三位数的水仙花数, 其每个位上的数字的立方和等于该数:153 = 1^3 + 5^3 + 3^3370 = 3^3 + 7^3 + 0^3371 = 3^3 + 7^3 + 1^3407 = 4^3 + 0^3 + 7^3下面用...原创 2020-04-10 16:04:19 · 2272 阅读 · 0 评论 -
打印菱形图案
打印菱形首先要找到规律, 每一行是由空格和星号组成的假如你要打印的菱形的一半为7行, 那么第一行有6个空格, 1个星号第二行有5个空格, 3个星号第三行有4个空格, 5个星号… … … … …第 i 行有7-i个空格, 2*i -1个星号规律就找到了输入一半行数num打印菱形:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio....原创 2020-04-10 14:23:02 · 184 阅读 · 0 评论 -
1到100共出现多少次数字9??
编写程序数一下1到100共出现多少次数字9:#include<stdio.h>int main(){ int count = 0; //计数器 for (int i = 1; i <= 100; i++) { if (i / 10 == 9) //十位数字为9 count++; if (i % 10 == 9) //个位数字为9 count...原创 2020-04-09 19:18:17 · 441 阅读 · 0 评论 -
求两个数的最大公约数和最小公倍数
求最大公约数方法一:更相减损法两个数不断相减, 循环终止条件是: x与y的值相等此时x或者y的值就是最大公约数(x == y)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int x, y; printf("输入两个数字:\n"); scanf("%d %d", &x, &am...原创 2020-04-09 16:20:29 · 183 阅读 · 0 评论 -
交换两个变量的值
有两个整数a和b, 下面将用三种方法把他们的值进行交换方法1: 借助临时变量tmp#include<stdio.h>int main(){ int a = 10; int b = 20; printf("a=%d, b=%d\n", a, b); int tmp = a; //创建临时变量tmp a = b; b = tmp; printf("a=%d, b=...原创 2020-04-05 17:06:39 · 357 阅读 · 0 评论 -
输出1000~2000年之间的闰年
闰年分为普通闰年和世纪闰年普通闰年: 年份是4的倍数的, 且不是100的倍数, 为普通闰年(被4整除但不能被100整除)世纪闰年: 年份是整百数的, 必须是400的倍数才是世纪闰年(能被400整除)下面代码输出1000~2000年之间的闰年:#include<stdio.h>int main(){ int year = 0; int count = 0; for (y...原创 2020-04-05 16:17:22 · 2604 阅读 · 0 评论 -
打印100~200之间的所有素数
素数, 就是除了1和自身, 不能被其他数整除的数字下面用代码实现打印100~200之间全部的素数:#include<stdio.h>int main(){ int i, j; for (i = 101; i <= 200; i += 2) //首先偶数都是能被2整除的, 所以偶数都不是素数. 因此让i从101开始, 每次加2, 在所有奇数中判断 { for...原创 2020-04-05 13:27:48 · 535 阅读 · 0 评论 -
实现乘法口诀表(C语言)
1. 输出一个 9*9 大小的乘法口诀表:#include<stdio.h>#include<stdlib.h>int main(){ int i, j; for (i = 1; i < 10; ++i) { for (j = 1; j <= i; ++j) { int result = i*j; printf("%d*%d=...原创 2020-04-04 22:55:48 · 257 阅读 · 0 评论 -
操作符
首先, 操作符的分类有:算术操作符, 移位操作符, 位操作符, 赋值操作符, 单目操作符, 关系操作符, 逻辑操作符, 条件操作符等等.算术操作符: + – * / %1.运算符是有优先级的, 和数学上类似2.对于除法来说, 整数除以整数, 结果还是整数(直接舍弃小数部分), 浮点数除以浮点数结果还是浮点数3.如果两个操作数类型不同的时候, 如: 9.0 / 1...原创 2020-03-30 23:47:04 · 146 阅读 · 0 评论