作者前言
欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) – Gitee.com
——————————————————————————————
目录
分支语句
if
switch
循环语句
while
for
do while
goto语句
——————————————————————————————————————
作者感慨
时隔多久。没有更新C语言的博客了,最近一直在学习,能更新博客已经是有大运气了,
现在我们就紧接上一篇C语言的博客,小可爱想看哪些知识可以根据我的博客标题来找。一般都是会连续的写下去,如果没有那就是作者在学校里面被学校压榨了,课满满的,一有空就会更新博客,让各位小可爱学到满满的干货
插播小知识
1.C语言是一种结构化的程序设计语言,C语言支持三种结构(顺序结构、选择结构、循环结构)
2.在C语言中, 0表示假,非0表示真
什么是语句?
在知道目录的时候,我们了解语句,啥是语句,在c语言中有几种语句,分别是:
1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句
表达式语句
函数调用语句
空语句
这些都是我们在前面学习过的语句,后面的两种种语句后面慢慢介绍。控制语句就是接下来我要介绍的语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。 可分成以下三类: 1. 条件判断语句也叫分支语句:if语句、switch语句; 2. 循环执行语句:do while语句、while语句、for语句; 3. 转向语句:break语句、goto语句、continue语句、return语句
分支语句(选择结构)
比如:如果你好好学习,校招时拿一个好offer,走上人生巅峰。 如果你不学习,毕业等于失业,回家卖红薯。
if语句
语法结构 1: if ( 表达式 ) 语句 ; 语法结构2: if(表达式) 语句1; else 语句2; 语法结构3: // 多分支 if ( 表达式 1 ) 语句 1 ; else if ( 表达式 2 ) 语句 2 ; else 语句 3 ; 表达式:条件判断0表示假,非0表示真 下面我们就简单的写一段代码判断是不是成年人
#includeint main(){int age = 0;scanf("%d", &age);if (age < 18){printf("未成年");}else{printf("成年人");}return 0;}
结果:
如果我们再细分的话就有下面代码
#includeint main(){int age = 0;scanf("%d", &age);if (age = 18 && age 30 && age 50 && age 70 && age <= 99){printf("老年");}else{printf("老寿星");}return 0;}
注意一下不要写成了 18 <= age <= 30 ,在C语言判断中先判断 如下:3
有一些小可爱写if语句的时候.为了方便,有时会不写{},这样写是不建议的,因为这样写有时会造成读取代码时会读错,比如:
#include int main() { int a = 0; int b = 2; if(a == 1) if(b == 2) printf(“hehe\n”); else printf(“haha\n”); return 0; } 这样写会造成我们在读的过程会一不小心就会读错,会误以为else跟第一个if搭配,其实else是跟最近的if搭配,不建议这样写,因为我们写代码是为了方便别人和自己都能理解,不是自己理解就行
尽量能加{}就加上
if书写形式的对比
//代码1if (condition) {return x;}return y;//代码2if(condition){return x;}else{return y;}
//代码3int num = 1;if(num == 5){printf("hehe\n");}//代码4int num = 1;if(5 == num){printf("hehe\n");}
上面的代码2和代码4的写法是比较好的,我们写就尽量按照这种模式写
那写一个判断奇数的代码
#includeint main(){int a = 1;//scanf("%d", &a);while (a <= 100){if (a % 2 == 1){printf("%d是奇数\n", a);}a++;}return 0;}
switch语句
写法:
switch ( 整型表达式 ) { 语句项; }
switch (整形表达式){case 整数:语句; case 整数:语句; case 整数:语句;......default : 语句;}
这里的整数就是整形常量表达式,写成整数就是让大家好理解
case 整形常量表达式:语句;
或者按照这个理解
default在没有case语句才运行的,或者是case语句不写break停止运行下去,也会运行下去
那我写一个判断星期的switch语句
#includeint main(){int weekday = 0;scanf("%d", &weekday);switch (weekday){case 1:printf("星期一");break;case 2:printf("星期二");break;case 3:printf("星期三");break;case 4:printf("星期四");break;case 5:printf("星期五");break;case 6:printf("星期六");break;case 7:printf("星期七");break;default:printf("没有该星期");break;}return 0;}
结果:
编程好习惯 在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
循环语句
1.while循环
while 语法结构:while(表达式) 循环语句;
执行流程:
那我们简单的打印1~10
#includeint main(){int i = 1;while (i <= 10){printf("%d ", i);i++;}return 0;}
break;跳出该循环
#includeint main(){int a = 1;while (a < 10){a++;if (5 == a){//continue;break;}printf("%d", a);}return 0;}
总结:
break 在 while 循环中的作用: 其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。 所以: while 中的 break 是用于 永久 终止循环的。
continue:继续,跳过这次循环,开始下一次循环
#includeint main(){int a = 1;while (a < 10){a++;if (5 == a){continue;}printf("%d", a);}return 0;}
总结 : continue 在 while 循环中的作用就是: continue 是用于终止本次循环的,也就是本次循环中 continue 后边的代码不会再执行, 而是直接跳转到 while语句的判断部分。进行下一次循环的入口判断 getchar()输入一个字符,读取成功返回这个字符的ASCII值,读取失败或者遇到文件末尾会返回EOF(就是-1)
#includeint main(){int ch = 0;ch = getchar();printf("%d\n", ch);return 0;}
putchar()
#includeint main(){int ch = 0;ch = getchar();printf("%d\n", ch);putchar(ch);return 0;}
getchar()还可以吸收字符
#includeint main(){int ch = 0;while ((ch = getchar()) != EOF){printf("%d\n", ch);putchar(ch);}return 0;}
案例:
#includeint main(){char arr[40];printf("输入密码\n");while (scanf("%s", arr) != EOF){while (getchar() != '\n'){;}printf("是否确定(Y/N)\n");char ch = 'w';scanf("%c", &ch);if (ch == 'Y' || ch == 'y'){printf("确认\n");}else{printf("取消\n");}}return 0;}
运行效果就出来了.
for循环
语法:
for(表达式1; 表达式2; 表达式3) 循环语句;表达式 1 表达式 1 为 初始化部分 ,用于初始化循环变量的。 表达式 2 表达式 2 为 条件判断部分 ,用于判断循环时候终止。 表达式 3 表达式 3 为 调整部分 ,用于循环条件的调整。
我们就用使用for循环 在屏幕上打印1-10的数字。
#include int main(){ int i = 0; //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/) for(i=1; i<=10; i++) { printf("%d ", i); } return 0;}
循环顺序:
break和continue一样可以在for使用
建议: 1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。 2. 建议 for 语句的循环控制变量的取值采用 “ 前闭后开区间 ” 写法。 3.c99可以在初始化部分进行定义变量,但是不建议这样做 一些for循环的变种
#include int main(){ //代码1 for(;;) { printf("hehe\n"); }//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致//问题。//代码2int i = 0;int j = 0;//这里打印多少个hehe" />
do...while()循环
do..while()语句的语法:
do 循环语句; while(表达式)简单的理解为先运行一次然后再判断而前面的是先判断然后再循环
#includeint main(){int i = 1;do{printf("%d ", i);i++;if (i == 5){//break;continue;}} while (i <= 10);return 0;}
do ...while()的break和continue和在while是一样的效果
continue只会跳出循环,不会跳过判断部分
下面利用循环语句进行写一些题
计算 n的阶乘。
#includeint main(){// 计算n的阶乘int a = 1;int b = 0;int sum = 1;scanf("%d", &b);while (a <= b){sum *= a;a++;}printf("%d", sum);return 0;}
计算 1!+2!+3!+……+10!
#includeint main(){// 计算 1!+2!+3!+……+10!int a = 1;int sum_1 = 0;int b = 1;// 第一种/*for (a = 1; a <= 10; a++){int sum = 1;for (b = 1; b <= a; b++){sum *= b;}sum_1 += sum;}*/// 第二种for (a = 1; a <= 10; a++){b = a * b;sum_1 = b + sum_1;}printf("%d", sum_1);return 0;}
. 在一个有序数组中查找具体的某个数字n。
这里主要运用了二分查找,使用二分查找要是有序数组,
可以看出前后两个数相加然后除以2就会得到中间下标,然后我们再比较两个数之间的大小然后取范围,这个二分查找可以解决,不懂的小可爱可以到我的主页找到这篇博客,
代码如下:
#includeint main(){// 在一个有序数组中查找具体的某个数字nint a = 0; //给该数组传几个printf("你想输入几个数字给数组:");scanf("%d", &a);int arr[100];int i = 0;for (i = 0; i < a; i++){printf("请输入:");scanf("%d", &arr[i]);printf("\n");}int left = 0;int rigth = a - 1;int conten = (left + rigth) / 2;int k = 0;printf("输入你要查找的数字:");scanf("%d", &k);while (left <= rigth){if (arr[conten] == k){printf("找到了,下标为:%d", conten);break;}else if (arr[conten] k){rigth = conten - 1;}conten = (left + rigth) / 2;}if (left > rigth){printf("找不到");}return 0;}
演示多个字符从两端移动,向中间汇聚。
#include#includeint main(){char arr[] = "welcome to bit!!!!!!!";char arr1[] = "*********************";int rigth = (sizeof arr / sizeof(char)) - 2;int left = 0;while(left <= rigth){arr1[left] = arr[left];arr1[rigth] = arr[rigth];Sleep(1000);system("cls");left++;rigth--;printf("%s\n", arr1);}return 0;}
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
#include#includeint main(){int i = 0;char password[20] = { 0 };for (i = 0; i < 3; i++){printf("输入密码:");scanf("%s", &password);if (strcmp(password, "123456789") == 0){printf("登录成功");break;}printf("密码错误");}if (i == 3){printf("退出登录");}return 0;}
猜数字游戏实现
// 随机生成一个1-100的数// 让我们来猜#include#include void menu(){printf("*****************************\n");printf("****** 0.exit ***********\n");printf("****** 1.play ***********\n");printf("*****************************\n");}int main(){srand((unsigned int)time(NULL));int a = 0;do{menu();printf("请选择是否玩游戏:>");scanf("%d", &a);switch (a){case 1 :printf("请开始你的表演\n");// 生成随机数字// 猜数字int ra = rand();printf("%d\n", ra);while (1){int guees = 0;printf("输入你猜的数字");scanf("%d", &guees);if (guees > ra % 100){printf("猜大了");}else if (guees < ra % 100 ){printf("猜小了");}else {printf("猜对了,但是没有奖励\n");break;}}break;case 0 :printf("游戏结束");default :printf("重新选择");}} while (a);return 0;}// rand函数生产伪随机数//rand生成的随机数的范围是0--32767//rand函数在生产随机数之前,要使用srand函数设置随机数的生成器//可以理解为rand函数的算法是根据srand的种子来计算随机数的//time--函数返回一个时间戳//time()函数需要传入一个值,没有啥想传的就传入一个NULL(空)//srand需要传入的类型是unsigned int,所以可以强制转换//注意一下,srand调用一次就行了, 否则生成的数太相邻了
// rand函数生产伪随机数
//rand生成的随机数的范围是0--32767
//rand函数在生产随机数之前,要使用srand函数设置随机数的生成器
//可以理解为rand函数的算法是根据srand的种子来计算随机数的
//time--函数返回一个时间戳
//time()函数需要传入一个值,没有啥想传的就传入一个NULL(空)
//srand需要传入的类型是unsigned int,所以可以强制转换
//注意一下,srand调用一次就行了, 否则生成的数太相邻了
goto语句
最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。注意一下,不能乱使用, 写法: goto aaa; 语句1 aaa: 语句2; 会直接跳过一些语句,但是只能在本函数内部使用, 简单的关机
#include#include#includeint main(){a:system("shutdown -s -t 600000");printf("你的电脑将要关机,请输入''我是猪取消''关机");char arr[30];scanf("%s", &arr);if (strcmp(arr, "我是猪")){system("shutdown -a");printf("取消关机");}else{goto a;}return 0;}
总结:
这里简单的介绍了一些C语言的简单的语句,有不懂的可以私聊我