文档内容于B站小甲鱼教学总结。
文档内容后续会持续更新,直到完结(大概会出十篇文章吧)
文档中如出现错误信息,请道友评论回复。
C语言的特点
1.C语言简介,紧凑,使用方便,灵活。
2.ANSI C共有32个关键字:
auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,goto,for,if,int,long,register,return,short,signed,static,sizeof,struct,switch,typeof,union,unsigned,
void,volatile,while。
3.运算符丰富:34种。
4.数据结构类型丰富。
5.具有结构化的控制语句。
6.语法限制不太严格,程序设计自由度大。
面对过程和面向对象的程序设计思想:
面向过程:“面向过程”是一种以事件为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象:“面向对象”(Object Oriented,简称OO)是一种一以事物为中心的编程思想。
经典程序
#include
//main是主函数的函数名,表示这是一个主函数。
//每个C程序都必须有main,且只能有一个main(主函数)
void main()
{
//函数调用语句,printf函数的功能是把要输出的内容送到显示器显示
printf("Hello world!\n");
}
控制台输入数据,输出该数据的sin值
#include
#include
void main(){
double a,b;
printf("input a number:");
//控制台输入函数
scanf("%lf",&a);
b=sin(a);
printf("sine of %lf is %lf\n",a,b);
}
C数据类型
1. 基本类型
1.1 整形
1.2 字符型
1.3 实型(浮点型)
1.31 单精度型
1.32 双精度型
1.4 枚举类型
2. 指针类型
3. 构造器类型
3.1 数组类型
3.2 结构体类型
3.3 共用体类型
4. 空类型
常量和符号常量
符号常量的定义
习惯上符号常量的标识符用大写字母,变量标识符用小写。
符号常量与变量不同,符号常量的值在其作用域内不能改变,也不能被赋值。
//#define 标识符 常量
#define PRICE 30
案例
#include
#include
#define PRICE 30
int main()
{
int x,y;
x=10;
y=x*PRICE;
printf("y=%d",y);
}
变量
其值可以改变的量成为变量。一个变量应该有一个名字,在内存中占有一定的存储单
元。变量定义必须放在变量使用之前,要区分变量名与变量值是两个不同的概念。
变量在内存中是以二进制的形式保存的。
int a=3;
十进制数码为0~9
八进制整常数需以0开头,以0位前缀,数码取值0~7,通常是无符号数。
如:015(十进制为13)
十六进制整常数:前缀为0x或0X,数码取值为0~9,A~F或a~f.
如:0x2A(十进制为42)
整形变量
该处占多少字节跟系统和编译器规定有关。具体可自行编译查看
1.基本型:类型说明符int,在内存中占4个字节。
2.短整型:类型说明符short int或short,所占字节和取值范围均与基本型相同。
3.长整型:类型说明符long int或long,在内存中占4个字节。
4.无符号型:类型说明符unsigned。
int main()
{
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(unsigned));
}
int a,b,c,d;
unsigned u;
a=10;
b=-20;
u=15;
c=a+b;
d=u+b;
printf("a+b=%d,u+b=%d",c,d);
实型变量的分类
实型变量分为:
单精度(float型,占四字节,32位,内存空间),
双精度(double型,占八字节,64位,内存空间)
长双精度(long double型,占十二字节)
实型变量的计算案例
这是一道计算机相关考试的类似题
#include
int main()
{
printf("%d\n",1.0/3*3);
printf("%f\n",1.0/3*3);
printf("%d\n",3.0/2);
printf("%f\n",3/2);
printf("%d\n",1/3*3);
printf("%f\n",1/3*3);
}
这里有必要说一下:
%d对应的是整型(如:1,2),%f对应的是浮点型(有小数点。如1.0,1.,2.00);
该类%d,%f,%ld等等,都称之为占位符,这里想了解的朋友可以自行百度。
该案例中%d,对应输出的就是整形(如果后边计算的答案是0.1或0.999等小于一
的小数,或1.2,5.2,等带有小数的数字,那么输出的数字则是计算后的数字取整,
也就是0.1输出就是0,1.1输出就是1)。
%f,对应输出的就是浮点型。,对应输出就是会有小数点后六位,具体为数也可以
自己定,如%.8f,则是输出数字为小数点后保留八位。
再来说后面计算的,如果带有小数点的,就算出数字就带有小数点,反之则无。
字符型数据
包括字符常量和字符变量
字符常量:
是由单引号括起来的一个字符,注意是一个字符且是单引号。
数字被定义为字符后,不能参与运算,5(数字)和'5'(字符)是不一样的
类型。
如'a','+','!','4'等。
字符变量:
用来存储字符常量。存储单个字符。说明符是char
char a,b;
char c='5';
转义字符
一种特殊的字符常量。
已反斜线"\"开头,后面跟一个或多个字符,如"\\","\t","\n"。
分别是输出为\,一个tab位的空位,换行。
#include
void main()
{
int a,b,c;
a=10;
b=20;
c=30;
printf(" ab c\tde\rf\n");
printf("hijk\tL\bM\n");
}
字符的存储形式是以ASCII码的形式将字符值存放在变量的内存单元中的。
如a的十进制ASCII码是97,b的十进制ASCII码是98。
如A的十进制ASCII码是65,B的十进制ASCII码是66。
对变量a,b赋值'A','B';
这里ASCII码内容过多,有需要了解,可以自行百度,ASCII码。
char a='A';
char b='B';
printf("%c,%c",a,b);
向字符变量赋以整数
#include
void main()
{
int a, b, c, d;
//这里对应的是'a','b','A','B'
a = 97;
b = 98;
c = 'A';
d = 'B';
printf("%d, %d\n", a, b);
printf("%c, %c\n", a, b);
printf("%d, %d\n", c, d);
printf("%c, %c\n", c, d);
}
由一对双引号括起来的字符序列。如"#e@sd","hello","Hello"。
注意区分字符常量:
双引号,存放一个或多个字符。
单引号,存放一个字符。
可以吧一个字符常量赋值给一个字符变量,
但不能吧一个字符串常量赋值给一个字符变量
如:可以char a='a';但不能char a="a";
字符常量占一个字节的内存空间,字符串常量占的内存字节数等于
字符创中字节数加一(如"123",则为四字节)。增加的一个字节中
存放"\o"(ASCII码为o),这是字符串结束的标志。
各类数值型数据之间的混合运算
变量的数据类型是可以转换的,有自动转换和强制转换两种方法。
自动转换:
发生在不同数据类型之间混合运算时,由编译系统自动完成。
1.转换按照数据长度增加的方向进行以保证精度不降低,如int和long运算时,将int转换为long型再运算。
2.所有浮点型运算都是以双精度进行的,即使仅含有float单精度量运算的表达式,也要先转换成double型,在做运算。
3.char和short型参与运算时,必须先转换成int型。
4.在赋值运算中,赋值号两边的数据类型不一致时,赋值号右边的类型将转换为赋值号左边的量的类型,如果右边的量的类型长度长与左边的,则会降低精度,造成数据缺失,丢失的部分按四舍五入向前舍入。
强制转换:
通过类型转换运算来实现的。
一般形式为:
(类型说明符) (表达式)
其功能是把表达式的运算结果强制转换为类型说明符所表示的类型。
如:(float)a,把a转换为实型。
(int)(x+y)把x+y的结果转换为整型。
注意:无论是强制转换还是自动转换,都只是为了本次运算的需要而对变量的数据长度进行临时型转换,而不改变数据说明时对该变量定义的类型。
精度的运算
int s, r = 5;
float PI = 3.14159;
//r*PI,所有浮点数都是以双精度运行的,因为PI是float,
//所以r和PI都转换为double型,计算出结果后,s是int型,所以只留整数,结果为78
s = r*r*PI;
printf("%d\n",s);
类型强制转换,强制转换是临时的
float f=2.58;
printf("(int)f=%d,f=%f\n",(int)f,f);
printf("%f\n", -20.0/3);
基本算术运算符
加减乘除,求膜运算符:"+","-","*","/","%"。
需要注意的就是,算数的结果会根据运算数的类型和占位符而定。
运算符的优先级
c语言中,运算符的运算优先级共分为15种,一级最高。
具体就不细说了,看图吧,这种东西小伙感觉多练练就能回。
自增自减运算符
int i=0;
++i i自增1后在参与运算。
--i i自减1后参与运算。
i++ i参与运算后,i的值再自增1;
i-- i参与运算后,i的值再自减1;
贴个例题吧
#include
//自增自减运算符
void main()
{
int i, a=5;
i=a++;
printf("%d\n", i);
printf("%d\n", a);
i=++a;
printf("%d\n", i);
printf("%d\n", a);
printf("%d\n", ++i);
printf("%d\n", --i);
printf("%d\n", i++);
printf("%d\n", i--);
printf("%d\n", -i++);
printf("%d\n", i);
printf("%d\n", -i--);
printf("%d\n", i);
}
int i = 5, j = 5, p, q;
p=(++i)+(++i)+(++i);
q=(j++)+(j++)+(j++);
printf("%d,%d,%d,%d\n",p,q,i,j);
先自己用脑子缕缕清楚,
看会输出什么吧,
每个步骤的每个变量的值会是多少呢。
赋值运算符
相信学到这里的朋友,应该也知道什么是赋值运算符了吧
简单赋值运算符和表达式:简单赋值运算符为"=".由"="链接的式子称为赋值表达式。
其形式为:变量=表达式
如:
x=a+b;
w=sin(a)+sin(b);
赋值表达式的功能是:计算表达式的值,然后将值赋给变量。
如:
a=b=c=5;
也可写为:
a=(b=(c=5))
这里涉及到了运算符的优先级,又不懂的可以回去看下上面贴的图或自行百度。
还有就是赋值时,类型不一致的情况哦,上面也有提到,需要多注意这些细节。
贴个案例
想学东西就要动动手,不然就只会是理论大师了,先看看自己懂了没吧
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%d",a,x,a,c2);
复合的赋值运算符
在赋值号"="之前加上其他二目运算符可构成符合赋值符。
如 +=,-=。*=,、=,%=,<<=,>>=,&=,^=,!=。
例如:
a+=5; 等价于a=a+5;
r%=p; 等价于r=r%p;