循环结构程序设计典型例题
循环结构程序设计典型例题

2
22 7
1 1 1 1 4 3 5 7
每项的分子都是1
后一项的分母是前一项的分母加2
第1项的符号为正,从第2项起,每一项的符 号与前一项的符号相反
1 n
1 n2
25
#include <stdio.h> #include <math.h> void main() { int sign=1; double pi=0,n=1,term=1; while(fabs(term)>=1e-6) { pi=pi+term; 求绝对值的函数 n=n+2; sign=-sign; term=sign/n; } 只保证前5位小数是准确的 pi=pi*4; printf("pi=%10.8f\n",pi); }
(教材P98 例 4.24 )
(教材P101 例 4.27 )
23
ቤተ መጻሕፍቲ ባይዱ题思路:
求 近似值的方法很多,本题是一种
其他方法:
1 1 1 1 2 2 2 2 6 1 2 3 n 2 2 4 4 66 (n 1)2 2 1 3 3 5 5 7 n (n 2)
} printf("\n");
}
遇到第3行第1列, 终止内循环
21
#include <stdio.h> void main() { 3int i,j,n=0; 原来第 行第 1个 for (i=1;i<=4;i++) 数据3没有输出 for (j=1;j<=5;j++,n++) { if (n%5==0) printf (“\n”);
C语言程序设计(while 循环结构)

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(表达式) 语句;
循环结构程序设计练习题内含答案

第三单元循环结构练习题选择题:1、有以下程序执行后的输出结果是( D )。
main( ){ int i,s=0; for(i=1;i<10;i+=2)s+=i+1;printf("%d\n",s);}A.自然数 1~9的累加和B.自然数 1~10 的累加和C.自然数 1~9中的奇数之和D.自然数 1~10 中的偶数之和2、以下关于 for 语句的说法不正确的是( A )。
A. for循环只能用于循环次数已经确定的情况B. for循环是先判断表达式,后执行循环体语句C. for循环中,可以用 break 跳出循环体D. for循环体语句中,可以保含多条语句,但要用花括号括起来3、若 i和 k 都是 int 类型变量,有以下 for语句for(i=0,k=-1;k=1;k++) printf("*****\n");下面关于语句执行情况的叙述中正确的是(d)。
A. 循环体执行两次B.循环体执行一次C.循环体一次也不执行D. 构成无限循环4、以下程序程序的执行后的输出结果是(c)。
main(){int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf(“%d”,t[2 -i][i]);}A.753B.357C.369D.7515、以下程序运行后的输出结果是( A )。
void fun(char*s){ while(*s){ if(*s%2==0)printf(“%c”,*s);s++;}}main(){ char a[]={“good”};fun( a) ;printf(“ n”);}注意:字母 a 的 ASCⅡ码值为 97A.dB.goC.godD.good6、已知 int t=0 ; while ( t=1 ){...}则以下叙述正确的是( B)。
A)循环控制表达式的值为 0B)循环控制表达式的值为 1C)循环控制表达式不合法D)以上说法都不对7、设有以下程序段 Bint x=0,s=0;while (!x!=0 ) s+=++x;printf ( "%d",s );则A)运行程序段后输出0B)运行程序段后输出 1C)程序段中的控制表达式是非法的D)程序段执行无限次8、设 i ,j ,k 均为 int型变量,则执行完下面的 for 语句后, k 的值为( C)。
实验3、循环结构程序设计(有答案)

循环结构程序设计1.程序填空下面程序的功能为:计算1~100之间的偶数之和,完成以下的程序并运行出正确的结果。
# include <stdio.h>void main(){int i,s=0;/**************found*************/i=2 ;while(i<=100){s=s+i;/**************found**************/i+=2 ;}printf(“s=%d”,s);}运行结果:S=25502.程序改错(1) 下面程序的功能为:计算10!,修改以下的程序并上机运行通过。
#include <stdio.h>void main(){int n,t;for(n=1,t=1,t<10,t++);n=n*t;printf(“10!=%d\n”,n);}正确的程序:#include <stdio.h>void main(){int n,t;for(n=1,t=1;t<=10;t++) //句尾不能有“;”n=n*t;printf(“10!=%d\n”,n);}运行结果:10!=3628800(2) 下面程序的功能为:计算1~100之间能被3和7整除的数之和,修改以下的程序并上机运行通过。
#include <stdio.h>void main(){int i,s;s=0;while(i<=100);{if(i%3==0||i%7==0)s+=i;i=i+1;}printf(“s=%d”,s);}正确的程序:#include <stdio.h>void main(){int i,s;s=0; i=1;while(i<=100) //句尾不能有“;”{if(i%3==0&&i%7==0)s+=i;i=i+1;}printf(“s=%d”,s);}运行结果:S=2103、有一个分数序列:2/1、3/2、5/3、8/5、13/8、……,编写一个C程序,求出这个数列的前30项之和。
循环结构程序设计作业

1.(英里与千米的互换)编写一个程序,并排显示下列连个表格。
(1英里为1.609千米)
英里千米千米英里
1 1.609 20 12.430
2 3.218 25 15.538
…
9 14.481 60 37.290
10 16.090 65 40.398
2.(显示金字塔)编写程序,提示用户输入一个在1到15之间的整数,然后显示一个金字塔形状的图案。
运行示例如下所示:
Enter the number of lines:4 enter↙
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
3.(显示闰年)编写程序,显示21世纪(2001年-2100年)中所有的闰年,每行显示10个。
4.(数列求和)编写程序,计算下列数列的和:
1/3+3/5+5/7+7/9+……+97/99
5.(最大数的出现次数)编写程序读取整数,找出它们的最大数,并统计该数出现的次数。
假设输入是以0结束的。
例如,假如输入的是3 5 2 5 5 5 0,程序找出的最大数是5,而5出现的次数是4。
运行示例如下:
Enter numbers:3 5 2 5 5 5 0 enter↙
The largest number is 5
The occurrence count of the largest number is 4。
python循环结构例题

python循环结构例题下面是一些Python循环结构的例题,用于训练学生对循环控制结构的理解和应用。
题目1:计算1到100的累加和。
要求:使用循环结构实现。
```pythonsum = 0for i in range(1, 101):sum += iprint(sum)```题目2:求100以内的所有偶数之和。
要求:使用while循环实现。
```pythonsum = 0i=0while i <= 100:if i % 2 == 0:sum += iprint(sum)```题目3:求1000以内所有能被3和5整除的数字之和。
要求:使用for循环实现。
```pythonsum = 0for i in range(1, 1001):if i % 3 == 0 and i % 5 == 0:sum += iprint(sum)```题目4:判断一个数是否为素数。
要求:使用循环结构实现。
```pythonnum = int(input("请输入一个正整数:"))is_prime = Trueif num <= 1:is_prime = Falsefor i in range(2, num):if num % i == 0:is_prime = Falsebreakif is_prime:print(num, "是素数")else:print(num, "不是素数")```题目5:打印九九乘法表。
要求:使用双重循环实现。
```pythonfor i in range(1, 10):for j in range(1, i + 1):print("%d*%d=%d" % (j, i, j * i), end="\t") print```题目6:用嵌套循环输出直角三角形。
```pythonfor i in range(1, 6):for j in range(1, i + 1):print("*", end="")print```题目7:用嵌套循环输出等腰三角形。
循环结构程序设计习题及答案

第6章循环结构程序设计6-1.比较while语句、do–while语句和for语句的异同。
答:(1)while语句、do-while语句用于条件循环,for语句用于计数循环。
(2)while语句、for语句是先判断循环条件,后执行循环体,如果循环条件一开始就不成立,则循环体一次也不被执行;而do-while语句是是先执行循环体,后判断循环条件,所以循环体至少被执行一次。
(3)知道循环的次数可选用for语句实现循环,不知道循环的次数可选用while语句或do-while语句实现循环.(4)一般而言,三种循环语句可等价实现.6-2 仔细阅读下面的程序,指出程序的运行结果.#include<>void main(){ int i;for(i=0;++i;i<5){ if(i==3){printf("%d\n",++i);break;}printf("%d\n",++i);}}答:24思考:语句“for(“i=0;++i;i<5”)在编译时为何会给出语法警告错误当将其改为“for(i=0;i<5;++i)”时,运行结果又将如何6-3 仔细阅读下面的语的程序,指出程序的运行结果。
#include""void main(){ int i, a=0;for(i=1;i<=5;i++){do{i++;a++;} while(i<3);}i++;printf("a=%d,i=%d",a,i);}答:a=3,i=7思考:在for循环中嵌套着do-while循环,那么do-while循环中对i的修改会对for循环产生影响吗6-4编写程序,用1000个单词”computer”填充屏幕,每行60个.解:#include<>void main(){ int i;for(i=1;i<=1000;i++){ printf("computer.");if(i%60==0)printf("\n");}}思考:在for循环中,”if(i%60==0)printf(“\n”);”语句的作用是什么没有此语句将会是什么状况6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。
C语言各章节单元测试题及答案——循环结构程序设计

第3章循环结构程序设计3.1 典型考试题剖析3.1.1 选择题【例1】若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c 均已赋值(c大于0)s=a;for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是_______。
A)s=a+b; B)s=a+c; C)s=s+c; D)s=b+c;✧考点:本例考查for循环。
✧分析:初始赋值时s=a,那么s的值一定与a有关,C、D答案中不含a所以排除掉。
只用清楚for循环的次数,不管b以前的值为多少,第一次循环时b=1,当b>c时循环结束,那么显然s要加c次1。
所以s的值为a与c的和。
✧答案:B【例2】设x和y均为int型变量,则执行下面的循环后,y值为。
for(y=1,x=1;y<=50;y++){if(x>=10) break;if(x%2==1){x+=5;continue;}x-=3;}A) 2 B) 4 C) 6 D) 8✧考点:本例考查for循环中break和continue的用法,以及区别。
✧分析:break用在循环中,只能退出一层循环。
尤其是在嵌套循环中,只能退出它所在的那一层循环。
不能期望用break从最内层循环一下子退出最外层循环(可以用goto实现)。
continue语句只能用在循环中,它的作用是跳过其后面的语句,直接将控制转移到下一轮循环条件的测试。
语句“if(x>=10) break;”中的break只有当x>=10时,才会执行,并且跳出for循环;语句“x+=5;continue;”是每次执行完一次跳过其后面的语句,直接将控制转移到下一轮循环条件的测试for(y=1,x=1;y<=50;y++)中。
✧答案:C【例3】以下程序中,while循环的循环次数是_______。
main(){ int i=0;while(i<10){ if(i<1) continue;if(i==5) break;i++;}......}A) 1 B) 10 C) 6 D) 死循环,不能确定次数✧考点:本例考查while循环的用法,以及continue和break的分别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特别注意此题中变量不能定义成
此题可做改进,在循环时确保
for(a=1;a<=99;a++)
for(b=1;b<=99;b++)
for(c=1;c<=99;c++)
if(a>b&&b>c&&a+b+c<100
&&c*c* (a*a+b*b)==a*a*b*b)
n++;
例6:e=1+1/1!+1/2!+….+1/n!(精度为1e-6)
分析:用变量a从1至U sqrt( 2698)-1循环。变量s初值为6000。若2698%a==0,则b=2698/a,若s>a+b,则s=a+b,并保存b的值在变量t.
mai n()
{int a,b,s=6000,t;
for( a=1;a<sqrt(2698);a++)
{if(2698%a==0)
for(a=n; a<=m;a++)
if(a%3==0)
{ x=a;
while(x>0)
{i=x%10;
if(i==5){printf (“%ld”,a);break;}
x=x/10;
}
}
}
问:能把
例
算法分析:
1.
2.
3.若a%i==0,结束i的循环,执行第4步
4.若i==a,把a累加到s上。
5.
注意:此题中执行第
float s=0;
for(n=1; n<=30 ;n++)
{ s=s+(float)i/j;
c=i;
i=j+1; j=c+j;
}
printf( "n%f”,s);
}
此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。
例2:下面这个程序,想想它实现的是什么功能?
#in clude<stdio.h>
i
程序:
#in clude<stdio.h>
mai n()
{ int a,s=0,i;
for(a=3;a<=150;a++)
{for(i=2;i<=a-1;i++)
if(a%i==O) break;
if(a==i) s=s+a;
}
printf( n“d' ,s)
}
求素数的方法很多,大同小异。此题可以做一些改动。如:i的值可以是从2取到sqrt(a);
{ float x=2. 5,x0,f,f2;
do{ x0=x;
f=2*x0*x0*x0-4*x0*x0+3*x0-7;
f2=6*x0*x0-8*x0+3;
x=x0-f/f2;
}while(fabs(x-x0)>=10e-6);
printf(f %f” ,x);
}
例
分析:用变量
mai n()
{int a,s=0,I=0, j;
项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循
环执行30次。
1.初值i=2,j=3,s=0;
2.用n从1到30循环
3.s=s+ i/j;
4.c=i; i=j+1; j=c+j;
5输出s;
程序:
#in clude<stdio.h>
mai n() {int i=2,j=3, n,c;
for( a=10;a<=200;a++)
{c=0;
for(I=1;I<=a;I++)
if( a%I==0) c++;
if(a%c==0) n++;
}
printf( nn=%d" ,n);
}
例
分析:用变量
于其真因子的和:用变量
mai n()
{ int a,I,s;
for(a=1000;a>=1;a--)
分析:用变量
环,t=t*i,e=e+1.O/t。
#in clude<stdio.h>
void mai n()
{ int i=1;
long t=1;
float e=1;
while(e-(i nt)e>=1e-6)
{ t=t*i;
e=e+1.0/t;
i++;}
printf( n“.10f”,e);
}
例7:数列1,1,2,3,5,8….有f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1,求f(40)。
{s=0;
for(l=1;l<a;l++)
lf(a%l==O) s=s+l;
if(a==s) break;
}
printf( n“d' ,a);
}
思考:求
例14:S=sqrt(ln(1)+ln(2) +…+ln(n)),n=50(结果保留6位小数)
分析:开平方数及自然对数都是
求得。注意函数定义的数据类型。
循环结构程序设计典型例题
例1有数列2/3、4/5、6/9、10/15……求此数列前30项的和。
算法分析:
对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。
由于数列的题一般执行次数能确定,用for语句来编写比较方便。
此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一
{b=2698/a;
if(s>(a+b))
{s=a+b;
t=b;
}
}
}
printf( n“d' ,b);
}
分析:用 变量
f=f1+f2,f1=f2,f2=f.
#in clude<stdio.h>
mai n()
{ long f1=1,f2=1,f, n;
for( n=3;n<=40 ;n++)
{f=f1+f2;
f1=f2; f2=f;
}
printf( nf=%ld”,f);
}
思考:求
例8:Sn=1-1/3+1/5-1/7+…1/(2n-1)求s(100)(保留4位小数)
}
例9:用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的实根,直到满足|xn-xn-1|<10-6为止。
牛顿迭代公式为:xn=xn-1-f(xn- 1)/f'-xn
算法分析:
牛顿迭代法认为,以任意一个
#in clude<stdio.h>
#in clude<math.h> mai n()
可以不用最后察看i的值,而是通过在发现因子时改动标志变量,最后根据标志变量的值判 断是否是素数。
例5:有一个八层高的灯塔,每层所点灯数都等于上一层的两倍,一共有765盏灯,求塔底
灯数。
算法分析:
此题的关键在于塔顶的灯数,只要知道了塔顶的灯数,就可知道塔底灯数。这里采 取试探的方法来求塔顶灯数。
设塔顶灯数为x,x的初值从1开始循环,每次值加1。求出相应的灯的总数,总
for( a=1000;a>=1;a--) {for( j=2;j<a;j++) if(a%j==0) break;
if( j==a)
{ s=s+a; I++; }
if(l==20) break;
}
printf( n“d' ,s);
}
例
分析:用变量
果
mai n()
{int a,b,n=0,1;
for(a=200;a<=998;a++)
{for(I=2;I<a;I++)
if(a%I==0) break;
if(a==I )
{b=a+2;
for(I=2;I<b;I++)
if(b%I==0) break;
if(b==I ) n++;
}
}printf( n%'d' ,n);
}
例
分析:用变量
因子的个数,
mai n()
{int a,c ,n=0,1;
程序:
#in clude<stdio.h>
mai n()
{ int x,s,i,k;
for(x=1;;x++)
{s=0;
k=x;
for(i=1;i<=8;i++)
{s=s+k;k=k*2;}
if(s==765) break;
}
printf( n“d' ,k/2);
}例5:已知a>b>c>0,a、b、c为整数,且a+b+c<100,求满足1/a2+1/b2=1/c2的a、b、c共有 多少组?
例3:输出n~m中(0<*m)能被3整除,且至少有一个数字是5的所有数。
算法分析:
1
2
3•
4令整型变量x=a
5•
6.i=x%10
7•
8.x=x/10,并返回第5步
9•