【例5.1】计算人口有规律增长的数量
#include
#include
int main()
{
int n = 13, year;
double number, rate = 0.02;
for (year = 1; year <= 10; year++)
{
number = n * pow((1 + rate), year);
printf("%2d年后,人数为:%.2f亿n", year, number);
}
return 0;
}
【例5.2】使用while循环有规律累加值为止的编写程序 使用for语句实现循环结构:
#include
#include
int main()
{
double sum, item, flag, denominator;
sum = 0; item = 1; flag = 1; denominator = 1;
while (fabs(item) >= 1e-6)
{
sum = sum + item;
flag = -flag;
denominator = denominator + 3;
item = flag / denominator;
}
printf("sum=%fn", sum);
return 0;
}
5.2.1 for语句的基本语法
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
循环题语句;
大部分情况下,循环体语句为一复合语句。
注意,表达式1只是在进入循环之前计算一次。表达式2、循环体语句和表达式3将会重复执行。
1、可以应用于计数型的循环
格式如下:
for(循环变量赋初值‘循环条件;循环变量增量)
循环体语句;
【例5.3】输入一个正整数,求累加n阶乘的值
#include
int main()
{
int i, n, sum;
scanf_s("%d", &n);
sum = 0;
for (i = 1; i <= n; i++)
sum = sum + i;
printf("由1到%d的和是:%dn", n, sum);
return 0;
}
【例5.4】输入一个正整数,求累加n阶乘的值
#include
int main(void)
{
int i, n;
double factorial;
printf("输入n的值:");
scanf_s("%d", &n);
factorial = 1;
for (i = 1; i <= n; i++)
factorial = factorial * i;
printf("%d!=%.0fn", n, factorial);
return 0;
}
2、for语句的一般形式中省略表达式1
格式如下:
for( ;表达式2;表达式3)
循环体语句;
说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个“;”。
3、for语句的一般形式中省略表达式2
格式如下:
for(表达式1; ;表达式3)
循环体语句;
说明:省略表达式2时,表示不对循环体进行控制,这时如果没有其他处理的话,会形成死循环。应避免这样的for结构。
4、for语句的一般形式中省略表达式3
格式如下:
for(表达式1; ;表达式3)
循环体语句;
说明:省略表达式3时,可以在循环体语句中加入修改循环变量的值的语句。
5、for语句的一般形式表达式1和表达式3也可以式逗号表达式
6、for语句的一般形式中表达式2的值只要非0,就执行循环体
7、for语句的一般形式中循环体语句可以省略
由以上7种应用可以看出,for循环控制结构功能强大,在解决实际问题中起着非常重要的作用
5.2.2 for循环使用示例
【例5.5】 编写程序,计算有规律的前n项之和:
#include
int main()
{
int n, i, denominator, flag;
float sum, item;
printf("输入n的值:");
scanf_s("%d", &n);
flag = 1;
denominator = 1;
sum = 0;
for (i = 1; i <= n; i++)
{
item = flag * 1.0 / denominator;
sum = sum + item;
flag = -flag;
denominator = denominator + 3;
}
printf("Sum=%.2fn", sum);
return 0;
}
【例5.6】编写程序,输入10个数,输出其中最大数:
#include
int main()
{
int i;
float x, max;
printf("请输入第1个数:");
scanf_s("%f", &x);
max = x;
for (i = 1; i <= 9; i++)
{
printf("请输入第%d个数:", i + 1);
scanf_s("%f", &x);
if (x > max)
max = x;
}
printf("10个数的最大值是:%.0f", max);
return 0;
}
【例5.7】编写程序,输入相应的水仙花数。:
#include
int main()
{
int i;
float x, max;
for(i=1;i<=10;i++)
{
printf("请输入第%d个数:",i );
scanf_s("%f", &x);
if (i == 1)
max = x;
else
if (x > max)
max = x;
}
printf("十个数中最大值是:%.0f", max);
return 0;
}
【例5.8】编写程序,由键盘输入一个正整数,判断该数是否为完数:
#include
int main()
{
int number, a, b, c;
for (number = 100; number <= 999; number++)
{
a = number / 100;
b = number % 100 / 10;
c = number % 10;
if (number == a * a * a + b * b * b + c * c * c)
printf("%5d", number);
}
}
【例5.9】统计由键盘中输入的若干个字符中,大写英文字母,小写英文字母,数字字符和其他字符的个数:
#include
int main()
{
int number, sum, i;
printf("请输入一个正整数:");
scanf_s("%d", &number);
sum = 0;
for (i = 1; i <= number - 1; i++)
if (number % i == 0)
sum = sum + 1;
if (number == sum)
printf("%d是完数n", number);
else
printf("%d不是完数n", number);
return 0;
}
【例5.10】任意输入一行小写字母,将他们转换成大写字母后输出:
#include
int main()
{
int upper, lower, digit, i, other;
char ch;
upper = lower = digit = other = 0;
printf("输入10个字符:");
for (i = 1; i <= 10; i++)
{
ch = getchar();
if (ch >= 'a' && ch <= 'z')
lower++;
else if (ch >= 'A' && ch <= 'Z')
upper++;
else if (ch >= '0' && ch <= '9')
digit++;
else
other++;
}
printf("小写字母%d个,大写字母%d个,数字%d个,其他字符%d个n", lower, upper, digit, other);
return 0;
}
【例5.11】由键盘输入3个数字,将其组合成一个整型数并输出:
#include
int main()
{
int i;
char ch;
for (i = 1; (ch = getchar()) != 'n'; i++)
putchar(ch - 32);
return 0;
}
【例5.12】编写程序,由键盘输入一个正整数,判断其是否为素数:
#include
int main()
{
int i;
char ch;
for (; (ch = getchar()) != 'n'; )
putchar(ch - 32);
return 0;
}
5.3 使用while语句实现循环结构
5.3.1 while语句的基本语法
while语句在使用时,总是先要判断一个条件,所以可以用while语句实现“当型”循环。while语句的一般形式如下:
while(表达式)
循环体;
注意,while语句的特点是先判断循环条件,后执行循环体。
5.3.2 while循环使用示例
【例5.13】计算1-100的累加和的值:
#include
int main()
{
int n = 0, i;
char ch;
printf("输入3个数字:");
for (i = 1; i <= 3; i++)
{
scanf_s("%c", &ch);
n = n * 10 + ch - '0';
}
printf("%dn", n);
return 0;
}
【例5.14】输入一个正整数n,计算n!:
#include
int main()
{
int i;
long n, fact;
i = 2, fact = 1;
printf("请输入n的值:");
scanf_s("%ld", &n);
while (i <= n)
{
fact = fact * i;
i = i + 1;
}
printf("%ld!=%ldn", n, fact);
return 0;
}
【例5.15】由键盘输入一串字符,分别统计输入字符中数字字符,字母字符集其他字符的个数:
#include
int main()
{
int digit, letter, other;
char ch;
digit = letter = other = 0;
printf("请输入一个字符:");
while ((ch = getchar()) != 'n')
if ((ch >= '0') && (ch <= '9'))
digit++;
else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
letter++;
else
other++;
printf("数学%d个,字母%d个,其他%d个n", digit, letter, other);
return 0;
}
5.4 使用do-while语句实现循环结构
5.4.1 do-while语句的基本语法
do-while语句在使用时,首先执行循环体语句,然后再判断条件。所以可以用do-while语句实现“直到型”循环。do-while语句一般形式如下:
do
循环体
while(表达式);
注意,do-while语句的特点是先执行循环体,后判断循环条件。因此,do-while循环至少执行一次循环体。
5.4.2 do-while循环使用示例
【例5.16】使用do-while语句计算1-100累加的值:
#include
int main()
{
int i, sum;
i = 1, sum = 0;
do
{
sum = sum + i;
i = i + 1;
} while (i <= 100);
printf("sum=%dn", sum);
return 0;
}
【例5.17】求两个自然数的最大公约数和最小公倍数:
#include
int main()
{
int a, b, r, n, m;
printf("请输入两个整数:");
scanf_s("%d%d",& a, &b);
m = a, n = b;
do
{
r = a% b;
a = b;
b = r;
} while (r != 0);
printf("%d和%d的最大公约数是:%dn", m, n, a);
printf("最小公倍数是:%d", m * n / a);
return 0;
}
【例5.18】输入一个整数,统计该数的位数:
#include
int main()
{
long n, m;
int count = 0;
printf("请输入一个整数:");
scanf_s("%ld", &n);
m = n;
if (n < 0)n = -n;
do
{
n = n / 10;
count++;
} while (n != 0);
printf("整数%ld有%d位数n", m, count);
return 0;
}
5.5 改变循环结构的跳转语句
5.5.1 break语句
break语句用在循环语句和switch语句中,在switch语句中的用法第4章已经介绍,这里介绍其在循环语句中的用法。
break语句的一般形式如下:
break;
当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句的后继语句。通常break语句总是与if语句一起配合使用,即满足条件时跳出循环。
【例5.19】分析下面程序的运行结果:
#include
int main()
{
int i = 5;
do
{
if (i % 3 == 1)
if (i % 5 == 2)
{
printf("%d", i);
break;
}
i++;
} while (i != 0);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)