1.if语句
if语句的语法结构如下:
if(表达式)
语句;
if语句是否执行是判断表达式是否为真,在c语言中,0表示假,非零表示真;真则执行语句,假则不执行语句。
我们来看一个例子:
这里我们可以看到我们给a的赋值结果为0,表示假,则不执行下面的printf语句。
相反,当if语句中表达式为非零表示真,则执行printf语句。
当我们表达式中的值为假时我们也想执行语句时,我们可以搭配else使用,构成if else语句:
这时当我们表达式的结果为假的时候也可以去执行另外的语句。
了解了if else语句接下来我们来看一个练习:
练习:输入一个数字,判断是否成年;
这里我们输入一个数字,如果输入的数字大于或等于18,便会输出成年了;如果输入的数字不符合这个条件,就会输出未成年。
注意:在if和else中默认都只会控制一条语句
下面我们来看例子:
这里我们可以看到,当我们输入的值不符合条件时,程序依然打印了第二个printf语句; 如果我们要让if和else能够同时控制多条语句,我们只需要在if和else的程序块中加上{}。
在if else语句中,当我们的选择不单单只有2种时,我们就需要进行嵌套
我们来看一个例子:
输入一个数字,判断这个数字是0,正数还是负数
这里我们可以分开来看,输入一个数字,程序进入if函数进行判断,如果不符合则进入else,如何再去判断后面的if,如果也不符合则进入下一个else,再去判断后面的if,如果也不符合则什么都不打印;我们也可以通过代码来直观的感受一下逻辑顺序:
int main()
{
int num;
scanf("%d", &num);
if (num == 0)
printf("0");
else
{
if (num > 0)
printf("正数");else
{
if (num < 0)
printf("负数");
}
}
return 0;
}
我们可以直观的看出来一层层的嵌套关系。
上面的代码可以帮我们很清楚的理清楚if和else的匹配关系,下面我们来看一组代码:
int main()
{
int m = 0;
int n = 3;
if (m)
if (n == 3)
printf("hhh\n");
else
printf("111");
return 0;
}
这里我们可能会认为最后输出的结果是“111”,因为else是对齐着第一个if,但是这里实际上是不会输出任何东西,因为这里涉及了一个else的悬空问题,else总是和离自己最近的if匹配,如果我们想让这个代码输出“111”的话,只需要用{}将第二个if的代码块括起来即可。
int main()
{
int m = 1;
int n = 3;
if (m){
if (n == 3)
printf("hhh\n");}
else
printf("111");
return 0;
}
2.switch语句
对于处理一个条件有多个的结果时,if语句用起来就会比较繁琐,而switch也在这种情况用起来方便;
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
switch会根据expression的值去选择对应的case分支,如果没有找到与expression所匹配的值便会执行default语句。
注意:
switch后面的expression必须是整型;
case后面必须跟的是整型常量;
下面我们来看一个例子:
输入任意一个值,计算除三之后的余数;
这里我们可以看到,通过a%3的值去匹配对应的case,然后从对应的case进去;这里我们要注意,如果我们在每一个case语句的后面没有加break的话,程序会一直从进来的case语句一直执行到程序结束,这样会把我们不需要的东西给打印出来,而这里break的意义就是输出我想要的结果后跳出switch语句,不再执行后面的程序,所以除了在一些特殊的情况下,switch尽量与break一起用。
举个例子:
输入一个数字,判断是工作日还是休息日
int main()
{
int week;
scanf("%d", &week);
switch (week)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
dafault:
printf("输入错误");
break;
}
return 0;
}
像类似这种情况,break就没必要放在每一个case语句的后面;
3.while循环
if语句和while循环的结构非常的类似:
while(表达式)
语句;
接下来我们来看一个例子:
例子:在屏幕上输出1~10的数字;
while循环的运行顺序就是,先判断while的表达式是否成立,成立则进入循环执行语句,然后每次进入循环num加一,当num不符合表达式的时候则跳出循环。(这里的++是属于单目操作符,用法是加一,具体用法后面的文章会写,这里只需了解是调整变量,使变量num加一)
我们来练习一个题目:
输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
首先我们来分析一下这个题目,我们如果要得到这个数的最低位,就是求这个数的模;
得到这个模之后我们要得到这个数的第二位,就要将这个数/10之后再执行求模运算;
int main()
{
int num;
scanf("%d", &num);
while (num)
{
printf("%d", num % 10);
num = num / 10;
}
return 0;
}
4.for循环
for循环的结构:
for(表达式1;表达式2;表达式3)
语句;
for循环的运行顺序是,初始化循环变量(表达式1),判断语句(表达式2),成立则执行语句,执行完语句后进行调整循环变量(表达式3);
例子:再屏幕上打印1~10的数字;
int main()
{
int num;
for (num = 1; num <= 10; num++)
{
printf("%d ", num);
}
return 0;
}
练习:计算1~100之间3的倍数之和;
int main()
{
int num;
int count = 0;
for (num = 1; num <= 100; num++)
{
if (num % 3 == 0)
{
printf("%d ", num);
count = count + num;
}
}
printf("\n%d", count);
return 0;
}
首先,我们分析一下这道题,题目让我们计算1~100的3的倍数之和,第一步我们需要用循环去生成1~100的数字;其次,让我们计算3的倍数之和,我们得筛选出1~100里3的倍数,将它打印出来,然后再进行相加,最后打印出3的倍数之和。
5.do while循环
do while的循环结构:
do
{
语句;
}while(表达式) //判断句;
do while循环是先执行语句再进行判断,所以do while的循环体至少会执行一次;
例子:在屏幕上打印1~10的数字;
int main()
{
int a = 1;
do
{
printf("%d ", a);
a++;
} while (a <= 10);
return 0;
}
一般do while循环用于这个循环体必须要执行一次时;
我们来做个练习:
输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2
int main()
{
int num;
int count = 0;
scanf("%d", &num);
do
{
count++;
num = num / 10;
} while (num);
printf("%d", count);
return 0;
}
这里用do while的原因是因为如果我输入的是0的话,0也是一位整数;
我们再来分析一下代码;
这里我们用一个变量来代替输出整数个数,当数字进去的时候整数个数加一,再将数字除以10,我们便可以去掉这个数字的最低位,再去判断循环,当num除了4次过后,值变为了0,这是判断表达式为假,不再进行循环,此时输出数字的个数。
6.循环的嵌套
练习:
找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。
我们来解析一下题目:
首先,我们要在得有100~200的数字,我们可以用循环来实现;
有了数字之后我们要在其中找出里面的质数,质数就是只能被1和数字本身整除的,这个时候我们就要生成2~i-1之间的数字;
最后再将质数打印在屏幕上。
int main()
{
int m;
for (m = 100; m <= 200; m++)
{
int i = 1;//设n为质数;
int n;
for (n = 2; n <= m - 1; n++)
{
if (m % n == 0)
{
i = 0;//不是质数;
break;
}
}
if (i == 1)
printf("%d ", m);
}
return 0;
}
这里我们来主要来讲几个点,这里的接题要点是i这个数来代表m是否是质数,在m刚进循环体时,我们可以给他假设为质数,并给变量赋值,通过if判断m能否被除了被1还有本身以外的数字整除,如果被除了自身和1以外的数字整除则执行if语句,将i的值变为0,表示m不是质数,然后break跳出第一层循环体,最后整个循环结束后,如果i==1的话则打印数字m。
ps:第一次写博客,写的不好的地方可以提出来,有什么不好的地方也可以说,接受各位大佬的批评hh