C Primer Plus 第七章——C控制语句:分支和跳转
2018-01-21 13:29
246 查看
专门面向字符I/O而设计的一对C函数: getchar()和putchar():
getchar()函数没有参数,它返回来自输入设备的下一个字符。putchar()函数打印它的参数。这两个函数通常在stdio.h中定义。
典型的C风格表达式:
ANSI C中有一系列标准的函数可以用来分析字符;ctype.h头文件包含了这些函数的原型。
如果没有花括号指明,else与和它最接近的一个if相匹配。通过在循环外设置一个bool型变量(添加stdbool.h头文件)作为标志(flag)来判断素数,如果发现约数则将素数标志设为false。
C保证逻辑表达式是从左到右求值的。&&和||运算符是序列的分界点,因此在程序从一个操作数前进到下一个操作数之前,所有的副作用都会生效。而且,C保证一旦发现某个元素使表达式总体无效,求值将立即停止。这些约定使下面这样的结构成为可能:
C提供一种简写方式来表示if else语句的一种形式。这被称为条件表达式,并使用条件运算符?:。
如果expression1为真(非零),整个条件表达式的值和expression2的值相同。如果expression1为假(零),整个条件表达式的值等于expression3的值。当希望将两个可能的值中的一个赋给变量时,可以使用条件表达式。
continue语句:当运行到该语句时,它将导致剩余的迭代部分被忽略,开始下一次迭代。如果continue语句处于嵌套结构中,那么它仅仅影响包含它的最里层的结构。continue的另一个用处是作为占位符。例如,下面的循环读取并丢弃输入,直到一行的末尾(包括行尾字符):
break语句:循环中的break语句导致程序终止包含它的循环,并进行程序的下一阶段。如果break语句位于嵌套循环里,它只影响包含它的最里层的循环。
switch语句中,圆括号中的switch判断表达式应该具有整数值(包括char类型),case标签必须是整型(包括char)常量或者整数常量表达式(仅包含整数常量的表达式),不能用变量作为case标签;如果没有break同标签关联,将会以程序流程继续前进到下一个标签语句:
如果是基于求一个浮点型变量或表达式的值,就不能使用switch语句(只能处理整型)。
goto语句在C语言中是有效的。然而,C没有它也可以工作得相当好。Kernighan和Ritchie认为goto语句“非常容易被滥用”,并且建议“要谨慎使用,或者根本不用”。goto语句包括两个部分:goto和一个标签名称。标签的命名遵循与命名变量相同的约定,如下例所示:
为使上述语句工作,函数必须包含由part2标签定位的其他语句。这可以通过以标签名紧跟一个冒号来开始一条语句完成:
有一种情况可以使用goto:在出现故障时从一组嵌套的循环中跳出(单条break仅仅跳出最里层的循环)。
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
- C primer plus 第七章 C控制语句-分支和跳转 编程练习个人答案
- 【C语言学习】《C Primer Plus》第7章 C控制语句:分支与跳转
- C primer plus第7章(C控制语句:分支和跳转)习题
- 第七章 C控制语句:分支和跳转
- 第七章 C控制语句:分支和跳转
- C Prlmer Plus 第七章 分支和跳转
- C primer plus第6章(c控制语句:循环)习题
- c primer plus第7章总结:分支跳转
- C控制语句:分支和跳转
- C primer plus C 第六章控制语句:循环 编程练习个人练习
- C控制语句:分支和跳转
- C++ Primer Plus学习:第六章 分支语句和逻辑操作符(2)
- C学习笔记(七)C控制语句:分支和跳转
- 【读书笔记:C++ primer plus 第六版 中文版】第6章 分支语句和逻辑运算符
- 【C语言学习】《C Primer Plus》第6章 C控制语句:循环
- C Primer Plus 第6章 C控制语句:循环 编程练习
- C控制语句之分支和跳转(一)
- C控制语句:分支与跳转
- c控制语句:分支和跳转