![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言基础
文章平均质量分 55
C语言基础讲解,理论结合实践
友人苏
一位让普通到不能在普通以至于让普通都惭愧的叫声爸爸的普通acmer,想通过竞赛,考研,让自己不至于让普通都叫声爸爸的普通学生
展开
-
【题解】《C语言入门100例》(第27例) 穷举查找
文章目录一. 穷举查找二. 推荐专栏三. 相关练习3.1 统计位数为偶数的数字3.2 有序数组中的单一元素一. 穷举查找 穷举法在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做穷举法我们通常利用计算机运算速度快的特点,将所有情况都一一列举出来进行操作。基本思路:确定穷举对象确定穷举范围举例: 在一个数组内查找某一个数第一次出现的位置,并返回其下标。代码如下:#include <stdio.h>int原创 2021-11-28 22:35:41 · 372 阅读 · 0 评论 -
【题解】《C语言入门100例》(第26例) 水仙花数
文章目录一. 推荐专栏二. 相关练习2.1 K 进制表示下的各位数字总和2.2 统计最大组的数目一. 推荐专栏《C语言入门100例》(第26例) 水仙花数二. 相关练习2.1 K 进制表示下的各位数字总和题目链接:1837. K 进制表示下的各位数字总和思路分析:就是通过辗转相除法得到其k进制下的每一位数,并将其加起来即可。代码如下:int sumBase(int n, int k){ int ret = 0; while(n){ ret += n %原创 2021-11-27 22:18:17 · 95 阅读 · 0 评论 -
【题解】《C语言入门100例》(第25例) 多维枚举
文章目录一. 多维枚举二. 推荐专栏三. 相关练习3.1 判断子序列3.2 搜索二维矩阵 II3.3一. 多维枚举 多维枚举实际上就是再循环里面进行嵌套,二维枚举就是进行两层嵌套,一般第一层代表行,第二层代表列。#incldue <stdio.h>int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ pritnf("%d原创 2021-11-26 19:00:01 · 562 阅读 · 0 评论 -
《C语言入门100例》(第24例) 最小公倍数和最大公约数
文章目录一. 概念定义1.1 lcm算法二. 课后练习1819. 序列中不同最大公约数的数目一. 概念定义 最小公倍数就是两个数a,b他们的公共倍数中最小的那个(感觉说了跟没说一样)。1.1 lcm算法在学习lcm算法之前我们需要先补充一下gcd的算法,推荐博客:最大公约数 lcm算法就是计算两个数的最小公倍数算法。我们有定理可知,a和b两数的最小公倍数lcm(a,b) = a * b / gcd(a,b);代码如下://计算表最大公约数int gcd(int a, int b){原创 2021-11-25 14:44:05 · 668 阅读 · 0 评论 -
[题解]《C语言入门100例》(第22例) 辗转相除法
文章目录一. 辗转相除法1.1 公式1.2 证明二. 相关练习2.1 找出数组的最大公约数一. 辗转相除法 辗转相除法又称欧几里得算法,是用来求两个数之间的最大公约数的算法。1.1 公式例如:假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5 = 1 (余2)5 / 2 = 2 (余1)2 / 1 = 2 (余0)所以19原创 2021-11-23 09:25:49 · 1724 阅读 · 1 评论 -
[题解]《C语言入门100例》(第21例) 进制转换
文章目录一. 推荐专栏二. 概念分析2.1 例题讲解2.2 代码分析三. 相关练习3.1 K 进制表示下的各位数字总和3.2 统计最大组的数目一. 推荐专栏《C语言入门100例》(第21例) 进制转换二. 概念分析 之前我们讲过了二进制的转化,这次我们讲解k进制的转化(2 <= k < 10)实际上,高进制向低进制的转换都是同一个模板,就是将要转换的数 num 对进制 k 进行辗转相除。2.1 例题讲解给定一个十进制数num,再给定转换的进制k(2 <= k <原创 2021-11-22 11:20:22 · 403 阅读 · 0 评论 -
[题解]《C语言入门100例》(第20例) 进制转换
文章目录一. 知识讲解1.1 何为进制1.2 进制转化二. 相关练习2.1 二进制中1的个数2.2 各位相加方法一方法二2.3 统计最大组的数目一. 知识讲解1.1 何为进制 进制:是进位计数制,是人为定义的带进位的计数方法。生活中我们最常用的进制是10进制,对应的机制就是逢十进一,而在计算机中我们还会接触到二进制和十六进制,分别对应着逢二进一,逢十六进一的进制机制。 1.2 进制转化进制转化推荐查看一下文章:《算法零基础100讲》(第19讲) 进制转换(一) - 入门原创 2021-11-21 15:43:09 · 845 阅读 · 2 评论 -
[题解]《C语言入门100例》(第19例) 日期
今日题解推荐专栏相关习题1185. 一周中的第几天1154. 一年中的第几天推荐专栏1.算法题解2.《C语言入门100例》(第19例) 日期相关习题1185. 一周中的第几天Constraints:The given dates are valid dates between the years 1971 and 2100.分析:题目给定的年份范围是[1971,2100],然后我们可以根据力扣的数据测试得出1971年1月1日是Friday,当然不嫌麻烦的话也可以去查日历。既然知道初始原创 2021-11-20 11:46:59 · 94 阅读 · 0 评论 -
[题解]《C语言入门100例》(第18例) ASCII码(二)
题目练习基于前面对ASCLL码的理解,对应的练习题一. 判定字符是否唯一二. 第一个只出现一次的字符三. 赎金信基于前面对ASCLL码的理解,对应的练习题一. 判定字符是否唯一题目链接:面试题 01.01. 判定字符是否唯一这道题我们只需用数组统计每个字母的出现次数,找出只出现过一次的字母即可。代码如下:bool isUnique(char* astr){ int Hash[26] = { 0 }; int n = strlen(astr); for(int i = 0原创 2021-11-19 10:02:43 · 413 阅读 · 0 评论 -
[题解]《C语言入门100例》(第17例) ASCII码
文章目录一. ASCLL码二. 课后习题2.1 判断国际象棋棋盘中一个格子的颜色2.2 速算机器人2.3 执行操作后的变量值推荐专栏:字符大小写一. ASCLL码二. 课后习题2.1 判断国际象棋棋盘中一个格子的颜色1812. 判断国际象棋棋盘中一个格子的颜色分析: 我们通过观察很容易发现,这道题的黑色和白色方块是由规律出现的,现在困扰我们的就是它的横坐标用小写字母表示,如果我们将其改为数字,从0 到 7,我们就能发现,x 坐标 + y 坐标为奇数时,是黑色方块,偶数是为白色方块。代码原创 2021-11-18 12:48:16 · 771 阅读 · 0 评论 -
[题解]《C语言入门100例》(第16例) 打印字符
文章目录知识讲解课后习题交替打印FooBar知识讲解 在学习过循环之后,我们可以通过循环用字符去打印一些图像,只要我们计算好坐标即可。例如:#include<stdio.h>int main() { int n, i, j; while(~scanf("%d", &n)) { for(i = 1; i <= n; ++i) { // (1) for(j = 1; j <= i; ++j)原创 2021-11-17 22:34:54 · 509 阅读 · 1 评论 -
《C语言入门100例》(第15例) 整数翻转
文章目录一. 概念讲解1.1 整数反转1.2 辗转相除法二. 课后习题整数反转一. 概念讲解1.1 整数反转 整数反转跟字符串反转是一样的,但字符串是存放在数组内,每个字符都是单一的一个个体,可以进行位置调换,但整数它是由一个或多个数字组成的整体,不能像字符串一样随意调换。1.2 辗转相除法 整数反转的前提是,将其拆分为一个个单一的数字,并存放在数组中,而拆分的方式就是通过取模和辗转相除的方式。代码如下:#include <stdio.h>int main(){ int原创 2021-11-16 09:18:05 · 2100 阅读 · 5 评论 -
[题解]《C语言入门100例》(第14例) 字符串翻转
文章目录概念定义二. 课后习题2.1 反转字符串2.2. 反转单词前缀2.3 反转字符串中的元音字母概念定义 字符反转就是将一个字符串翻转过来,通常我们都是分别从首位同时进行调换,或则重新定义一个字符数组,将原本的字符串从尾部一一赋值给新串。代码如下:#include <stdio.h>void Reserved(char* s, int sSize){ int left = 0, right = sSize - 1; while (left < right){ ch原创 2021-11-15 19:52:10 · 341 阅读 · 0 评论 -
《C语言入门100例》(第13例) 最值
文章目录一. 最值二. 课后习题第三大的数一. 最值 最值的概念很简单,无非就是多个数中的最大值或者最小值。我们通常是将已知最大(或最小)的某个数与其它数进行比较,然后不断更新最大值(或最小值),最后得到一组数据中的最值。例如:#include <stdio.h>int main(){ int nums[10] = {0, 2, 1, 4, 5, 6, 3, 9, 5, 6}; int max = -1; int min = 100; for(int i = 0; i &l原创 2021-11-14 16:24:55 · 584 阅读 · 0 评论 -
[题解]《C语言入门100例》(第12例) 面积计算
文章目录面积求解课后习题812. 最大三角形面积面积求解1.圆形面积 圆形的面积公式为:S = π r²但我们要如何求π呢?根据三角函数我们可以直到cos(π) = -1,那再由反三角函数arccos(-1) = π。这样我们便得到了π。代码如下:#include <math.h>const double PI = acos(-1.0); 2. 三角形面积 三角型的面积公式有很多,再编程方面,我们主要使用一下三种方式。鞋带公式用于计算任意多边形的面积,可用于计原创 2021-11-13 10:32:55 · 2001 阅读 · 0 评论 -
[题解]《C语言入门100例》(第11例) 溢出
文章目录一. 何为溢出二. 课后习题2.1 数字的补数2.2 整数反转一. 何为溢出 我们都知道,定义一个int类型的变量实际上就是在内存中开辟了一块4个字节的空间,相当于32个比特位,而每个比特位可以存放一个二进制的数据,所以一个int类型可以存放的数据范围是[-2147483648,2,147,483,647],当大于这个数据时,int类型的空间没有空闲的位置再存放数据,就会导致溢出。 面对数据量过大的问题,一般题目都会要求我们进行mod处理,或者用数组的方式进行存储和计算,当然,在一定范围内原创 2021-11-12 13:35:15 · 482 阅读 · 0 评论 -
《C语言入门100例》(第10例) 平均数
文章目录题目描述题目分析代码思路代码演示题目描述子数组最大平均数 I 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为k的连续子数组,并输出该最大平均数。任何误差小于 10^(-5) 的答案都将被视为正确答案。题目分析题目给定一个数组,和一个整数k,k表示子序列的长度,找出长度为k的子序列中,最大平均值,其实我们只要找出总值最大的即可,最后返回时在除k,得到平均值。代码思路我们用滑动窗口的方法进行遍历如图:i1和j1是第一次,然后两个指针原创 2021-11-11 13:48:41 · 589 阅读 · 1 评论 -
《C语言入门100例》(第9例) 最值[题解]
文章目录一. 习题1.1 最大连续 1 的个数1.2 数组中两元素的最大乘积二. 推荐专栏《算法零基础100讲》(第17讲) 线性枚举(一) - 最值算法 最值得知识点我在算法基础的题解里有写过,这里就直接上题和代码,具体分析在下面的链接里。一. 习题1.1 最大连续 1 的个数485. 最大连续 1 的个数int findMaxConsecutiveOnes(int* nums, int numsSize){ int max = 0; int cout = 0; fo原创 2021-11-10 16:58:00 · 410 阅读 · 0 评论 -
《C语言入门100例》(第8例) 字符大小写
文章目录一. 概念引入二. 字母大小转换三. 课后习题3.1 转换成小写字母3.2 检测大写字母四. 总结一. 概念引入 在C语言中,对于每一个字符有其对应的ASCLL值,但为什么要有这个表呢? 信息在计算机内是使用二进制的形式表示,我们深入到计算机的最底层,其信息的表示方式只有0和1,这种表示方法人是很难理解的,如果我们屏幕上看到的只有0和1,有几人能看明白呢?如果计算机只能识别0和1,那我们所能理解的信息又如何才能让计算机明白呢? 所以,为了方便人与计算机之间能够进行信息的交换,人们编制了原创 2021-11-09 10:45:42 · 1059 阅读 · 4 评论 -
《C语言入门100例》(第7例) 递归和迭代[C语言]
文章目录一. 知识讲解1.1 迭代1.2 递归二. 课后习题2.1 阶乘尾数2.2 斐波那契数一. 知识讲解1.1 迭代 迭代是一个反复反馈的过程,每次计算都是基于前一次的计算机果进行的,其目的通常是为了不断接近某个结果。例如计算前n项和:#include <stdio.h>int main(){ int n; while(~scanf("%d", &n)){ int Sn = 0; for(int i = 1; i <= n; i++){ Sn原创 2021-11-08 22:02:44 · 269 阅读 · 0 评论 -
《C语言入门100例》(第6例) 浮点数精度
文章目录概念定义二.课后习题概念定义 浮点数:就是带小数的数字,精度则表示小数点后面数字的数量,精度越高,数量越大。在编程语言中浮点类型通常有两类:单精度浮点型(float)和双精度浮点型(double)。 区别:float类型:float类型在计算机中占4个字节,也就是32bit,其中有效位数为7位,其中符号位、指数位、位数部分分别占1,8,23个bit,float所能表示的最高精度位小数点后6位。double类型:double类型在计算机中占8个字节,64bit,有效位数为16位,dou原创 2021-11-07 18:30:45 · 1087 阅读 · 0 评论 -
《C语言入门100例》(第5例) 绝对值
文章目录一.概念定义二.课后习题2006. 差的绝对值为 K 的数对数目一.概念定义绝对值:两个数之间的差值int abs(int a){ if(a >= 0){ return a; } return -a;}二.课后习题2006. 差的绝对值为 K 的数对数目2006. 差的绝对值为 K 的数对数目分析: 题目要求找出有多少组数据的差值绝对值等于k,绝对值我们可以用库函数abs()来计算,我已我们只需要枚举组所有组的数据。代码如下:int countKDif原创 2021-11-06 21:07:54 · 440 阅读 · 0 评论 -
《C语言入门100例》(第4例) 整除(29. 两数相除leetcode)
29.两数相除29.两数相除题解:这道题有点难度,但还没到让你无从下手的地步,就是需要考虑的情况太多了,有些麻烦。当然如果你任性点,就是要用除法操作符,也是可以过的 ( ̄_, ̄ )int divide(int dividend, int divisor){ if((long)dividend / (long)divisor > INT_MAX || (long)dividend / (long)divisor < INT_MIN){ return INT_原创 2021-11-05 21:10:30 · 1167 阅读 · 4 评论 -
《C语言入门100例》(第3例) 交换变量
交换变量交换变量的方式有很多,其中我们比较常用的就是设置一个中间变量进行交换。#include <stdio.h>int main(){ int a, b; scanf("%d %d", &a, &b); int temp = a; a = b; b = temp; printf("a = %d\nb = %d\n", a, b);}如果不引用中间变量,我们可以通过运算进行交换int main(){ int a, b; scanf("%d %d",原创 2021-11-04 17:52:41 · 222 阅读 · 0 评论 -
[题解]《C语言入门100例》(第2例) 数列求和
剑指 Offer 64. 求1+2+…+n这题很简单,不能用循环,那就直接用递归。int sumNums(int n){ if(n == 1){ return 1; } return n + sumNums(n - 1);}Sum Problem这道题和上面的一样,但没有限制,所以我们直接用循环来解题。#include <stdio.h>int main(){ int n; while (~scanf("%d", &a原创 2021-11-03 09:48:13 · 227 阅读 · 0 评论