目录
一:分支——if 和 switch
一:if 用法
1. if 语句语法
if(表达式)
{语句n;}
if 默认只控制⼀条语句。当语句为一个时,可以不使用{ };多语句时,一定要使用{ },否则只执行一条语句。
如下列代码:
int a = 1;
if (a == 0)
printf("a为0\n");
printf("a==0\n");
//运行结果
a==0
若添加{ },则两句皆不执行
int a = 1;
if (a == 0)
{
printf("a为0\n");
printf("a==0\n");
}
注意: 上述代码中a==0 表达式中时“ ==” 而不是“=” 。“ ==”是关系操作符,若相等,则传递1,不相等,则传递0。“ = ”是赋值运算符,赋予a的值为0。
2. if语句 的嵌套
if(表达式){语句n; }else //需要格外注意: else后面不能接表达式{语句n; }
第一种嵌套:else 后面接 if。相当于 if 嵌套在 else语句中。
下图中红色部分为 嵌套的 if
# include <stdio.h>int main (){int num = 0 ;scanf ( "%d" , &num);if (num == 0 )printf ( " 输⼊的数字是 0\n" );else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构printf("输⼊的数字是正数\n");elseprintf("输⼊的数字是负数\n");return 0 ;}
第二种嵌套: if 里面接 if。相当于 if 嵌套在上一级 if 中。
下图中红色部分为 嵌套的 if
# include <stdio.h>int main (){int num = 0 ;scanf ( "%d" , &num);if (num> 0 ){if(num%2 == 0) //这里 if 相当于镶嵌在 if 语句中,形成了嵌套结构printf("偶数\n");elseprintf("奇数\n");}else{printf ( " ⾮正数 \n" );}return 0 ;}
3.悬空else问题
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 匹配,不与第一个 if 匹配。后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不 成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
{
printf("haha\n"); //输出结果为 : haha
}
return 0;
}
由此可见,在使用 if 时,最好添加{ },增加阅读的可读性。
二:switch 用法
1. switch 的语句语法
switch (expression) {case value1: statementbreak ;case value2: statementbreak ;default : statementbreak ;}
注意:
- switch 后的 expression 必须是整型表达式 ,case 后的值,必须是整形常量表达式。value 也可以是 字符。如 case 整数 :或者 case ' 字符 ' 。value 不能为 小数 或者 字符串 等。
- case 与 value 之间须有空格,将二者间隔分开。
2. switch 语句中的 break
break 作用是跳出该case value n 的表达语句。每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,否则将会顺序走完接下来的代码,直到遇见 break 或者 其他结束语句才会终止switch。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
//运行结果
3
整除,余数为0
余数是1
余数是2
因为缺少break,在运行完case 0后无法跳出switch,只能继续运行下列其他case直到整个switch语句运行结束。
当然,break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
3.switch语句中的default
default 作用:
switch 的表达式中的值⽆法匹 配代码中的 case 语句的时候,如果没有default ,直接跳出switch,不执行任何语句;如果存在 dafault , 执行default 中的语句。
default 与case 的位置关系:
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
switch(a)
{
default:
printf("输⼊错误\n");
break;
case 1:
case 2:
case 3:
printf("haha\n");
break;
case 4:
case 5:
printf("hehe\n");
break;
}
return 0;
}
//运行结果一
2
haha
//运行结果二
5
hehe
//运行结果三
7
输入错误
二:循环——for 和while
一: for 用法
1. for 的语法结构
for (初始化 ;判断条件 ;调整表达式) 或者 for (判断条件)
判断条件成⽴(为真),则语句继续循环执⾏;表达式不成⽴(为假),则语句不执⾏,跳出循环 。if 默认只控制⼀条语句。当语句为一个时,可以不使用{ };多语句时,一定要使用{ },否则只执行一条语句。
#include <stdio.h>
int main()
{
for(int i=1;i<=10;i++)
{
printf("%d ", i);
}
return 0;
}
//运行结果
1 2 3 4 5 6 7 8 9 10
2. break 和 continue
#include <stdio.h>
int main()
{
for (int a = 1, b = 1; b <20; b++)
{
if (b >10)
break;
if (3<b&&b<8)
continue;
a++;
printf("%d",a);
}
return 0;
}
//运行结果
2 3 4 5 6 7
//删去 continue 运行结果
1 1 1 2 3 4 5 5 5 5
//删去 break 运行结果
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
第一种:当b=1、2、3、8、9、10时,执行a++;当b=4、5、6、7时,执行continue ,跳过a++;当b>10时,直接跳出整个for循环。
第二种:当b=1、2、3、8、9、10时,因为 if 只控制一条语句,不执行a++,但执行printf( )函数;当b=4、5、6、7时,执行a++和printf( )函数,输出2、3、4、5;当b>10时,直接跳出整个for循环。
第三种:当b<=10时,第一个if语句条件不满足,不执行第二个if语句,所以continue不执行,执行a++和printf( )函数;当b>10时,第一个条件满足,但删除了break,所以执行第二个 if 语句,此时b不满足第二个 if 语句条件,所以continue不执行,执行a++和printf( )函数
break 和 continue 不仅适用于for,也同样适用于while,所以while 处就不进行赘述。
二:while 用法
1. while 的语句语法
while ( 表达式 ){语句;}
表达式成⽴(为真),则语句继续循环执⾏;表达式不成⽴(为假),则语句不执⾏,跳出循环 。while默认只控制⼀条语句。当语句为一个时,可以不使用{ };多语句时,一定要使用{ },否则只执行一条语句。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
//运行结果
1 2 3 4 5 6 7 8 9 10
2.do...while
do{语句;}while ( 表达式 ) ;
do ...while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。至少执行一次程序。
而while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳 出循环。至少执行0次程序。
//do...while 编写
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
//while 编写
#include <stdio.h>
int main()
{
int n=0;
scanf("%d", &n);
int cnt = 0;
if(n==0)
{
printf("1");}
else{
while (num!=0) {
cnt++;
n= n / 10;
}
printf("%d\n", cnt);
}
return 0;
}
这两种代码的运行结果都是一样的。
三:循环的嵌套
while , for , do...while 三者可以镶嵌在一起解决问题。如此代码,求100~200之间的素数
#include <stdio.h>
#include <math.h>
int main()
{int i = 100,j = 100,n = 0;
int m;
while (i <= 200) {
m = 0;
for (j = 2; j < sqrt(i); j++) {
n = i % j;
if (n == 0)
{
m = 1;
break;
}
}
if(m==0)
printf("%d\t ", i);
i++;
}
return 0;
}
ps:初涉C语言,有问题处,望各位斧正