程序执行过程
1. 编译形成目标代码,
2. 链接链接函数库,形成可执行的二进制机器代码
3. 执行在特定机器环境下运行c程序。
注释两种方式的注释 单行注释 // 多行注释/* */
作用1.解释说明 2.屏蔽代码 调试代码是临时将某部分代码注释掉,注释掉的内容不会编译到程序中 commond + / 注释快捷键
C语言 第三章
变量赋值是要注意类型一致
变量的本质是内存中的存储单元,任意一个变量在内存中都需要占用一定的内存空间并且不同类型的数据变量在内存中占用的字节数不一样
浮点型不是绝对精确的,所以分为不同的精度
1字节=8位二进制数据
一个int占用4个字节=32位二进制数据
short占用 2个字节
long 不少于int的长度 在64位系统占用8个字节 在32位系统中占用 4个字节
float 占用4个字节 double 占用8个字节
char 字符型占用一个字节 一个字符变量只能保存一个字符。要用单引号引起来
unsigned 无符号 signed有符号 二进制的第一位表示符号 无符号的变量不能保存负数
4个字节 无符号32位 0~2^32 有符号-2^31~2^31-1
数值过大long 类型保存不了得可以用double ,double 类型的数据是用科学技术保存的所以存在精度问题。
sizeof 是一个人运算符,不是函数 计算变量占用的字节数 返回的是long类型的数 所以占位符用ld
sizeof 可以计算某个变量,也可以计算某个类型所占的大小 sizeof(int)
scanf 输入的时候不能有\n 否则会出现错误的值
求最大公约数最小公倍数
第一种方法
求最小公倍数算法:
最小公倍数=两整数的乘积÷最大公约数
求最大公约数算法:
(1)辗转相除法
有两整数a和b:
① a%b得余数c
②若c=0,则b即为两数的最大公约数
③若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
第二种方法相减法
有两整数a和b:
①若a>b,则a=a-b
②若a<b,则b=b-a
③若a=b,则a(或b)即为两数的最大公约数
④若a≠b,则再回去执行①
例如求27和15的最大公约数过程为:
27-15=12( 15>12 )15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即为最大公约数
穷举法
有两整数a和b:
① i=1
②若a,b能同时被i整除,则t=i
③ i++
④若 i <= a(或b),则再回去执行
⑤若 i > a(或b),则t即为最大公约数,结束
改进:
① i= a(或b)
②若a,b能同时被i整除,则i即为最大公约数,
结束
③ i--,再回去执行②
有两整数a和b:
① i=1
②若a,b能同时被i整除,则t=i
③ i++
④若 i <= a(或b),则再回去执行②
⑤若 i > a(或b),则t即为最大公约数,结束
改进:
① i= a(或b)
②若a,b能同时被i整除,则i即为最大公约数,
结束
③ i--,再回去执行②
变量的命名规则: 1.由字母数字下划线组成;不能由数字开头
2 .c语言区分大小写intA和int a 是两个不同的变量
3.不能以语言的关键字作为变量名
变量的命名原则 1。见文知以2.长度不要过长3.多个单词组成第二个单词要大写。
变量的初始化:给变量赋最初的值,1、声明的同时进行初始化2.先声明在赋值3.通过用户输入进行初始化(字符要用单引号引起来)
变量的值可以随时修改
常量变量声明前加const 关键字,就变成常量了,常量的值不能修改。const float pi=3.14159
常量已经创建就不能修改了,即使没有赋值。所以只能在创建的同事赋初值;
printf(“”);输出引号中的内容,除了输出格式控制符以外的内容都会直接输出
输出变量的值需要用输出格式控制符
scanf中是需要输入的内容,除了控制占位符,其他内容都要按照原样输入 所以scanf中一般只写输入格式控制符,其他什么都不写。
输入时double类型的格式只有lf
空格也是字符字符变量会被赋值为空格。空格也是这样
getchar()通过getchar读取一个字符可以避免回车被赋值给变量b
枚举类型 把所有可能的取值枚举出来,在选择时可以直接选择其中的某一值;
枚举类型属于构造类型
enum color表示枚举类型,a是枚举变量
enum Beijing{changping,cahoyang,haidian} b=changing; 这样也是可以的
声明变量的两种方法
枚举值的取值是从前往后一次加1的修改一个枚举值只会影响后边的值,不会影响前边的值可以同时给多个枚举元素赋值但是不要把枚举值设置成向同的值
数组具有相同类型的元素的集合。
int age[100] int 类型的 数组名为age 有100个元素的数组
一. 声明数组的同时,初始化数组中的元素int a[3]={1,2,3}; 可以省掉方括号内的数字3。
二. 先声明再初始化只能一个元素一个元素初始化 int b[3] b[0]=1,b[1]=2,b[2]=3 在声明时没有初始化的数组不能省掉方括号内的数字。因为没有数字就不能确定声明时要在内存上开辟存储空间的长度。
通过下标去访问每个数组中的元素是有顺序的,每个元素都对应着一个位置,这个位置就是元素在数组中的下标,下标是从0开始一次加1的。
二维数组 元素是数组的数组是二维数组
int [3][5] 等价于int [][5] 只能省掉第一个方括号里的数字,第二个不能省
整数相除结果还是整数 结果没有四舍五入,直接舍去小数;
取余运算操作数不能是浮点行型数据、
++ 运算分为前置++ 和后置++
前置++ ++a a=a+1 –>c=a 后置++ c=a++ c=a àa++
赋值表达式的结果就是等号右边的结果 printf(“%d\n”,a=5);
0为假 非0为真。
逻辑运算符
a&&b全真为真全1为1
a || b 见1为1
表达式为真 值就是1 表达式为假 值就是0
逻辑短路 &&运算:&&前边表达式如果为假,后边的表达式就不再计算。
||运算 ||前边的表达式如果为真,就不计算后边的表达式
关系运算符 > < == <= >= !=;
表达式结果可以表示为真和假的表达式就叫做条件表达式
if(1+2)也可以作为了个条件表达式
if(a=3)赋值表达式结果就是等号右边的结果,也可以当做表达式
三目运算符 a ?x:y 三目运算符表达式的结果是冒号前后的两个值?前边是条件表达式,如果条件表达式的结果为真返回:前边的值,如果条件表达式为假返回:后边的值
类型转换
不同类型变量之间进行运算时要先进行类型转换
float类型变量赋值给int类型变量需要做类型转换
类型转换分为强制类型转换(显示类型转换)和隐式类型转换
float pi=3.14; int b=(int)pi;
int b=pi; 隐式类型转换
自动转换遵循以下规则
1, 不同类型的数据运算首先要转换成相同类型
2, 低精度转换为高精度,数据类型字节说少的转换为字节数多的
3, 所有浮点运算都要转换为双精度double进行运算
4, char型和short型都要先转换成intchar类型使用ascll码运算再运算
5, 赋值运算时直接把右边的数据类型转换成左边的数据类型不用考虑前四点
printf("%.2f\n",5.0/2); 输出结果保留两位小数
const 声明的常量在vs中可以通过地址修改,但是在xcode中不能修改 经典面试题
错题10!=9 的值是 非零值
x!=0 就是真
运算符分类
1.算术运算符2.自增自减运算符3.赋值运算符和表达式4.二元符合运算符5.一元运算符sizeof()操作符6.关系运算符和逻辑运算符。