(萌新笔记)C语言的复习笔记
初始时间:大一(上) 10月
更新时间:大一(上) 10月
想了想还是写一下简介吧,我在暑假自学了一点C语言,现在是个大一入门C语言(的弱鸡,所以本文可能会有很多基本知识,还请大家斟酌观看
PS:本文仅供有些C语言基础,想回顾知识点的伙伴阅读
Start!( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)
———————————————————————————————————————
一、斜杠’ / '的用法(一般有4种用法
1.算术,即加减乘除的除号
2.注释,即//
3.命令行或终端(cmd、powershell)的某些操作
4.网址名,如 https://blog.csdn.net
———————————————————————————————————————
二、变量
1.变量名,遵循两个原则(仅允许包含数字、__、字母,且不能由数字开头)
2.函数不能给给变量赋值,例:
int a = max(1,10)//错误
———————————————————————————————————————
三、格式符(列举的都是平时不常见的
格式符 | 作用 |
---|---|
%i | 整型(和%d作用一样) |
%e | 以指数形式输出浮点数 |
%E | 同上 |
%g | 自动选择合适的输出形式 |
%G | 同上 |
%s | 输出字符串,但作用对象是char的数组 |
%p | 输出指针的地址 |
%o | 无符号八进制(无前导0) |
%u | 无符号十进制 |
%x | 无符号十六进制(无前导0X) |
%X | 同上 |
补充:
%s对应的类型是char(*),即字符串,又即char的数组,举例:
char a[] = "123456";printf("%s",a);//a指向[0]printf("%s",&a[2]);//&a[2]指向a[2]output:123456output:3456
关于%n我也不是很清楚,似乎不是很常用,就不做过多阐述了
打印时也要注意:
float a,b;
scanf("%f,%f",&a,&b);//中间是逗号
printf("%f和%f",a,b);intput:1.2,2.3//中间是逗号
output:1.2和2.3//正常输出intput:1.2 2.3//中间是空格
output:1.200000和-107374176.000000//一堆乱码
float a,b;
scanf("%f %f",&a,&b);//中间是空格
printf("%f和%f",a,b);intput:1.2,2.3//中间是逗号
output:1.200000和-107374176.000000//一堆乱码intput:1.2 2.3//中间是空格
output:1.2 2.3//正常输出
说明:在scanf中若两个格式符中间是逗号,则打印时一定要在输入时加逗号(英文);若两个格式符中间是空格,则打印时一定要在输入时加空格;按照要求来准没问题
小提示:输入浮点数 .1 就是 0.1 哦~
———————————————————————————————————————
四、宏定义的坑
#define F(n) 2*n用的时候:F(3+2)
实际情况:10
电脑操作流程是:F(3+2) == 2*3+2 == 10
因为宏定义的做法是直接替换,不会做运算处理(预处理)
———————————————————————————————————————
五、进制
1、补码,只存在于unsigned类型的数中,意义是为了表示符号位;
在二进制中的表达就是八个比特位中最左边的那个数字,称做“补号位”;
如:int 里的十进制 -5 在内存中就是 10000101(0是正数,1是负数)
2、ASCII码,A的二进制ASCII码是01000001,a的二进制ASCII码是01100001,由此看出所有字母大小写的ASCII码(二进制)第5位都是相互的;
结论:大写字母的ASCII码(十进制)+32变小写字母
———————————————————————————————————————
六、运算
表达式 = 运算符 + 操作数
%为求余运算符(注意%只能用于整型)
相当于把求得的值的小数点后面的部分去掉
例:-3%2 == -1
/是普通除号
例:1/3 == 0
例:1.0/3 == 0.33333
例:1/3.0 == 0.33333
编译器原理:
printf("%d\n",1+2.0);
printf("%f",1+2.0);output:0
output:3.0
电脑操作过程:
都先把1转换成1.0(编译器会将小字节的操作数转换成大字节的操作数)
1.0+2.0 == 3.0 若输出为%d则溢出即变成0,若输出为%f则输出3.0
至于溢出的具体原理我还不清楚(日后补坑)
类型转换:
printf("%d",1+(int)2.0);output:3
ASCII码的运用:
int a = 2,b = 1;
printf("%d",a/'b');output:0
因为ASCII码’b’在十进制中相当于98,故2/98 == 0
———————————————————————————————————————
七、逻辑运算符
下面为逻辑运算符关系对应表
且 | 或 |
---|---|
and | or |
与 | 或 |
&& | || |
记住一个口诀:且,有假则假,或,有真则真
优先级:!(非) 大于 && (与) 大于 || (或)
短路原则:因为&& 和 || 都满足从左到右的结和性,所以当他们左右边的数都满足只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值,这称为短路原则
说这么多不如举例:
int a = 1,b = 0;
while(a == 1 && b == 1)
看看电脑的运行过程:
电脑会先判段a == 1为真,&&运算符是且,有假则假,但左边判断为真,仍需判断右边才能知道整个表达式的真假性,下个过程就开始对b == 1进行判断…
PS:C语言不支持(0 <= a <= 10)这种写法,要写(0 <= a && a <= 10)
———————————————————————————————————————
八、四个语句(列举的都是平时不常见的
1、else if语句(适用于判断范围)
if()
{...}
else if()
{...}
else if()
{...}
else
{...}
先执行if语句(若不满足),到else if语句(若满足)则直接打印它的局部程序块(大括号里的内容)打完就直接结束整个if循环;到else if语句(若不满足)则到下一个else if语句…
if()
{...}
else if()
{...}
else if()
{...}
这个if循环没有else语句,可以执行但是缺点是当if语句所有else if语句都不满足时就直接结束整个if循环,并不会打印任何一个局部程序块
2、switch语句(适用于判断离散值)
switch(score/10)//里面接变量或变量表达式{ case 10: //case后面接常量case 9:printf("A(最好)\n");break; case 8:printf("B(优秀)\n");break; case 7:printf("C(良好)\n");break; case 6:printf("D(及格)\n");break; case 5:case 4:case 3:case 2:case 1:case 0:printf("E(不及格)\n");break;default:printf("Error!\n");}
当变量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句
3、do while语句(适用于先执行再判断)
int pwd = 7;
do
{printf("Please guess (0~10):");scanf("%d",&gs);
}
while(gs!=pwd);
注意whlie后面一定要加分号
4、goto语句(适用跳出多重循环)
while()
{while(){for( ; ; ){if(){goto temp;//直接跳转到temp语句}}}
}temp:printf("123");//跳转到这里
goto语句后面也可以接函数
虽然goto语句便于初学者使用,但是在后期结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
告诉大家我的一个理解:
当想用goto语句的时候,想想大家都不推荐使用goto语句,说明goto语句是没必要的,既然没必要用,又说明是自己的语句出了问题,那就试着去用别的(或多个)循环去代替goto语句,去解决这个问题(我就是一直靠这个想法解决了很多问题hh~
———————————————————————————————————————
九、大杂烩(这里的笔记都是混杂的
1、按一下Tab键会向右移8个字节
2、定义char的时候前面记得加 unsinged 或 signed(因为signed %char的范围实在是太小了)
3、定义unsinged long long int,打印时必须用%llu,定义long long int,打印时必须用%lld,其他也同理
4、C语言可以用!0和 i++,而python不能这么用
5、int a 的 a只是用来储存的,并不是用来计算的,其他也同理
int a = 10.2 * 10;printf("%d", a);output:102//并不会溢出
6、浮点数四舍五入的方法是:浮点数加0.5再化成整型(int)
7、C语言的叫_Bool,python的布尔类型叫bool;C语言的布尔类型只有0和!0,pyhton的布尔类型只有True和False
8、数组的越界访问:若a[5] = “01234”,访问 a[0] – a[4]都合法,但访问 ’ \0 '或以后的都算越界
9、头文件<math.h>所包含的两个函数的用法
第一个之 fabs()函数是求浮点型绝对值的(整型不行!)
#include <math.h>
...
float number = -1234.0;
printf("%f",fabs(number));output:1234.000000
第二个之 sqrt()函数是开浮点型根号的(整型不行!)
#include <math.h>
...
float number = 16.0;
printf("%f",sqrt(number));output:4.000000
———————————————————————————————————————
十、两个运算符
1、逗号运算符(1)
a = 3,5;//相当于a = 3;5;
1、逗号运算符(2)
a = (3,4,5)
output:5
取逗号最右边的值
1、逗号运算符(3)
a = (b = 3,(c = b + 4) + 5)output:12
虽然括号运算符大于逗号运算符,但是逗号两边是表达式,故只要在逗号表达式中,都应该从左到右依次执行
2、条件运算符
exp1 ? exp2 : exp3 ;
若结果为真则返回exp2,若结果为假则返回exp3
(1 < 3) ? True : Falseoutput:True
———————————————————————————————————————
十一、一维数组
1、定义(直接举例)
int a = {1,2,3};
for (i = 0; i < 5; i++){printf("%d", a[i]);}output:12300
float a = {1,2,3};
for (i = 0; i < 5; i++){printf("%f\n", a[i]);}output:1.0000002.0000003.0000000.0000000.000000
char a = {'1','2','3'};
for (i = 0; i < 5; i++){printf("%c", a[i]);}output:123
说明整型和浮点型数组后面自动填充0,字符型数组后面自动填充’\0’
2、C99标准下的一维数组(1):定义特定数组元素
int a[10] = {[3] = 3,[5] = 5};
注意:某些编辑器可能不支持此功能~
2、C99标准下的一维数组(2):可变长数组(动态数组)
char a[n+1];
getchar();
for(i = 0;i < n;i++ )
{scanf("%c",&a[i]);
}
a[n] = '\0';
printf("您输入的数字是:%s",a);input:1 2 3 4 5
output:1 2 3 4 5
注意:某些编辑器可能不支持此功能~
3、获取数组长度
int a[] = {1,2,3};
printf("%d",sizeof(a)/sizeof(a[0]));
sizeof(a)指 a 整个数组的字节数
sizeof(a[0])指 a[0] 这个元素所占的字节数
4、针对_字符串_数组的头文件<string.h>
头文件<string.h>所包含的函数太多了,所以这里我们只讲
- strlen(求字符串长度
- strcpy(复制字符串
- strncpy(复制字符串(可指定个数
- strcat(连接字符串
- strncat(连接字符串(可指定个数
- strcmp(比较字符串
- strncmp(比较字符串(可指定个数
1、strlen(求字符串长度
char a[] = "1 2 3";printf("%d", strlen(a));output:5
计算数组a字符串长度(不包括’\0’)
注意:strlen()的返回值是unsigned int,故(strlen( ) - strlen( ))的值永不为负
2、strcpy(复制字符串
char a[4];char b[] = "456";strcpy(a, b);printf("%s",a);output:456
a数组的长度一定要长于b数组
3、strncpy(复制字符串(可指定个数
char a[4];char b[] = "456";strncpy(a, b, 2);//复制2个字符a[2] = '\0';//第二个元素赋值为'\0'printf("%s",a);output:45
a数组的长度一定要长于b数组,且在第(复制个数)位元素最后加个’\0’
4、strcat(连接字符串
char a[4] = "123";char b[] = "456";strcat(a,b);printf("%s\n", a);printf("%d",sizeof(a)); output:1234564
说明a[ ]的数组长度并没有变换,但是打印的字符变多了(?ε=ε=ε=┏(゜ロ゜;)┛
还有不用在末尾加’\0’
5、strncat(连接字符串(可指定个数
char a[4] = "123";char b[] = "456";strncat(a,b,2);printf("%s\n", a);printf("%d",sizeof(a)); output:123454
说明a[ ]的数组长度依然没有变换,打印的字符变多了(emmm…日后补坑
还有不用在末尾加’\0’
6、strcmp(比较字符串
int c;char a[] = "12347";char b[] = "12345";c = strcmp(a,b);printf("%d",c);output:1
若比较的两个数组字符串完全相同返回0
若不同,则比较开始不同的地方,若左边字符的ASCII码大返回1,否则返回-1
7、strncmp(比较字符串(可指定个数
int c,d;char a[] = "12344";char b[] = "12345";c = strncmp(a,b,4);d = strncmp(a,b,5); printf("%d\n",c);printf("%d",d);output:0-1
若比较的两个数组字符串完全相同返回0
若不同,则第0位元素开始比较一直到指定个数的地方
若左边字符的ASCII码大返回1,否则返回-1
———————————————————————————————————————
十二、二维数组
1、初始化为0或’\0’
对于一维数组:int a[5] ={0} ←←这是整型与浮点型 //这是字符型↓↓
char a[5] = {’\0’} char a[5] = {’’} char a[5] = {0}(因为ASCII码的0表示空字符)
对于二位数组:初始方法和一维数组一样,只是要把a[5]换成a[5][5](即整个数组
2、赋值方法(比较特殊)
one/直观写:
int a[2][3] = {{0,1,2},{3,4,5}}
two/部分写:
int a[2][3] = {{1},{2}}
这样写的结果是各行第一个元素被赋值(a[0][0]、a[1][0])其他都为0
three/指定部分写:
int a[2][3] = {[0][1] = 1,[1][2] = 6}
这是C99特性,有的编辑器可以用,而有的用不了
four/省略写:
int a[][3] = {{0,1,2},{3,4,5}}
只有第一个括号的内容可以省略,在二维数组表示可以省略行
注意:无论是多少维的数组,都只有第一个括号(即一维数组)可以省略
3、打印字符串
char a[3][20] = {"Please","grab attention","CourserLi's Blog"};
printf("%s",a[1]);output:grab attention
要理解需要明白指针的基本原理
4、获取二位数组长度
int a[][3] = {0,1,2,3,4,5};
printf("%d",sizeof(a)/sizeof(a[0][0]));
sizeof(a)指 a 整个数组的字节数
sizeof(a[0][0])指 a[0][0] 这个元素所占的字节数
5、fgets()函数
提前声明:
下面我将列举fgets()函数的最基础用法,因为此函数水很深,无法全面阐述,这个坑我以后不会在这里补,我可能会专门出一篇关于此函数的文章
用此函数接收 输入字符串 并打印出来
char str[30];char* string = str;printf("请输入字符串");fgets(string, sizeof(string), stdin);printf("%s", string);
这里涉及到的指针不做讲解(若有兴趣可以看看这篇博客:C语言有关指针的概念)
fgets( , , )的第一个参数是输入字符串的存放位置
fgets( , , )的第二个参数是接收(输入字符串)的个数
fgets( , , )的第三个参数是stdin是标准输入流(键盘)
———————————————————————————————————————
✧(≖ ◡ ≖✿)终于结束了~
这是(萌新笔记)C语言的复习笔记系列的第一篇,今后我也会多出些高质量的笔记,也希望大家多多关注我哟(^U^)ノ~YO
还有,其实我也是刚刚开始使用CSDN博客,所以可能没有那么熟练,在写的过程中可能也有些疏忽,若你们在阅读的过程中发现了什么问题,或者想补充些知识点,也请大家在评论区里面留言斧正,互相交流学习,我不胜感激~
最后再一次感谢大家ヾ( ̄▽ ̄)Bye ~ Bye~
(萌新笔记)C语言的复习笔记相关推荐
- (萌新笔记)python的复习笔记
简介:python,作为我在暑假入门的第一门语言,我发现它特别简洁和实用,因此我想记录我的python学习过程,现在刚刚大一入门(我比较弱鸡,所以本文可能会有记录很多我初学时遇到的问题,还请大家斟酌观 ...
- MySQL学习笔记_8_SQL语言基础复习
SQL语言基础复习 一.概述 SQL语句注释方式 1)以"#"开头直到行尾的所有内容都是注释 2)以"--"(--后还有一个空格)开头直到行尾的所有内容都是注释 ...
- php大牛额城战笔记,PHP语言大牛开发笔记(8)——MySQL数据库基础回顾[2]
本文主要向大家介绍了PHP语言大牛开发笔记(8)--MySQL数据库基础回顾[2],通过具体的实例向大家展示,希望对大家学习php语言有所帮助. 一.数据表 为了确保数据的完整性和一致性,在创建表时指 ...
- 【蒟蒻の笔记】CSP初赛复习笔记
CSP初赛复习笔记 初赛什么都能考?就nm离谱/doge 计算机科学发展史 起源 图灵和图灵机以及其他成就 Alan Mathison Turing--艾伦·麦席森·图灵,于1936年发表了图灵机这一 ...
- IOS开发笔记2-C语言基础复习
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53439812 本文出自:[顾林海的博客] 前言 在正式进入ios开发前 ...
- IOS开发笔记4-C语言基础复习
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53453520 本文出自:[顾林海的博客] 前言 变量是与某块数据相关联 ...
- IOS开发笔记3-C语言基础复习
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53453499 本文出自:[顾林海的博客] 前言 前篇笔记记录了变量与类 ...
- 学习【AxureRP9萌新修炼手册V2.2】笔记
目录 有用连接 一.基本操作 (Axure RP9) (一)画布操作 (二)元件操作 二.元件库 (一)图标元件库(Icons) (二)流程元件库(Flow) 1.连线的操作 2.连线的样式 3.元件 ...
- c语言期末复习笔记1
目录 1.流程图 2.变量与类型 3.格式化输入输出 4.判断 5.循环 6.数组 7.函数 8.后面的指针与结构体(主要有点多)留在下一篇文章再写. 1.流程图 写一个程序,首先要了解它是如何进行的 ...
最新文章
- mysql:Column id cannot be null
- Angular 项目里的 tsconfig.json
- Hybris服务器启动日志分析
- php 输出json utf8,php json_encode utf-8中文问题
- SQL大圣之路笔记——PowerDesigner之新建table、view、proc
- java代理的学习,通过类实现接口来实现代理。proxy来创建动态类,和InvocationHandler接口的实现,和工作原理。...
- linux7配置网卡绑定,CentOS7双网卡绑定配置
- c# define 类似_c#跟c++的相似之处
- 将ibatis.net中定义的statement转换为实际的sql语句
- SQL2005之后MS SQL版本 T-SQL 新增语法、函数(二)
- nxp单片机入门_ST、NXP、Microchip、TI、Renesas公司的MCU和MPU定位、性能及特点
- android 植入谷歌广告,将谷歌广告添加到Android应用程序
- Derivative Filter(导数过滤器)
- 2019中国区块链开发者大会 | Conflux 伍鸣:性能问题仍是区块链的应用阻碍
- DRM系列(3)之DRM_IOCTL_MODE_MAP_DUMB
- 基于SpringBoot+微信小程序的壁纸小程序
- 快速学习Java8新特性第七讲——Optional类
- 小米2017校招面试经历
- Highway Networks网络详解
- C语言__bitwise宏定义
热门文章
- 基于nginx开发下的OpenResty开发指南构建百万级别并发的Web应用
- golang/Java实现求100以内的所有素(质)数和九九乘法表
- 一个名为systemd-init的CPU挖矿病毒及后续
- Blender图解教程:快速K帧技巧 之 修改I键对应命令(9月21日 更新)
- java 文件句柄不释放_Java文件句柄释放 | 学步园
- PyTorch IDE hint incomplete PyCharm /VSCode 自动补全/自动提示,提示不完全的问题
- 超文本标记语言 -- HTML
- 【LDA】LDA主题模型笔记—主要是狄利克雷
- windows ssh代理_如何在Windows上通过SSH设置代理?
- 2021年中国海洋仪器行业市场规模及发展趋势分析:行业规模持续扩大,进口产品更占优势[图]