概述
假设今年我国的人口总数为13亿,若按每年2%增长,计算从现在开始10年内每年人口的数量
#include<stdio.h>
#include<math.h>
int main()
{
int m = 13, year;
double number, rate = 0.022;
for (year = 1; year <= 10; year++) {
number = m * pow((1 + rate), year);
printf("%2d年后,人数为:%.2f亿n", year, number);
}
return 0;
}
流程图
运行结果
编写程序,计算1-1/4+1/7-1/10+1/13-1/16...的和,直到某一项的绝对值小于十的负六次方为止:
代码:
#include<stdio.h>
#include<math.h>
int main() {
double sum, item, flag, denominator;
sum = 0; item = 1; denominator = 1; flag = 1;
while (fabs(item) >= 1e-6) {
sum = sum + item;
flag = -flag;
denominator = denominator + 3;
item = flag / denominator;
}
printf("sum = % fn", sum);
return 0;
}
运行结果:
说明:
while语句是三种循环结构之一,while后括号中的表达式称为循环条件,循环开始时,一定要保证循环条件为真。需要重复执行的语句精神了循环体。
5.2使用for语句实现循环结构
for语句是C语言提供的功能强大、使用广泛的一种循环结构,不仅可以解决循环次数未知的循环问题,特别适合解决循环次数已知的循环问题。
for语句的基本语法
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
循环体语句;
or语句的执行过程如下:
1.首先计算表达式1。
2.判断表达式2,若其值为真(非0),则执行循环体语句,然后执行第3步;若值为假(0),结束循环,转到第5步执行。
3.计算表达式3。
4.返回第2步继续执行。
5.循环结束,继续执行for语句的下一条语句。大部分情况下,循环体语句为一复合循语句。
注意,表达式1只在进行循环之前计算一次。表达式2、循环体语句和表达3将重复执行。
根据for语句格式的特点,其实际应用可以有多种形式。
1.可以应用于计数型的循环
格式如下:
for(循环变量赋初值;循环条件;循环变量增量)
循环体语句
说明:循环变量赋值是一个赋值语句,用于给循环变量赋初值;循环条件是一个条件表达式,决定何时终止循环(即确定循环的终值);循环变量增量决定循环变量在完成一次循环后如何变化。三部分之间以“;”隔开。
输入一个正整数n,求
代码:
#include<stdio.h>
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;
}
运行结果:
输入一个正整数n,求n!
#include<stdio.h>
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;表达式2;)
循环体语句;
说明:
省略表达式3时,可以在循环体语句中加入修改循环变量的语句
5.for语句的一般形式中表达式1和表达式3也可以是逗号表达式
6.for语句的一般形式中表达式2的值只要非0,就执行循环体
7.for语句的一般形式中循环体句可以省略
for循环使用示例
编写程序,输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+...的前n之和
#include<stdio.h>
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;
}
编写程序,输入10个数,输出其中最大数
#include<stdio.h>
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;
}
编写程序,输出所有的水仙花数
#include<stdio.h>
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);
}
return 0;
}
编写程序,由键盘输入一个正整数,判断该数是否为完数:
#include<stdio.h>
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;
}
统计由键盘中输入若干1个字符中,大写英文字符、小写英文字符、数字字符和其他字符的个数
-
- 定义变量upper,lower,digit,i,other;
- 定义字符变量ch;
- 设置存放统计结果为零;
- 输入十个字符;
- 设i的初值1;
- 判定i是否执行了十次,是则转第⑩步,否则转第⑦步;
- 判定ch是否为小写英文字母,是则lower+1,否则转第⑧步;
- 判定ch是否为大写英文字母,是则upper+1,否则转第⑨步;
- 判定ch是否为数字字符,是则digit+1,否则other+1;
- I+1,然后转第⑥步;
- 输出英文字母、空格、数字和其他字符的个数;
#include<stdio.h>
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;
}
任意输入一行小写字母,将它们转换成大写字母后输出:
#include<stdio.h>
int main() {
int i;
char ch;
for (i = 1; (ch = getchar()) != 'n'; i++)
putchar(ch - 32);
return 0;
}
由键盘输入3个字符,将其组合成一个整型数并输出。
#include<stdio.h>
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;
}
编写程序,由键盘输入一个正整数,判断其是否为素数
#include<stdio.h>
int main() {
int i, flag, number;
printf("输入一个正整数:");
scanf_s("%d", &number);
flag = 1;
for (i = 2; i <= number - 1 && flag; i++)
if (number % i == 0)
flag = 0;
if (flag)
printf("%d是素数n", number);
else
printf("%d不是素数n", number);
return 0;
}
使用while语句实现循环结构
在C语言中,使用while语句完成不定次数的循环。如果满足循环条件,则反复执行循环体语句,当循环条件不满足时退出循环。
while语句的基本语法:
while语句在使用时,总要先判断一个条件,所以可以用while语句实现当型循环。while语句的一般形式如下:while(表达式)
循环体;
计算
#include<stdio.h>
int main() {
int i, sum;
i = 1; sum = 0;
while (i <= 100) {
sum = sum + i;
i = i + 1;
}
printf("sum = % dn", sum);
return 0;
}
输入一个正整数n,计算n!
#include<stdio.h>
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;
}
由键盘输入一串字符,分别统计输入字符中数字字符、字母字符及其他字符的个数
#include<stdio.h>
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;
}
do-while语句实现循环结构
在C语言中,do-while语句也用于完成不定次数的循环控制。do-while语句不同的是,do-while语句首先执行一次循环体,然后判断循环条件,如果满足,则反复执行循环体语句;否则结束循环。
do-while语句的基本语法
do-while语句在使用时,首先执行循环体语句,然后再判断条件。所以可以用do-while语句实现“直到型”循环。do-while语句的一般形式如下:do
循环体
while(表达式);
do-while执行流程如下:
第1步:执行循环体语句。
第2部:计算表达式的值,若表达式的值为“真”(非0),返回第1步;若表达式的值为“假”(0),则执行第3步。
第3步:结束循环,执行do-while语句的下一一条语句。
注意,do-while语句的特点是先执行循环体,后判断循环条件。因此,do-while循环至少要执行一次循环体。
在使用都do-while语句使用注意以下几点:
1.在do之后不能有语句结束符“;”因为该语句还没有结束。
2.在while(表达式)之后必须有语句结束符“;”表示do-while语句到此结束。
3.在循环体中必须有改变循环条件的语句,否则会出现死循环。
使用do——while语句计算
的值:
#include<stdio.h>
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;
}
求两个自然数的最大公约数和最小公倍数
#include<stdio.h>
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;
}
输入一个整数,统计该数的位数
#include<stdio.h>
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);
}
改变循环结构的跳转语句
在前面介绍的三种循环语句,即for循环语句、while循环语句及do-while循环语句中,控制循环是通过循环达到设定的次数或者循环的判断条件为“假”时结束循环,这种循环控制方式在实际的程序设计中是不够的。许多时候当循环结构中出现多个循环条件时,要求当某个条件满足时会立即结束循环,或者循环结构中根据条件会跳过某些语句继续循环,这就要在循环结构中配合使用break语句和continue语句
break语句
break语句在循环语句和switch语句中。
break语句的一般形式如下:
break;
当break语句用于循环语句时,可使程序终止循环而转去执行循环语句的后继语句。通常break语句总是与if语句一起配合使用,即满足条件时便跳出循环
分析下面程序的运行结果
#include<stdio.h>
int main() {
int i = 5;
do {
if (i % 3 == 1)
if (i % 5 == 2) {
printf("%d", i);
break;
}
i++;
}
while (i != 0);
return 0;
}
编写程序,由键盘输入一个正整数,判断其是否为素数
#include<stdio.h>
#include<math.h>
int main()
{
int n, m, i;
printf("请输入一个正整数:");
scanf_s("%d", &n);
m = sqrt(n);
for (i = 2; i <= m; i++)
if (n % i == 0)
break;
if (i > m)
printf("%d是素数!n", n);
else
printf("%d不是素数!n", n);
return 0;
}
输入一个正整数11
输入一个正整数12
- 从键盘上输入一批学生的成绩(以负数作为结束标志),计算平均分,并统计不及格成绩的个数
文字:
-
- 定义变量num,n;
- 给score,total赋初值为0;
- 定义num,n初始值为0;
- 请输入分数(0~100),输入的成绩个数n+1;
- 判定分数是否小于零,若小于零直接跳出循环转到第⑨步,否则转第⑥步;
- 判定分数是否小于60,小于则num+1,否则转第⑦步;
- 累加总分;
- 成绩个数+1,转第⑤步;
- 输出平均分数;
- 输出不及格的人数;
流程图:
#include<stdio.h>
int main()
{
int num, n;
float score,total = 0;
num = 0; n = 0;
while (1)
{
printf("请输入分数#%d(0~100):", n + 1);
scanf_s("%f", &score);
if (score < 0)
break;
if (score < 60)
num++;
total = total + score;
n++;
}
printf("平均分数是:%.2f.n",total / n);
printf("不及格的有:%d.n", num);
return 0;
}
把1~100之间能被7整除的数,以每行5个的形式在屏幕上输出。
#include<stdio.h>
int main() {
int i, n = 1;
for (i = 1; i <= 100; i++) {
if (i % 7 != 0)
continue;
printf("%4d", i);
if (n++ % 5 == 0)
printf("n");
}
return 0;
}
分析下面的程序运行结果
#include<stdio.h>
#include<math.h>
int main()
{
int n, s= 0;
n = 1;
while (n < 10)
{
s = s + n;
if (s > 5)
break;
if (n % 2 == 1)
continue;
n++;
}
printf("s=%d,n=%dn", s, n);
return 0;
}
goto语句
goto语句的一般形式如下:
goto语句标号;
说明:语句标号是一个有效的标识符,使用时在语句编号的后面跟一个“:”出现在函数中的某语句的前面。程序执行到goto语句时,会控制跳转到该语句标号处,达到控制循环的目的。
- 由键盘上输入一行以回车结束的字符,分别统计出其中英文字母、空格、数字和其他字符的个数
文字:
-
- 定义变量upper,lower,digit,i,other;
- 定义变量ch;
- 设置存放统计结果为零;
- 输入十个字符;
- 判定是否执行了十次,是则转第⑩步,否则转第⑥步;
- 判定ch是否为小写英文字母,是则lower+1,否则转第⑦步;
- 判定ch是否为大写英文字母,是则upper+1,否则转第⑧步;
- 判定ch是否为数字字符,是则digit+1,否则other+1;
- 转第⑤步;
- 输出英文字母、空格、数字和其他字符的个数;
流程图:
代码:
#include<stdio.h>
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;
}
执行结果:
- 使用goto语句计算
文字描述:
流程图:
#include<stdio.h>
int main() {
int i, sum;
i = 1; sum = 0;
loop:if (i <= 100) {
sum = sum + i;
i = i + 1;
goto loop;
}
printf("sum = % dn", sum);
return 0;
}
注意,语句标号必须与goto语句处于同一函数中。通常goto语句与if语句连用实现循环控制。大型循环中由于goto语句可能存在的不合理的使用,会使循环结构变坏,所以程序设计中,不建议使用goto语句。
嵌套循环
当一个循环的循环体内有包含了另一个完整的循环结构时,称为循环的嵌套或者是二重循环。根据问题的需要可以构成三重及以上的循环嵌套结构,但一般情况下最多使用到三重循环。
使用for语句、while语句及do-while语句相互嵌套,构成的嵌套结构有以下几种。
(1)for语句中嵌套for语句
(2)for语句中嵌套while语句
(3)while语句中嵌套while语句
( 4)do-while语句嵌套for语句
(5)do-while语句中嵌套do-while语句
(6)while语句中嵌套do-while语句
使用循环嵌套时,注意以下几点:
(1)外循环执行一次,内循环要执行一轮。即外循环执行一次,内循环一直要执行的条件不满足是为一轮;再执行外循环一次,内循环又一直执行到条件不满足时为第二轮;如此重复执行,直到外循环条件不满足时,整个循环嵌套结束。
(2)循环嵌套格式中的内外循环体不允许出现交叉,即外循环要完全包含内循环。
(3)循环嵌套时,内循环体中使用break语句和continue语句时,只影响包含它们的内循环,与外循环无关
求1!+2!+3!+.....10!
文字描述:
①定义变量i,j;
②
流程图:
代码:
#include<stdio.h>
int main()
{
int i, j;
double factorial, s = 0;
for(i=1;i<=10;i++)
{
factorial = 1;
for(j = 1; j <= i;j++){
factorial = factorial * j;
}
s = s + factorial;
}
printf("1!+2!+3!+...+10!=%.0fn", s);
return 0;
}
运行结果:
编写程序,输出乘法口诀表
#include<stdio.h>
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++)
printf("%d*%d=%dt", j, i, j * i);
printf("n");
}
return 0;
}
求100以内的素数
#include<stdio.h>
#include<math.h>
int main() {
int i, n, k, count = 0;
n = 2;
while (n < 100) {
k = sqrt(n);
for (i = 2; i <= k; i++)
if (n % i == 0)break;
if (i > k) {
printf("%4d", n);
if (++count % 10 == 0)
printf("n");
}
n++;
}
return 0;
}
将10~20之间的正整数分解质因数:
文字描述:
流程图:
#include<stdio.h>
int main() {
int i, n, m;
for (m = 10; m <= 20; m++) {
n = m, i = 2;
printf("%d=", n);
do {
if (n % i == 0)
{
printf("%d*", i);
n = n / i;
}
else {
i++;
}
}
while (n != i);
printf("%dn", n);
}
return 0;
}
5.29递推法
文字描述:
1.定义整数变量days,d1,d2
2.days=9
3.d2=1
4.d1=(d2+1)*2
5.d2=d1
6.–days
7.days>0值为真返回4否则输出d1
流程图:
代码:
#include<stdio.h>
int main()
{
int day, d1, d2;
day = 9;
d2 = 1;
do {
d1 = (d2 + 1) * 2;
d2 = d1;
--day;
} while (day > 0);
printf("第一天摘了%dn", d1);
return 0;
}
运行结果:
递推法的解题思路是:
后项可由前项推出(称为正推),或前项可由后项推出(称为倒退)。找出前后项的关系以后,需要应用循环结构实现算法,其中确定前后相的关系是关键。
5.30
代码:
#include<stdio.h>
#include<math.h>
#define eps 1e-6
int main()
{
int n = 1; float x;
double fz, fm = 1, sinx;
printf("输入x的值:");
scanf_s("%f", &x);
fz = x; sinx = x;
do
{
n = n + 1;
fz = -fz * x * x;
fm = fm * (2 * n - 2) * (2 * n - 1);
sinx = sinx + fz / fm;
} while (fabs(fz / fm) > eps);
printf("sin(%f)=%0.6fn", x, sinx);
printf("sin(%f)=%0.6fn", x, sin(x));
return 0;
}
运行结果:
迭代法
5.31
文字描述
流程图:
代码:
#include<stdio.h>
#include<math.h>
#define eps 1e-6
int main()
{
float x1, x0, f, f1;
x1 = 1.0;
do {
x0 = x1;
f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
f1 = (6 * x0 - 8) * x0 + 3;
x1 = x0 - f / f1;
} while (fabs(x1 - x0) > eps);
printf("%0.6fn", x1);
return 0;
}
运行结果:
穷举法:
代码:
#include<stdio.h>
int main()
{
int men, women, child;
for(men=0;men<=9;men++)
for (women = 0; women <= 12; women++) {
child = 36 - men - women;
if (men * 4 + women * 3 + child * 0.5 == 36)
printf("男:%d,女:%d,小孩:%dn", men, women, child);
}
return 0;
}
运行结果:
穷举法的解题思路是:
在一个集合内对每个元素一一测试。集合即为集合即为取值范围,首先要确定问题的取值范围,然后对所有值逐个进行判断,用人工来做这项工作既单调而又繁琐,但对计算机来说,可以用它高速的运算来处理重复的工作。
5.33
文字描述:
流程图:
#include<stdio.h>
int main()
{
int i, j, k, n = 0;
for (i = 1; i < 5; i++)
for (j = 1; j < 5; j++)
for (k = 1; k < 5; k++)
if (i != k && i != j && j != k)
{
printf("%d%d%dt", i, j, k);
if (++n % 5 == 0)printf("n");
}
printf("n共有:%dn", n);
return 0;
}
循环程序设计示例
5.34
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 5; i++)
{
for (j = 1; j <= 20 - i; j++)
printf(" ");
for (j = 1; j <= 2 * i - 1; j++)
printf("*");
printf("n");
}
return 0;
}
5.35
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m, n, count = 0;
m = rand() % (80 - 10 + 1) + 10;
printf("请输入一个10-80之间的整数:");
while (1)
{
scanf_s("%d", &n);
count++;
if (m == n)
{
printf("恭喜!你猜对了,你真棒!n");
break;
}
else if (m > n && count < 5)
printf("对不起!你猜小了!再来一次!");
else if (m < n && count < 5)
printf("对不起!你猜大了!再来一次!");
if (count == 5)
{
printf("对不起!你没有机会了!n这个数是:%d,游戏结束!n", m);
break;
}
}
return 0;
}
5.36
#include<stdio.h>
#include<math.h>
int main()
{
int x, i, j = 0, n, k = 0;
for (x = 100; x < 1000; x++)
{
k = sqrt(x);
for (i = 2; i <= k; i++)
if (x % i == 0)
break;
if (i > k)
{
k = x;
n = 0;
while (k > 0)
{
n = n * 10 + k % 10;
k /= 10;
}
if (x == n)
{
printf("%dt", x);
if (++j % 5 == 0)printf("n");
}
}
}
return 0;
}
5.37
#include<stdio.h>
int main()
{
int x, t;
printf("itpowern");
for (x = 100; x < 1000; x++) {
t = x * x;
while (t != 0) {
if (x == t % 1000) {
printf("%dt%dn", x, x * x);
break;
}
else
t = t / 10;
}
}
return 0;
}
最后
以上就是震动野狼为你收集整理的循环结构程序设计的全部内容,希望文章能够帮你解决循环结构程序设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复