C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出

时间:2023-03-09 13:20:01
C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出

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;