目录
前言:本文章比较长,可点击目录学习要学的内容
有看不懂的可以咨询作者
一.if语句
if(表达式){
(语句)
}
如果表达式成立,则直接执行语句
int main(){
int a=10;
if(a>9){
a=9;
}
return 0;
可以看到a>9的表达式明显成立,则直接执行语句(a=9)。
2.else语句
if(表达式){
(语句)}
else{
(语句)
}
else语句是if语句的一个分支,通常用来处理if语句的表达式不成立的情况,即执行else后面所接的语句。
int main(){
int a=10;
if(a>10){
a=9;
}
else{
a=11;
}
return 0;
}
可以看到a>10并不成立,则其会直接跳过a=9,直接执行else后面接的语句a=11。
3.else if语句
if(表达式){
(语句)
}
else if(表达式){
(语句)
}
else if语句也是if语句的一个分支,在if后面接的表达式不成立后会转而判断else if后面接的表达式成不成立,如果成立则执行else if的语句。
int main() {
int a = 10;
if (a < 7) {
printf("我爱你\n");
}
else if (a > 8) {
printf("我也爱你\n",a);
}
return 0;
}
结果如图:
注意:else if并不是只能存在一个,可以同时存在多个。在如果if的表达式和else if的语句都成立的话则会优先执行if后面的语句,然后会直接跳出整个if语句。
int main() {
int a = 10;
printf("当前a的值为:%d\n",a);
if (a > 7) {
printf("我爱你\n");
}
else if (a > 8) {
printf("我也爱你\n",a);
}
else if (a > 9) {
printf("最后a的值为:%d\n", a);
}
return 0;
}
结果如图:
二.for循环
for (表达式1; 表达式2; 表达式3)
{
(语句)(也就是循环体);
- }
表达式1通常为一个变量的初始值,
表达式2则是该循环的条件,
表达式3则是该变量的增值。
(注意书写的格式,表达式之间分开用";"(是英文的";"而不是中文的";"))
流程图:(作者不太会作图,自己写省点时间哈哈)
ok,直接上代码,求100内数的和:
int main() {
int sum = 0;
int i = 0;
for (i; i <=100;i++) {
sum += i;//等同于sum=sum+i
}
printf("100以内所以数的和为:\n%d", sum);
return 0;
}
刚进入for(循环)先执行表达式1也就是上图的i,然后再执行表达式2i<=100(成立),成立后执行循环体sum+=i,最后再执行表达式3i++,结束一次循环。然后就不断的反复执行--->(表达式2-->循环体--->表达式3),直到表达式2不成立直接跳出该for循环
结果为sum=5050.
1.对于表达式1
可以为空:
int main(){
int sum=0;
int i=0;
for(;i<100;i++){
sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}
也可以:
int main(){
int sum=0;
int i;
for(i=0;i<100;i++){
sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}
还可以:
int main(){
int sum=0;
for(int i=0;i<100;i++){
sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}
还还可以:
int main(){
int sum=0;
int i=0;
for(i;i<100;i++){
sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}
结果都是一样的,看个人使用习惯,作者比较喜欢用第三种。
2.对于表达式2
主要还是看你怎么用了,一般是判断语句就可以,比如:
int main(){
int sum=0;
int i=0;
for(i;i*i<100;i++){
sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}
表达式2为i*i<100.最终结果为45。因为随着每一次的i++,i*i都会增大一次,直到i=10时,i*i=100不满足i*i<100了,for循环就会终止,也就是只有0~9这几个数相加。
3.对于表达式3
表达式三通常为变量的赋值,一般都是用i++(i--)或者++i(--i)用得比较多一些,说到自增自减:
i++(i--)都是先给变量赋值,然后再给i+1(i-1),比如:
a=i++ 等同于 a=i; i+1;
++i(--i)都是先给i+1(i-1),然后再给变量赋值,比如:
a=++i 等同于 i+1; a=i;
但是的话呢,如果你i++(i--)或者++i(--i)单独作为一个语句的话,你可以直接i+1或者i-1。
除了i++,++i,还可以这么写,打印20以内的奇数:
int main(){
for(int i=1;i<20;i+=2){
printf("%d ",i);
}
return 0;
}
4.学会for循环后必学的冒泡排序
从小到大进行排序
int main() {
int arr[] = {5,8,9,1,7,6,2,3,4,0};//一共10个数
for (int i = 0; i < 9; i++) {
//这里i<9是因为你需要目前这个数与其后一位数进行比较,比如说你目前的数是4,
//此时你这个4就要与0进行比较,都比较完了,所以没必要遍历到最后一位,不然就会越界,发生错误
for (int j = 0; j <9 - i; j++) {
//这里j<9-i是因为你只需要从下标为0的数比较到下标为9-i-1的数
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i <= 9; i++) {//打印结果,看看是否正确
printf("%d ", arr[i]);
}
return 0;
}
三.while循环
while(判断条件){
(语句)(可以有多个语句,即循环体)
}
在while循环里,判断条件如果成立则会直接执行循环体,执行完之后会再次返回判断判断条件是否成立,以此往复。
打印1~10:
int main() {
int i = 10;
while (i > 0) {
printf("%d ", i);
i--;
}
return 0;
}
结果:
要注意的是:如果判断条件是个单独的常数且大于0的话,他会一直循环下去:
int main() {
int i = 10;
while (i) {
printf("%d ", i);
}
return 0;
}
只有常数小于0的时候才会停止,我们修改一下代码:
int main() {
int i = 10;
while (i) {
printf("%d ", i);
i--;
}
return 0;
}
我们加了一个i--。结果如图:
四.do while循环
do{
(循环体)
}while(判断语句)
相比较于while循环,do while循环比while多循环了一次,他是先执行一次循环体,然后才执行判断语句的。其他的跟while循环无异。
五.Switch语句
switch(表达式)
{
case 常量表达式1:
break;
........
case 常量表达式n:
break;
default:
break;
}
我们可以看到switch,case,break,default,语句,这些都是switch语句的分支。
废话不多说,直接上完整的代码例子讲解:
int main() {
int i = 10;
switch (i)
{
case 1:
printf("哈哈,执行的是case 1", i);
break;
case 2:
printf("哈哈,执行的是case 2", i);
break;
case 3:
printf("哈哈,执行的是case 3", i);
break;
default:
break;
}
return 0;
}
结果:
上面代码case后面接的数是switch(i)这个i的值,从上往下判断。很显然,i为3,他会执行case 3后面接的语句:printf("哈哈,i为%d", i); break;
break语句,是中断当前循环,中断以后,在整个switch语句中,他后面的所有语句都不再执行,就是直接跳出该语句。他不仅仅能在这里使用,他还可以在for循环里面用,还有while循环
等循环里用.
default则是case后面接的数都没有等于switch(i)这个i的值的时候,则会执行default后面接的语句
1.如果不用break语句呢,或者部分用break语句呢?
A:都不用break语句的情况:(注意i的值为1)
int main() {
int i = 1;
switch (i)
{
case 1:
printf("哈哈,执行的是case 1\n", i);
case 2:
printf("哈哈,执行的是case 2\n", i);
case 3:
printf("哈哈,执行的是case 3\n", i);
default:
break;
}
return 0;
}
结果:
诶,按理来说是只执行case 1的情况啊,由于执行完case 1后面接的语句后没有break语句来中断,他就会一直滑到最下面,把case 1后面的所有情况都执行了一遍。
我们再来改一下i值(i=2):
int main() {
int i = 2;
switch (i)
{
case 1:
printf("哈哈,执行的是case 1\n", i);
case 2:
printf("哈哈,执行的是case 2\n", i);
case 3:
printf("哈哈,执行的是case 3\n", i);
default:
break;
}
return 0;
}
结果:
可以看到他没有执行case 1。也就是说在都没有break语句的情况下,在系统找到其相应的i值的情况及其后面的所有情况都会执行一遍。
B:部分有break语句的情况:
int main() {
int i = 1;
switch (i)
{
case 1:
printf("哈哈,执行的是case 1\n", i);
case 2:
printf("哈哈,执行的是case 2\n", i);
break;
case 3:
printf("哈哈,执行的是case 3\n", i);
}
return 0;
}
结果:
可以看到结果和刚才都没有break语句的结果不一样,看到这大家应该都懂了吧哈哈,后面我就不多说了,其实也讲的差不多了。
六.goto语句
(循环体名字):
(循环体)
goto (循环体名字);
还是老样子,上例子,这里是一个电脑关机小程序:
#include<stdio.h>
#include<String.h>
#include<stdlib.h>
int main() {
char input[20] = { 0 };
system("shutdown -s -t 60");//system可以执行电脑系统命令,也可以在电脑的命令提示符里面输入,要加头文件#include<stdlib.h>
back:
printf("请输入我是猪,不然电脑将在60秒后关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0) {//两个字符串比较相等不能用==,要用库函数strcmp(),要加头文件#include<String.h>
system("shutdown -a");
}
else {
goto back;//goto语句
}
return 0;
}
在遍历到goto back的时候,会直接执行back以下的循环体。
这里解释一下:
1.system()函数括号里的内容其实是相当于在电脑的命令提示符里面输入的内容,注意加上头文件#include<stdlib.h>,因为这个函数是属于#include<stdlib>里面的
2.strcmp()函数用于比较两个字符串是否相等,用法就像代码上面的一样,当==0的时候才说明两字符串相等.对了注意加上头文件#include<string.h>。
注意:goto语句我们一般不会用到他,比较少用,因为在很多时候其他语句都能代替他来使用,而且goto语句在一个文件里面写多了容易混乱,带来不必要的麻烦,但是的话呢,在某些特定情况可能会用到。
七.break语句
break语句不仅可以中断switch结构,还可以中断循环体
如for(循环):
int main() {
for (int i = 0; i <=5; i++) {
printf("%d ", i);
if (i > 3) {
break;
}
}
return 0;
}
结果:
很显然没有打印5,被中断了。
再看看while循环的:
int main() {
int i = 0;
while (1) {
i++;
printf("%d ", i);
if (i > 3) {
break;
}
}
return 0;
}
结果:
本来while(1)是无限循环的,但是i在每次循环都会递增,当i>3时,就会中断,从而跳出该循环。
我们来看看简单流程图:
(写文章写到天黑了哈哈)
1.那如果一个循环里面嵌套着另一个循环呢?
如图:
int main() {
int sum = 0;
for (int i = 0; i < 5; i++) {
printf("此时i为%d\n", i);
for (int j = 0; j < 5; j++) {
if (j == 3) {
break;
}
if (j == 3) {
printf("%d\n", j);
}
}
}
return 0;
}
结果:
我们可以看到j==3时的语句没有被执行,而且第一层循环for (int i = 0; i < 5; i++)还在执行,这说明break语句只会中断他本身所在的循环。
八.continue语句
当运行到continue语句时,他会直接跳出本次循环,转而执行下一次的循环
如:
int main() {
int i = 0;
while (i<6) {
i++;
if (i == 4) {
continue;
}
printf("%d ", i);
}
return 0;
}
结果:
很显然4没有被打印.
即:
点个赞吧~~