C语言
C的那点事儿
LoveHoneyYou
知识改变命运,科技改变生活!
展开
-
C语言之编程规范及细节知识(学C必看)
前言:(1) 知错就改(2)经常温故知新(3)坚持学习,天天向上1.头文件(1) 为了防止头文件被重复引用,应当引用ifdef/define/endif产生预处理块#ifndef GRAPHICS_H // 防止 graphics.h 被重复引用#define GRAPHICS_H#include <math.h>// 引用标准库的头文件…#include “myheader.h” // 引用非标准库的头文件…void Function1(…);原创 2021-10-15 00:17:00 · 2382 阅读 · 0 评论 -
C语言基础语法第一篇
1. 文件由两部分组成:文件名和文件主体,文件的分类有很多种,在这里我们只关注一种分类,分为可执行文件和不可执行文件。 可执行文件在windows 操作系统中,扩展名为:.exe .bat com等的文件是可执行文件;可执行文件由指令和数据构成。Linux是靠文件属性判断是否可执行。 不可执行文件:其内容是有数据构成的。在c/c++语言中 .c/.cpp 源文件(文本文件), .h 头文件(文本文件) .i 预编译文体 (文本文件) .s为...原创 2021-10-10 17:21:14 · 250 阅读 · 0 评论 -
C语言基础语法第二篇
1. bool类型bool只有false和true,在c语言中0是false,非0都是true。在.c文件中需要引入头文件 #include<stdbool.h>。若文件后缀为.cpp可以直接使用bool类型。2.关系表达式的运算结果为bool值。关系运算符都是双目运算符,其结合性均为左结合。3.逻辑表达式:运算结果是bool值。4.if语句在进行两个数是否相等比较时,建议将 右值写在左边,左值写在右边,可防止将 "=="误用成"="。5. 如果if嵌套if,不论语句是多原创 2021-10-12 21:04:51 · 448 阅读 · 0 评论 -
C语言基础语法第三篇
1. 函数初步:自定义函数和库函数在结构化程序设计中,函数是将任务进行模块划分的基本单位。一个大的程序一般应分为若干个程序模块,每个模块实现一个特定的功能。2. 库函数库函数都按功能分类,集中说明在不同的头文件中。用户只需在自己的程序中包含某个头文件,就可直接使用该文件中定义的函数。3.自定义函数用户可以根据自己的需求讲某个具有相对独立功能的程序定义为函数。(1)c语言不允许函数的嵌套定义,即在一个函数中定义另一个函数。(2)形式参数:只能等到函数被调用时用来接受传递进来的数据.原创 2021-10-18 17:57:37 · 623 阅读 · 8 评论 -
C语言基础语法第四篇
1.一维数组的定义和初始化数组是包含给定类型的一组数据,并将这些数据依次存储在连续的内存空间。每个独立的数据被称为数组的元素。元素的类型可以是任意型。数组本身也是一个结构,其类型由它的元素类型和数量所决定。数组的定义决定了数组名,元素类型以及元素个数。其语法如下:<类型>数组名[<元素数量>];元素数量在方括号([ ]) 之间,它必须是大于0的整型常量表达式。数组的大小在编译时确定,编译系统按照定义为数组分配一段连续的存储单元,这段存储单元的大小也是不能改变的,因原创 2021-10-25 11:12:20 · 115 阅读 · 4 评论 -
C语言基础语法第五篇
1.什么是指针计算机中所有的数据都必须存放在内存中,不同类型的数据占用的字节数不一样,比如说 int 占4个字节,char 占 1个字节。为了能正确地访问到这些数据,必须为每个字节都编上号码,每个字节的编号是唯一的,根据编号可以准确的找到某个字节。将内存中每个字节的编号称为地址 或 指针。地址 从0开始依次增加,对于32位,程序能够使用的内存位4G最小的地址为:0x0000 0000,最大的地址为 0xFFFF FFFFC/C++中 *号运算符的意义;2.定义指针变量...原创 2021-11-03 17:42:21 · 3203 阅读 · 0 评论 -
C语言基础语法第六篇
1.二维数组的定义类型名 数组名[行表达式][列表达式];注:行和列用常量表达式2.二维数组的逻辑和内存表示一个二维数组,在本质上是由多个一维数组构成。(每个一维数组的大小必须相同)...原创 2021-11-22 13:20:20 · 754 阅读 · 0 评论 -
C语言基础语法第七篇
1.结构体类型的设计C语言提供了基本数据类型,如char,short,int,float...等类型,称之为内置类型,程序开发人员可以使用结构体来封装一些属性,设计出的新的类型,在C语言中称为结构体类型。结构体类型的设计:在C语言中,结构体是一种数据类型。(由程序开发者自己设计的类型)结构体的定义形式为:struct 结构体名{ 成员列表 (可以是基本数据类型,指针,数组或其他结构类型)};我们设计的这个结构体他是一个实体属性的集合,但并非实体,就好比我们要造...原创 2021-11-30 00:24:01 · 669 阅读 · 0 评论 -
C语言基础语法第八篇
动态内存管理1.栈区:在函数被调用时分配,用于存放函数的参数值,局部变量等值。在windows中默认值是1M,在Linux中栈的默认大小是10M2.堆区:程序运行时可以在堆区动态地申请一定大小的内存,并在用完之后归还堆区。在Linux系统中堆区的大小接近3G一般情况下我们需要大块内存,或程序在运行过程中才知道所需要内存大小,我们就从堆区申请3.C中的4个动态内存管理函数:malloc,calloc,realloc,free,都需要引用 stdlib.h,malloc.h4..原创 2021-12-23 15:15:44 · 1407 阅读 · 3 评论 -
C语言基础语法第九篇
偷个懒懒~~~原创 2021-12-28 00:06:31 · 361 阅读 · 0 评论 -
C语言基础语法第十篇
1.基本数据类型的强转2.指针的强转指针内存储相同的地址,但会根据指针的类型采取相应的解析方式3.const 修饰变量const int a=10;c++在编译时,a保持常性,会将a全部替换为10c在编译时,a保持变量的属性,不进行替换4.位操作&(与) , ^(异或) , |(或) , ~(取反) , <<(左移), >>(右移) 这些操作只针对 整型(char , short...原创 2021-12-28 23:22:04 · 2421 阅读 · 1 评论 -
C语言基础语法第十一篇
为什么我们需要柔性数组?#define MAXLEN 1024struct kd_node{ struct kd_node*left; struct kd_node*right; int dim; unsigned long long data[MAXLEN];};在这段代码中,为了存储数据,申请了长度为1024的unsigned longlong型数组。若是数组长度远远小于MAXLEN。这样设计,便会是极其浪费空间的。如果MAXLEN太小,我们需要的数组长度又很大,这样也不合理。.原创 2022-01-02 23:11:41 · 828 阅读 · 0 评论 -
C语言基础语法第十二篇
文件操作1.C语言中的文件是什么?所谓文件一般是指储存在外部介质上的数据集合,比如txt,bmp,jpg,exe,rmvb等这些文件各有各的用途,我们通常将他们存放在磁盘或者可移动盘(U盘)等介质中文件是一段数据的集合,这些数据可以是有规则的集合,也可以是无序的集合。操作系统也是以文件为单位对数据进行管理的。也就是说,要访问外部介质上的数据,必须先按照文件名查找,然后从该文件中读取数据。要想写入数据到外部介质,必须得建立一个文件,然后再写入。因此,眼前的文件只是数据的集合2.文件三要素:原创 2022-01-07 16:59:46 · 764 阅读 · 0 评论 -
C提升1---精华中的精华
1.冒泡排序#include <stdio.h>#include <stdlib.h>void Bubb_Sort(int arr[], int len){ //外层循环 当i=0的时候,让j从 1 ---> N 变化 //外层循环 当i=1的时候,让j从 2 ---> N 变化 //...... for (int i = 0; i < len; i++) { for (int j = i + 1; j < len;.原创 2022-02-23 16:00:38 · 75 阅读 · 0 评论 -
C提升2---精华中的精华
1.变量做形参和函数里定义变量基本上都是一个属性,二者就是初始化方式不同,变量做形参具有对外的属性,调用函数时用实参初始化形参2.二级指针可以修改一级指针的值,也可以修改一级指针的指向3.指针做参数的意义函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来主函数和被调用函数之间通过内存交换运算结果指针做函数参数是有输入和输出特性的4.数组名是只读常量,本质就是常量指针析构内存的时候,保证b.原创 2022-02-24 22:21:59 · 353 阅读 · 0 评论 -
C提升3---精华中的精华
1.有一个字符串符合以下特征("abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";) ,要求写一个函数(接口),输出以下结果1)以逗号分割字符串,形成二维数组,并把结果传出;·2)把二维数组行数运算结果也传出。...原创 2022-02-26 17:02:44 · 189 阅读 · 0 评论 -
C提升4---精华中的精华
1.文件加密原理2.加密分为 对称加密 和 非对称加密对称加密: 加密的密钥 和 解密的密钥一样非对称加密: 加密的密钥 和 解密的密钥 不一样3.加密三要素:明文 密文 密钥4. 对称加密速度快,适合做大数据加密 强度弱非对称加密 :速度慢,强度大。安全5. 散列 哈希(指纹)对称加密原理:6.动态库.lib: 资源搜索文件.dll: 动态库(函数二进制码集合,里面有函数的函数体),动态库是...原创 2022-02-28 20:38:30 · 1137 阅读 · 0 评论 -
函数调用过程---_cdecl约定
原创 2022-04-26 21:22:09 · 381 阅读 · 0 评论 -
C项目---图书管理系统
head.h#pragma once #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <assert.h>#define N 2#define MULT 2#define BOOK_DATA sp->data[i].B_Num,sp->data[i].B_Name, sp->d原创 2022-02-27 21:57:48 · 309 阅读 · 0 评论 -
C语言练习1---简单三样
(1)输入三个数,求出三个数中的最大值,尽量少使用if语句,用函数实现。(2)输入三个数,求出三个数中的中间值,用函数实现。原创 2021-10-13 08:53:06 · 102 阅读 · 0 评论 -
C语言练习2---猜数字小游戏
#include <stdlib.h>#include <stdio.h>#include <time.h>void Print();int guess();void End(int count);enum chonice{ EXIT, PLAY, AGAIN};int main(){ srand((unsigned)time(NULL)); int input = 0; Print(); do { scanf("%d", &.原创 2021-10-18 12:40:19 · 1865 阅读 · 2 评论 -
C语言练习3--遍历数组
1).定义大小为100的整型数组, 使用随机函数给数组元素赋值。数值范围1..100, 并且排序,使用冒泡排随机函数#include <stdlib.h>#include <stdio.h>#include <time.h>int main(){ srand((unsigned int)time(NULL)); int arr[100] = { 0 }; int tmp = 0; int count = 0; for (int i = 0; i &原创 2021-10-23 13:28:36 · 914 阅读 · 7 评论 -
C语言练习4---分支循环
1. 编写程序, 提示用户输入一个数n, 打印出 1 ~n 的所有偶数平方值。#include <stdlib.h>#include <stdio.h>int main(){ printf("请输入一个数\n"); int n = 0; scanf("%d", &n); int i = 0; int count = 0; for (i = 1; i < n; ++i) { if (0 == i*i % 2) { printf("原创 2021-10-24 23:55:31 · 562 阅读 · 0 评论 -
C语言练习5---辨别大小端存储
法一:#include <stdio.h>#include <stdlib.h>int main(){ int a = 1; char *p = (char *)&a; printf("%d\n", *p); system("pause"); return 0;}若是小端存储*p的值为1,大端存储则为0;当前机器为小端存储。法二:#include <stdlib.h>#include <std...原创 2021-10-28 22:44:42 · 168 阅读 · 0 评论 -
C语言练习6---字符串函数实现
1.strlen法一:常规法#include <stdio.h>#include <stdlib.h>#include <assert.h>#define N 100int my_strlen(const char*str){ assert(str != NULL); int count = 0; while (*str != '\0') { str++; count++; } return count;}int main()原创 2021-11-08 00:09:26 · 626 阅读 · 0 评论 -
C语言练习7--- 一段代码的解析
#include <stdlib.h>#include <stdio.h>int main(){ const char* str[] = { "hello", "newdata", "printf", "scanf", "Lhy" }; const char* s = str[1]; int n = sizeof(str) / sizeof(str[0]); for (int i = 0; i < n; ++i) { printf("%s \n", s);.原创 2021-11-13 23:03:40 · 631 阅读 · 0 评论 -
C语言练习8---内存操作函数
1.memset 以字符填充缓冲区#include <stdio.h>#include <stdlib.h>typedef unsigned int size_t;void* my_memset(void *dest, int ch, size_t count){ char *cp = (char*)dest; while (count--) { *cp = ch; cp++; } return dest;}int main(){ int.原创 2021-11-13 23:42:43 · 411 阅读 · 0 评论 -
C语言练习9---数组查找元素
1.一个二维数组 按从小到大排列,我们可以按照 分块查询的方式 查找此元素,找到了 返回其下标(1) 普通版#include <stdio.h>#include <stdlib.h>int FindValue(int arr[][5], int abs, int ord, int val){ int i = 0; while (val > arr[i][ord - 1] && i<abs-1) //寻找val所在的行 ..原创 2021-11-19 18:04:24 · 2399 阅读 · 0 评论 -
C语言练习10---倾情巨制My_atoi的实现
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <ctype.h>int My_Dec(char*str){ assert(str != NULL); int sum = 0; while (*str!='\0') // \0是转移字符不是数字字符,故isdigit函数返回假 { if (*str == 'o' || *str.原创 2021-11-20 01:20:36 · 356 阅读 · 2 评论 -
C语言练习11---螺旋打印
程序是思考的产物,它是一个精神产品,在想清楚后进行编写,事半功倍!!!#include <stdio.h>#include <stdlib.h>#define ROW 4 //行#define COS 5 //列void Show(int arr[][COS]); //打印 int FmatState1(int arr[][COS], int count); //状态int FmatStat...原创 2021-11-21 11:46:34 · 1972 阅读 · 7 评论 -
C语言练习12---不使用任何变量逆序字符串
不适用任何变量将字符串逆序比如:"abcd" =》 "dcba"这时候我们就要分析一下这个字符串本身"adcd" =》 它是由 a b c d \0 五个字符构成的那我们不能使用任何变量就只能利用这个 \0 了分析:实现:#include <stdio.h>#include <stdlib.h>int main(){ char str[] = { "abcd" }; printf("%s\n\n", str); s...原创 2021-11-22 17:36:26 · 824 阅读 · 3 评论 -
C语言练习13---杨辉三角
1.二维数组法比较简单思路:每行的中间元素等于其 上一行的元素 加上 上一行减一的元素#include <stdio.h>#include <stdlib.h>#define ROW 100 //行#define COS 100 //列 //二维数组void YHTrile_Twodim(int n, int(*arr)[COS]){ //特殊处理 for (int i = 0; i < n; i++) {...原创 2021-11-24 23:55:45 · 2192 阅读 · 0 评论 -
C语言练习14---奇数魔方阵
N为奇数时(1) 将1放在第一行中间一列;(2) 从2开始直到n×n止各数依次按下列规则存放:按 45°方向行走,如向右上每一个数存放的行比前一个数的行数减1,列数加1(3) 如果行列范围超出矩阵范围,则回绕。例如1在第1行,则2应放在最下一行,列数同样减1;(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。这为百度百科的解释,说人话就是1 永远在第一行的中间;其余的数是 下一个数在上一个数所在行...原创 2021-11-25 22:03:28 · 818 阅读 · 1 评论 -
C语言练习15---二维数组找鞍点
首先来说一下二维数组里的鞍点的是个什么东西即在某位置上的元素在该行上最大、在该列上最小,二维数组中也可能没有鞍点按照这个解释我们来进行思考一行中最多只有一个鞍点,那么我们就可以一行,一行的进行查找先找到某一行的最大值,然后再在此最大值所在的列去寻找最小值,若最大值与最小值相等,则为鞍点,打印其下标+1(非程序人员认为1是起始下标),和其值,否则寻找下一行接下来进行编写:#include <stdlib.h>#include <stdio.h>#原创 2021-11-26 16:49:55 · 1274 阅读 · 9 评论 -
C语言练习16---数组元素的左右移位
举个例子思路很简单,移就完事了法1:#include <stdio.h>#include <stdlib.h>#include <assert.h>void Print(int *arr, int n){ for (int i = 0; i < n; i++) { printf("%-3d ", arr[i]); }}void Shift_Left(int *arr, int n) //左移一位{ assert.原创 2021-11-27 23:59:34 · 2473 阅读 · 0 评论 -
C语言练习17---学生成绩管理系统
head.h#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <stdbool.h>#include <string.h>#define SZIE 1#define CURR 3#define INC_SIZE 2struct Student //设计学生所具有的属性集原创 2021-12-24 20:01:44 · 698 阅读 · 0 评论 -
C语言练习18---百变女神
在C语言基础语法第十篇中,我们介绍了 二进制 位运算,即 &,|,~ 。 在机缘巧合下,我又了解到图片处理与二进制的关系,在此分享一下。我们的每一张图片都是有许许多多个像素点组成,如图所示:那么像素点,到底是什么呢,他与我们的二进制又有什么关系呢?像素点的存储分好多种,我只说我了解到的,毕竟咱也不是专门搞图像,对这方面只是有所了解一个像素点按四字节存储,也就是一个int的大小,前8位表示透明度,后面依次如图所示。红,绿,蓝为三原色,利用这三种颜色可以调出256*25.原创 2022-01-02 12:51:45 · 620 阅读 · 0 评论 -
C语言之scanf超详细解析
在scanf中输入换行键(\n)代表着一个scanf读取结束它会将\n前(包括\n)的所有字符提取进缓冲区,然后从缓冲区依次提取给变量,如果用%c控制,所有字符都可以被提取。如果用%d控制 ,空格会被默认为分隔符,除数字外的其他字符都将无法被解析,在vs编译器中会将缓冲区其他字符(包括本身)之后的全部以0赋予变量如图所示;scanf遇到输入字符时并不能利用空格和换行将每个字符隔开,因为空格和换行都属于字符也会被是scanf从输入缓冲区中读取,如图所示:scanf将换行原创 2021-10-10 12:59:36 · 1278 阅读 · 0 评论 -
c语言冒泡排序
#include <stdio.h>#include <stdlib.h>void _maopao(int arr[], int sz){ //确定趟数 int t = sz - 1; int flag = 1; int i = 0; for (i = 0; i < t; i++) { int j = 0; for (j = 0; j < t - i; j++) //每趟比较的次数 { if (arr[j]>arr[j +...原创 2021-08-10 10:37:20 · 94 阅读 · 0 评论 -
C语言经典100题——第一篇
1.有数字1、2、3、4,能组成多少个互不相同且无重复数字的三位数?都是多少?#include <stdio.h>#include <stdlib.h>int main(){ int i = 0, j = 0, k = 0; int count = 0; //计数器 for (i = 1; i < 5; i++) { for (j = 1; j < 5; j++) { for (k = 1; k < 5; k++)原创 2021-10-07 17:46:44 · 474 阅读 · 0 评论