对标题和序号有稍加修改。
7.1 if语句
if语句称为分支语句(branching statement)或选择语句(selection statement)。格式:
if (expression)
statement
- expression是关系表达式,为真就执行statement,否则跳过statement。
- statement可以是简单语句或复合语句。
示例程序:
#include<stdio.h>
int main(void)
{
int a,b;
printf("Please enter two integers:\n");
scanf("%d %d",&a,&b);
if (a>b)
printf("a is greater than b.\n");
if (a<b)
printf("a is less than b.\n");
if (a==b)
printf("a equals b.\n");
return 0;
}
输出结果:
Please enter two integers:
5 6
a is less than b.
7.2 if else语句
通用形式:
if (expression)
statement1
else
statement2
expression为真执行statement1,否则执行statement2。示例:
7.2.1 多重选择 else if
通用形式:
if (expression1)
statement1
else if (expression2)
statement2
else
statement3
如果expression1为真执行statement1,如果expression2为真执行statement2,否则执行statement3。C99要求编译器至少支持127层嵌套。
7.2.2 if与else匹配
else永远与最近的if匹配,除非最近的if被{}
,就与最近的有{}
if匹配。
7.2.3 求素数程序
#include<stdio.h>
#include<stdbool.h>
int main(void)
{
int num,i; /*分别存储待输入的数以及可能的约数*/
bool isPrime;/*标记变量*/
printf("Please enter an integer(q to quit):\n");
while (scanf("%d",&num)!=0)
{
for (i=2,isPrime=true; (i*i)<=num; i++)
if (num%i==0)
isPrime=false;
if (isPrime)
printf("%d is a prime.\n",num);
else
printf("%d is not a prime.\n",num);
printf("Now enter the next number(q to quit):\n");
}
printf("Done!\n");
return 0;
}
输出结果:
Please enter an integer(q to quit):
5
5 is a prime.
Now enter the next number(q to quit):
9
9 is not a prime.
Now enter the next number(q to quit):
q
Done!
7.3 getchar()和putchar()
getchar()
无参数,返回输入队列中下一个字符。putchar()
打印其参数。
示例程序:
#include<stdio.h>
int main(void)
{
char ch;
while ((ch=getchar())!='#')
putchar(ch);
putchar('\n');
return 0;
}
输出结果:
adwa125&#
adwa125&
7.3.1 ctype.h的字符函数
ctype.h中的函数接收一个字符为参数。
字符测试函数
函数名 | 如果是下列参数,返回值为真 |
---|---|
isalnum() | 字母或数字 |
isalpha() | 字母 |
isblank() | 标准的空白字符或任何本地化指定为空白的字符 |
iscntrl() | 控制字符,如Ctrl+B |
isdigit() | 数字 |
isgraph() | 除空格之外的任意可打印字符 |
islower() | 小写字母 |
isprint() | 可打印字符 |
ispunct() | 标点符号(除空格或字母数字以外的任何可打印字符) |
isspace() | 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化字符) |
isupper() | 大写字母 |
isxdigit() | 十六进制数字 |
字符映射函数
此类函数不会修改原始参数。
函数名 | 行为 |
---|---|
tolower() | 如果参数是大写字符,该函数返回小写字符;否则,返回原始参数 |
toupper() | 如果参数是小写字符,该函数返回大写字符;否则,返回原始参数 |
7.4 逻辑运算符
逻辑运算符两侧表达式均为真,整个表达式才为真。其求值顺序都是从左往右,一旦左侧表达式求值会让整个表达式求值无效便停止求值。
逻辑运算符 | 含义 | iso646.h备选拼写 |
---|---|---|
&& | 与 | and |
|| | 或 | or |
! | 非 | not |
7.5 条件运算符 ?:
条件表达式(conditional expression)用?:
运算符和运算对象组成,?:
是三元运算符。形式:expression1 ? expression2 : expression3
。如果expression1
为真,整个表达式值与expression2
的值相同,否则与expression3
的值相同。
7.6 continue和break
7.6.1 continue语句
3中循环都可以使用continue语句。执行到该语句时会跳过本次迭代的剩余部分,并开始新的迭代。
continue只会影响包含它的循环。
while循环中continue语句的下一个行为是对表达式求值,for循环中下一个行为是更新变量再对表达式求值,do while循环中对出口条件求值后再进入新的迭代。
7.6.2 break语句
执行break语句后,程序会终止包含它的循环并继续执行之后的语句。break只会影响包含它的循环。for循环中执行完break语句会跳过更新部分。
7.7 switch语句
通用形式:
switch(expression)
{
case lable1:statement1;break;
case lable2:statement2;break;
...
default:statementN;break;//可选标签
}
- expression和lable部分必须是整数值。
- 根据expression值跳转到相应的lable语句。
-
case
标签不能用变量。 - 没有与expression值匹配的标签就执行
default
的语句,没有default
就执行switch后的语句。 - break语句跳出switch。
7.7.1 多重标签
示例程序:
#include<stdio.h>
int main(void)
{
switch (getchar())
{
case 'a':
case 'A':printf("a or A\n");break;
case 'b':
case 'B':printf("b or B\n");break;
default:break;
}
return 0;
}
输出结果:
B
b or B