这节课笔记的排版有点问题,感觉是 markdown 语法有问题,当然不排除思否社区的排版问题,哈哈哈,已反馈官网啦,大家对付看。
0. 温习
0.1 运算符
1. 赋值
留神的点:
// 定义变量的时候,给的值 这时叫做初始化。
int a = 0;
int b = 10;
int c = 0;
// 定义完变量,再去给值,这个就叫赋值
a = 100; // 正确的
100 = a; // 谬误的
a = b = c = 500;
复合赋值运算
a+=b; // 相当于 a = a+b;
2. 算术运算符
有几个:+ – * / % ++ —
须要留神的:
除法运算:两个整数相除,后果就是一个整数
取模运算:参加运算的两个数,必须是整数 取模运算常常被用于判断 A 是不是 B 的倍数
自增自减:自增自减的同时参加了其余运算,前置自增是先自增,再参加其余运算,后置,反过来。3. 取地址
获取一个变量的地址,常常用于 scanf_s 输出数据
留神:数组的名字,就是数组的起始地址
4.sizeof
求得一个数据类型或者一个曾经定义好的变量的大小
int a= 200;
sizeof(int) 就是 4
sizeof(a) 也是 4
int arr[8] = {0};
sizeof(arr); 这个就是 32
5. 逗号
他是优先级最低的运算符
6. 关系运算符
> >= < <= == != 他们是用于比拟大小关系的,后果只能是 true 或者 false
true 和 false 是 bool 类型。从数值上看 true 就是 1 false 就是 0
7. 逻辑运算符
&&
||
!
0.2 数组
定义:
数据类型 数组名 [数组长度] = {初始值};
应用:
数组名[数组下标] = 数值;
比方:
int arr[10] = {0};
arr[2] = 100;
scanf_s("%d",&arr[2]);
数组名是下标,给 0 号元素输出数据的时候,能够写成上面的形式:
scanf_s("%d",arr);
scanf_s("%d",&arr[0]);
留神:
如果数组有 10 个元素,那么下标就是 0~9
数组越界,个别是比拟难以寻找的 BUG
字符数组
char arr[20] = “hello”;
如果想要用字符数组当成字符串应用,个别就能够间接应用数组名。
scanf_s(“%s”,arr,20);
如果想要打印:
printf(“%s”,arr);
还有四个函数:
strlen 求长度 留神 不算结尾的 0
strcpy 拷贝 留神应用平安版
strcat 拼接 也是应用平安版
strcmp 比拟 相等 0 不等为非 0
每一个函数,都有对应的 wchar 版本的函数。
0.3 三大构造
程序
抉择
a 单 if
if()
{
}
b if-else
if()
{
}
else
{
}
c if-else-if
if()
{
}
else if()
{
}
else if()
{
}
else if()
{
}
else
{
}
switch-case
switch(数值)
case 常量 1:
break;
case 常量 2:
break;
case 常量 3:
break;
default:
都不匹配执行这个
1. 循环
while()
{
}
输入 0 -100 的值(理论有很多种办法,能输入即可)
1.1while 循环输入
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 第一种办法:循环输入 0 到 100
int n = 1;
int nNum = 0;
while (n<=101)
{printf("%d", nNum);
nNum++;
n++;
}
printf("\n");
// 第二种办法:循环输入 0 到 100
int nNum1 = 0;
while (nNum1 <= 100)
{printf("%d", nNum1);
nNum1++;
}
return 0;
}
### 2.do-while 循环
include <stdio.h>
include <stdlib.h>
int main()
{
int i = 0;
do
{printf("%d\n", i);
i++;
}
while (i < 100);
return 0;
}
### 3.for 循环
include <stdio.h>
include <stdlib.h>
int main()
{
// 输入 0~100
for (int i = 0; i <= 100; i++)
{printf("%d", i);
}
return 0;
}
对于 for 的总结:1.for 有三条语句,第一句 用于初始化一个循环变量 第二句 用于管制循环条件 第三句 用于循环变量的变动。2. 三条语句标准上,应该依照以上的写法,实际上,写什么都行
### 1.4 对于三种循环的总结
1. 三种循环个别状况下,是能够互相替换的。2. 当明确循环次数的时候,个别应用 for 循环,不能明确循环次数的时候,个别应用 while 循环。3.while 和 for 有可能一次循环体都不执行,do-while 至多执行一次循环体
对于 while 和 for while 就是简化版的 for
for (; ;)
{printf("我是循环体 \n");
}
while (1)
{printf("我是循环体 \n");
}
### 1.5 有限循环
当循环条件始终为真的时候,就会有限循环。也称之为死循环
### 1.6 break 和 continue
break 是完结循环
continue 是完结本轮循环,间接开始下一轮循环
1. 输入 0~100 以内的所有偶数 --- 要求应用 continue
#include <stdio.h>
#include<stdlib.h>
int main()
{for(int i=0;i<=100;i++)
{if (i % 2 == 1)
{continue;}
else
{printf("%d", i);
}
system("pause");
return 0;
2. 如果咱们有一个数组 int arr[8] = {5,3,6,7,1,2,9,0}, 从键盘上输出一个数字,判断这个数字在不在数组中,如果在的话,输入他的下标,如果不在的话,输入 NO--- 应用 break
//2. 如果咱们有一个数组 int arr[8] = {5,3,6,7,1,2,9,0},
// 从键盘上输出一个数字,判断这个数字在不在数组中,// 如果在的话,输入他的下标,如果不在的话,输入 NO-- - 应用 break
int arr[8] = {5,3,6,7,1,2,9,0};
int nNum = 0;
printf("请输出一个整数:");
scanf_s("%d", &nNum);
//_contof 是用来获取数组元素的个数的
// 比方这个地位_countof(arr) 就是 8
// 这个代码是有问题的
//for (int i = 0; i < _countof(arr); i++)
//{// if (nNum == arr[i])
// {// printf("%d\n", i);
// break;
// }
// else
// {// printf("NO\n");
// }
//}
// 如何可能比拟好的解决这种,找到还是没找到的问题
// 办法 2:应用下标去判断
//int i = 0;
//for (; i < 8; i++)
//{// if (nNum == arr[i])
// {
// break;
// }
//}
//if (i == 8)
//{// printf("NO\n");
//}
//else
//{// printf("%d\n", i);
//}
// 办法 2:应用标记
bool nFind = false;
for (int i = 0; i < 8; i++)
{if (nNum == arr[i])
{printf("%d\n", i);
nFind = true;
break;
}
}
if (nFind == false)
{printf("NO\n");
}
return 0;
### 1.7 循环的嵌套
![图片.png](/img/bVc3veg)
#include <stdio.h>
#include <stdlib.h>
int main()
{for (int i = 1; i <= 9; i++)
{for (int n = 1; n <= i; n++)
{printf("%d", n);
}
printf("\n");
}
//for (int n = 1; n <= 1; n++)
//{// printf("%d", n);
//}
//printf("\n");
////....
//for (int n = 1; n <= 7; n++)
//{// printf("%d", n);
//}
//printf("\n");
//for (int n = 1; n <= 8; n++)
//{// printf("%d", n);
//}
//printf("\n");
//for (int n = 1; n <= 9; n++)
//{// printf("%d",n);
//}
//printf("\n");
return 0;
}
练习 2:打印 99 乘法表
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 打印一个 99 乘法表
for (int i = 1; i <=9; i++)
{for (int n = 1; n <= i; n++)
{printf("%d*%d=%d", n, i, n * i);
}
printf("\n");
}
//for (int n = 1; n <= 8; n++)
//{
// printf(“%d%d=%d “, n, 8, n 8);
//}
//printf(“\n”);
//for (int n = 1; n <=9; n++)
//{
// printf(“%d%d=%d “, n, 9, n 9);
//}
//printf(“\n”);
}
练习 3:鸡兔同笼
办法 1:
include <stdio.h>
include <stdlib.h>
int main()
{
// 鸡 i 只
// 兔子 j 只
//i+j==40
//2*i+4*j == 110
int n = 0;
bool bSign = false;
for (int i = 0; i <=40; i++)
{for (int j = 0; j <= 40; j++)
{if (i+j==40&&2*i+4*j==110)
{printf("鸡的数量是 %d 兔子的数量是 %d\n", i, j);
bSign = true;
break;
}
n++;
}
if (bSign == true)
{break;}
}
printf("内层循环执行了 %d 次", n);
return 0;
}
办法 2:
for (int i = 0; i < 40; i++)
{if (i * 2 + (40 - i) * 4 == 110)
{printf("鸡的数量是 %d 兔子的数量是 %d\n", i, 40 - i);
break;
}
}
## 2. 预处理
以 #结尾的命令,称之为预处理命令。在编译之前,对于源代码进行一些 复制 粘贴 替换的操作。### 2.1 #include 蕴含
#inlucde 的作用,就是将头文件复制粘贴到命令所在的地位。有两种用法:#include < 文件名.h>
#include "文件名.h"
尖括号 <> 和双引号 "" 有什么区别呢???<> 是去系统目录寻找头文件。所以个别库函数的头文件,都应用 <>“”先到工程所在的当前目录中寻找文件,找不到,再去系统目录外面找。个别状况下,零碎的头文件,都应用 <>
本人工程的头文件,都应用 " "
### 2.2 #define 宏定义
2.2.1 无参宏
常常会被用于定义一个符号常量
include <stdio.h>
include <stdlib.h>
define PI 3.1415926
int main()
{
// 如果咱们编写了一个 UFO 的程序
// 在这个程序中有 100 万个中央用到了圆周率
//double pi = 3.1415926;
double r = 4.8;
double s = 0;
double l = 0;
//........
//s = 3.141592 * r * r;
s = PI * r * r;
// 这里有 10 万行代码
//l = 2 * 3.141592 * r;
l = 2 * PI * r;
return 0;
}
为什么要应用无参宏???1. 便于代码的批改
2. 平安,因为这是一个常量,无奈在运行中去批改值
3. 起了一个名字,加强了可读性
无参宏的实质就是 替换
2.2.2 有参宏
能够给替换的地位,填充一个参数
include <stdio.h>
include <stdlib.h>
define PI 3.1415926
define GETS(r) PIrr
// 有参宏的局限性
define M(n) n*n
int main()
{
double r1 = 4.8;
double r2 = 8.7;
double s = 0;
double l = 0;
// 好多代码
s = PI * r1 * r1;
s = GETS(r1);//PI*r1*r1
// 好多代码
//s = PI * r2 * r2;
s = GETS(r2);
// 有参宏的局限性:int n = M(8);// 8*8
printf("%d", n);
int m = M(4+4);// 宏是纯替换,不会先把 4 + 4 算进去,再去替换
// 所以后果就是:4+4*4+4 也就是 24 了
printf("%d", m);
return 0;
## 3. 二维数组
#include <stdio.h>
#include <stdlib.h>
int main()
{int arrTest4[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
int arrTest1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int arrTest2[3][4] = {{1,2,3},{4,5},{6} };
int arrTest3[][4] = {{0},{0} };// 相当于是 2 行
for (int i = 0; i < 3; i++)
{for (int j = 0; j < 4; j++)
{printf("%d", arrTest1[i][j]);
}
printf("\n");
}
return 0;