C语言是结构化的程序设计语言
这里的结构指的是顺序结构,选择结构,循环结构
分支结构可以使用if ,switch 实现
循环结构可以使用for,while,do while
1.if语句
if语句的语法形式如下:
1. if(表达式)
2. 语句
表达式为真,则语句执行,表达式为假,则语句不执行
在C语言中,0表示假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式结果为非0,则语句执行
下面举个例子:判断一个数是否是奇数
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 2 == 1)
{
printf("%d为奇数\n",n);
}
return 0;
}
2.else语句
如果一个数不是奇数,那就是偶数了,这里判断是奇数还是偶数
就需要if…else… 语句了,语法形式如下
> 1.if(表达式)
2. { 语句}
3. else { }
下面还是举判断奇偶数的例子:
int main()
{
int n = 0;
scanf("%d", &n);
if (n % 2 == 1)
{
printf("%d为奇数\n",n);
}
else
{
printf("%d是偶数\n", n);
}
return 0;
}
2.1分支中包含多条语句
默认在if 和 else语句中默认都只控制一条语句
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
return 0;
}
上面的代码,你会发现不管时输入>=18 还是 <18 都会打印可以谈恋爱了
出现上面这两种情况的原因:
是因为 if 默认控制它后面的第一条语句printf(“成年了\n”);
if 中的表达式成立,则执行第一条语句printf(“成年了\n”); 反之不然
但是 printf(“可以谈恋爱了\n”); 是独立存在的,这条语句不受if 语句控制,程序运行就会打印
如果想是if 语句同时控制2条语句,就需要用{ }将代码括起来,else后也可以跟上大括号,如下图代码所示:
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("不可以谈恋爱了\n");
}
return 0;
}
3.嵌套if
一个 if 语句后可跟一个可选的 else if… else 语句,这可用于测试多种条件。
当使用 if…else if…else 语句时,以下几点需要注意:
一个 if 后可跟零个或一个 else,else 必须在所有else if 之后。
一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
一旦某个 else if匹配成功,其他的 else if 或 else 将不会被测试。
模版如下代码所示:
if(判断条件1)
{
}
else if(判断条件2)
{
}
else if(判断条件3)
{
}
else
{
/* 当上面条件都不为真时执行 */
}
下面举一个 嵌套if 的例子:
输入一个整数,如果正数再判断是奇数还是偶数,并输出
反之则是非正数
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
{
if (num % 2 == 0)
{
printf("%d是偶数\n",num);
}
else
{
printf("%d是奇数\n", num);
}
}
else
{
printf("%d是非正数\n", num);
}
return 0;
}
3.1 if…else if…else 语句
下面举个具体的例子:
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
else if (age >= 18 && age <= 44)
{
printf("青年\n");
}
else if (age >= 45 && age <= 59)
{
printf("中老年\n");
}
else if (age >= 60 && age <= 89)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
return 0;
}
一旦前面的if 或者某个 else if 匹配成功,其后面的的 else if 或 else 将不会被测试。
3.2 悬空else问题
分析下面这段代码,有什么问题呢
很多初学者上来就判断a=0,不等于1,那就执行else语句,直接打印haha,但结果是什么都不打印
int main()
{
int a = 0;
int b = 0;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
出现上面这种情况的原因,这种悬空else的问题,如果有多个if 和 else
可以记住这样一条规则,else总是与最接近的if 匹配
上述代码的排版,会让我们误以为else 是与第一个if(a==1)匹配的
当if语句不成立时,自然想到就是执行else语句,打印haha.
但实际上else是和第二个if进行匹配的,因为else与第二个if是最接近的,进行匹配,所以后面的if…else语句其实是嵌套到了第一个if语句中的,如果第一个语句就不成立,嵌套的if 和 else 就没机会执行了,所以最终什么都不打印
写成下面这样的方式更加容易理解
int main()
{
int a = 0;
int b = 0;
if (a == 1) //不成立,则后面不执行
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
如果需要else与第一个if进行匹配,也可以像下面这样写
if(a==1)不成立,则执行else语句打印haha
int main()
{
int a = 0;
int b = 0;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
标签:语句,int,age,常见,else,概念,printf,main
From: https://blog.csdn.net/2301_79372955/article/details/143377574