C语言学习(六)循环

这篇博客详细介绍了C语言中的循环控制语句,包括for、while、do while循环的使用,强调了循环条件的判断和实现。文章还探讨了逗号运算符在循环中的应用,以及do while循环的出口条件特性。此外,提到了嵌套循环和数组的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C控制语句: 循环

C语言有3种循环: for、 while、 do while

#include <stdio.h>
int main(void)
{ 
long num;
long sum = 0L; /* 把sum初始化为0 */
int status;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
status = scanf("%ld", &num);
while (status == 1) 
{ 
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
} 
printf("Those integers sum to %ld.\n", sum);
return 0;
}

该程序使用long类型以储存更大的整数。 尽管C编译器会把0自动转换为合适的类型, 但是为了保持程序的一致性, 我们把sum初始化为0L(long类型的0) , 而不是0(int类型的0) 。

因为while循环是入口条件循环, 程序在进入循环体之前必须获取输入的数据并检查status的值, 所以在 while 前面要有一个 scanf()。 要让循环继续执行, 在循环内需要一个读取数据的语句, 这样程序才能获取下一个status的值, 所以在while循环末尾还要有一个scanf(), 它为下一次迭代做好了准备。

C更为简洁, 下面的代码:

status = scanf("%ld", &num);
while (status == 1)
{ /*
循环行为 */
status = scanf("%ld", &num);
} 

可以用这些代码替换:
while (scanf("%ld", &num) == 1)
{ /*
循环行为*/
}
index = 10;
while (index++ < 5)
printf("Have a fair day or better.\n");

程序清单6.4 while2.c程序

/* while2.c -- 注意分号的位置 */
#include <stdio.h>
int main(void)
{ 
int n = 0;
while (n++ < 3); /* 第7行 */
printf("n is %d\n", n); /* 第8行 */
printf("That's all this program does.\n");
return 0;
}

可以这样写:

while (scanf("%d", &num) == 1)
; /* 跳过整数输入 */

这样做一方面让读者更容易看到空语句, 一方面也提醒自己和读者空语句是有意而为之。 处理这种情况更好的方法是使用continue语句。


下面有3个互不相关的while语句, 其中都包含关系表达式。

while (number < 6)
{
printf("Your number is too small.\n");
scanf("%d", &number);
} 

while (ch != '$')
{
count++;
scanf("%c", &ch);
} 

while (scanf("%f", &num) == 1)
sum = sum + num;

注意, 第2个while语句的关系表达式还可用于比较字符。 比较时使用的是机器字符码(假定为ASCII) 。 但是, 不能用关系运算符比较字符串。

虽然关系运算符也可用来比较浮点数, 但是要注意: 比较浮点数时, 尽量只使用<和>。 因为浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等。 例如, 3乘以1/3的积是1.0。 如果用把1/3表示成小数点后面6位数字, 乘积是.999999, 不等于1。
使用fabs()函数(声明在math.h头文件中)可以方便地比较浮点数, 该函数返回一个浮点值的绝对值(即, 没有代数符号的值) 。

程序清单6.5 cmpflt.c程序

// cmpflt.c -- 浮点数比较
#include <math.h>
#include <stdio.h>
int main(void)
{ 
const double ANSWER = 3.14159;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值