当前位置:文档之家› C语言循环结构小结

C语言循环结构小结

C语言循环结构小结
C语言循环结构小结

[C语言问题求解]

作者:苏丽媛

修订:李昕,高绍姝

1While循环

当要进行的操作相同,数据不同,但是这些数据可以形成某种序列时,考虑采用循环处理。

1.1while循环架构

while(条件)

{

语句;

}

1.2循环与选择结构的区别

循环是多次的(条件满足,进入循环,循环结束后返回,再次判断条件是否满足,不断循环,直到条件不满足,执行后继语句),选择结构仅仅是一次的(判断条件满足后执行,执行后结束,并开始执行后继语句)

1.3循环三要素

循环控制变量的初始化(初始化相当于设置了一个开始的值)

循环条件(条件相当于设置了一个结尾)

循环控制变量的改变(一定使之从开始到结尾的方向进行)

1.4例:

#include

#include

int sum(int n)

{

int result=0;

int i=1; ///i用来控制循环,称为循环控制变量//循环变量的初始化

while(i<=n) ///循环条件

{

result = result + i;

i++; ///即i=i+1//循环控制变量的改变

}

return result;

}

int main()

{

int n;

scanf("%d",&n);

printf("%d\n",sum(n));

return 0;

}

注:当循环结束后,循环控制变量的值是第一个不满足条件的值。

2for循环

2.1for循环结构

for(循环变量的初始化;循环的条件;循环的控制变量的改变)

{

循环体;

}

for循环的小括号中,有且仅有两个分号,分割了循环的三要素。

for()后不能接分号,分号代表空语句,如果接了分号,意味着循环体不再属于循环,整个循环只循环了一条空语句。

循环的条件判断比循环控制变量的改变多一次(多的一次是条件不成立的第一个数)。

建议:知道循环次数采用for循环,反之,采用while循环。

循环中定义的控制变量属于局部变量,出了循环便不可用了,如果出了循环仍想使用该变量,就必须重新定义。

2.2例:

#include

int sum(int n)

{

int result=0;

for(int i=1;i<=n;i++)

{

result = result + i;

}

return result;

}

int main()

{

int n;

scanf("%d",&n);

printf("%d\n",sum(n));

return 0;

}

3理解循环

3.1例:<求0到200中的所有整数和>以及<求101到200间的所有奇数和>

循环主要分为“变的部分(数据)”和“不变的部分(处理过程,即循环体)”。掌握循环,最重要的就是掌握变与不变的区分。

循环中要求改变的数据必须形成序列,必须有规律。

循环的变量初始化决定了循环的开始,循环条件决定了循环的结束,循环控制变量的改变决定了循环的步长以及变化规律

程序设计分三种基本结构:顺序结构,选择结构和循环结构,循环结构最复

杂但是又很基础,大家从变与不变两个角度去深入体会循环的作用。

int n;

scanf("%d",&n);

printf("%.4f\n",sum(n));

return 0;

}

4.3小结

一方面可以通过数学公式,极大地提高编程的效率;但另一方面,因为数学是理论科学,不关注实践,但是计算机是非常注重实践的,因此对于数学上的余计算要尽量避免。

当需要进行一定的实现是,采取技巧避免无效运算。

(1)编程需要考虑溢出问题,数学不需要。

(2)pow为数学上的常用方法,但是在编程时会引入浮点比较的问题,不建

议使用。

5整数分解

5.1例:<对不知位数的n进行整数分解>以及<二进制转化,整数分解为二进制>

注:因为不知道n的位数,所以尽量

采用while循环

除n取余法,实现十进制整数与任意进制之间的转换

#include

#include

int divide(int n,int system) ///引入一个新的参数,实现“system”进制的转换{

int i=0;

while(n>0)

{

int a = n%system;

printf("%d\n",a);

n/=system; ///n=n/system;

i++;

}

return i;

}

int main()

{

int n;

scanf("%d",&n);

printf("divide number %d\n",divide(n,数字));//数字为多少就是几进制

return 0;

}

6浮点比较

整数的进制转化采用除n取余法,小数的进制转化采用乘n取整法。整数的进制转化的倒序的,小数的进制转化是正序的。

6.1例:<十进制小数转化为任意进制(二进制)>

#include

#include

void fdivide(double n,int system)

{

for(int i=0; i<6; i++) //保留6位小数

{

n=n*system; ///system为进制

int a = (int)n;

printf("%d\n",a);

n -= a; ///n = n - a;

}

}

int main()

{

double n;

scanf("%lf",&n);

fdivide(n,2);

return 0;

}

在而二进制中,除了2n以及2n之和以外的任意小数的二进制转化小数部分

都是无限的,而计算机的存储空间是有限的,所以我们需要指定转化后的小数位数。上述程序输入0.7转化为2进制,单步调试,第一次循环计算0.7*2观察Watchs中n的数值为1.399999999并不等于1.4,只是无限接近于1.4,所以使用计算机中的浮点数时要特别注意,浮点数是不能进行精确存储的,同时也是不能精确比较的。

浮点数比较若写成if(a == 0.1)这样比较可能永远不会变成true,使用时要避免浮点数的直接比较,正确的比较方式为if(fabs(a - 0.1)<1E-6),其中1E-6表示10的负6次幂,是计算机中的科学计数法。

7嵌套循环

注意:嵌套循环中,内循环和外循环的控制变量一定要不同。利用单步调试可以清楚的看到,内循环先循环,外循环后循环,即外循环的循环控制变量改变一次,内循环的循环控制变量从头到尾完整的循环一遍。

7.1例:<输出一个由*组成的正方形>

当n=5时,图形形状:

*****

*****

*****

*****

*****

#include

#include

void star(int n)

{

for(int a = 0; a

{

for(int i=0; i

printf("*");

printf("\n"); ///每完成一次内存循环,输出一行*后打印一个回车}

}

int main()

{

int n;

scanf("%d",&n);

star(n);

return 0;

}

7.2例:<输出一个由*组成的三角形>

外循环控制输出的行数,内循环控制每一行输出*的个数。借助不断变化的外循环循环控制变量,定义内循环控制变量取值范围,使得内循环循环次数可变,实现每一行可以输出的*个数可变。

8嵌套循环的初始化

嵌套循环中的常见错误:内循环中相关变量的初始化问题。只有内循环使用的变量一定要定义在“内循环的外部,外循环的内部”

8.1 例:<输出数字三角形>

凡是计数循环,建议使用for 循环,从而减少出错概率。同时,为了程序结构更清晰,将内循环部分单独写成一个函数,每一个变量都是函数的内部变量,就不容易写错了,程序改写为:

#include #include

void line(int n) {

for(int j=1; j<=n; j++) printf("%d",j); printf("\n"); }

#include #include void star(int n) {

int j=1;

for(int a=1; a<=n; a++) {

while(j<=a) {

printf("%d",j); j++; }

printf("\n"); } }

int main() {

int n;

scanf("%d",&n); star(n); return 0; }

该代码只能每行输出一个数

#include #include void star(int n) {

for(int a=1; a<=n; a++) {

int j=1; while(j<=a) {

printf("%d",j); j++; }

printf("\n"); } }

int main() {

int n;

scanf("%d",&n); star(n); return 0; }

该代码正确输出数字三角形

void star(int n)

{

for(int a=1; a<=n; a++)

line(a);

}

int main()

{

int n;

scanf("%d",&n);

star(n);

return 0;

}

9穷举法

在编程过程中是将等号右边的数值赋值给等号左边的变量。所以对于解方程问题不能简单的列上方程,让计算机计算,而是需要将求解公式给计算机,直接计算得到结果。穷举法即列举所有可能值并将值都进行带入,把满足条件的值进行计算。

穷举法结构:

for() ///用循环列举所有可能的解//可能是一重循环也可能是多重嵌套循环

{

if() ///用选择结构挑选满足条件的解

{

}

}

9.1例:知码开门< 6.10 马戏团表演>

【题目描述】

一个马戏团表演,n 个座位全满,全部门票收入是120 元,现在知道,男人每人5 元,女人每人 2 元,小孩每人 1 角。根据总人数,计算出男人、女人和小孩各多少人。

【输入】

总人数n。

【输出】

男人、女人和小孩人数,若n 人无法满足条件,则输出“No output”。

分析:该题目三个变量,两个方程,按照正常的解方程方法无法得到方程的根,需要用穷举法。

#include

void asd(int n)

{

int flag = 0;

for(int i = 0; i <= n && i <= 120 / 5; i++)

for(int j = 0; j <= n && j <= 120 / 2; j++)

{

int k = n - i - j;

if(i * 50 + j * 20 + k == 1200) ///扩大倍数,避免浮点数比较

{

flag = 1;

printf("%d %d %d\n", i, j, k);

}

}

if(!flag)

printf("No output\n");

}

int main()

{

int n;

scanf("%d", &n);

asd(n);

return 0;

}

10素数判断

break一定出现在循环中,另外,虽然没有语法规定,但break都是要与条件判断搭配使用的,不会单独出现。

素数判断,一个结果是在循环里,一个结果是在循环后,千万不要在循环里写出if-else的搭配,因为循环未结束,结果一定错误。

对于循环后结果的判断,有两种方法:1)标记变量法,2)直接判断循环结束条件。

判断素数的程序架构非常重要,要熟练掌握这种结构。

10.1例:<判断一个数是否为素数>

#include

#include

int prime(int n)

{

int flag = 0; //标记变量法,要写两个不同的值,通过值是否被改变得到break是否被执行

for(int i = 2; i < n; i++)

{

if(n % i == 0)

{

flag = 1; //如果flag=1未被执行,则break也未被执行

break; //退出循环,与选择结构搭配使用

}

}

if(flag == 0)

return 1;

else

return 0;

}

int main()

{

c语言三种循环结构

任务1:控制LED 小灯亮灭 1.流程图如下: 2.程序如下: #include #define uint unsigned int #define uchar unsigned char void main() //主函数 { while(1) //while死循环 { if((P3&0x10)==0) //判断P3口上的八位与00010000相与后是否等于0,若是, 则P3.4口为低电平,也就是接在P3.4口上的开关按上了。 P1=0xfe; //当P3.4口上的开关按上了,那么就由用户使接在P1.0口 上的灯亮。 else if((P3&0x20)==0) //和上面的一样,判断P3.5口上的开关是否按上了。 P1=0Xfd; //当P3.5口上的开关按上了,点亮接在P1.1口上的灯。 else if((P3&0x40)==0) //判断P3.6口的开关是否按上了。

P1=0xfb; //当P3.6口上的开关按上了,点亮接在P1.2口上的灯。 else if((P3&0x80)==0) //判断P3.7口的开关是否按上了。 P1=0xf7; //当P3.7口上的开关按上了,点亮接在P1.3口上的灯。 else P1=0xff; //当没有按键按下时,P1口上的全部灯都不亮。 } } 3.仿真结果如下: 4.仿真结果分析: 从仿真图以及程序可以看出,当P3.4口上的开关按下时,不管其它三个开关有没有按下,只有受P3.4口开关控制的那个灯(p1.0口上的灯)才亮,以此类推,当只有P3.7口上的开关按下时,P1.3口上的灯才亮,而其它灯不亮,因为控制其它灯的按键没有按下,接在其它灯的IO口处于高电平状态。

C语言循环结构教学设计方案

《C语言循环结构》教学设计方案 一、教学内容分析 循环结构是面向过程编程中三种结构中最重要的一种结构,学好它是学好这门课程的关键。循环结构的实质是重复执行一系列语句,这种重复性是在循环条件的有效控制之下完成的。程序的关键在于如何控制循环的条件,在恰当的时机执行循环或退出循环。 二、学习者分析 循环结构是一种比较复杂的结构,在C语言中,循环结构主要包括for、while和do-while 三种语句,其中for语句的应用更为普遍一些。循环语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说,难度却不小。在一堂课的设计过程中,引例的作用至关重要。一个好的引例能把抽象问题简单化、具体化,有利于学生理解掌握。在学习循环结构时可先利用现实生活中的一些具体实例来说明什么是循环以及为什么要研究循环让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,总结出程序设计中每一种程序设计结构的本质及适合解决的问题,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。 三、教学目标 1.知识与能力 掌握循环构造的基本特点;区分多种不同类型循环结构的运行过程;掌握循环结构的格式及应用方法。 2.过程与方法 首先学会区分多种不同类型的循环结构,而后学会定义及应用方法,利用上机熟练应用技巧。 3.情感态度与价值观 我们必须抱有自己想学习的心态,多去问老师一些问题,那么你的漏洞将会越来越少,程序量和代码量才会越来越多。

四、重点难点及处理 1.循环语句的的分类和定义 For循环、while循环和do-while循环 特点:在一个程序中可以通过变换语句来使用不同的循环语句,而不改变程序 的功能。 2.循环语句的引用 例如:要从1累加到100 使用For循环:for(sum,=0,i=1;i<=100;i++) sum=sum+i 使用while循环:while(i<=100) sum=sum+i 使用do-while循环:do {sum=sum+i;} while(i<=100) 五、教学准备 1. PPT教学课件 2. 实验操作:Visual C++6.0软件平台,PC电脑,教学机房,网络课堂。 六、教学思路(教学策略等) 在一堂课的设计过程中,引例的作用至关重要。一个好的引例能把抽象问题简单化、具体化,有利于学生理解掌握。在学习循环结构时可先利用现实生活中的一些具体实例来说明什么是循环以及为什么要研究循环。现在我们可以提出一个问题:在计算机程序设计的世界里是否也有类似的这种相同操作重复出现的问题呢?利用最简单累加求和的例子。 例:求1+2+3+4+5+…+100的和。 下面就可以引出本节课的重点,通过分别使用For循环、while循环和do-while循环来完成本程序,我们在整个过程中都做着重复的、相同的事情,也就是前面所说的循环,在试着写出比较简单的程序时,可以试着选择素数或者奇数累加来增加难度,还可以使得让学生接受和探究双重循环。 七、教学过程 教学引入 掌握掌握循环结构的基本特点:for语句、while语句和do-while语句 如何计算1+2+3+4+…+100

C语言 循环结构程序设计模拟题

第五章循环结构程序设计 一、选择题 1.while循环语句中,while后一对圆括号中表达式的值决定了循环体是否进行,因此,进入while循环后,一定有能使此表达式的值变为的操作,否则,循环将会无限制地进行下去。(0级) A)0 B)1 C)成立D)2 2.在do-while循环中,循环由do开始,用while结束;必须注意的是:在while表达式后面的不能丢,它表示do-while语句的结束。(0级) A)0 B)1 C);D), 3.for语句中的表达式可以部分或全部省略,但两个不可省略。但当三个表达式均省略后,因缺少条件判断,循环会无限制地执行下去,形成死循环。(0级)A)0 B)1 C);D), 4.程序段如下 int k=-20; while(k=0) k=k+1; 则以下说法中正确的是。(1级) A)while循环执行20次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次5.程序段如下 int k=1; while(!k==0) {k=k+1;printf("%d\n",k);} 说法正确的是。(1级) A)while循环执行2次B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次6.以下for循环是。(1级) for(a=0,b=0;(b!=123)&&(a<=4);a++) A)无限循环B)循环次数不定C)执行4次D)执行5次7.在下列程序中,while循环的循环次数是。(1级) main( ) { int i=0; while(i<10) {if(i<1) continue; if(i= =5) break; i++; } ...... } A)1 B)10 C)6 D)死循环、不能确定次数8.程序段如下 int k=0; while(k++<=2) printf("%d\n",k);

C语言三种循环语句

三种基本的循环语句: for语句、while语句和do-while语句。 一、循环语句 (一)、for循环它的一般形式为: for(<初始化>;<条件表过式>;<增量>) 语句; 初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。 例如: for(i=1;i<=10;i++) 语句; 上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。 注意: (1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。 (2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。省略了初始化,表示不对循环

控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。 (3).for循环可以有多层嵌套。 例如: for(;;) 语句; for(i=1;;i+=2) 语句; for(j=5;;) 语句; 这些for循环语句都是正确的。 main() { int i,j; printf(i j\n); for(i=0;i<2;i++) for(j=0;j<3;j++) printf(%d %d\n,i,j); } 输出结果为: i j 0 0 0 1 0 2

1 0 1 1 1 2 用for循环求1+2+……+100的和: main() { int sn=0,i; for(i=1;i<=100;i++) sn+=i; /*1+2+……+100*/ printf(%d\n,sn); } 从程序可以看出,使用循环语句可以大大简化代码。(二)、while循环它的一般形式为: while(条件) 语句; while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。 例如: #include stdio.h main() {

C语言循环结构小结

[C语言问题求解] 作者:苏丽媛 修订:李昕,高绍姝

1While循环 当要进行的操作相同,数据不同,但是这些数据可以形成某种序列时,考虑采用循环处理。 1.1while循环架构 while(条件) { 语句; } 1.2循环与选择结构的区别 循环是多次的(条件满足,进入循环,循环结束后返回,再次判断条件是否满足,不断循环,直到条件不满足,执行后继语句),选择结构仅仅是一次的(判断条件满足后执行,执行后结束,并开始执行后继语句) 1.3循环三要素 循环控制变量的初始化(初始化相当于设置了一个开始的值) 循环条件(条件相当于设置了一个结尾) 循环控制变量的改变(一定使之从开始到结尾的方向进行) 1.4例: #include #include int sum(int n) { int result=0; int i=1; ///i用来控制循环,称为循环控制变量//循环变量的初始化 while(i<=n) ///循环条件 { result = result + i; i++; ///即i=i+1//循环控制变量的改变 } return result; } int main() { int n; scanf("%d",&n); printf("%d\n",sum(n)); return 0; } 注:当循环结束后,循环控制变量的值是第一个不满足条件的值。 2for循环 2.1for循环结构 for(循环变量的初始化;循环的条件;循环的控制变量的改变) {

循环体; } for循环的小括号中,有且仅有两个分号,分割了循环的三要素。 for()后不能接分号,分号代表空语句,如果接了分号,意味着循环体不再属于循环,整个循环只循环了一条空语句。 循环的条件判断比循环控制变量的改变多一次(多的一次是条件不成立的第一个数)。 建议:知道循环次数采用for循环,反之,采用while循环。 循环中定义的控制变量属于局部变量,出了循环便不可用了,如果出了循环仍想使用该变量,就必须重新定义。 2.2例: #include int sum(int n) { int result=0; for(int i=1;i<=n;i++) { result = result + i; } return result; } int main() { int n; scanf("%d",&n); printf("%d\n",sum(n)); return 0; }

C语言第三次作业(循环)

C语言循环结构作业 一、实验目的: 1、熟悉掌握三种循环结构,while语句、do-while语句和for语句。 2、掌握在程序设计中用循环的方法实现一些常用算法。 3、进一步学习调试程序。 二、实验内容:(请写出程序代码及调试结果) 1.求Sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/(2n))其中n的值由键盘获得。 2.求S=aa….a -… -aaa - aa - a的值,其中a=3,n=6。 n个a 例如:22222-2222-222-22-2(例如:a=2,n=5) 3.根据以下公式求∏的值(要求满足精度0.0005,即某项小于0.0005 时停止迭代)∏/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+…+(1*2*3*4*…*n)/ (3*5*7*9*…*(2n+1))程序运行后,如果输入精度0.0005,则程序输出为3.140578 4.输出1至100之间每位数的乘积大于每位数的和的数 5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,因此6是“完数”。编程序找出1000之内的所有完数及这些完数之和,并按下面格式输出因子:6的因子是1,2,3 …… 完数和是…。 6. 有一数列:

2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和。 7. 大于m且紧靠m的k个素数打印出来。 例如,若输入m=17, k=5 ,则应输出“19,23,29,31,37”。 8、求1!+2!+3!+4!+ (10) 9、猴子吃桃子问题。猴子第1天摘下若干个桃子,当即吃了一半, 还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。 10、输出以下图案: * *** ***** ******* ***** *** *

C语言实验三、循环结构程序的设计解答

实验三 循环结构程序设计 一、实验目的 1.熟练掌握三种循环语句的应用。 2. 熟练掌握循环结构的嵌套。 3. 掌握break 和continue 语句的使用。 4. 练习调试与修改程序。 5. 掌握一组数据求和、求平均值、求最大值最小值的计算方法。 6.掌握循环次数已知、未知的处理方法(精度的控制、结束标志的使用等) 7.掌握简单图形的打印输出处理。 二、实验内容 1.[目的]掌握循环次数已知的循环控制处理方法。 [题目内容]编写一个程序,其功能为:计算并输出1~10的平方值。 [输入]无 [输出]如下形式 1 squared is 1 2 squared is 4 3 squared is 9 4 squared is 16 5 squared is 25 6 squared is 36 7 squared is 49 8 squared is 64 9 squared is 81 10 squared is 100 [提示]使用三种循环语句均可。 #include "stdio.h" void main( ) { int i; for(i=1;i<=10;i++) printf("\n %d squared is %d\n",i,i*i); printf("\n"); } 2.[目的]掌握循环次数已知的循环控制处理方法。 [题目内容]编写一个程序,其功能为:计算并输出 ∑==100 1 2n n x 。 [输入]键盘输入x 值 [输出]计算结果 [提示]使用三种循环语句均可。 #include "stdio.h" void main() {

int n,x,sum=0; printf("请输入x:"); scanf("%d",&x); for(n=1;n<=100;n++) sum=sum+x*x; printf("sum=%d\n",sum); } 如果程序功能为:计算并输出 n x 1 2 ,要求从键盘输入n、x值,程序应如何修改? 3.[目的]掌握循环次数已知的循环控制处理方法。 [题目内容]编写一个程序,其功能为:求1-100之间的奇数之和。 [输入]无 [输出]计算结果 [提示]使用三种循环语句均可。 #include "stdio.h" void main() { int i,sum=0; for(i=1;i<=100;i=i+2) sum=sum+i; printf("sum=%d\n",sum); } 4.[目的]掌握循环次数已知的循环控制处理方法。 [题目内容]编写一个程序,其功能为:输出100以内能被7整除的数。 [输入]无 [输出]判断结果 [提示]使用三种循环语句均可。 #include "stdio.h" void main() { int i,sum=0; for(i=1;i<=100;i++) if(i%7==0) printf("%d\t",i); } 5.[目的]掌握循环次数已知的循环控制处理方法。 [题目内容]编写一个程序,其功能为:计算并输出一年12个月的总降雨量和平均降雨量。 [输入]12个月的降雨量 [输出]总降雨量和平均降雨量 [提示]使用for循环语句,和值、平均值变量采用双精度类型,和值初值设为零。#include "stdio.h" void main() {

相关主题
文本预览
相关文档 最新文档