1.简介
c语言是一种结构化的程序设计语言,这里的结构是指顺序结构,选择结构和循环结构。
2.if语句
2.1:单独的if语句
它的语法形式如下:
int main(
{
if(表达式)
语句//如果表达式为真,则执行该语句,若表达式为假,则语句不执行
}
在c语言中,0为假,非0为真。
示例代码:输入一个整数,判断该年份是否为闰年,如果是,则打印结果。
int main()
{
int year = 0;
scanf("%d", &year);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("该年为闰年");
}
return 0;
}
2.2:if-else语句
如图所示,上述代码并没有显示任何结果,那么我们可以如何用一种简单的方法来清楚的表示一个数是偶数还是奇数呢?
这时候我们就需要使用到if-else语句了。它的语法形式如下:
int main()
{
if (表达式)
{
语句1;
}
else
{
语句2;
}
return 0;
}
如果if括号里表达式为假,它不会执行语句1,而是会执行语句2。如果if或else后面要执行的语句有多条,可以用大括号括起来,因为if和else一次都只能控制一条语句。
示例代码:输入一个年龄,判断是否大于或等于十八,如果是,则打印:成年。否则打印:未成年。
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("该人已成年");
}
else
{
printf("该人未成年");
}
return 0;
}
2.3:嵌套if
在if-else语句中,else可以与另一个if语句连用,构成多重判断。
int main()
{
int num = 0;
scanf("%d", &num);
if (num < 18)
{
printf("该人还未成年\n");
printf("不可以谈恋爱\n");
}
else if (num >= 18)
{
printf("该人已经成年\n");
printf("可以谈恋爱\n");
}
else if (num >= 60)
{
printf("该人已经步入老年人的行列");
}
return 0;
}
利用嵌套if,我们可以完成更多复杂的代码。
2.4:悬空else的问题
如果一个代码中有多个if和else,我们应该记住:else总是与上方最接近且还未配对的if匹配。
int main()
{
int num1 = 0;
int num2 = 2;
if
(num1 == 1)
if
(num2 == 2)
printf("haha\n");
else
printf("hehe\n");
return 0;
}
上面的代码else是与第一个if所对齐,所以可能会有部分初学者认为它们是匹配的,但其实该else是与第二个if所匹配。如果是与第一个else匹配的话,该代码最终的打印结果应该是hehe,但该代码的实际打印结果是什么都不打印。
该结果是因为第一个if的表达式结果为假,它不会进行第二个if语句的执行,而else与第二个if匹配,所以它也不会执行,所以最后什么都不会打印。
在写代码的过程中,适当的加入大括号,可以增加代码的可读性,比如上述代码可以优化为:
int main()
{
int num1 = 0;
int num2 = 2;
if (num1 == 1)
{
if (num2 == 2)
{
printf("haha\n");
}
else
printf("hehe\n");
}
return 0;
}
即使else依然对齐第一个if语句,但我想应该会减少都错代码的人数。
3.switch语句
简述switch
的 else if 改成更易⽤、可读性更好的形式。
switch的基本语法形式如下:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
注意:
switch 后的 expression 必须是整型表达式
int main()
{
int day = 0;
while (scanf("%d", &day)!= EOF)
{
switch (day)
{
case 1:
printf("星期一\n"); break;
case 2:
printf("星期二\n"); break;
case 3:
printf("星期三\n"); break;
case 4:
printf("星期四\n"); break;
case 5:
printf("星期五\n"); break;
case 6:
printf("星期六\n"); break;
case 7:
printf("星期天\n"); break;
default:
printf("输入错误,请重新输入\n"); break;
}
}
return 0;
}
如果我们将上面的代码小小改动一下,比如:
我们观察到该代码打印的结果并不是我们预期的效果,这是没有break的后果。
4.while语句
while循环的基本语法形式如下:
int main()
{
while (循环结束条件的判断)
{
执行语句;
循环变量的调整;
}
}
while语句的执行流程图如下:
我们直接看代码:
int main()
{
int i = 0;
while (i <= 9)
{
i++;
printf("%d ", i);
}
return 0;
}
int main()
{
int i = 0;
while (i <= 9)
{
i++;
if (i == 5)
break;
printf("%d ", i);
if (i == 5)
break;
}
return 0;
}
int main()
{
int i = 0;
while (i <= 9)
{
i++;
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
上面有三个代码,只有第一个可以打印1到10.
5.for语句
int main()
{
for (表达式1;表达式1;表达式1)
{
执行语句;
}
}

int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
int main()
{
int i = 0;
while (i <= 9)
{
i++;
printf("%d ", i);
}
return 0;
}
6.do-while语句
do-while语句的基本语法形式如下:
int main()
{
do
{
语句;
} while (表达式);
}


7.goto语句
goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。
示例代码:
8.循环嵌套例题:
1.九九乘法表
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
2.找素数:
#include <stdio.h>
int main()
{
int i = 0;
//循环产⽣100~200的数字
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//循环产⽣2~i-1之间的数字
int j = 0;
int flag = 1;//假设i是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}