前言
C语言是结构化的程序设计语言,包括顺序结构、选择结构、循环结构,我们可以选择if、switch语句实现选择结构,使用for、while、do while语句实现循环结构
一、选择结构程序设计
应用程序在执行过程中可能会遇到多种不同的情况,程序需要依据指定的条件执行操作,用来实现这种情况的语句通常称为选择结构语句或分支结构语句。
1.if语句的多种形式
第一种形式;
if(表达式)语句;
语义:即如果表达式的值为真,则执行其后的语句。
if(a<b)
a=b
如果a<b,则将b的值赋给a
第二种形式
if(表达式)
语句1;
else
语句2;
语义:如果表达式值为真则执行语句一,否则执行语句2。
if(a>b)
printf("%d\n",a)
else
printf("%d\n",b)
若a>b则打印a,若b更大则打印b
//利用if语句判断输入数字为奇数还是偶数
#include <stdio.h>
int main() {
int num;
printf("请输入一个数字:");
scanf("%d", &num);
if(num % 2 == 0) {
printf("%d是一个偶数。\n", num);
} else {
printf("%d是一个奇数。\n", num);
}
return 0;
}
第三种形式
当有多种分支选择时,可采用if...else if...if语句
if(表达式)
语句1;
else if(表达式)
语句2;
else if(表达式)
语句3;
,,,
else
语句n;
语义:依次判断所有表达式的值,当出现某个值为真时,则执行对应的语句,并在执行结束后跳出if语句继续执行程序。
if(a<32)
printf("This is a control character\n")
else if(c>='0' && c<='9')
printf("This is a digit\n")
else if(c>='A' && c<='Z')
printf("This is a letter")
根据输入的不同内容输出类型判断
2.在使用if语句时应注意的问题
1.if关键字后可以是任意类型的表达式,甚至可以是一个变量。只要值为非零,都能执行后面的语句。
2.if()后不加分号,但语句结束后必须加分号。
if() //不需要分号
语句;//分号不能丢
3.if语句只能执行接下来的一条语句,如需执行多条语句,则需在多条语句外用大括号括起来
if(a>b)
{
语句1;
语句2;
} //大括号保证语句组都可执行,若去掉则语句2单独存在,不在if语句的执行范围内
3.if语句的嵌套
当if语句的执行语句又是if语句时则构成if语句的嵌套。
特别需要注意的时else与if的配对问题
C语言中规定esle总是与它距离最近的一个if优先配对
if (表达式1)
if(表达式2)
语句1;
else
语句2;//此处陷阱为else虽与第一个if对齐,但实际上与它配对的为内层的if
//若要else身处外层if语句,可改写为
if(表达式1)
{
if(表达式2)
语句1;
}
else
语句2;
//此时else与第一个if配对
4.条件运算符
条件运算符是一个三目运算符。
基本形式为:
表达式1?表达式:表达式3
实际理解起来还是很简单的,语义为先判断表达式1的值,若值为真则把表达式2的值作为条件表达式的值,若表达式1的值为假则把表达式3的值作为条件表达式的值。
max=(a>b)?a:b;
//利用条件语句可写为
if(a>b)
max=a;
else
max=b;
需要注意的地方:条件运算符的运算优先级低于关系运算符和算术运算符,但大于赋值运算符。
5.switch语句的用法
一般形式:
switch(表达式){
case 表达式1:
语句1;
case 表达式2:
语句2;
...
default:
语句n+1
}
语义:计算表达式的值,并逐个与以下的常量表达式值相比较,当值相等时则执行后面的语句。之后不再进行判断,后面的语句也全部执行(除非遇到break语句,将跳出整个switch 语句)。当没有相等的值时则执行default后的语句。
#include <stdio.h>
int main() {
int num, i;
printf("请输入1234567中的一个数字:");
scanf("%d", &num);
switch(num) {
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("输入有误,请输入1234567中的一个数字。\n");
}
return 0;
}
6.使用Switch语句时需要注意的地方
1.switch语句中表达式一般为整型,包括字符型和枚举型。
2.case后的值不能相同。
3.case后可以有多条语句,无需大括号即可全部执行。
4.default不是必须存在的,可以不用。
二、循环结构程序设计
循环语句能够使计算机反复执行一组语句,直到满足某个特定的条件。是程序中一种重要的控制结构。
1.while语句的用法
一般形式:
while(表达式)语句;
语句;
//下面是一段计算1到100之间所有整数和的代码
#include <stdio.h>
int main() {
int sum = 0;
int i;
printf("请输入想要计算的数字范围(1-100):");
scanf("%d", &i);
while(i >= 1 && i <= 100) {//在1到100范围内一直循环,直到i=101结束循环
sum += i;
i++;
}
printf("1到%d之间所有整数的和为:%d\n", i-1, sum);
return 0;
}
2.do...while语句的用法
一般形式:
do
语句;
while(表达式);
它与while语句的区别则在于先执行一次循环中的语句,再判断表达式是否为真,若为真则继续循环,若为假则终止循环
//利用do...while语句计算1到100的整数和
#include <stdio.h>
int main() {
int sum = 0;
int i;
printf("请输入想要计算的数字范围(1-100):");
scanf("%d", &i);
do {
sum += i;
i++;
} while(i <= 100);
printf("1到%d之间所有整数的和为:%d\n", i-1, sum);
return 0;
}
3.for语句的用法:
一般形式;
for(表达式1;表达式2;表达式3)语句;
执行过程:
1.求解表达式1
2.求解表达式2,若为真则执行语句,若为假则结束循环
3.求解表达式3
通常出现的形式为:
for(循环变量赋初值;循环条件;循环变量增量)语句;
如下图
for(i=1;i<=100;i++) sum=sum+i
4.使用for语句需要注意的地方
1.for语句表达式中为分号不为逗号。
2.三个表达式都可省略,但分号不可省略。
省略表达式1则表示不对循环控制变量赋初值。
省略表达式2则表示循环始终成立。
省略表达式3则表示不对循环控制变量进行操作,可在循环体中加入修改循环控制变量的语句。
5.goto语句
在C语言中,goto 语句是一种控制流语句,它的基本功能是在程序中跳转到已标记的语句。使用 goto,可以实现快速返回到之前的位置,继续执行之后的代码。
这里是一个简单的例子:
#include <stdio.h>
int main() {
printf("hello bitn");
goto again; // 跳转到标签 again 所在的行
printf("你好n");
again:
printf("hehen");
return 0;
}
运行这段代码,你会看到输出是 hello bitn 和 hehen,你好n 被跳过了。
虽然 goto 语句的功能很强大,但是它也会带来一些问题,尤其是当在复杂的循环和条件语句中使用时。因为 goto 可以跳过中间的代码,直接返回到之前的位置,这可能会导致程序流程难以跟踪,使得程序难以理解和维护。因此,在实际的编程实践中,建议尽量避免使用 goto 语句。
6.break和continue语句
在C语言中,break 和 continue 都是控制流语句,用于改变程序的执行流程。
break 语句:
break 语句用于立即退出当前所在的循环或switch语句。当执行到 break 语句时,会立即停止当前循环的执行,并跳转到循环外的下一条语句继续执行。
示例代码:
#include <stdio.h>
int main() {
for(int i = 1; i <= 5; i++) {
if(i == 3) {
break; // 跳出循环
}
printf("i = %d\n", i);
}
printf("循环结束,i = %d\n", i);
return 0;
}
运行这段代码,你会看到输出是:
i = 1
i = 2
i = 3
循环结束,i = 3
continue语句
continue 语句用于跳过当前循环的剩余部分,并直接进入下一次循环的执行。当执行到 continue 语句时,会停止当前循环当前轮的剩余执行,并跳转到循环的开始继续执行下一轮循环。
示例代码:
#include <stdio.h>
int main() {
for(int i = 1; i <= 5; i++) {
if(i == 3) {
continue; // 跳过当前循环剩余部分,直接进入下一次循环
}
printf("i = %d\n", i);
}
printf("循环结束,i = %d\n", i);
return 0;
}
输出结果为:
i = 1
i = 2
i = 4
i = 5
循环结束,i = 5
需要注意的是,break 和 continue 语句在for循环、while循环和do-while循环中都可以使用,但不能在if语句或其他控制语句中使用。