2.1数据类型
基本类型
float和doubt的区别
doubt比float表达的更加精确,大小范围也不一样(这个以后再说)
1.整型常量 int
2.浮点型常量 float
浮点数(实数)有两种表现形式:1.十进制小数形式。由整数部分、小数点、小数部分组成。
2.指数形式。eg:123e3代表123*103;e可以用E替换。tips:e之前必须有数字,后面必须为整数。
(规范化的指数形式):e之前的小数部分中,小数点左边只有一位非零的数字。
浮点数在用指数形式输出的时候,是按规范化的指数形式输出的。
3.字符型常量char
范围
①普通字符
用单引号括起来的一个字符;
② 转义字符
以 / 开头的字符。
注意:‘和/
注:字符集和ASCII码是互通的。
4符号常量
用#define 指令指定一个符号名称代表一个常量;习惯上都是大写字母。
一行只能定义一个符号常量
#define X 11.28
#include <stdio.h>
#define P printf
#define R "please input numbers:\n"
int main()
{
P(R);
return 0;
}
5.字符串常量
用双引号括起来。
可以用语句输出,如printf("China");
2.2变量的定义
- 变量名:每个变量都应该有一个名字
- 变量值:变量在内存中占用一定的存储单位,在该存储变量中存放变量的值。
c语言所有的变量在使用前必须先定义,即说明变量的类型,也就是先定义后使用。
类型说明符 变量名
变量在定义的时候需要注意几个问题
1.命名只能由字母,数字,下划线,三种字符组成。
第一个字必须是字母或者下划线,不可以是数字。
c语言严格区分大小写,即大写字母和小写字母是两个不同的字符。
不可以用关键字命名。
2.变量的数据类型决定了它的存储类型。
说明:
- int型数据取值范围是4字节,有的编译系统中是2
- 浮点型数据在内存中是按照指数形式存储的,小数部分和指数部分分别存放,在4 或 8 字节中。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。
- char型数据在内存中存储的形式为该字符对应的ASCII值,即一个整数。
float 用来存放小数,小数在c语言中称为浮点数。在输出的时候用%f 来输出,类似于%d来输出整数。
2.3变量的赋值
int a=2;
相当于
int a;
a=2;
变量的初始化:变量在定义的同时可以赋初值。
%c表示输出类型为字符类型,系统将存储的二进制数表按照ASCII码表转化为相应的字符,然后输出。
%d表示输出类型是十进制整数,系统直接将二进制数转换为十进制整数输出。
%f实型变量,表示输出实数,以小数形式输出,默认情况下保留小数点6位。
%u输出格式符,表示无符号的十进制形式的整数。
%ld表示输出long型数据。
%f代表单精度浮点型数据(float)
%lf代表双精度浮点型数据(double)。(具体区别以后再说
%.15f或者%.15f是指 保留小数点后15位数字
%2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格
%02d,和%2d差不多,只不过左边补0
%.2d和%02d一样
2.4 循环
while循环
while的基本使用方法
先判断表达式是否成立,如果成立,就执行体内的语句,如果不成立,一次也不循环。
在循环结构的设计中,特别需要注意的是避免死循环
循环无数次
#include <stdio.h>
int main()
{
while (1>0)
{
printf("Hello");
}
return 0;
}
while 和if 一样,如果 后面也只有一个语句,那么{}可以省略
补充知识
暂停语句 sleep()
一对圆括号内的数值单位是毫秒。
#include <stdio.h>
#include <Windows.h>
int main()
{
printf("3");
Sleep(5000);
printf("3");
Sleep(5000);
printf("3");
Sleep(5000);
return 0;
}
上面注意两个地方:
- 头文件<Windows.h>
- Sleep S大写
- Windows W大小写都可以
清屏语句 syatem("cls")
加在printf的前面的内容,在打印新的内容之前把屏幕上的清除干净。
#include <stdio.h>
#include <windows.h>
int main()
{
system("cls");
printf("3");
Sleep(1000);
system("cls");
printf("2");
Sleep(1000);
system("cls");
printf("1");
Sleep(1000);
return 0;
}
内外循环
之后会非常多的用到这个,简单的说一下思路,就是矩阵的想法,控制行标和列标
for循环
基本形式:
for(表达式1;循环条件;表达式2)
{
循环体语句;
}
执行顺序:
1.先求解表达式1
2.判断表达式(条件)是否成立
3.如果成立,执行循环体内语句
4.求解表达式2
5.重复 2-4 过程,直到表达式不成立,结束循环
6.继续执行后续语句
a=a+1可以简写成a++
用for循环更加简便一些
比如,这是while 循环
#include <stdio.h>
int main()
{
int a;
a=1;
while(a<=10)
{
printf("%d",a);
a=a+1;
}
return 0;
}
把他改写成for循环
#include <stdio.h>
int main()
{
int a;
for(a=1;a<=10;a=a+1)
{
printf("%d",a);
}
return 0;
}
do while循环
基本形式为:
do
{
循环体语句;
} while{表达式};
执行顺序如下:
- 执行循环体内的语句
- 判断表达式(条件)是否成立
- 如果成立,重复 1.2 的过程 这个和while 语句 反着
- 直到表达式不成立,结束循环
- 继续执行后续语句
break语句和continue语句
上面三种循环都是当循环条件不满足的时候结束循环。
如果循环条件多于一个或者中途退出循环时,这时候可以考虑标题这两种循环。
break语句
break语句通常用在switch语句和循环语句中,当break语句用于switch语句时,可以使程序跳出switch语句而执行switch后面的语句;判断条件恒真的循环语句中,如果没有break语句,则将成为一个死循环而无法退出。
break语句除了可以用在switch语句中,还可以用在while、do while、for 语句中去。在循环体中遇见break,立即结束循环,跳出循环体,执行循环体后面的语句。
通常break语句总是与if语句连在一起,即满足条件时便跳出循环。
break语句的基本形式为:
break;
continue语句
continue语句只能用在循环语句中。在循环体中遇见continue语句,立即跳过本次循环的循环体中剩余的语句而强制执行下一次循环。通常continue语句总是与if条件语句一起使用,以加速循环。即在循环体遇见continue语句,则循环体中continue语句后面的语句不执行,直接进入下一次循环的判定。
continue语句的基本形式为:
continue;
continue语句只能用于循环结构的内部,一般同if配合使用。
continue语句是不可以在单独的switch语句中使用,但可以在一个循环内的switch语句中使用。
while(表达式)
{
操作1;
if(表达式2)
{
操作2;
continue;
}
操作3;
}
2.5类型转换
2.5.1自动类型转换
2.5.2强制类型转换
一般形式为:
(类型说明符)表达式
需要说明的是,在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型并没有发生变化,比如:int x=5,y=2 (float)x/y ,(float)x的值为5.000000,x的类型仍然是整型。
2.6运算符和表达式
1.基本的算数运算符
2.自增运算符和自减运算符
3.算术表达式
2.6.2关系运算符 和 关系表达式
1.关系运算符
一个等于号表示的是赋值,两个等于号表示的是判断是否相等。
2.关系运算符的优先级和结合性
3.关系表达式
其实,在c语言中,当对于某一个数进行讨论真假的时候,任何非零值为真,0值为假,因此,关系运算的结果仅可能产生两个值:1表示真,0表示假。
2.6.3逻辑运算符和逻辑表达式
1.逻辑运算符(&& || !)
前面两个就不说了,关键是最后一个。
非运算可以理解成是取反
2.逻辑运算符优先级和结合性
实际上,逻辑运算符两侧的运算对象不但可以是0或非0的整数,也可以是任何类型的数据,如字符型、实型或是指针型等。系统最终以0或非0来判断它们属于“真”还是“假”。例如, 'a'&&b'的值为1,是因为和b的ASCI值都不为0,两个非0的数据进行与运算,结果为1。
2.6.4 赋值运算符和赋值表达式
1.基本赋值运算符“=”
(右结合性,就是把右边的数赋值给左边)
赋值运算符优先级比算术运算符、关系运算符、逻辑运算符都要低,结合性是右结合性(从右往左算)。
2.复合赋值运算符
3.赋值表达式
变量+表达式
2.6.5逗号运算符和逗号表达式(左结合性,优先级别最低)
2.6.6条件运算符和条件表达式
条件运算符是c语言中唯一的三目运算符需要三个运算数或者表达式构成条件表达式。
一般形式为:表达式1?表达式2:表达式3
先看表达式1有没有成立,如果成立的话,值就是表达式2 ;不成立的话,值就是表达式2
本节总结
2.7选择结构 switch语句(非常适用于多支路的使用)
基本形式:
switch(整形表达式/字符型表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式1:语句1;break;
....
case 常量表达式1:语句1;break;
default: 语句 n+1;
}
break语句专门用于跳出switch语句