您的位置:首页 > 其它

C Primer Plus 第七章——C控制语句:分支和跳转

2018-01-21 13:29 190 查看
专门面向字符I/O而设计的一对C函数: getchar()和putchar():

getchar()函数没有参数,它返回来自输入设备的下一个字符。putchar()函数打印它的参数。这两个函数通常在stdio.h中定义。

典型的C风格表达式:

while((ch=getchar())!='\n')  //将两个动作合并为一个表达式。注意!=优先级比=高,因此需要加括号。

ANSI C中有一系列标准的函数可以用来分析字符;ctype.h头文件包含了这些函数的原型。



如果没有花括号指明,else与和它最接近的一个if相匹配。通过在循环外设置一个bool型变量(添加stdbool.h头文件)作为标志(flag)来判断素数,如果发现约数则将素数标志设为false。

/*divisor.c  求约数 */
#include<stdio.h>
#include<stdbool.h>
int main(void)
{
long num;                    //要检查的数
int div;                     //可能的除数
bool isPrime=true;           //素数的标志
printf("Please enter a number for analysis(q to quit): ");
while(scanf("%ld",&num)==1)
{
for(div=2,isPrime=true;div*div<=num;div++)
{
if(num%div==0&&div*div!=num)
{
printf("%ld is divisible by %d and %d.\n",num,div,num/div);
isPrime=false;
}
else if(div*div==num)
{
printf("%ld is divisible by %d.\n",num,div);
isPrime=false;
}
}
if(isPrime) printf("%ld is prime.\n",num);
printf("\nPlease enter a number for analysis(q to quit): ");
}
printf("Done!\n");
return 0;
}

C保证逻辑表达式是从左到右求值的。&&和||运算符是序列的分界点,因此在程序从一个操作数前进到下一个操作数之前,所有的副作用都会生效。而且,C保证一旦发现某个元素使表达式总体无效,求值将立即停止。这些约定使下面这样的结构成为可能:

while((c=getchar())!=' '&&c!='\n')

while(x++<10&&x+y<20)   //&&运算符是序列分界点保证了对右边表达式求值之前,先把x的值增加1。

C提供一种简写方式来表示if else语句的一种形式。这被称为条件表达式,并使用条件运算符?:。

expression1? expression2:expression3

如果expression1为真(非零),整个条件表达式的值和expression2的值相同。如果expression1为假(零),整个条件表达式的值等于expression3的值。当希望将两个可能的值中的一个赋给变量时,可以使用条件表达式。
continue语句:当运行到该语句时,它将导致剩余的迭代部分被忽略,开始下一次迭代。如果continue语句处于嵌套结构中,那么它仅仅影响包含它的最里层的结构。continue的另一个用处是作为占位符。例如,下面的循环读取并丢弃输入,直到一行的末尾(包括行尾字符):

while(getchar()!='\n');
//或者:
while(getchar()!='\n')
continue;

break语句:循环中的break语句导致程序终止包含它的循环,并进行程序的下一阶段。如果break语句位于嵌套循环里,它只影响包含它的最里层的循环。
switch语句中,圆括号中的switch判断表达式应该具有整数值(包括char类型),case标签必须是整型(包括char)常量或者整数常量表达式(仅包含整数常量的表达式),不能用变量作为case标签;如果没有break同标签关联,将会以程序流程继续前进到下一个标签语句:

switch(integer expression)
{
case constant1: statements
case constant2: statments
default: statements
}

如果是基于求一个浮点型变量或表达式的值,就不能使用switch语句(只能处理整型)。
goto语句在C语言中是有效的。然而,C没有它也可以工作得相当好。Kernighan和Ritchie认为goto语句“非常容易被滥用”,并且建议“要谨慎使用,或者根本不用”。goto语句包括两个部分:goto和一个标签名称。标签的命名遵循与命名变量相同的约定,如下例所示:

goto part2;

为使上述语句工作,函数必须包含由part2标签定位的其他语句。这可以通过以标签名紧跟一个冒号来开始一条语句完成:

part2:printf("Refined analysis:\n");

有一种情况可以使用goto:在出现故障时从一组嵌套的循环中跳出(单条break仅仅跳出最里层的循环)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C C Primer Plus