4.1 while语句
break:永久终止循环。在执行完break语句之后,下一条执行的语句就是循环正常结束后应该执行的那条语句。(退出循环)
continue:永久终止当前次的循环。在执行完continue语句之后,执行流接下来重新测试表达式的值,决定是否继续执行循环。(跳过循环体剩余部分,开始下一次循环)
while((ch=getchar())!=EOF){
if(ch<'0'||ch>'9')
continue;
当循环体至少执行一次时,选择do语句。
4.2 for语句
for(ex1;ex2;ex3)
statement //循环体
//ex1:初始化部分,只在循环开始时执行一次
//ex2:条件部分,在循环体每次执行前都要执行一次
//ex3:调整部分,当循环体每次执行完毕,在条件部分执行之前执行。
//三个表达式均可省略。若忽略条件部分,则测试的值始终为真。
//for语句也可用while语句代替
ex1;
while(ex2){
statement
ex3;
}
for语句与while语句的区别在于出现continue语句。
for: continue语句跳过循环体的剩余部分,直接回到调整部分;
while:continue语句直接跳过调整部分(因调整部分为循环体一部分)。
4.3 switch语句
switch(ex){
statement_list
} //ex的结果必须为整型值
//贯穿于statement_list之间的是一个或多个case标签
//
case语句:每个case标签必须具有一个唯一的值。case标签只确定语句列表的进入点而不是划分它们的原因。
break语句:将语句列表划分为不同的部分。在switch语句中遇到了break语句,执行流会立即跳到语句列表的末尾(避免switch语句执行时贯穿所有的case标签)。(只影响包围它的最内层循环)
default字句:当switch表达式的值并不匹配所有case标签的值时,执行default字句后面的语句。
goto语句:跳出多层嵌套的循环。把程序的执行流从一条语句转移到另一条语句。一般情况下应尽量避免使用goto语句。
C并不具备任何输入/输出语句,也不具备任何异常处理语句,均通过调用库函数来实现。
编程练习:
1.
正数n的平方根可以通过计算一系列近似值来获得,每个近似值都比前一个更加接近准确值。第一个近似值是1,接下来的近似值则通过下面的公式来获得。
编写一个程序,读入一个值,计算并打印出它的平方根。如果你将所有的近似值都打印出来,你会发现这种方法获得准确结果的速度有多快。原则上,这种计算可以永远进行下去,它会不断产生更加精确的结果。但在实际中,由于浮点变量的精度限制,程序无法一直计算下去。当某个近似值与前一个近似值相等时,你就可以让程序停止继续计算了。
程序如下:
// 计算一个数的平方根。
#include <stdio.h>
#include <stdlib.h>
int main(){
float new_guess;
float last_guess;
float number;
// 催促用户输入,读取数据并对它进行检查。
printf("Enter a number: " );
scanf("%f", &number );
if( number < 0 ){
printf("Cannot compute the square root of a " "negative number! \n");
return EXIT_FAILURE;
}
// 计算平方根的近似值,直到它的值不再变化。
new_guess = 1;
do{
last_guess = new_guess;
new_guess = ( last_guess + number / last_guess ) / 2;
printf ("%.15e\n", new_guess );
} while( new_guess != last_guess );
// 打印结果
printf ("Square root of %g is %g\n", number, new_guess );
system("pause");
return EXIT_SUCCESS;
}
运行结果:
Sweet dream~