第5章总结

2.for语句的一般形式中省略表达式1

格式如下:

                            for(;表达式2,表达式3)

                                    循环语句;

说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个“;”。

例5.3的循环语句:

1.for(i=1;i<=n;i++)
2.sum=sum+i;
等价于:

1.i=1;
2.for(;i<=n;i++)
3. sum=sum+i;
3.for语句的一般形式中省略表达式2

格式如下:

                            for(表达式1;;表达式3)

                                    循环体语句;

4.for语句的一般形式中省略表达式3

                    for(表达式1;表达式2;)

                            循环体语句;

例5.4的循环语句:

1.for(i=1;i<=n;i++)
2. factorial=factorial*i;
等价于:

1.for(i=1;i<=n;)
2.{ factorial=factorial*i;
3. i++;
4.}
5.for语句的一般形式表达式1和表达式3也可以是逗号表达式

例5.3的程序段:

1.sum=0;
2.for(i=1,i<=n;i++)
3. sum=sum+i;
等价于:

for(sum=0,i=1;i<=n;i++)
sum=sum+i;
表达式sum=0,i=1为逗号表达式。

6.for语句的一般形式表达式2的值只要非0,就执行循环体

例如:

1.for(;(ch=getchar())!=’\n’😉
2. printf("%c",ch)
7.for语句的一般形式中循环语句可以省略

例5.3的循环语句:

1.for(i=1;i<=n;i++)
2. sum=sum+i;
等价于:

for(i=1;i<=n;sum=sum+i,i++);

5.2.2 for循环使用示例

【例5.5】输入一个整数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=%.2f\n”, sum);
return 0;
}

【例5.6】输入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 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.7】输出所有的水仙花数

#include<stdio.h>
int main()
{
int number, a, b, c;
for (number = 100; number <= 999; number++)
{
a = number /
】由键盘输入一个正整数,判断该数是否为完数

#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;
}

【例5.9】统计由键盘中输入的若干个字符中,大写英文字母、小写英文字母、数字字符和其他字符的个数

#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;
}

【5.10】任意输入一行小写字母,将它们转换成大写字母后输出

int main()
{
int i;
char ch;
for (i = 1; (ch = getchar()) != ‘\n’; i++)
putchar(ch - 32);
return 0;
}

#include<stdio.h>
int main()
{
int i;
char ch;
for (; (ch = getchar()) != ‘\n’; )
putchar(ch - 32);
return 0;
}

【例5.11】 由键盘输入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("%d\n", n);
return 0;
}

【5.12】由键盘输入一个正整数,判断其是否为素数

#include<stdio.h>
int main(void)
{
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;
}
}

5.3 使用while语句实现循环结构

5.3.1 while语句的基本语法

while语句一般形式如下:

while(表达式)

    循环体;

while语句的执行流程如图5.3所示

第一步:计算表达式的值,若表达式的值为“真”,则执行第2步;若表达式的值为“假”,则转到第4步。

第二步:执行循环体语句。

第三步:返回第一步。

第四步:结束循环,执行while语句的下一条语句。

注意:while语句的特点是先判断循环条件,后执行循环体。

【例5.13】计算sum的值

#include<stdio.h>
int main()
{
int i, sum;
i = 1, sum = 0;
while (i <= 100)
{
sum = sum + i;
i = i + 1;
}
printf(“sum=%d”, sum);
return 0;
}

【5.14】输入一个正整数n,计算n!

#inc
5.15】由键盘输入一串字符,分别统计输入字符中数字字符、字母字符及其它字符个数

#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;
}

5.4 使用 do-while语句实现循环结构

5.4.1 do-while语句的基本用法

do

    循环体

while(表达式);

do-while语句的执行流程如图5.4所示

1.执行循环体语句;

2.计算表达式的值,若表达式的值为‘真’,返回第一步;若表达式的值为‘假’,则执行第3步;

3.结束循环;

注意:do-while语句的特点是先循环体,后判断循环条件。因此,do-while循环至少要执行一次循环体。

【例5.16】使用do-while语句计算sum=n的值

#include<stdio.h>
int main()
{
int i, sum;
i = 1, sum = 0;
do
{
sum = sum + i;
i = i + 1;
} while (i <= 100);
printf(“sum=%d\n”, sum);
return 0;
}

【例5.17】求两个自然数的最大公约数和最小公倍数

#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的最大公约数是:%d\n", m, n, a);
printf(“最小公倍数是:%d”, m * n / a);
return 0;
}

【例5.18】输入一个整数,统计该数的位数

#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);
return 0;
}

5.5 改变循环结构的跳转语句

5.5.1 break语句

break结束整个循环

【例5.19】分析下面程序的运行结果

#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;
}

【例5.20】由键盘输入一个正整数,判断其是否为素数

#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;
}

【例5.21】从键盘输入一批学生的成绩,计算平均分,并统计不及格成绩个数

#include<stdio.h>
int main()
{
int num, n;
float scote, total = 0;
num = 0, n = 0;
while (1)
{
prin
【例5.22】把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;
}

【例5.23】分析下面程序运行结果

#include<stdio.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=%d\n”, s , n);
return 0;
}

5.5.3 goto语句

四种循环控制语句,for循环语句、while循环语句、do-while循环语句 、goto循环

【例5.24】使用goto语句计算sum=n的值

#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=%d\n”, sum);
return 0;

}

5.6 循环嵌套

当一个循环的循环体内又包含了另一个完整的循环结构时,称为循环的嵌套或者是二重循环。一般情况下最多使用到三重循环。

1for语句中嵌套for语句

2for语句中嵌套while语句
3while语句中嵌套while语句

4do——while语句中嵌套for语句
5do——while语句中嵌套do——while语句

6while语句中嵌套do——while语句

使用循环嵌套时,注意以下几点:
1外循环执行一次,内循环要执行一轮。即外循环执行一次,内循环一直要执行到条件不满足时为一轮;在执行外循环一次,内循环又一直执行到条件不满足时为第二轮;如此重复执行,直到外循环条件不满足时,整个循环嵌套结束。
2循环嵌套格式中的内循环体不允许出现交叉,即外循环要包含内循环。
3循环嵌套是,内循环体中使用break语句和continue。

【例5.25】求1!+2!+3!+…+10!

.

#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!=%.0f\n”, s);
return 0;
}

【例5.26】输出乘法口诀表

#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i<= 9; i++)
{
for (j = 1; j <= i; j++)
printf("%d*%d=%d\t", j, i, j * i);
printf("\n");
}
return 0;
}

【例5.27】求100以内的素数。要求每行输出10个。

#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;
}

【例5.28】将10~20之间的正整数分解质因数

#include<stdio.h>
int main()
{
int i, n, m;
for (m = 10; m <= 20; m++)
{
n = m
例5.29】

#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(“第一天摘了%d\n”, d1);
return 0;
}

【例5.30】求sin(x)=x-x3/3!+x5/5!-x^7/7!+…的近视值,要求精确到10负6次方

#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 (fasb(fz / fm) > eps);
printf(“sin(%f)=%0.6f\n”, x, sinx);
printf(“sin(%f)=%0.6f\n”, x, sin(x));
return 0;
}

5.7.2 迭代法

【例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("%6.2f", x1);
return 0;
}

5.7.3 穷举法

【例5.32】

#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小孩:%d\n”, men, women, child);
}
return 0;
}

【例5.33】判断由1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数

#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 && 1 != j && j != k)
{
printf("%d%d%d\t", i, j, k);
if (++n % 5 == 0)
printf("\n");
}
printf("\n共有:%d\n", n);
return 0;
}

5.8:循环程序设计示例

【例5.34】

1.定义整型i,j;

2.若i<=5;转第3步,则转第步;

3.若i<=20-i;转第4步;则转第5步;

4.输出" ";

5.j++;转第3步;

6.若j<=2*i-1;转第7步;则转第9步;

7.输出"*";

8.j++;转第6步;

9.输出\n;

10.i++,转第2步;

9.结束;

#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】

1.定义m,n,count;

2.m=rand()%(80-10+1)+10;

3.输入一个10—80之间的整数;

#include<stdio.h>
int main()
{
int x, t;
printf(“i\tpower\n”);
for (x = 100; x < 1000; x++)
{
t = x * x;
while (t != 0)
{
if (x == t % 1000)
{
printf("%d\t%d\n", x, x * x);
break;
}
else
t = t / 10;
}
}
return 0
在这里插入图片描述
在这里插入图片描述

`在这里插入图片描述


![在这里插入图片描述](https://img-blog.csdnimg.cn/f3d296461e194a4da3b1f215b3c234f8.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/0f5e0eefb0aa4a4698693300e1c82cef.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)![在这里插入图片描述](https://img-blog.csdnimg.cn/ce14760d19f94be18c41a4449ca40ea2.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/52fa783ae5634feabab2e282f9a3fd68.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d93fbbd6d379484fab39b13bdf32d747.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/caa3709ac78f42f89b02a569dcbe0748.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)

![在这里插入图片描述](https://img-blog.csdnimg.cn/b07c0fbca76b4444b8287dc25b446041.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/9c2cc27cfeee4f0fad9b9de8891cf944.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/66b522c499544f148d3b9e4df92a622c.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4dc29c5e07034397b6cf270da081190e.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)


```mermaid

```mermaid
![graph TD;
A-->B;
B-->C;](https://img-blog.csdnimg.cn/5029df4de14b439a99f6925307bbe882.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)
在这里插入图片描述

](https://img-blog.csdnimg.cn/bada61e2586a40149ea8eba440904474.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5pm6NzU4,size_20,color_FFFFFF,t_70,g_se,x_16)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值