这节课笔记的排版有点问题,感觉是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 或者falsetrue和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~100for (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就是简化版的forfor (; ;) { printf("我是循环体\n"); } while (1) { printf("我是循环体\n"); }### 1.5有限循环当循环条件始终为真的时候,就会有限循环。也称之为死循环### 1.6 break和continuebreak是完结循环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-- - 应用breakint 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 循环的嵌套 #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 == 110int 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*8printf("%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;