1. 程序的一般形式
(1)注释
① 分类:单行注释( // ): 注释一行.多行注释( /**/ ): 在这个区间内,都属于多行注释,可以换行.
② 作用:提示代码的作用,提示思路 不写注释的后果:出来混总是要还的.
③ 单行注释不能换行
(2) #include #import
① 导入文件,系统提供类库文件中包含一些功能函数,如果想在某个文件中使用,必须导入需要的文件。
② stdio 标准输入输出 standard input output
(3) main 函数,又称主函数,是程序运行的入口位置
(4) 功能代码
(5)return 返回
强调编码规范、代码提示、错误和警告
2. 数据类型
在编写计算机程序时,我们会将数据交给计算机处理,那么在C语言中这些数据如何存储呢。
例如:要存储一个人的身高、年龄,首先这些数据类型不同,先要了解C语言包含哪些数据类型。
(1)数据类型分类
① 基本数据类型。 整型、浮点型、字符型
② 构造类型。 数组、枚举
③ 指针类型。
④ 空类型。 void
3. 基本数据类型
char 字符类型 包含:‘a~z‘ ‘A~Z‘ ‘0~9‘ 存储字符
int 整形类型 包含:1 2 3 4 5 6 7 8 9 0等等 存储整数
float 浮点型 包含: 数字1.2 2.5 3.6 存储小数
short 短整型 包含: 数字 1 2 3 4 5 6 7 8 9等等 存储整数
long 长整型 包含:数字1 2 3 4 5 6 7 8 9等等 存储整数
double 双精度浮点型 包含: 数字1.1 2.5 3.9等等 存储小数
(1)数据存储单位
① 存储单位。 字节Byte,最常用存储单位;位bits,最小存储单位。
② 1字节 = 8位(二进制位) = 2位(十六进制位)
(2)不同数据类型的存储空间不同,存储空间决定了数据类型能够存储数据的范围
① char 1 short 2 int 4 long 8 float 4 double 8
② 数据类型的存储空间与操作系统有关,并不是统一的。但是有一个原则:short <= int <= long <= long long
③ sizeof 运算符,计算每个数据类型占用存储空间。
④ 存储空间决定了存储数据的范围。不要死记硬背,可以查资料,把最常用的记住。溢出:超出了数据类型的取值范围
(3) 整型区分有符号和无符号,无符号的标示符 unsigned。
(4) 区分正数/负数:整数对应的二进制数,最高位1是正数,最高位0是负数。
(5) 整数的存储方式:补码。正数补码:自身;负数补码:绝对值、取反、加1.
(6) 浮点型数的存储方式:指数。 标准指数形式:整数为0,第一位小数不为0.
printf("%lu\n", sizeof(char)); // 1
printf("%lu\n", sizeof(short)); // 2
printf("%lu\n", sizeof(int)); // 4
printf("%lu\n", sizeof(long)); // 8
printf("%lu\n", sizeof(float)); // 4
printf("%lu\n", sizeof(double)); // 8
3. 变量、常量
(1) 常量
① 程序运行期间不能改变的量
② 常量分类
a 整型常量:10
b 实型常量:1.5
③ 字符常量:
a 普通字符(参考ASCII字符表。例如:‘a‘)
b 转义字符(属于操作字符,无法打印显示。例如:\n)
④ 字符串常量:"中国"
(2) 变量
① 程序运行期间可以修改的量
② 变量代表一个存储区域,用于存储数据,相当于容器。存储的内容就是变量的值
③ 变量在使用之前必须定义 三部分:类型、变量名、初值
④ 变量名要求:
只能由 数字、下划线、字母组成,并且不能以数字开头
不能使用系统保留字 int、float等等
不能重复使用定义的变量名
见名知意,驼峰命名法 teacherName,studentName
⑤ 标示符:用来命名变量、类型的有效字符,只能使用数字、字母、下划线表示
定义变量 三步 就算初始值是0,也必须写
强调编码规范(空格使用),语法(只能使用英文字符)
int a = 10; ( 类型 int 变量名 a 初值 10)
float b = 1.5;
char c = ‘a‘;
int m = 0, n = 100; (一行定义多个变量)
练习 定义几个变量
// 定义一个变量age,存储年龄
int age = 0;
// 定义一个变量c_score,存储C语言考试分数,定义一个变量oc_score,存储OC语言考试分数
float c_score = 94.5, oc_score = 89;
// 定义一个变量gender,存储性别
char gender = ‘f‘;
// 修改变量
age = 18;
c_score = 100;
oc_score = 90;
// 代码有提示,提示内容。 如何显示代码提示ESC,确认代码回车或tab
// 声明变量 不设置初值,一般情况下都要求定义变量,特殊情况再说明
// 只声明会造成的问题:存储区域是重复使用的,如果定义变量时不设置初始值,结果可能是0,可能是之前的值 (盘子刷没刷)
// 变量名 既要符合语法要求,也要见名知意。 什么是好代码,人和计算机都能读懂
// 练习:定义变量存储某个老师的姓名、年龄、性别,定义变量存储某个学生的姓名、年龄、C语言分数、性别 (目的:定义变量的语法和规则)
*/
#pragma mark -----------运算符------------
/*
运算符
1、运算符包含很多种:单目、双目、三目。 单、双、三表示参与运算的变量或常量数量
2、优先级不同,不要死记硬背,学会查询表,记住最常用的
3、这节课:赋值运算符、算数运算符、复合运算符
4、学会使用()标记运算优先级,好处:避免错误、代码可读性强
*/
/*
// 赋值运算符 双目运算符
// 左值 等号左侧的值 只能是变量
// 右值 常量、变量、表达式
int a = 0;
int b = a;
// 练习:交换两个变量的值 例子:两个水杯交换水,需要使用第三个杯子临时装一下水
int a1 = 10;
int a2 = 20;
int temp = 0; // 临时
// 将a1的数据复制到temp中
temp = a1;
// 将a2的数据复制到a1中
a1 = a2;
// 将temp的数据复制到a2中
a2 = temp;
// 算数运算符 双目运算符 + - * /
// +
int b1 = 10;
int b2 = b1 + 20;
int b3 = b1 + b2;
// -
int c1 = 50;
int c2 = c1 - 10;
int c3 = c1 - c2 - 10;
// *
// / 除法
// 1、除数不能为0
int d1 = 10 / 0;
// 2、除号两边都是整数,结果也是整数,省略小数部分
int d2 = 3 / 2;
printf("%d\n", d2);
// 3、除号两边都是浮点型,结果是浮点型
float d3 = 4.2 / 2.0;
printf("%f\n", d3);
// 4、除号两边有一个是浮点型,结果是浮点型
float d4 = 3 / 2.0;
float d5 = 3.0 / 2;
// % 取模运算符 获取余数
// 1、取模运算符两边必须都是整数
int e1 = -5 % 3; // 5 对 3 取模,即5除3的余数
printf("e1 = %d", e1);
*/
// 2、余数 < 除数
// 3、公式 a % b a = b * n + 余数
/*
// ++ 自增运算 单目运算符
// 只能给变量使用
// 1、 ++在变量后面
// (1) 相当于 i = i + 1
int i = 10;
i++; // 语句执行后,i = 11
// (2) 先参与运算,后自增
int j = 10;
int k = 50 + j++; // 相当于 k = 50 + j; j = j + 1
printf("%d", k);
// 2、 ++在变量前面
// (1) 相当于 i = i + 1
int x = 10;
x++;
// (2) 先自增,后参与运算
int y = 10;
int z = 50 + ++y; // 相当于 y = y + 1; z = 50 + y
printf("%d", z);
*/
/*
// 复合运算符
// +=
// a+=b 相当于 a = a + b
int a = 10;
a += 5;
printf("%d", a);
// 2、 -=
*/
#pragma mark -----------表达式和语句------------
/*
1、表达式组成:常量、变量、运算符。 表达式是有返回值的。
2、语句:程序执行的最小单位,以;结束
*/
/*
int a = 0;
a = 1;
a = 1 * 5
*/
#pragma mark -----------输出函数------------
/*
1、将需要输出的内容转换成字符串,输出显示在控制台
2、输出内容:普通字符串、将变量的值转换成字符串
3、函数格式 printf(格式字符串, 表达式1, 表达式2...)
*/
/*
// 输出普通字符串 格式字符串使用"输出的内容",不需要表达式
// 使用换行符\n,换行符只实现功能,不显示
printf("hello world!\n");
printf("易荟云\n");
// 输出变量的值 格式字符串由普通字符和转换符组成
// 不同类型的变量有对应的转换符
// 将需要显示变量内容的位置使用转换符占位
int age = 18;
//printf("我今年18岁");
printf("我今年%d岁\n", age);
int number = 10;
printf("我的学号是:%d\n", number);
printf("我今年%d岁,学号:%d\n", age, number);
float c_score = 95.5;
printf("C语言分数:%f\n", c_score);
char gender = ‘f‘;
printf("性别:%c\n", gender);
// 输出格式控制
// 设置字符宽度
// 1、实际长度 大于 设置长度,按照实际长度显示
// 2、实际长度 小于 设置长度,可以补空格 %4d
// 3、实际长度 小于 设置长度,可以补0 %04d
int a = 100;
printf("%2d\n", a); // 补空格
printf("%05d\n", a); // 补0
// 左对齐 - 和 0不能同时出现,0被忽略
printf("%-4d\n", a);
printf("%-04d\n", a);
// 设置小数位 默认小数点后显示6位
float b = 9.54;
printf("%f\n", b);
printf("%.1f\n", b); // 四舍五入
printf("%2.2f\n", b);
// 如何输出转义字符
printf("%%\n");
printf("100%%\n");
float score = 95.5;
printf("%.1f%%\n", score);
// 补充 char类型在存储时就是一个字节的整型数,根据ASCII码表,字符和数字有等价关系
// 输出时 格式符可以相互使用
char x = ‘a‘;
printf("字符x = %c\n", x);
printf("字符x = %d\n", x);
int y = 97;
printf("整型y = %c\n", y);
printf("整型y = %d\n", y);
// 定义时可以相互使用
char m = 98;
int n = ‘b‘;
printf("字符m = %c\n", m);
printf("整型n = %d\n", n);
*/
#pragma mark -----------输入函数------------
/*
1、将控制台输入的内容(字符串),存储到某种数据类型的变量中。 与printf作用相反。
2、scanf格式 格式字符串,变量地址
3、使用:先定义变量
*/
/*
// 转换符必须和变量类型保持一致,否则数据存储会出现问题
int number = 0; // 定义变量用于存储输入的内容
scanf("%d\n", &number);
printf("number = %d", number);
// 输入时 float转换符%f,double转换符%lf
float f1 = 0;
scanf("%f", &f1);
printf("f1 = %f", f1);
double f2 = 0;
scanf("%lf", &f2);
printf("f2 = %f", f2);
*/
/*
// 格式字符串中的内容 与 控制台输入的保持一直
int a1 = 0;
int a2 = 0;
scanf("%d,%d", &a1, &a2);
printf("a1 = %d, a2 = %d", a1, a2);
*/
/*
// 建议:格式字符串内只包含转换符 不要包含其他字符,尤其是\n。回车的作用是结束输入,但是会跟\n匹配,使输入操作出现问题。
// 如果想起到提示作用,可以在输入之前,输出一句提示
int age = 0;
printf("请输入年龄:");
scanf("%d", &age);
printf("年龄:%d", age);
*/
#pragma mark -----------补充------------
/*
// 自动类型转换
float a = 3 + 1.5;
// 强制类型转换
int b = (int)a;