Bootstrap

从0开始的C语言入门教程day1(未完待续,两天让你学会C语言)

1、hello 解释

1 #include <stdio.h>//包含 头文件
2 // # 预处理符号
3 // main函数,主函数,程序入口函数
4 // int 返回值类型,
5 // main 函数名
6 // () 里面 是函数的形参列表
7 // void 代表着没有形参 ,可以不写
8 int main(void)
9 {// {} 里面是函数体,要执行的内容
10 // printf(); 函数的调用
11 // 格式化打印输出函数
12 // \n 这是一个字符,换行符
13 printf("Hello World!\n");
14 // return 返回值 ,程序运行成功 返回 0
15 // 如果函数没有返回值,返回值类型 写void ,必须写
16 // 每一行代码的最后都需要加一个分号;
17 return 0;
18 }

2、C语言中的数据类型
数据类型: 基本类型,构造类型,指针类型,空类型;

3、基本类型
总共有6种;
short :短整型 占2字节
int :整型 占4字节
long :长整型 占4字节(在32位系统),占8字节(在64位系统)
char :字符型 占1字节
float :单精度浮点型 占4字节
double :双精度浮点型 占8字节
基本类型的实质:指在内存上开辟多大字节的空间;
验证: sizeof(); 关键字 :测占内存的字节
整型存储的是整数,字符型存储的是字符,就是键盘上输入的字符;
浮点型存储的是小数,单精度代表能够精确到小数点后6位,双精度能够精确到小数点后15位;

4、单位换算
内存的基本单位 :字节 byte
内存的最小单位 : 位 bit
数据在内存中,是以二进制的形式存储的;
单位换算;
1 byte = 8 bit
1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB

5、变量和常量
程序运行中,值可以发生改变的量,就叫做变量,变量用来存储数据的;
变量的大小: 由变量的类型决定
变量的名字: 是一个标识符,要符合标识符的命名规范
定义变量的格式:
(存储类型auto) 数据类型 变量名;

1 #include <stdio.h>
2 int main(void)
3 {
4 //int a;//定义变量,给变量赋值
5 //a = 10;
6 //在定义变量的同时进行变量赋值,叫做初始化
7 //int b = 10;
8 //两个变量之间可以相互赋值
9 int a = 10;
10 int b = 20;
11 printf("a = %d\n",a);
12 printf("b = %d\n",b);
13 a = b;//单个的等于号,叫做赋值运算符,意思是将b 的值赋给 a;
14 //另外,允许在一行定义多个变量,变量之间用 逗号 隔开,末尾加分号
15 printf("a = %d\n",a);
16 //int c,d = 20,e,f;
17 return 0;
18 }

常量:与变量对应,在程序运行中,值不会发生改变的量,就是常量;
常量 一般是用来给变量赋值,或者是参与比较;
常量分类:
整型常量 用%d 打印
浮点型常量 float 用%f 打印,double %lf 打印
字符型常量 %c 打印 代码中,用单引号 引起来的内容都是字符
字符串型常量 %s 打印 代码中,用双引号 引引来的内容都是字符串

6、标识符的命名规范

1、标识符是由数字、字母、下划线组成;
2、不能够以数字开头;
3、不能够和关键字冲突,关键字和标识符都是严格区分大小写的;
4、注意:标识符:变量名,函数名,数组名,结构体名..
1 关键字
2 char short int long float double enum struct union void signed unsigned 12个数据类型
3 auto register static extern const volatile 6个存储类型
4 sizeof
5 typedef
6 if else switch case break default for while do goto return continue 12个基本结构相关

7、C语言中的运算符

运算符 是一个符号,作用:多个数值之间进行运算使用;
分类:
算术运算符: + - * / %(模除,就是取余数) ++ --
关系运算符: > < >= <= != ==(l两个等于号才是关系运算符)
逻辑运算符: && || !
赋值运算符: = += -= *= /=(复合)
条件运算符: C语言中唯一一个三目运算符 `? :`
位运算符[[& | ^ ~ << >>
逗号运算符: ,
sizeof运算符: 用来计算变量的大小;
注意事项:
算术运算符,%模除,左右操作数必须是整数;
自增自减运算符 ++ --
1 int a = 10;
2 a++; <==> a = a + 1;
3 a--; <==> a = a - 1;
4 ++a; <==> a = a + 1;
5 --a; <==> a = a - 1;
6
7++ 和 前-- 也就是 ++a;--a;
8 a 本身的值会 +1 或者 -1;表达式的结果也会 +1 或者 -19++ 和 后-- 也就是 a++;a--;
10 a 本身的值会 +1 或者 -1;表达式的结果还是 a++ 或者 a-- 之前的值;
11
12 #include <stdio.h>
13 int main(void)
14 {
15 int a = 10;
16 int b = 10;
17 printf("a = %d a++ = %d\n",a,a++);
18 //逗号运算符,右边的表达式会影响左边的表达式
19 printf("a = %d ++a = %d\n",b,++b);
20 return 0;
21 }

位运算符
针对二进制数的,系统在对二进制数进行运算的时候,会对要运算的两个数,进行一个右端对齐,然后才进行运算;

1 & 按位与: 全11;有002 | 按位或: 全00;有113 ^ 按位异或:相同为0;不同为14 ~ 按位取反:01105 << 左移:左边丢弃,右边补06 >> 右移:正数左边补0;负数左边补1;右边丢弃;
7
8 1010 10
9 1111 15
10 & 1010 10 | 1111 ^ 0101

练习:
实现两个变量的值互换,至少用两种方法实现;

1 int main(void)
2 {
3 int a = 13;
4 int b = 24;
5 int temp = 0;
6 printf("a = %d b = %d\n",a,b);
7 /*//三杯水交换
8 temp = a;
9 a = b;
10 b = temp;
11 printf("a = %d b = %d\n",a,b);
12 */
13 /*//做差法
14 a = b - a;
15 b = b - a;
16 a = a + b;
17 printf("a = %d b = %d\n",a,b);
18 *///异或法
19 a = a ^ b;
20 b = a ^ b;
21 a = a ^ b;
22 printf("a = %d b = %d\n",a,b);
23 return 0;
24 }

练习:
使用scanf 函数从键盘输入一个三位数,编写程序输出 个位 十位 百位 之和;

如: 123 ------->> 1 + 2 + 3 = 6;

1 scanf(输入格式,变量地址); 格式化输入函数
2 int a;
3 scanf("%d",&a);
1 #include <stdio.h>
2 int main(void)
3 {
4 int g,s,b,input_num,sum;
5 printf("please input sanweishu >> ");
6 scanf("%d",&input_num);
7 g = input_num % 10;
8 s = input_num / 10 % 10;
9 b = input_num / 100;
10 sum = g + s + b;
11 printf("g = %d s = %d b = %d sum = %d\n",g,s,b,sum);
12 return 0;
13 }

8、C语言中有三种基本结构
8.1、顺序结构
8.2、选择结构
1、if else 语句

1 if(表达式)
2 {
3 //代码块1
4 }
5 else
6 {
7 //代码块2
8 }
9 //当表达式为真,执行代码块1,表达式为假,执行代码块2;

C语言中,真假是怎么界定的呢?
非0 为 真;0 为假;
-1 -100 真;
0 为假;
1 100 真;

逻辑运算符: && || !
&&:有假即为假,全真才为真;
|| :有真即为真,全假才为假;
! : 真假转换;

1 int i = 10;
2 if(i > 1 && i < 20)//判定条件为真
3 if(i > 1 || i < 10)//判定条件为真

短路原则:
在逻辑与中,当第一个条件为假时,不判断第二个条件;
在逻辑或中,当第一个条件为真时,不判断第二个条件;

嵌套形式

1 int i = 10;
2 if(i > 1 && i < 20)//判定条件为真
3 if(i > 1 || i < 10)//判定条件为真
1 if(表达式1)
2 {
3 		if(表达式2)
4		{
5		//代码块1
6		}
7 		else
8 		{
9 		//代码块2
10		}
11 }
12 else
13 {
14 //代码块3
15 }
16 //当表达式1为真时,判断表达式2,如果表达式2为真,执行代码块1,如果表达式2为假,执行代码块2,
17 //当表达式1为假时,执行代码块3;

注意:如果代码块只有一条语句,可以不写花括号 {}
练习:
学生成绩管理系统,要求输入成绩,判断
[90,100] A
[80,90) B
[70,80) C
[0,70) D
其他成绩,输出错误;

1 #include <stdio.h>
2 int main(void)
3 {
4 int score;
5 while(1)
6 {
7 printf("please input score >> ");
8 scanf("%d",&score);
9 if(score > 90 && score <= 100)
10 printf("score is A\n");
11 if(score > 80 && score <= 90)
12 printf("score is B\n");
13 if(score > 70 && score <= 80)
14 printf("score is C\n");
15 if(score >= 0 && score <= 70)
16 printf("score is D\n");
17 if(score > 100 || score < 0)
18 printf("score is error\n");
19 }
20 return 0;
21 }

练习:
排序,输入三个数,按照从小到大的顺序进行排序,并且输出
a = 10;b = 40; c = 30;
输出: a = 10 b = 30 c = 40

1 #include <stdio.h>
2 int main(void)
3 {
4 int a,b,c,temp;
5 scanf("%d%d%d",&a,&b,&c);
6 if(a >= b)
7 {
8 temp = a;
9 a = b;
10 b = temp;
11 }//a 中存储的是 a b 中较小的值
12 if(a >= c)
13 {
14 temp = a;
15 a = c;
16 c = temp;
17 }//a 中存储的是a c 中较小的值
18 //a 现在就是最小的值
19 if(b >= c)
20 {
21 temp = b;
22 b = c;
23 c = temp;
24 }//b 中存储的是b c 中较小的值
25 printf("a = %d b = %d c = %d\n",a,b,c);
26 return 0;
27 }

2、switch case语句

1 switch(算数表达式)
2 {
3 case 结果1:
4 //代码块1
5 break;
6 case 结果2:
7 //代码块2
8 break;
9 default:// 其他结果
10 //代码块3
11 break;
12 }
13 //算数表达式,一般为变量,或者是一个能够算出结果的表达式,也可以是单个字符;
14 //如果算数表达式的结果为结果1,执行代码块1,以此类推;
15 //如果不满足所有列出的结果,会执行default 后的代码块;
//注意:每一个结果后面,都要加上break;如果没写break,代码会向下执行,知道遇到break 跳出分支,
或者执行到代码末尾;
16
17 //case 后面的结果,不能为小数;

练习:用switch case 语句实现学生成绩管理系统

1 #include <stdio.h>
2 int main(void)
3 {
4 		int score;
5 		while(1)
6 		{
7 				printf("please input score >> ");
8 				scanf("%d",&score);
9 				if(score < 0 || score > 100)
10 						printf("score is error\n");
11				 else
12 				{
13 						switch(score/10)
14 						{
15 						case 10:printf("score is A\n");break;
16 						case 9:printf("score is A\n");break;
17 						case 8:printf("score is B\n");break;
18 						case 7:printf("score is C\n");break;
19 						default:printf("score is D\n");break;
20						 }
21 				}		
22		 }		
23 		return 0;
24 }

8.3、循环结构
1、while循环

1 while(表达式)
2 {
3 //循环体
4 }
5 //当表达式成立的时候,执行循环体
6 //循环体,就是要执行的代码
7 //while(1) 死循环

练习:
实现 1 ~ 100 的累加,并输出结果;

1 #include <stdio.h>
2 int main(void)
3 {
4 		int i = 100,sum = 0;//定义变量记得初始化,补初始化的话,变量里面的值可能不对
5 		while(i)
6 		{
7 		sum += i--;
8 		//sum += i;
9 		//i--;
10 		}
11 		printf("sum = %d i = %d\n",sum,i);
12 		return 0;
13 }
;