【c语言】初始c语言总结

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


初始c语言总结

作为一个二本的文科专业,对于未来就业很迷茫,不知道毕业后可以去干什么,在幻大的影响下选择了自学编程,去年11月的时候自学了几天Java但是就学了几天了就没学了,这一次从头开始学起了c语言,感谢比特鹏哥的视频。


一、第一个c语言项目

#include<stdio.h>
int main()
{
	printf("hello");
	retuen 0;
}
- main() 意思为主函数
    主函数是函数的入口,写任何c语言的代码都必须要有main()函数
    main()函数有,且只有一个
- int是整型的意思,main()前面的int表示表示main()调用返回一个整型值,如后面的: return 0;
- 在屏幕上输出内容,我们可以用printf();来解决
-printf()这种的,统称为库函数,即c语言本身提供给我们的函数,通俗来讲就是别人的东西
- 用别人的东西我们肯定需要打招呼呀,所以前面的#include <stdio.h>就是打招呼的作用
    #include这是包含的意思,包含一个叫做stdio.h的文件
    std -> 即标准,全称standard input output -> 即标准输入输出

二、初始数据类型

char   
short
int
long
long
float
double
- 如果要在程序中创建一个数据,需要前面加上数据类型,如:char ch='a';  //创建字符串‘a’
- 打印输出的时候需要格式化字符串,对应关系如下:
    整型 -> %d
    字符串 -> %c
    浮点数 -> %f
    双精度浮点数 -> %lf
    以地址的形式打印 -> %p
    打印十进制数 -> %d
    打印八进制数 -> %o
    ...
- 同时,我们要是想知道各种数据类型占据的字节数,我们可以使用sizeof()来获取,括号内填数据类型
    # 我们在写程序的时候,应该视情况而定义数据类型,不同类型占用的内存不同,如果有太多内存用不到,就会造成浪费
    # 通过1字节等于8比特,且short占用2字节,有2*8=16可得出占用16比特,再2^16-1=65535,所以short占用65535个比特位,可以输入65535个数字,其他类型计算方法同理
- 我们在写入float数据类型的时候,如果想明确表示一个数是单精度浮点型,可以在数值后面加f,如:float a = 15.6f;

三、变量

定义方法:
char ch = 'w';
int num = 15;
float f = 15.6f;
//在变量前面加上它的数据类型名称
  • 全局变量
    定义在代码块’{}'外的变量即全局变量,同时以为这可以在全局范围内进行访问,使用范围大
  • 局部变量
    定义在代码块’{}'内的变量即局部变量,使用范围小
    • 当局部变量和全局变量名字相同的时候局部变量优先
      局部变量和全局变量的名字建议不要相同,不然容易引起bug
    • 如果我们要输入数据,使用输入数据函数scanf,后面需要有取地址符号’&',如:scanf(“%d%d”,&num1,&num2);
      c语言编译器较新的可能会使用scanf_s来输入数据
      或者我们可以在:项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:_CRT_SECURE_NO_DEPRECATE, 这样也可以正常运行程序
      #之后我们就可以在程序运行时,来输入num1和num2的数据了
    • c语言中有个特殊的语法规定,变量要定义在当前代码块的最前面,不然可能会报错!
  • 变量的作用域和生命周期:
    作用域:
    程序设计概念,通常来说,一段程序代码中所用到的名字并不是总是有效/可用的,而限定这个名字的可用性代码范围就是作用域
    1.局部变量的作用域是变量所在的局部范围
    2.全局变量的作用域时整个工程
    整个工程不单单指当前文件噢~我们可以访问当前工程内任意文件的全局变量,只不过要在文件内先声明
    全局变量不如只声明不初始化变量值,默认为0
    使用extern来声明,后面加上变量的数据类型,如:extern int num;
    extern还可以用来声明其他源文件中的函数,如:extern Add(int,int);
    生命周期:
    变量的生命周期是指变量的创建到变量的销毁之间的一个时间段
    1.局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
    2.全局变量的生命周期:整个程序的生命周期

四、常量

那些不变的量就称为常量,c语言的常量分为以下几种:

  • 字面常量
  • const 修饰的常变量
  • #define定义的标识符常量
  • 枚举常量

字面常量:直接就写出来的,如:3;
常变量:用const修饰的就叫常变量,如:const num=8; 这样定义之后,num就不能再修改了,如果修改就会报错
标识符常量:用#define定义的就是标识符常量,如:#define MAX 10 这样就定义了一个名称为MAX值为10的常量,和常变量不同的是它可以直接放到只允许放置常量的函数中去
枚举常量:枚举——一一列举,如生活中的性别:男/女/保密,星期:1-7…
我们在c语言中定义枚举常量用以下方法:

enum 名字{
    列举的值
    ...
};  //这里的';'不能少
实例:
enum sex {
	man,
	wuman,  //如果在main()函数中打印出这三个常量,返回的是0/1/2
	secret
};          //可以用enum sex sex = man; 获取它的值,这里定义的sex是可以改的,只有枚举常量里面的值是不能改的,如:woman=20;  这就会报错

五、字符串/转译字符/注释

字符串:
    - char表示的是字符类型,不是字符串类型噢~
        不过我们可以通过一些方法来让char定义字符串,如使用数值:char str[] = "abc";
        但是如果这样,如:char str2[] = {'a','b','c'},就会报错
        为什么呢,因为第一中方法定义的字符串其实后面还有写'\0'没显示,而如果第二种方法要正确显示就要在最后面加上0'\0'
            这里的'\0'是字符串的结束标志,如果没有这个结束标志,就会接着往后打印一些随机值
            我们可以用strlen来读取字符串长度
转译字符:
在一些字母前面加'\'改变它原来的意思
常用的有:
\n      换行
\t      水平制表符(tab)
\\      但斜杠
\ddd    ddd表示1-3个八进制的数字,如:\130 X
\xdd    dd表示2个十六进制数字,如:\X30 0
...
可看python书本P57页,一模一样
strlen读取转义字符时,一个转译字符和后面的字母算一位,如:strlen("c:\test\32\test.c"),一共有13个字符,\t和\32都算1字符

注释:
- 单行注释使用( // )
- 多行注释使用( /* 内容... */ ),缺陷:不支持嵌套
- 注释快捷键(VS2019):
		添加 -> Ctrl+k+c
		取消 -> Ctrl+k+u

六、选择语句和循环语句

- 选择语句语法:
	if(条件表达式)
	{		//条件表达式为true时执行
			语句1....
	}
	else
	{		//为false时执行
			语句2...
	}

- 循环语句
	c语言中有三种循环:
		1. while循环
		2. for循环
		3. do...while循环
	while循环语法:
	while(条件表达式)
	{		//条件表达式为true时会一直执行下面的语句直到为false
			语句1...
			语句2...(改变条件表达式的值)
	}
	for循环语法:
	do...while循环语法:

七、函数

- 库函数
	如前面所学习的printf(); scanf().....
- 自定义函数
	创建函数语法:
		数据类型 函数名(形参1,形参2)
		{
				语句...
		}
	实例:int sum(a,b)
	{
			return a+b;
	}

八、数组

要存储1-10的数字,怎么存储?
c语言中给了数组的定义:一种相同类型元素的集合
创建数组:
	int num[10] = {1,2,3,4,5,6,7,8,9,10};		//这里的int表示创建数组的数据类型,也可以是char或者别的数据类型
				//这里的[10]代表着可以存放10个元素
	- 数组中每一个数都有索引值,索引值是从左往右,从0开始数的
	- 例子中数组前面的int不是代表数组的类型,而是数组里面元素的值的类型,所以我们用sizeof(num)的时候,应该是int4字节*10个元素 = 40字节
	- 如果我们要计算出数组中的元素个数,可以使用sizeof(num) / sizeof(num[0])来计算

九、操作符

- 算数操作符
	+	-	*	/	%
- 移位操作符
	>>	<<
	如:
		short num = 1;
		int num2 = num << 1;		
		这里移动的是二进制位,可知short2字节就是16个bit,那么num转换成二进制就是00000000 00000001																						左移一位就是0 00000000 00000010,最前面的0取掉,最后面补一个0,二进制转十进制可得结果为2
		printf("%d" , num2);		这里打印的结果就是2,右移同理
- 位操作符
	&|^异或
	用位操作符进行运算的时候,都要先把十进制数转换成二进制数在进行运算
	与运算	如:3&5	3的十进制是0115的十进制是101,运算的时候,只有两边都为1结果才为1,所以011&101的结果是001,再转换会十进制就是1,即3&5 == 1;
	或运算	如:3|5		二进制数和上面相同,但是或运算只要有一个结果是1,就会返回1,所以011|101的结果是111,再转换成十进制就是7,即3|5==7;
	异或运算	^在这里代表的不是次方,而是异或运算符,运算规律:对应的二进制位相同则为0,对应的二进制位互异则为1
				如:3^5	二进制还是011101,一一对应后110,再转换会十进制就是6,即3&5==6- 赋值操作符
	=  +=  -=  *=  /=  &=  |=  ^=  >>=  <<=
- 单目操作符
	!逻辑反操作		+	-	&	 sizeof  ~  --  ++  *  (类型)
	'!'差不多可以理解为非运算符,!1==0;  !0==1;	大于1同样视为1来运算
	'sizeof'返回的是数据类型的长度,而不是字符的长度,字符的长度用strlen查询
		但是如果sizeof获取的是数组的类型,得到的就是数组的长度*字节长度,如:int num[10]={0};  printf("%d",sizeof(num));		//这里打印的就是长度10*4字节,打印40
	'~'(二进制)位取反	如有一个数int num=0的话:~num就先把0的二进制位写出来
			由整型4字节*8 = 32bit,即00000000 00000000 00000000 00000000	取反 11111111 11111111 11111111 11111111,打印时,会输出它的原码结果为:-1
			规则如(原码符号位不变,其他位按位取反得到反码,反码+1得到补码)11111111 11111111 11111111 11111111      --->     11111111 11111111 11111111 1111110      --->      10000000 00000000 00000000 00000001 
             这里是补码-->原码                                  	二进制位-1                                             按位取反(符号位不变,第一位为1表示为负数,后面的正常读取)
			(补码-1得到反码,反码按位取反得到原码)	
			只要是整数,内存中存储的都是二进制的补码
				正数--原码、反码、补码相同
				负数:
					原码		         --->			反码		      --->		        补码
					直接按照正负				原码的符号位不变				    反码+1
					写出的二进制序列		其他位取反得到
	'++ '/'--' 的使用规则和JS相同	
	'(类型)'是强制类型转换,括号内填入数据类型
		如:int num = 3.14	//这个时候程序虽然能够运行,但是会弹出一个警告,如果我们想消除这个警告的话,如下:
				int num = (double)3.14		//这里会启动强制类型转换,把double类型的数据类型转换成int
	'&'为取地址操作符,'*'为间接访问操作符,这两个后面再说		
- 关系操作符
	>  >=  <=  <  !=  ==
- 逻辑操作符
	&&       ||
	逻辑与   逻辑或
	'&&'两个数都为真才为真,反之为假
	'||'两个数有一个为真就是真,都为假才是假
- 条件操作符
	exp1 ? exp2 : exp3
	和JS意思相同,如:int max = 5>3 ? 5 : 3;	这里相当于执行了一个判断语句,先判断'?'前面的值是否为真,为真则执行':'左边的值,为假执行':'右边的值,这里max==5;
	和python则不同,python的条件操作符是 max = 5 if 5>3 else 3	先判断if语句右边的值,为真执行if左边的值,为假执行else后面的值,更像是缩写if语句
- 逗号表达式
	exp1 ,  exp2  , exp3 ,  ....expn
	总之用','隔开的就是逗号表达式
- 下标引用、函数调用、结构成员
	[]  ()  .  ->

【C语言基础学习笔记】一、初始C语言(总结篇) 说明:我是一个初学c语言的小白,很多地方都不是很理解,所以就会自己动手敲代码进行相应的推理验证,希望可爱的你在看到这些步骤时,不要嫌弃我啰嗦。(近期有很多小可爱给我私发消息,问我怎么学习编程,怎么学好c语言等问题,所以在这里我统一进行解答和回复,希望可以帮到大家。) 本章内容: 1、如何学好编程,编程学习方法分享(小白必看~) 2、编程学习路径分享(C++/Java) 3、初始C语言总结思维导图(复习+提高 专用) 4、初始C语言知识补充(查漏补缺) 5、编程练习题(巩固加深所学知识) 文章目录一、 阅读详情

相关推荐

C语言初始结构体(1)

前言 对于很多初学者的xdm而言,相信除了指针那块有极大的难度,结构体的难度也是不容小觑的,毕竟后面学数据结构和法或者学其他的计语言,如:Java、Python这些,都是需要你C语言指针和结构体的基础足够扎实才能学得下去,否则你只能从入门到入土了,要想在计机的道路走得更远,那么C语言这个计机中的母语你是必须得牢牢掌握的,俗话说的好:“千里之堤溃于蚁穴!”只有当你的基本功打得扎实了,后面的学习你才能得心应手!万事开头难,不要被C语言的指针和结构体给吓倒,黎明前的黑暗只要熬过去就好,你可知道,当你..

weixin_53811859的博客 8372

初始C语言

介绍一些C语言基础语法

2401_87454588的博客 868

C语言实现惯性导航初始对准的核心代码(C/C++)

初始对准过程中,我们需要确定传感器的初始姿态(即初始位置和方向)。下面是一个简单的C语言示例代码,演示了如何进行初始对准。在惯性导航系统中,初始对准是一个关键的步骤,它旨在校准传感器的初始状态,使其与参考坐标系对齐。在本篇文章中,我们将介绍如何使用C语言实现惯性导航初始对准的核心代码。请注意,上述代码仅为示例,实际的惯性导航系统实现可能更加复杂,并涉及许多其他方面,例如误差校正和滤波法等。然后,我们编写一个函数来模拟传感器的测量值。函数模拟传感器的测量值,并添加了一些随机噪声以模拟真实的传感器数据。

PixelProX的博客 1505

C语言初始C语言

C语言的学习

jhj5555的博客 699

初始c语言

本文章是初步的接触认识c语言

2402_84602321的博客 2482

C语言入门(一++):详解C语言的“初始框架”

假设你有个小弟弟/小妹妹,他很小,只能听懂一些基础的指挥(走,按之类的),这时候你告诉他:老弟/老妹帮我开下电脑,他可能会一脸懵逼地看着你说:“老登你在说啥我听不懂。1、走到机箱旁边2、找到迹象左上角的按钮按下去3、找到显示屏下面的按钮按下去定义 开机箱{1、走到机箱旁边2、找到迹象左上角的按钮按下去3、找到显示屏下面的按钮按下去于是以后你就可以告诉你的弟弟妹妹:”老弟/老妹帮我开下电脑“,Ta也不会一脸懵逼地和你大眼瞪小眼了。事实上,开电脑函数里最基本的操作(走,按)也可以理解为函数。

qq_54638981的博客 936

【C语言初始C语言

intifreturn,这些符号被称为保留字或者关键字注:在 C99 标准中加入inlinerestrict_Bool_Complex_Imaginary等关键字⼀些关键字大家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。(C语⾔关键字的全部介绍)

m0_57244097的博客 1016

C语言实现惯性导航初始对准全部核心代码

惯性导航初始对准包括间接粗对准和卡尔曼滤波精对准,其中。为基于卡尔曼滤波的精对准,其中。

十八与她的博客 2256

【C语言】初级第1节——初始C语言

初步认识什么是C语言

fh_1998的博客 3901

C语言——初始C语言

初始C语言

Z11535的博客 185

【C语言系列】初始C语言

C语言是一门通用计机编程语言,广泛应用于底层开发。类型 类型名(最好初始化)//定义一个整形数组,最多放10个元素宏的参数无类型//define定义标识符常量//define定义宏int main()return 0;

2301_80434397的博客 1886

关于C语言初始入门

说完了主函数,库函数我们再来简单说说上面还未提及的"int",int就是一个关键字,它的作用表示main函数的返回值类型,再回归正题,说说关键字是什么,就像你去学钢琴,每一个按键都是用他自己声音,你能做的,就是把声音联合起来形成一个曲子,而关键字在C语言中就是有一个·“按键”的作用,他在C语言中有着自己的作用和逻辑,是不能被更改的,我们能做的是使用,而不是去随意发挥,这小小的"int"就是关键字中的一员,而像他这么强势的英雄,还有31位。刚好就是回应了int的定义,也是做到了某种意义上的“有呼必有应”

2401_89031099的博客 988
FYYU123
博客等级 码龄5年 0粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值