- 1.函数、数组
- 2.操作符
- 算术操作符:+ - * / %(取模)
- 移位操作符:>> <<
- 位操作符:&(按位与) |(按位或) ^(按位异或)
- 赋值操作符:= += -= *= ^= |= >>= <<=
- 单目操作符:只有一个操作数
- ~:二进制 按位取反
- ++
- (类型):强制类型转换
- 逻辑操作符:&& ||
- 条件操作符:三目操作符
- 3.常见关键字
- 4.define定义常量和宏
- 5.指针
- 6.结构体
- 7.分支语句
- 一:if-else
- 二:switch
- 9.循环语句
- 一:while:先判断再执行
- 二:for
- 三:do-while:先执行再判断
- 10.练习
- (1)计算n的阶乘
- (2)计算1!+2!+3!+...+10!
- (3)在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v, int n);功能:在v[0]<=v[1]<=v[2]<= ....<=v[n-1]的数组中查找x。
- 折半(二分)查找
- (4)编写代码,演示多个字符从两端移动,向中间汇聚。
- (5)编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
- (6)猜数字:程序自动产生1-100的数,猜测这个数字。猜错:告知猜大、小,直至猜对。除非退出,游戏可持续。
学习视频: b站比特c语言就业班 1.函数、数组
函数
数组 :用下标访问,下标从0开始
exp1 ? exp2 : exp3:exp1成立—>exp2,exp1不成立—>exp3
C语言提供,关键字不能用户创建,不能作为变量名
计算机的数据存储位置:靠前快、贵
内存:更小
高数缓存:10+M
内存:8-16G
硬盘:500G+
网盘:例如百度网盘
typedef:类型重命名
static
(1)局部变量
(2)全局变量
(3)函数
define是预处理指令,不是关键字
1.define定义常量
2.define定义宏
计算机:32/64位:32/64根地址线-物理线-通电-0/1
内存单元:字节
语法结构:表达式为真,语句执行
代码比较:最好 将常量放在左边
if(表达式) 语句;
或者:表达式为假,else执行
if(表达式) 语句1; else 语句2;
多分支:
if(表达式) 语句1; else if(表达式) 语句2; else 语句3;
执行多条语句:
if(表达式){
语句列表;
}
else if(表达式){
语句列表;
}
else{
语句列表;
}
else匹配:匹配最近的if
用于多分支
break:跳出自己所在的switch语句
switch(整型表达式){
语句项;
}
case 整形 常量表达式
字符也属于整形:字符以ASCII存储
语法结构 while(表达式) 循环语句/代码块;
getchar与putchar
报错问题
参考:C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”
scanf不读取空格 gets可以读取空格二:for
1.控制变量最好:前闭后开
2.判断部分省略:恒为真:死循环
3.多个循环变量控制
语法 for(表达式1(初始化);表达式2(判断);表达式3(调整)) 循环语句;
break和continue
语法结构: do 循环语句; while(表达式);10.练习 (1)计算n的阶乘
int i = 0;
printf("计算的n:");
scanf_s("%d",&i);
int sum = 1;
for(;1<=i;i--){
sum = sum*i;
}
printf("%dn",sum);
(2)计算1!+2!+3!+…+10!
int i = 1;
int sum2 = 0;
for (; i < 11;i++) {
int j = i;
int sum1 = 1;
for (; 1 <= j;j--) {
sum1 = sum1 * j;
}
sum2 = sum1 + sum2;
}
printf("和:%dn", sum2);
//优化算法
int i = 1;
int n = 10;
int sum1 = 1;
int sum2 = 0;
for (; i<=n;i++) {
sum1 *= i;
//sum1=i*sum1,9!=9*8!
sum2 += sum1;
}
printf("和:%dn", sum2);
(3)在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v, int n);功能:在v[0]<=v[1]<=v[2]<= …<=v[n-1]的数组中查找x。
折半(二分)查找
由中间值mid判断 左右部分 相对于 查找元素k 的大小,一次性排除一半数值
//折半(二分)查找
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//目标数值k
int k = 0;
scanf_s("%d",&k);
//数组元素个数
int sz = sizeof(arr) / sizeof(arr[0]);
//下标
int left = 0;
int right = sz - 1;
//查找
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] < k)
left = mid + 1;
else if (arr[mid] > k)
right = mid - 1;
else {
printf("find!it;%dn", mid);
break;
}
}
if (left > right)
printf("not found!");
return 0;
}
(4)编写代码,演示多个字符从两端移动,向中间汇聚。
#include(5)编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。#include //strlen的头文件 #include //Sleep的头文件 int main() { //编写代码,演示多个字符从两端移动,向中间汇聚 char arr1[] = "welcome!"; char arr2[] = "#######!"; int left = 0; int right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%sn", arr2); Sleep(1000);//单位毫秒:1000ms=1s system("cls");//清屏 left += 1; right -= 1; } printf("%sn", arr2); return 0; }
strcmp:比较对应位置的ASCII,出现不相等/比较完
strcmp(字符串1,字符串2);
<0:1<2
0:1=2
>0:1>2
#define _CRT_SECURE_NO_WARNINGS #include(6)猜数字:程序自动产生1-100的数,猜测这个数字。猜错:告知猜大、小,直至猜对。除非退出,游戏可持续。#include //strcmp的头文件 int main() { int i = 0; char passwd[20] = { 0 }; for (; i < 3; i++) { printf("key:"); //数组是指针,不加取地址符,但必须在scanf下使用 scanf("%s", passwd); //scanf_s("%s", &passwd, 20); //两个字符串比较不可以passwd == "123456":比较的是两字符串首字符的地址。应该用strcmp if (strcmp(passwd, "123456") == 0) { printf("succes!"); break; } else if (strcmp(passwd, "123456") != 0 && i < 2) printf("againn"); } if (i == 3) printf("error!"); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include#include //srand、rand的头文件 #include //time的头文件 //菜单 void manu() { printf("##################n"); printf("#### 0.exit ####n"); printf("#### 1.play ####n"); printf("##################n"); } //游戏 void game() { //生产随机数 //rand:生成数:0—RAND_MAX(0x7ff:16进制,32767)之间,用srand改变其生产起点 //模100的余数:0-99,+1,0-100 int ret = rand() % 100 + 1; //猜数字 int guess = 0; printf("猜:"); while (1) { scanf("%d", &guess); if (guess < ret) { printf("小n"); printf("再猜:"); } else if (guess > ret) { printf("大n"); printf("再猜:"); } else { printf("YEAH! %dn",ret); break; } } } int main() { int input = 0; //在调用rand的之前调用srand设置随机数的生成,需要unsigned int类型 //时间戳:随时变化的值,time()获取,返回time-t类型,本质上也是(64位)整形 srand((unsigned int)time(NULL));//利用time设置一个随机的起点 do { manu();//打印菜单 printf("选择:"); scanf("%d",&input); switch (input) { case 1: printf("begin!n"); game(); break; case 0: printf("bye!n"); break; default: printf("error!n"); break; } } while (input); return 0; }



