C语言-10循环结构- while 语句


§作业
一台购买价为 28,000 美元的机器在 7 年内以每年 4000 美元的比率折旧。编写并运行一个 C 程序,计算并显示 美元的比率折旧。 程序, 7 年的折旧表,该表应该具有如下的形式: 年的折旧表,该表应该具有如下的形式: 年 ---1 2 3 4 5 6 7 折旧 ---------4000 4000 4000 4000 4000 4000 4000 年终值 ---------24000 20000 16000 12000 8000 4000 0 累计折旧 ---------4000 8000 12000 16000 20000 24000 28000
C语言程序设计
第十课 循环结构- while 语句 循环结构-
§10.1 循环(重复) 10. 循环(重复)
前面几章介绍的程序在 前面几章介绍的程序在演示 C 程序的正确结构,以及构造 程序的正确结构, 输入、输出、赋值和选择功能方面是非常有用的。 基本的 C 输入、输出、赋值和选择功能方面是非常有用的。 大多数程序的实际功能主要表现在它们多次重复相同的计算 或指令序列的能力上,即每次使用不同的数据, 或指令序列的能力上,即每次使用不同的数据,而不必针对每组 新的数据值重新运行程序, 语句, 新的数据值重新运行程序,本章将介绍实现该功能的 C 语句, while、 do语句。 包括 while、for 和 do-while 语句。
§10.3.3 while 应用-更改控制变量的值 10.
我们仍需要更改 count 的值才能最终退出 while 语句,这需要 语句, 这样的条件, 使用像 count=count+l 这样的条件,在每次执行 while 语句时都 的值。事实是, 递增 count 的值。事实是,用于重复单个语句的 while 语句不会妨 的值,我们所要做的就是使用复合 碍我们使用其他语句来更改 count 的值,我们所要做的就是使用复合 语句来替代单个语句 例如: 来替代单个语句, 语句来替代单个语句,例如: count = 1; //将 count 初始化 //将 while( count <= 10 ) { printf("%4d",count); //将count递增 //将count递增 count++; } 现在让我们来分析一下这组完整的指令的工作方式。 现在让我们来分析一下这组完整的指令的工作方式。第一个赋值语 设置为1 然后, 语句, 句将 count 设置为1。然后,进入 while 语句,条件第一次得到赋 10,所以条件成立,并执行复合语句。 值。因为 count 的值小于 10,所以条件成立,并执行复合语句。复 printf()方法来显示 合语句中第一个语句是调用 printf()方法来显示 count 值。接下来 的语句是将 count 中当前存储的值加上 1,使该值等于 2。现在 while 语句循环回来重新测试条件,因为 count 的值仍小于 10,所 语句循环回来重新测试条件, 10, 以将再次执行复合语句, 11。 以将再次执行复合语句,该过程将一直持续到 count 的值达到 11。
/* */
程序:ex10_04.c 程序:ex10 交互式 while 循环
#include <stdio.h> void main() { int i,num;
/* */
程序:ex10_03.c 程序:ex10 打印数字 1-10 及其平方值和立方值表的任务
#include <stdio.h> void main() { int num;
//包括标准输入输出头文件 //包括标准输入输出头文件 //主函数 //主函数
//打印表头 //打印表头 printf("NUMBER SQUARE CUBE\ CUBE\n"); printf("-----printf("--------------\n"); ----\ num = 1; //初始化 num //初始化 while( num < 11 ){ printf("%6d",num); //输出数字 //输出数字 printf("%9d",num*num); //输出平方 //输出平方 printf("%7d\n",num*num*num);//输出立方 printf("%7d\n",num*num*num);//输出立方 num++; //将num递增 //将num递增 } }
count = 1; //控制变量赋初值 //控制变量赋初值 while( count <= 10 ) printf("%4d",count);
使用这个指令序列,我们可以确保 count 的初始值为 1。我们 使用这个指令序列, 指定任何值——重要的是要指定 某些” 重要的是要指定“ 可以在赋值语句为 count 指定任何值——重要的是要指定“某些”值。 实际上,指定的值要取决于应用程序。 实际上,指定的值要取决于应用程序。
§10.2.2 while 语句执行流程 10.
计算机执行 while 语句的过程如下所示: 语句的过程如下所示: (1)测试条件 (1)测试条件。 测试条件。 (2)如果条件具有非 (true)值 (2)如果条件具有非0(true)值: 如果条件具有非0 执行圆括号后的语句; ①执行圆括号后的语句; 回到步骤(1)。 ②回到步骤(1)。 否则 语句。 退出 while 语句。
§10.3.2 while 语句应用-变量赋初值 10.
我们该如何设置 count 的初始值,来控制在首次为条件赋值时 的初始值, while 语句所实现的功能呢?回答是在遇到 while 语句之前,为 语句所实现的功能呢?回答是在遇到 语句之前, 所测试的条件中的每个变量赋值,例如,下面的指令顺序是有效的: 所测试的条件中的每个变量赋值,例如,下面的指令顺序是有效的:
/* */
程序:ex10 程序:ex10_01.c 输出1 输出1-10
#include <stdio.h> void main() { int count;
//包括标准输入输出头文件 //包括标准输入输出头文件 //主函数 //主函数
count = 1; //初始化 count //初始化 while(count<=10) { printf("%4d",count);//输出 printf("%4d",count);//输出 count count++; //将 //将 count 递增 } }
/*
阅读程序:ex10 阅读程序:ex10_02.c */ 程序 //包括标准输入输出头文件 //包括标准输入输出头文件 //主函数 //主函数
#include <stdio.h> void main() { int i;
i = 10; //初始化 i //初始化 while(i>=1) { printf("%4d",i); //输出 //输出 i i--; --; //将 //将 i 递减 } }
虽然该语句是有效的,但细心的读者将意识到, 虽然该语句是有效的,但细心的读者将意识到,我们创建了一种 printf()方法 直到我们终止程序) 方法( 或是一直调用 printf()方法(直到我们终止程序)或是根本不调用 它的情况。 它的情况。 如果在首次条件赋值时,count 的值小于或等于lO,那么将调 的值小于或等于lO, 如果在首次条件赋值时, printf()方法 然后, 方法, 用 printf()方法,然后,while 语句将自动回过头来重新测试条 中存储的值,所以条件仍是成立的, 件。因为我们没有更改 count 中存储的值,所以条件仍是成立的, printf(),这个程序将永远继续下去, 因此将再次调用 printf(),这个程序将永远继续下去,直到用户终 止运行包含该语句的程序。但是,如果count是从一个大于 止运行包含该语句的程序。但是,如果count是从一个大于 10 的值 开始,那么条件将是不成立的, printf()。 开始,那么条件将是不成立的,因此根本不会调用 printf()。
§10.2.1 while 语句格式 10.
while 语句是一种最常见的重复语句,它可以用于各种编 语句是一种最常见的重复语句, 程情况下。 语句的常规格式如下所示: 程情况下。while 语句的常规格式件) 条件) 语句; 语句;
圆括号内的“条件”与 if-else 语句中的条件的赋值方 if圆括号内的“条件” 式完全相同,不同的是条件的使用方式。 if式完全相同,不同的是条件的使用方式。当 if-else 语句中 的条件成立时, 执行一次该条件后的语句。 的条件成立时,将执行一次该条件后的语句。在 while 语句 只要条件仍保持成立,就会反复执行条件后的语句 反复执行条件后的语句, 中,只要条件仍保持成立,就会反复执行条件后的语句,这自 然意味着, 语句的某些地方, 然意味着,在 while 语句的某些地方,必须有一个将测试条 情况(Case)。 的语句,这实际就是情况 件的值更改为 false 的语句,这实际就是情况(Case)。目前 我们只考虑条件和圆括号后的语句。 我们只考虑条件和圆括号后的语句。
§10.3.1 while 语句应用 10.
为了更清楚一些, 为了更清楚一些,请考虑关系条件 count<=lO 和语句 printf(“%4d”,count);,使用它们, printf(“%4d”,count);,使用它们,我们可以编写下面有效的 while语句 while语句: 语句:
while( count <= 10 ) printf("%4d",count);
请注意,步骤(2)中的 将强制把程序的控制转回给步骤(1)。 中的② 请注意,步骤(2)中的②将强制把程序的控制转回给步骤(1)。 这种将控制转回 while 语句的开始以重新为条件赋值的方式就是程 序循环的方式。 语句实际上是在做自身循环, 序循环的方式。while 语句实际上是在做自身循环,以重新检查条 直到它变得不成立, 件,直到它变得不成立,即在循环过程的某些地方必须要更改所测试 的条件的值,这实际上就是情况(case)。 的条件的值,这实际上就是情况(case)。
合集下载

C语言讲课-while循环结构课件

C语言讲课-while循环结构课件
输入:1
输入:101=0
输出:
sum=101
此程序的功能?
什么情况下两者结果相同?
二、do-while语句
5.3 for语句
语句一般格式 for (表达式1;表达式2;表达式3) 语句
功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。
?
-3
do-while语句
语句一般格式 do 语句 while (表达式); 功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。
do-while循环的算法

2
)直到型循环(
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?
#include <stdio.h>void main( ){ float t=0.0001; int n=0; while(t<=8844) { t=t*2; n++; } printf(“ %d\n”,n);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
#include <stdio.h>void main( ){ float t=0.0001; t=t*2; printf(“ %f”,t);}
while循环控制结构
假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?
学习内容
循环结构的引入
C语言提供了三种循环控制语句,构成了三种基本的循环结构:while语句构成的循环结构do-while语句构成的循环结构for语句构成的循环结构

C语言-while循环

C语言-while循环

C语⾔-while循环循环是结构化程序设计的基本结构之⼀,它和顺序控制、选择结构共同作为各种复杂程序的基本构造单元(摘⾃谭浩强的《C程序设计》。

⼀、while循环:1、使⽤while循环控制输出0到9⼗个数:int i=0; //循环变量赋初值int a=0;while (i<10) { //循环条件scanf("%d",&a);printf("%d\n",a); //{}中的是循环体i++; //循环变量的⾃增,代表的是循环变量的步长}2、循环输⼊⼗个数,求出⼗个数中的最⼤值、最⼩值、和、平均值int i=0;int s=0,a=0;int max=0,min=0;float avg=0;printf("请输⼊10个数字:\n");i=0;s=0;while (i<10) {scanf("%d",&a);s+=a;if (i==0) {min=a;max=a;}else{if (max<=a) {max=a;}if (min>=a) {min=a;}}i++;}avg=s/10;printf("⼗个数之和=%d,最⼤值=%d,最⼩值=%d,平均值=%.1f",s,max,min,avg);3、利⽤循环找出是偶数的两位数,且是平⽅数int i;i=10;while (i<100) {if (!(i%2) && !(sqrt(i)-(int)sqrt(i))) {printf("%d\t",i);}i++;}4、利⽤循环找出能被3整除且不能被7整除的⼤于0⼩于100的数并输出int i;i=3;while (i<100) {if (i%7) {printf("%d\t",i);}i+=3;}5、利⽤循环找出个位⽐⼗位⼤的两位数,并输出:i=10;while (i<100) {if (i/10<i%10) {printf("%d\t",i);count++;}i++;}printf("\n%d\n",count);6、找出个位是奇数,⼗位是偶数的两位数int i;int count=0;i=10;while (i<100) {if ((i/10%2==0) && (i%2==1)) {printf("%d\t",i);count++;}i++;}printf("\n%d\n",count);7、循环实现1+2+3+。

循环结构do-while循环和while循环的区别

循环结构do-while循环和while循环的区别

循环结构do-while循环和while循环的区别
⼀.什么是循环 C语⾔循环结构是指在程序中需要反复执⾏某个功能⽽设置的⼀种程序结构。

它由循环体中的条件,判断继续执⾏某个功能还是退出循环。

根据判断条件,循环结构⼜可细分为先判断后执⾏的循环结构和先执⾏后判断的循环结构。

⼆.do-while循环和while循环的区别
1.循环结构的表达式不同:while循环的结构表达式为:do-while循环结构表达式为:do{循环体;}。

while(表达式){循环体}。

2.执⾏时判断⽅式不同:do-while循环将先运⾏⼀次,因为经过第⼀次do循环后,当检查条件表达式的值时,其值为不成⽴时⽽会退出循环。

保证了⾄少执⾏do{ }内的语句⼀次。

while循环执⾏时当满⾜条件时进⼊循环,进⼊循环后,当条件不满⾜时,执⾏完循环体内全部语句后再跳出(⽽不是⽴即跳出循环)。

3. 执⾏次数不同:do-while循环是先执⾏后判断,执⾏次数⾄少为⼀次。

while循环也是先判断后执⾏,可以不执⾏中间循环体。

4.执⾏末尾循环体的顺序不同:do-while循环是在中间循环体中加⼊末尾循环体,并在执⾏中间循环体时执⾏末尾循环体。

while循环的末尾循环体也是在中间循环体⾥,并在中间循环体中执⾏。

c语言的while循环结构

c语言的while循环结构

c语言的while循环结构
C语言的while循环结构是一种基本的循环结构,它可以重复执行一段代码,直到满足一定条件才停止循环。

while循环结构的语法格式如下:
while (条件表达式)
{
循环体语句;
}
其中,条件表达式是一个布尔表达式,只有当其值为真时,才会继续执行循环体语句。

循环体语句可以是一条或多条语句,它们将一直重复执行,直到条件表达式的值为假为止。

在使用while循环结构时,需要注意以下几点:
1. 条件表达式的值应该在循环过程中能够改变,否则会导致死循环。

2. 循环体语句中应该包含能够改变条件表达式的语句,否则循环将无法停止。

3. 循环体语句中应该避免使用break语句,因为break语句会直接跳出循环,可能导致循环条件无法正常退出。

总之,while循环结构是一个非常实用的工具,可以在编程中帮助我们实现重复执行一段代码的需求。

掌握了while循环结构的使用方法,我们就可以更加灵活地应对不同的编程挑战。

- 1 -。

C语言程序设计(while 循环结构)

C语言程序设计(while 循环结构)
while(grade>=0) /*计算成绩的累加和*/ {
sum+=grade; num++; scanf("%lf",&grade); } if (num) printf(“\n%d 人的平均成绩:%.1f”,num,sum/num);/*输出结果*/ else printf(“\n 平均成绩为 0!”);
int num=0; /*用 num 统计输入成绩的学生人数,以便统计学生的平均分数*/ double sum=0, grade; /*用 sum 记录成绩的累加和,初值为 0,grade 接受键盘输入的成绩*/
printf(“请依次输入学生的考试成绩,空格间隔,并以负数结束输入\n”); scanf(“%lf”,&grade);
return 0; }
注意: (1)while 语句中的表达式一般是关系表达或逻辑表达式,但原则上可以是任何合法的 表达式; (2)循环条件的选择应该避免死循环,即无法结束循环体的执行;表达式的值每次循 环后都应该有所改变,否则也会引起死循环。
假 表式?
真 语句
循环体外语句 图 3-7 while 循环结构的执行过程
【例 3-11】 从键盘输入若干名学生的成绩,计算平均分。 分析:这是一个累加求和的问题,将输入的成绩依次累加(用循环结构实现,循环条件 是成绩 grade>=0),完成累加后再将累加和除以学生的人数,算出平均分。
/*程序名:3_11.c*/ /*功能:键盘输入若干学生的成绩,计算平均成绩并输出*/ #include <stdio.h> int main() {
1.while 循环结构
while 循环结构的一般形式为: while(表达式) 语句;

c语言的while循环结构

c语言的while循环结构

C语言的while循环结构什么是循环结构循环结构是编程语言中的一种控制结构,允许程序重复执行一段代码多次,直到某个条件满足才停止。

循环结构可以节省代码的编写量,提高程序的执行效率。

在C语言中,提供了几种不同类型的循环结构,其中最基本和常用的是while循环结构。

while循环的语法while (condition){// 循环体代码块}while循环的语法由两部分组成。

第一部分是循环条件,用于判断循环是否继续执行。

条件可以是任何返回布尔值的表达式,当条件为真(非零)时,循环继续执行;当条件为假(零)时,循环停止。

第二部分是循环体,即需要重复执行的代码块。

循环体必须用花括号{}括起来,可以包含任意多个语句。

在执行循环时,首先判断循环条件的布尔值,如果为真,则执行循环体的代码块;如果为假,则跳出循环,继续执行循环后面的代码。

需要注意的是,如果循环条件一开始就为假,则循环体的代码块将不会执行,直接跳出循环。

while循环的执行流程1.判断循环条件的布尔值。

2.如果循环条件为真,则执行循环体的代码块。

3.执行完循环体后,再次判断循环条件的布尔值。

4.如果循环条件仍为真,则再次执行循环体的代码块。

5.重复步骤3和4,直到循环条件为假,跳出循环。

while循环的示例代码以下是一个简单的示例代码,展示了while循环的用法:#include <stdio.h>int main(){int count = 0;while (count < 5){printf("Count: %d\n", count);count++;}return 0;}输出结果:Count: 0Count: 1Count: 2Count: 3Count: 4在上面的代码中,定义了一个变量count并初始化为0。

while循环的条件是count < 5,即count小于5时循环继续执行。

循环体内部使用printf函数打印出当前的count值,并使用count++将count自增1。

【C语言】-循环结构-while语句

【C语⾔】-循环结构-while语句while语句:while循环可实现“当型”循环,即当条件成⽴时,执⾏循环体。

适合⽆法确定循环执⾏次数的情况。

while (表达式){循环语句}注意:表达式为循环控制条件,⼀般是关系表达式或逻辑表达式的形式。

循环控制条件也可以是任意合法的C语⾔表达式,例如:while (1)也是合法的,但注意尽量不要这样⽤,因为可能会导致死循环。

执⾏时,如果程序死循环,可以使⽤ctrl+break组合键结束程序。

循环语句也可以是空语句。

循环体中的空语句可以表⽰循环不做任何操作,可能只是为了消耗CPU的计算控件,也有可能是为了占位暂时使⽤空语句的形式。

多条循环语句必须⽤花括号括起来,以复合语句的形式出现。

例:i = 1;while (i <= 100)putchar('+');i++;程序原意是想输出100个“+”,但由于循环体没有使⽤花括号括起来,所以导致系统认为只有putchar('+');这⼀条语句是循环语句,i++;不属于循环体,所以i的值总是为1。

那么i永远⼩于等于100,所以这个循环将永远不结束,是⼀个死循环。

while语句执⾏过程:注意:循环体有可能⼀次也不执⾏。

循环在下列情况,将推出循环:1)、条件表达式不成⽴(为0)时。

2)、在循环体中遇到break、return等语句时。

避免出现⽆限循环,⼜叫死循环。

为了避免死循环,循环体中应该有使循环趋近于结束的语句。

do while语句:可以实现”直到型“循环。

就是执⾏循环体,直到条件不再成⽴时退出循环。

do while⼀般形式:do{循环语句} while (表达式);do while循环的执⾏流程:。

c语言中do while的用法

c语言中do while的用法C语言中,do-while循环语句是一种先执行循环体再判断循环条件的循环结构。

其基本语法格式如下:```do {// 循环体语句} while (循环条件);```其中,`do`关键字表示开始一个do-while循环,后面跟着一对花括号`{}`,用来包含需要重复执行的一组语句,即“循环体”;`while`关键字表示循环条件,后面跟着一个表达式或变量名,用来控制循环是否继续执行。

使用do-while循环时需要注意以下几点:1. 循环体至少会被执行一次,因为它在判断之前已经被执行了一次;2. 循环条件必须是一个能够返回布尔值的表达式或变量;3. 循环体内部必须改变控制循环条件的变量或表达式的值,否则会造成死循环;4. do-while循环通常用于需要先执行一次操作后再根据结果判断是否继续重复操作的情况。

下面是一个简单的例子,演示了如何使用do-while循环计算1到10的和:```c#include <stdio.h>int main() {int i = 1, sum = 0;do {sum += i;i++;} while (i <= 10);printf("1到10的和为:%d", sum);return 0;}```在上述代码中,我们使用了一个变量`i`来控制循环次数,另一个变量`sum`用来累加每次循环的结果。

在do-while循环体内部,我们先将当前的`i`值加到`sum`中,然后再将`i`自增1。

当循环条件不满足时,即`i > 10`时,程序跳出循环并输出最终的结果。

除了基本语法外,do-while循环还可以与其他控制语句结合使用,如break、continue等。

例如,在上述例子中如果我们想要在累加到5时停止计算,则可以在循环体内部添加一个判断语句:```c#include <stdio.h>int main() {int i = 1, sum = 0;do {if (i > 5) {break; // 跳出循环}sum += i;i++;} while (i <= 10);printf("1到5的和为:%d", sum);return 0;}```在上述代码中,我们添加了一个if语句用来判断当前的`i`是否大于5。

c语言while循环例子

c语言while循环例子一、while循环的基本语法在C语言中,while循环是一种基本的循环结构,它的基本语法如下所示:```while (条件表达式){循环体;}```其中,条件表达式是一个逻辑表达式,用于判断循环是否继续执行。

当条件表达式的值为真时,执行循环体;当条件表达式的值为假时,跳出循环。

二、使用while循环的实际例子1. 打印1到10的数字```#include <stdio.h>int main(){int i = 1;while (i <= 10) {printf("%d ", i); i++;}return 0;}```运行结果:```1 2 3 4 5 6 7 8 9 10 ```2. 求1到100的和```#include <stdio.h>int main(){int sum = 0;int i = 1;while (i <= 100) {sum += i;i++;}printf("1到100的和为:%d\n", sum); return 0;}```运行结果:```1到100的和为:5050```3. 计算一个整数的阶乘```#include <stdio.h>int main(){int n;int factorial = 1;printf("请输入一个正整数:");scanf("%d", &n);int i = 1;while (i <= n){factorial *= i;i++;}printf("%d的阶乘为:%d\n", n, factorial); return 0;}```运行结果:```请输入一个正整数:55的阶乘为:120```4. 判断一个数是否为素数```#include <stdio.h>#include <stdbool.h>bool isPrime(int n){if (n <= 1){return false;}int i = 2;while (i <= n / 2){if (n % i == 0){return false;}i++;}return true;}int main(){int n;printf("请输入一个整数:"); scanf("%d", &n);if (isPrime(n)){printf("%d是素数\n", n); }else{printf("%d不是素数\n", n); }return 0;}```运行结果:```请输入一个整数:1717是素数```5. 判断一个数是否为回文数```#include <stdio.h>#include <stdbool.h>bool isPalindrome(int n){int temp = n;int reverse = 0;while (temp != 0){reverse = reverse * 10 + temp % 10; temp /= 10;}return reverse == n;}int main(){int n;printf("请输入一个整数:");scanf("%d", &n);if (isPalindrome(n)){printf("%d是回文数\n", n);}else{printf("%d不是回文数\n", n);}return 0;}```运行结果:```请输入一个整数:1232112321是回文数```6. 生成斐波那契数列```#include <stdio.h>void fibonacci(int n){int first = 0, second = 1;printf("斐波那契数列前%d项为:", n); while (n > 0){printf("%d ", first);int temp = first + second;first = second;second = temp;n--;}printf("\n");}int main(){int n;printf("请输入要生成斐波那契数列的项数:"); scanf("%d", &n);fibonacci(n);return 0;}```运行结果:```请输入要生成斐波那契数列的项数:10斐波那契数列前10项为:0 1 1 2 3 5 8 13 21 34 ```7. 求两个数的最大公约数```#include <stdio.h>int gcd(int a, int b){while (b != 0){int temp = a % b;a = b;b = temp;}return a;}int main(){int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);printf("%d和%d的最大公约数为:%d\n", a, b, gcd(a, b)); return 0;}```运行结果:```请输入两个整数:24 3624和36的最大公约数为:12 ```8. 判断一个数是否为完数```#include <stdio.h>bool isPerfectNumber(int n) {int sum = 0;int i = 1;while (i < n){if (n % i == 0){sum += i;}i++;}return sum == n;}int main(){int n;printf("请输入一个整数:"); scanf("%d", &n);if (isPerfectNumber(n)){printf("%d是完数\n", n); }else{printf("%d不是完数\n", n); }return 0;}```运行结果:```请输入一个整数:66是完数```9. 判断一个数是否为质数的幂```#include <stdio.h>#include <stdbool.h>#include <math.h>bool isPrime(int n){if (n <= 1){return false;}int i = 2;while (i <= sqrt(n)){if (n % i == 0){return false;}i++;}return true;}bool isPowerOfPrime(int n) {if (n <= 1){return false;}int i = 2;while (i <= n){if (isPrime(i)){int temp = i;while (temp <= n) {if (temp == n) {return true;}temp *= i;}}i++;}return false;}int main(){int n;printf("请输入一个整数:");scanf("%d", &n);if (isPowerOfPrime(n)){printf("%d是质数的幂\n", n); }else{printf("%d不是质数的幂\n", n); }return 0;}```运行结果:```请输入一个整数:2727是质数的幂```10. 判断一个数是否为水仙花数```#include <stdio.h>#include <stdbool.h>#include <math.h>bool isArmstrongNumber(int n) {int temp = n;int numDigits = 0;while (temp != 0){temp /= 10;numDigits++;}temp = n;int sum = 0;while (temp != 0){int digit = temp % 10;sum += pow(digit, numDigits); temp /= 10;}return sum == n;}int main(){int n;printf("请输入一个整数:");scanf("%d", &n);if (isArmstrongNumber(n)){printf("%d是水仙花数\n", n); }else{printf("%d不是水仙花数\n", n); }return 0;}```运行结果:```请输入一个整数:153 153是水仙花数```。

c语言循环控制语句

c语⾔循环控制语句循环控制结构(⼜称重复结构)是程序中的另⼀个基本结构.在实际问题中,常常需要进⾏⼤量的重复处理,循环结构可以使我们只写很少的语句,⽽让计算机反复执⾏,从⽽完成⼤量类同的计算.C语⾔提供了while语句、do...while语句和for语句实现循环结构.3.4.1while语句while语句是当型循环控制语句,⼀般形式为:while<表达式>语句;语句部分称为循环体,当需要执⾏多条语句时,应使⽤复合语句.while语句的流程图见图3-8,其特点是先判断,后执⾏,若条件不成⽴,有可能⼀次也不执⾏.[例3-11]求n!分析:n!=n*(n-1)*(n-2)*..2*1,0!=1.即S0=1,Sn=Sn-1*n.可以从S0开始,依次求出S1、S2、...Sn.统⼀令S等于阶乘值,S的初值为0!=1;变量i为计数器,i从1变到n,每⼀步令S=S*i,则最终S中的值就是n!.流程图见图3-9,程序如下:考察图3-9中循环部分的流程图可以看出,在循环前各变量应有合适的值(s=1),另外,控制循环结束的变量(此处为i)必须在循环体中被改变,否则,循环将⽆限进⾏下去,成为死循环.本题中,将多项式的每⼀项⽤t表⽰,s代表符号,在每⼀次循环中,只要改变s、n的值,就可求出每⼀项t.⼀般情况下,while型循环最适合于这种情况:知道控制循环的条件为某个逻辑表达式的值,⽽且该表达式的值会在循环中被改变,如同例3-12的情况⼀样.3.4.2do...while语句在C语句中,直到型循环的语句是do...while,它的⼀般形式为:do语句while<表达式>其中语句通常为复合语句,称为循环体.do...while语句的流程图见图3-10,其基本特点是:先执⾏后判断,因此,循环体⾄少被执⾏⼀次.但需要注意的是,do...while与标准的直到型循环有⼀个极为重要的区别,直到型循环是当条件为真时结束循环,⽽do...while 语句恰恰相反,当条件为真时循环,⼀旦条件为假,⽴即结束循环,请注意do...while语句的这⼀特点.例[3-13]计算sin(x)=x-x3/3!+x5/5!-x7/7!+...直到最后⼀项的绝对值⼩于1e-7时为⽌.分析:这道题使⽤递推⽅法来做.让多项式的每⼀项与⼀个变量n对应,n的值依次为1,3,5,7,...,从多项式的前⼀项算后⼀项,只需将前⼀项乘⼀个因⼦:(-x2)/((n-1)*n)⽤s表⽰多项式的值,⽤t表⽰每⼀项的值,程序如下:#include# includem a i n ( ){double s,t,x ;int n ;printf("please input x :");scanf("%lf",&x);t=x;n=1;s=x;do{n=n+2;t=t*(-x*x)/((float)(n)-1)/(float)(n);s=s+t;}while(fabs(t)>=1e-7);printf("sin(%f)=%lf,"x,s);}运⾏结果如下:RUN?pleaseinputx:1.5753?sin(1.575300)=0.999990RUN?pleaseinputx:-0.65?sin(-0.650000)=-0.6051863.4.3for语句for语句是循环控制结构中使⽤最⼴泛的⼀种循环控制语句,特别适合已知循环次数的情况.它的⼀般形式为:for(<表达式1>;<表达式2>;<表达式3>)语句for语句很好地体现了正确表达循环结构应注意的三个问题:1)控制变量的初始化.2)循环的条件.3)循环控制变量的更新.表达式1:⼀般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:⼀般为赋值表达式,给控制变量增量或减量.语句:循环体,当有多条语句时,必须使⽤复合语句.for循环的流程图如图3-11,其执⾏过程如下:⾸先计算表达式1,然后计算表达式2,若表达式2为真,则执⾏循环体;否则,退出for 循环,执⾏for循环后的语句.如果执⾏了循环体,则循环体每执⾏⼀次,都计算表达式3,然后重新计算表达式2,依此循环,直⾄表达式2的值为假,退出循环.[例3-14]计算⾃然数1到n的平⽅和.# include# includemain ( ){int i;float s;printf("please input n :");scanf("%d",&n);s=0.0;for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf("1*1+2*2+...+%d*%d=%f\,nn",n,s);}运⾏结果如下:RUNplease input n:51*1+2*2+...+5*5=55.000000for语句的⼏种格式for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略.a.for(;;)语句;这是⼀个死循环,⼀般⽤条件表达式加break语句在循环体内适当位置,⼀旦条件满⾜时,⽤break语句跳出for循环.例如,在编制菜单控制程序时,可以如下:for(;;){printf("please input choice(Q=Exit):");显/*⽰菜单语句块:*/scanf("%c",&ch);if(ch=='Q')or(ch=='q')break;语/*句段*/}b.for(;表达式2;表达式3)使⽤条件是:循环控制变量的初值不是已知常量,⽽是在前⾯通过计算得到,例如:i=m-n;for(;ic.for(表达式1;表达式2;)语句⼀般当循环控制变量⾮规则变化,⽽且循环体中有更新控制变量的语句时使⽤.例如:for(i=1;i<=100;){i=i*2+1;}d.for(i=1,j=n;i在for语句中,表达式1、表达式3都可以有⼀项或多项,如本例中,表达式1同时为i和j 赋初值,表达式3同时改变i和j的值.当有不⽌⼀项时,各项之间⽤逗号“,”分隔.另外,C语⾔还允许在循环体内改变循环变量的值,这在某些程序的设计中是很有⽤的.到此,我们已经学习了C语⾔中三种循环控制语句while、do...while和for语句,下⾯再讨论两个问题:三种语句的选⽤同⼀个问题,往往既可以⽤while语句解决,也可以⽤do...while或者for语句来解决,但在实际应⽤中,应根据具体情况来选⽤不同的循环语句,选⽤的⼀般原则是:1)如果循环次数在执⾏循环体之前就已确定,⼀般⽤for语句;如果循环次数是由循环体的执⾏情况确定的,⼀般⽤while语句或者do...while语句.2)当循环体⾄少执⾏⼀次时,⽤do...while语句,反之,如果循环体可能⼀次也不执⾏,选⽤while语句.循环的嵌套⼀个循环的循环体中有另⼀个循环叫循环嵌套.这种嵌套过程可以有很多重.⼀个循环外⾯仅包围⼀层循环叫⼆重循环;⼀个循环外⾯包围两层循环叫三重循环;⼀个循环外⾯包围多层循环叫多重循环.三种循环语句for、while、do...while可以互相嵌套⾃由组合.但要注意的是,各循环必须完整,相互之间绝不允许交叉.如下⾯这种形式是不允许的:do{for(;;){......}while();}[例3-15]打印8⾏7列的星形矩阵.流程图见图3-12,程序如下:#includemain(){inti,j;for(i=0;i<8,i++)/*控制⾏*/{for(j=0;j<7>;j++)/*控制列*/printf("*");printf("\n");/*换⾏*/}}打印结果如下:RUN********************************************************将程序中for(j=0;j<7;j++)改为for(j=0;j打印三⾓形.3.4.4break与continue语句有时,我们需要在循环体中提前跳出循环,或者在满⾜某种条件下,不执⾏循环中剩下的语句⽽⽴即从头开始新的⼀轮循环,这时就要⽤到break和continue语句.1.break语句在前⾯学习switch语句时,我们已经接触到break语句,在case⼦句执⾏完后,通过break 语句使控制⽴即跳出switch结构.在循环语句中,break语句的作⽤是在循环体中测试到应⽴即结束循环时,使控制⽴即跳出循环结构,转⽽执⾏循环语句后的语句.[例3-16]打印半径为1到10的圆的⾯积,若⾯积超过100,则不予打印.#includemain(){intr;float area;for(r=1;r<=10;r++){area=3.141593*r*r;if(area>100.0)break;printf("square=%f\n",area);}printf("nowr=%d\n",r);}运⾏程序:RUNsquare=3.141593square=12.566373square=28.274338square=50.265488square=78.539825nowr=6当break处于嵌套结构中时,它将只跳出最内层结构,⽽对外层结构⽆影响.2.continue语句continue语句只能⽤于循环结构中,⼀旦执⾏了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新⼀轮循环.[例3-17]计算半径为1到15的圆的⾯积,仅打印出超过50的圆⾯积.#includemain(){int r;float area;for(r=1;r<=5;r++){area=3.141593*r*r;if(area<50.0)continue;printf("square=%f",area);}}结果为:RUNsquare=50.265488square=78.539825同break⼀样,continue语句也仅仅影响该语句本⾝所处的循环层,⽽对外层循环没有影响.3.4.5程序应⽤举例[例3-18]验证哥德巴赫猜想:任⼀充分⼤的偶数,可以⽤两个素数之和表⽰,例如:4=2+26=3+3......98=19+79哥德巴赫猜想是世界著名的数学难题,⾄今未能在理论上得到证明,⾃从计算机出现后,⼈们就开始⽤计算机去尝试解各种各样的数学难题,包括费马⼤定理、四⾊问题、哥德巴赫猜想等,虽然计算机⽆法从理论上严密地证明它们,⽽只能在很有限的范围内对其进⾏检验,但也不失其意义.费马⼤定理已于1994年得到证明,⽽哥德巴赫猜想这枚数学王冠上的宝⽯,⾄今⽆⼈能及.分析:我们先不考虑怎样判断⼀个数是否为素数,⽽从整体上对这个问题进⾏考虑,可以这样做:读⼊⼀个偶数n,将它分成p和q,使n=p+q.怎样分呢?可以令p从2开始,每次加1,⽽令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试.其基本算法如下:1)读⼊⼤于3的偶数n.2)P=13)do{4)p=p+1;q=n-p;5)p是素数吗?6)q是素数吗?7)}whilep、q有⼀个不是素数.8)输出n=p+q.为了判明p、q是否是素数,我们设置两个标志量flag p和flag q,初始值为0,若p是素数,令flag p=1,若q是素数,令flagq=1,于是第7步变成:7)}while(flag p*flag q==0);再来分析第5、第6步,怎样判断⼀个数是不是素数呢?素数就是除了1和它⾃⾝外,不能被任何数整除的整数,由定义可知:2、3、5、7、11、13、17、19等是素数;1、4、6、8、9、10、12、14等不是素数;要判断i是否是素数,最简单的办法是⽤2、3、4、??i-1这些数依次去除i,看能否除尽,若被其中之⼀除尽,则i不是素数,反之,i是素数.但其实,没必要⽤那么多的数去除,实际上,⽤反证法很容易证明,如果⼩于等于i的平⽅根的数都除不尽,则i必是素数.于是,上述算法中的第5步、第6步可以细化为:第5)步p是素数吗?flag p=1;for(j=2;j<=[sqrt(p)];j++)ifp除以j的余数=0{flag p=0;break;}第6)步q是素数吗?flag q=1;for(j=2;j<=[sqrt(q)];j++)ifq除以j的余数=0{flag q=0;break;}程序如下:#include#includemain(){intj,n,p,q,flag p,flag q;printf("please input n:");scanf("%d",&n);if(((n%2)!=0)||(n<=4))printf("inputdataerror!\n");else{p=1;do{p=p+1;q=n-p;flag p=1;for(j=2;j<=(int)(floor(sqrt((double)(p))));j++) {if((p%j)==0){flag p=0;break;}}flag q=1;for(j=2;j<=(int)(floor(sqrt((double)(q))));j++) { if((q%j)==0){flag q=0;break;}}}while(flag p*flag q==0);printf("%d=%d+%d\n,"n,p,q);}}程序运⾏结果如下:RUN?please input n:88=3+5RUNplease input n:98 98=19+79RUNplease input n:9 input data error!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档