C语言入门
C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。
hello,world
#include
int main()
{
/*在双引号中间输入Hello World*/
printf("Hello World");
return 0;
}
在最新的C标准中,main函数的类型为int 而不是void。
C语言具体结构
通俗来说,一个C程序是由若干头文件和函数组成。
理解:与java的区别为,java是修饰类,而C语言由若干函数头文件和函数组成。
必须的主函数
一个C程序有且仅有一个主函数,即mian()函数:
C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。
而main前面的int就是主函数的类型.
printf()
是格式输出函数,这里就记住它的功能就是在屏幕上输出指定信息。
return 是函数返回值,根据函数类型不同,返回值也是不同的。
\n是转移字符中的换行符,(注意:C程序一定是从主函数开始执行的)
良好习惯之规范
一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行。
函数体内的语句要有明显缩进,通常以按一下Tab键为一个缩进。
括号要成对写,如果需要删除的话也要成对删除。
当一句可执行语句结束的时候末尾需要有分号。
代码中所有符号均为英文半角符号。
程序解释——注释
C语言注释有两种:
多行注释:
/* 注释内容 */
单行注释:
//注释一行
标识符
C语言规定,标识符可以是字母(A~Z,a~z)
、数字(0~9)
、下划线_
组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:
标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。
标识符是严格区分大小写的。例如
Imooc
和imooc
是两个不同的标识符。标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。
标识符不能是C语言的关键字,想了解更多C语言关键字的知识。
变量及赋值
变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。
变量定义的一般形式为:数据类型,变量名
多个了类型相同的变量:数据类型 变量名, 变量名, 变量名...;
意:在定义中不允许连续赋值,如int a=b=c=5;
是不合法的。
变量的赋值分为两种方式:
基本数据类型
C语言中的数据类型可以分为:
最常用的整型, 实型与字符型(char,int,float,double):
整型数据是指不带小数的数字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):
int
short int
long int
是根据编译环境的不同,所取范围不同。
而其中short int
和long int
至少是表中所写范围, 但是int
在表中是以16位编译环境写的取值范围。
另外 c语言int
的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。
ANSI标准定义int
是占2个字节,TC是按ANSI标准的,它的int
是占2个字节的。但是在VC里,一个int
是占4个字节的。
浮点数据是指带小数的数字。
生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。
精度不同又可以分为三种(float、double、long double):
注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。
格式化输出语句
格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。
其格式为:printf("输出格式符",输出项)
printf("普通字符输出格式符", 输出项);
注意:格式符的个数要与变量、常量或者表达式的个数一一对应
不可改变的常量
在程序执行过程中,值不发生改变的量称为常量。
直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:
整型常量:13、0、-13;
实型常量:13.33、-24.4;
字符常量:‘a’、‘M’
字符串常量:”I love imooc!”
在C语言中,可以用一个标识符来表示一个常量,称之为符号常量,符号常量在使用之前必须先定义:其一般形式为:
#define 标识符 常量值
#include
#define POCKETMONEY 10 //定义常量及常量值
int main()
{
// POCKETMONEY = 12; //小明私自增加零花钱对吗?
printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
return 0;
}
符号常量不可以被改变
自动类型转换
数据类型存在自动转换的情况
自动转换发生在不同数据类型运算时,在编译的时候自动完成。
char
类型数据转换为int
类型数据遵循ASCII
码中的对应值.
注:
字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
char可以转换为int,int可以转换为double,char可以转换为double。但是不可以反向。
强制类型转换
强制类型转换是通过定义类型转换运算来实现的。其一般形式为:
(数据类型) (表达式)
其作用是把表达式的运算结果强制转换成类型说明符所表示的类型
在使用强制转换时应注意以下问题:
数据类型和表达式都必须加括号, 如把(int)(x/2+y)
写成(int)x/2+y
则成了把x
转换成int
型之后再除2
再与y
相加了。
转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。
强制转换后的运算结果不遵循四舍五入原则。
运算符号
C语言中的运算符
* 算术运算符
* 赋值运算符
* 关系运算符
* 逻辑运算符
* 三目运算符
算术运算符
除法运算中注意:
如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如
8/3 = 2
;
而两数中有一个为小数,结果则为小数,如:
9.0/2 = 4.500000
。
mtianyan: 取余运算中注意:
该运算只适合用两个整数进行取余运算,如:
10%3 = 1
;
mtianyan: notes: 而10.0%3则是错误的;运算后的符号取决于被模数的符号,如
(-10)%3 = -1;
而10%(-3) = 1;
注意:C语言中没有乘方这个运算符,也不能用×, ÷
等算术符号。
自增与自减运算符
自增运算符为++
,其功能是使变量的值自增1
自减运算符为--
,其功能是使变量值自减1。
其经常使用在循环中,自增和自减有以下几种形式:
赋值运算符
C语言中赋值运算符分为简单赋值运算符和复合赋值运算符
简单赋值运算符=
号了,下面讲一下复合赋值运算符:
复合赋值运算符就是在简单赋值符=
之前加上其它运算符构成.
例如
+=、-=、*=、/=、%=
分析:定义整型变量a并赋值为3,a += 5;
这个算式就等价于a = a+5;
将变量a和5相加之后再赋值给a
注意:复合运算符中运算符和等号之间是不存在空格的。
关系运算符
C语言中的关系运算符:
关系表达式的值是真
和假
,在C程序用整数1
和0
表示。
注意:>=, <=, ==, !=
这种符号之间不能存在空格。
逻辑运算符
C语言中的逻辑运算符
三目运算符
C语言中有三目运算符,其表达式为:
表达式1 ? 表达式2 : 表达式3;
执行过程是:
先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。
运算符大比拼优先级比较:
各种运算符号的顺序:
优先级级别为1的优先级最高,优先级别为10的优先级最低。
分支结构之简单的if语句
C语言中的分支结构语句为if条件语句:
简单的if语句基本结构如下:
if(表达式)
{
执行代码块;
}
其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。(可以使用三目运算符替代)
分支结构之简单if-else语句
简单的if-else语句基本结构:
语义是: 如果表达式的值为真,则执行代码块1,否则执行代码块2。
分支结构之多重if-else语句
语义是:依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n。
注意:当某一条件为真的时候,则不会向下执行该分支结构的其他语句。
分支结构之嵌套if-else语句
循环结构之while循环
C语言中有三种循环结构:
循环结构do-while循环
语句含义是:
它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
注意:mtianyan: 使用do-while
结构语句时,while括号后必须有分号。
循环结构之for循环
循环结构之三种循环比较
循环结构之多重循环
多重循环就是在循环结构的循环体中又出现循环结构。
在实际开发过程中,一般用到最多的是三重循环。
因为循环层数越多,运行时间越长,程序越复杂,所以一般用2-3层多重循环就可以了。另外不同循环之间也是可以嵌套的。
多重循环在执行的过程中,外层循环为父循环,内层循环为子循环,
父循环一次,子循环需要全部执行完,直到跳出循环。父循环再进入下一次,子循环继续执行...
结束语句之break语句
在没有循环结构的情况下,break不能用在单独的if-else语句中。
在多层循环中,一个break语句只跳出当前循环。
结束语句之continue语句
continue语句的作用是结束本次循环开始执行下一次循环。
break语句与continue语句的区别:
break是跳出当前整个循环,continue是结束本次循环开始下一次循环。
分支结构之switch语句
臭名远扬之goto语句:是一种无条件分支语句。
自创函数
C语言提供了大量的库函数: 比如stdio.h
提供输出函数
函数调用
在C语言中,函数调用的一般格式为:
函数名([参数]);
对无参函数调用的时候可以将
[]
包含的省略。
[]
中可以是常数,变量或其它构造类型数据及表达式,多个参数之间用逗号分隔。
有参无参
在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数。
有参和无参函数的一般形式如下:
有参函数和无参函数的唯一区别在于:函数 ()
中多了一个参数列表。
有参函数更为灵活,输出的内容可以随着n的改变而随意变动,只要在main函数中传递一个参数就可以了
而在无参函数中输出的相对就比较固定,当需要改动的时候还需要到自定义的方法内改变循环变量的值。
形参和实参
形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
实参是在调用时传递给函数的
形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。
函数调用结束返回主调函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。
在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
函数的返回值
递归函数一
递归就是一个函数在函数体内调用其自身
执行递归函数将反复调用其自身,每调用一次就进入新的一层。
递归函数必须有结束条件。
递归函数二
局部与全局
C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。在复合语句中也可定义变量,其作用域只在复合语句范围内。
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。
变量存储类别
C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。
C语言中存储类别又可以分为四类:
注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。
为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明
内部函数与外部函数
在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
static [数据类型] 函数名([参数])
这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
extern [数据类型] 函数名([参数])
C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。
数组初体验
程序中也需要容器,只不过该容器有点特殊,它在程序中是一块连续的,大小固定并且里面的数据类型一致的内存空间,它还有个好听的名字叫数组。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购
物袋中的物品是按一定顺序放置的。
数据类型 数组名称[长度];
数组只声明也不行啊,看一下数组是如何初始化的。说到初始化,C语言中的数组初始化是有三种形式的,分别是:
数组的遍历
数组就可以采用循环的方式将每个元素遍历出来,而不用人为的每次获取指定某个位置上的元素,例如我们用for循环遍历一个数组:
数组作为函数参数
数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数
数组作为函数参数时注意以下事项:
数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度。
数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致。
字符串函数
多维数组
多维数组遍历
多维数组也是存在遍历的,和一维数组遍历一样,也是需要用到循环。不一样的就是多维数组需要采用嵌套循环。
注意:多维数组的每一维下标均不能越界。
总结
做各种练习题,练习C语言的基础知识,全部都将其搞定,把基础知识给其吃透。
会自己编写各种程序,然后想到的都是基础知识都行啦的样子打算。
函数的分类
在C语言中可从不同的角度对函数分类
从函数定义的角度看,函数可分为库函数和用户定义函数两种
库函数: 由C语言系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf、scanf、getchar、putchar等函数均属此类
***用户定义函数:***由用户按需编写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用
从函数执行结果的角度来看, 函数可分为有返回值函数和无返回值函数两种
有返回值函数: 此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。(必须指定返回值类型和使用return关键字返回对应数据)
无返回值函数: 此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。(返回值类型为void, 不用使用return关键字返回对应数据)
从主调函数和被调函数之间数据传送的角度看,又可分为无参函数和有参函数两种
无参函数: 在函数定义及函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。
有参函数: 在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数,称为实际参数(简称为实参)
通过视频将C语言基础知识梳理一遍,然后通过代码把基础都给其搞透彻,全部都搞定都行啦。
就这样学习斟酌就行啦,先看第二篇文章,明天在开始看后面的文章,不断的打磨都行啦的样子与与积累知识。 做到看到知识点,能想起用到什么的基础语法,全部都将其给搞透彻,完全搞透彻都行啦的样子与打算。