现实中的所有时间都可分成下面三中基本结构:顺序结构、选择结构、循环结构。而计算机语言是让计算机代替人们进行处理事情的工具,所以计算机语言中不外乎也就是这三种结构。
分支语句(选择结构)有两种:if语句和switch语句,语句:C语言中由一个分号;隔开的就是一条语句。
简单的If语句:
int main()
{
int age = 10;
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
注意:if和else后不加花括号时其作用范围只有其后面一条语句,如
int main()
{
int age = 20;
if (age >= 18)
printf("成年\n");
else
printf("未成年\n");
printf("不能谈恋爱\n");
//输出结果为成年+不能谈恋爱
return 0;
}
要让其控制多条语句时后面要用花括号括起来
int main()
{
int age = 20;
if (age >= 18)
{
printf("成年\n");
}
else
{
printf("未成年\n");
printf("不能谈恋爱\n");
//输出结果为成年+不能谈恋爱
}
return 0;
}
多分支If语句:
int main()
{
int age = 10;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 26)
/*不能写成18 <= age < 26, 存在逻辑错误,若age大于26
先判定18<=age为真,再判定1<26,判定为真*/
//判定条件也可直接写成age < 26,else 中隐含着age >= 18的条件
printf("青年\n");
else if (age >= 26 && age < 40)
printf("中年\n");
else if (age >= 40 && age < 60)
printf("壮年\n");
else if (age >= 60 && age < 100)
printf("老年\n");
return 0;
}
代码规范性问题:
1.悬空else:
//悬空else
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("1\n");
else
printf("2\n");//此程序不输出任何东西
return 0;
}
此程序不输出任何东西,因为else遵循就近原则,即else和最近的if进行匹配,但此程序代码不规范,else与第一个if对齐,容易给人造成误解。
可以改为以下格式:
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
{
printf("1\n");
}
else
{
printf("2\n");
}
}
return 0;
}
2.
int test()
{
if (1) //if(1)表示恒成立,因为计算机中1表示真,0表示假
return 1;
return 0;
}
int main()
{
printf("%d\n", test());
return 0;
}
int test()
{
if (1)
return 1;
else
return 0;
}
int main()
{
printf("%d\n", test());
return 0;
}
上面两个程序的逻辑原理和输出结果都是一样的,但是第二个程序明显更加易读。
3.判定相等问题
正确代码
//判断a是否等于2
int main()
{
int a = 1;
if (a == 2)
{
printf("a等于2\n");
}
return 0;
}
若此时不小心在判定条件中少打一个等号,表示将2赋值给a,程序并不会报错,但是会输出错误的结果,如下
//判断a是否等于2
int main()
{
int a = 1;
if (a = 2)
{
printf("a等于2\n");//输出a等于2,显然错误
}
return 0;
}
所以我们可以采用判定相等时让数字在前的方法:
//判断a是否等于2
int main()
{
int a = 1;
if (2 = a) //数字在前时少打一个=号,程序报错
{
printf("a等于2\n");
}
return 0;
}
此时程序报错,能使我们更加容易发现问题。
练习:输出1-100内的所有奇数:
1.while循环:
int main()
{
int i = 0;
while (i < 101)
{
if (i % 2 == 1)
{
printf("%d\n", i);
}
i++;
}
return 0;
}
2.for循环:
int main()
{
int i = 0;
for (i; i < 101; i++)
{
if (i % 2 == 1)
{
printf("%d\n", i);
}
}
return 0;
}