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

合集下载

01-循环结构程序设计课后练习及题解

01-循环结构程序设计课后练习及题解

循环结构程序设计练习1、编写程序,计算:m=1-2+3-4+…+9-10,并输出结果2、编写程序,输入一行字符,以换行为结尾,分别统计出其中英文字母、空格、数字和其他字符的个数.3、猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下的一半零一个.到第 10 天早上想再吃时,见只剩下一个桃子了.求第一天共摘多少桃子.4、编写程序,求 Sn=a+aa+aaa+…+aa…aaa(有n 个a)之值,其中 a 是一个数字. 例如:2+22+222+2222+22222(n=5),n 由键盘输入.(提示:需要包含数学库文件 #include <math.h> )5、打印如下图案程序参考(注:答案不唯一,可以有不同设计方法)1、#include <stdio.h>int main(){int m=0,f=1, i,n=10,z=0;for (i=1; i<=n; i++){ m+=i*f;f= -f ;}z=z+m;printf("m=%d\n",z);return 0;}2、#include <stdio.h>int main(){char c;int i=0,j=0,k=0,l=0;printf("请输入一串字符\n");while((c=getchar())!='\n'){if(c>=65&&c<=90||c>=97&&c<=122) i++;else if(c>=48&&c<=57) j++;else if(c==32) k++;else l++;}printf("字母:%d\n 数字:%d\n 空格:%d\n 其他:%d\n",i,j,k,l); return 0;}3、#include <stdio.h>int main(){int i,sum=1;for(i=1;i<10;i++)sum=2*(sum+1);printf("第一天共摘桃子%d 个\n",sum);return 0;}4、#include <stdio.h>#include <math.h>int main(){int n,sum=0,i=1,s;printf("请输入1~9 中的1 个数字:");scanf("%d",&s);printf("请输入位数:");scanf("%d",&n);while(i<=n){sum=sum+s;s=s+2*pow(10,i);i++;}printf("和=%d\n",sum); return 0;}5、#include <stdio.h>int main(){int i,j,k;//输出上半部分for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf(" ");for(k=0;k<=2*i;k++)printf("*");printf("\n");}//输出下半部分for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf(" ");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}return 0;}。

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

循环结构程序设计典型例题
}
特别注意此题中变量不能定义成
此题可做改进,在循环时确保
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++)

C 循环结构23道题[含答案解析]

C  循环结构23道题[含答案解析]

题目、描述、输入、输出、输入样例、输出样例、测试输入、测试输出循环01:最大数写一个程序,可以输入一批正数,输入0时结束循环,并且输出最大的正数。

输入39 28 5 63 18 27 0输出63测试:输入153 26 963 28 75 90 156 0输出963#include<iostream>using namespace std;int main(){int i,max=0;cin>>i;while(i!=0){if(i>max)max=i;cin>>i;}cout<<max<<endl;return 0;}循环02:素数输入正数n,判断n是否为素数。

若为素数则输出1,否则输出0。

(提示:素数是指只可以被1和其本身整除的正数(1除外))输入10输出0输入7输出1测试:输入9输出0#include<iostream>using namespace std;int main(){int n,i,d;cin>>n;for(i=2;i<n;i++){d=n%i;if(n%i==0)break;}if(n==i)cout<<"1"<<endl;elsecout<<"0"<<endl;return 0;}循环03:数列求和输入一个正整数n,计算前n项之和:1+1/4+1/7+1/10..+1/(3*n-2)。

输入5输出1.56978输入4输出1.49286#include<iostream>using namespace std;int main(){int i,n;double s=0;cin>>n;for(i=1;i<=n;i++)s+=1.0/(3*i-2);cout<<s<<endl;return 0;}循环04:西瓜卖几天n个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?说明:当西瓜个数为奇数时,卖一半为一半的整数,如当西瓜个数为5时,卖一半为卖2个。

循环结构的例子

循环结构的例子

循环结构的例子
1. 刷牙不就是个循环结构的例子嘛!每天早上起来,你是不是都会重复拿起牙刷、挤牙膏、刷牙这个动作?这就像我们生活中的很多事情一样,不断地重复。

2. 上班的日子也可以看作循环结构呀!每天固定的时间出门,到了公司开始工作,然后下班再回家,第二天又重复,这难道不像一个循环吗?
3. 健身不也是这样嘛!你设定一个健身计划,然后每周按照这个计划去锻炼,这不就是在循环嘛,难道你没感觉到吗?
4. 学生们每天上课、下课、做作业,周而复始,这多明显就是个循环结构呀!就像一个不停转动的轮子一样。

5. 农民伯伯每年播种、施肥、收获,一年又一年,这不是循环又是什么呢,这可是他们生活重要的一部分啊!
6. 家庭主妇们每天做饭、打扫、照顾家人,不也是在一个循环里面吗?这种付出难道不值得我们点赞吗?
7. 四季的更替也是一种循环啊!春天来了,夏天接着,秋天到了,冬天又来临,然后又开始新的一轮,神奇吧?
8. 我们每天睡觉、醒来,这简单的过程也是个循环呀!这几乎是每个人都在经历的,你还不承认吗?我觉得循环结构在我们生活中无处不在呢,它就像是我们生活的节奏,一直伴随着我们呀!。

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

循环结构程序设计典型例题
24
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”);

循环结构例题

循环结构例题

循环结构例题循环结构例题1、用迭代法求方程x=cos(x)的根,要求误差小于10-6。

迭代法步骤如下:(1)取x1=0.0,x2=cos(x1)。

(2)判断|x2-x1|<10-6。

若x2-x1的绝对值大于10-6,则执行x1=x2,重复执行步骤(1);否则执行步骤(3)。

(3)计算结束,输出结果。

#include#includemain(){ double x1,x2;x1=0.0;x2=cos(x1);while(fabs(x2-x1)>1e-6) { x1=x2;x2= cos(x1);}printf(“x=%f\n”,x2);}2、计算斐波那契数列(Fibonacci),直到某项大于1000为止,并输出该项的值。

Fibonacci数列: f1=1,f2=1,f3=2,f4=3,…….f(n)=f(n-2)+f(n -1)。

程序步骤:(1)f1=1,f2=1,f=f1+f2;(2)判断f的值是否大于1000,若小于或等于1000,则执行步骤(3);若大于1000,则执行步骤(4);(3)f1=f2,f2=f,f=f1+f2,再执行步骤(2);(4)循环结束,输出f的值。

#includemain(){ int f1,f2,f;f1=1; f2=1;f=f1+f2;while(f<=1000){ f1=f2;f2=f;f=f1+f2;}printf(“f=%d\n”,f); }总结:while语句一般应用于循环次数未知的情况,for语句一般应用于循环次数确定的情况。

一、循环结构的嵌套定义:在一个循环体中又完整的包含了另一个循环,称为循环嵌套。

任意类型的循环结构都可以相互嵌套,循环嵌套可以是多层,但每一层循环在逻辑上必须是完整的。

例题:判断X是否为素数。

如果是X,输出X是素数;否则输出X不是素数。

#includemain(){ int x,i;scanf(“x=%d”,&x);for(i=2;i<x;i++)< p="">if(x%i==0) break;if(i==x)printf(“x是素数”); elseprintf(“x不是素数”);}例题:编写程序,找出2——100以内的所有素数。

C语言各章节单元测试题及答案——循环结构程序设计

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、有以下程序执行后的输出结果是( 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.7 5 3B. 3 5 7C.3 6 9D.7 5 15、以下程序运行后的输出结果是( 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 )。

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。

【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。

【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。

次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。

只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。

【答案】直到型3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。

【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。

系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。

【答案】#include"stdio.h"或#include<stdio.h>4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( )①'A'/②A/③x=A/ ④x=A,y=12/12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符,在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。

java循环结构题目

java循环结构题目

java循环结构题目Java循环结构题目循环结构是编程语言中的一种重要控制结构,它使得程序能够多次执行一段代码。

在Java程序设计中,循环结构主要有三种形式:for循环、while循环和do-while循环。

本文将介绍一些与Java循环结构相关的题目,帮助读者更好地理解和掌握循环结构的应用。

一、for循环题目1. 题目描述:使用for循环计算1到100之间所有偶数的和。

解题思路:使用for循环从1到100遍历每个数,判断是否为偶数,并累加求和。

参考代码:```java int sum = 0; for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { sum += i; } } System.out.println("1到100之间所有偶数的和为:" + sum); ```2. 题目描述:使用for循环输出九九乘法表。

解题思路:使用嵌套的for循环,外层循环控制行数,内层循环控制每行的列数。

参考代码:```java for (int i = 1; i <= 9;i++) { for (int j = 1; j <= i; j++){ System.out.print(j + "*" + i + "=" + i * j + ""); } System.out.println(); } ```二、while循环题目1. 题目描述:使用while循环计算1到100之间所有奇数的和。

解题思路:使用while循环从1到100遍历每个数,判断是否为奇数,并累加求和。

参考代码:```javaint sum = 0; int i = 1; while (i <= 100) { if (i % 2 != 0) { sum += i; } i++; }System.out.println("1到100之间所有奇数的和为:" + sum); ```2. 题目描述:使用while循环判断某个整数是否为质数。

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。

【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。

【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。

次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。

只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。

【答案】直到型3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。

【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。

系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。

【答案】#include"stdio.h"或#include<stdio.h>4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( )①'A'/②A/③x=A/ ④x=A,y=12/12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符,在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。

第五章循环结构程序设计编程题(参考答案)

第五章循环结构程序设计编程题(参考答案)
if(i%21==0)
{ j++;
prin tf("%12d",i);
if(j%4==0) prin tf("\n");
}
}
}
5.输出1至1000之间所有满足用3除余2、用5除余3、用7除 余2的数(要求每行只输出5个数)。
#in clude<stdio.h>
void mai n()
{
int i,j=0;
#in clude<stdio.h>
void mai n()
{
long i;
int ge,shi,qia n,wa n,k=0;
for(i=10000;iv=99999;i++)
{
ge=i%10; wan=i/10000;
shi=i/10%10; qia n=i/1000%10;
if(ge==wa n&&shi==qia n)
}
10.输出Fibonacci数列的前几项,直到该项的值大于10000为
止(每行输出5项)。Fibonacci数列为
1,1,2,3,5,8,13,21,34,…。即第一项和第二项为1,其他项为
前两项之和。
#in clude<stdio.h>
void mai n()
{
in t f1=1,f2=1,f3=2,i=3;
prin tf("%d\t%d\t%d\t",f1,f2,f3);
while(f3<=10000)
{
f1=f2;f2=f3;
f3=f1+f2;
prin tf("%d\t",f3);

while循环结构例题

while循环结构例题

引子#include "stdio.h"main(){ int i=1;for(i=1;i<=10000;i++)printf(“%d\t”,i);}题型1 输入输出多个数据eg1、输出1~10000之间所有的整数#include "stdio.h"main(){ int i=1;while(i<=1000){printf(“%d\t”,i);i++;}}拓展:1、换成所有的奇数2、换成所有的偶数题型2 有限个数连加和连乘eg2.1、求1+2+3+4+………+100的值#include "stdio.h"main(){ int i=1,s=0;while(i<=100){s=s+i;i++;}printf(“%d\n”,s);}拓展:1、求1+2+3+4+………+n的值2、求12+22+32+………+n2的值3、求1+1/2+1/3+………+1/n的值eg2.2、求n!的值#include "stdio.h"main(){ int i=1,n,p=1;scanf(“%d”,&n);while(i<=n){p=p*i;i++;}printf(“%d\n”,p);}拓展:求1!+2!+3!+………+n!的值#include "stdio.h"main(){ int i=1,n,p=1,s;scanf(“%d”,&n);while(i<=n){p=p*i;s=s+p;i++;}printf(“%d\n”,s);}题型3 无限个数连加eg3、求1-1/3+1/5-1/7+………的近似值,要求精度要达到10-4#include "stdio.h"#include "math.h"main(){ float n=1,s=0,f=1,t=1;while(fabs(t)>=1e-4){t=f/(2*n-1);s=s+t;f=-f;n++;}printf(“%f\n”,s);}拓展:求1-1/2+1/4-1/6+………的近似值,要求精度要达到10-4题型4 统计eg4.1、输入20个数,统计其中正数、负数和零的个数。

高中数学循环结构 典型例题

高中数学循环结构 典型例题

【例1开始输出“是闰年”y 输出“是闰年”y 输出“不是闰年”y 输出“不是闰年”y y :=2000是是是否否4整除y 100整除y 400整除y(1(2(3三部分构成解:(1(2)(3【例2程图.次比较..i >100是循开始输出b 结束i := 2i := i +11b := a b := ab a<是 是否否输入…a ,a ,a ,1 2 10i ii >100图2-2-32【例3】菲波拉契数列表示的是这样一列数:0,1,1,2,3,5,…,后一项等于前两项的和.设计一个算法流程图,输出这个数列的前50项.分析:输出数列的前50项,当然需设置50个变量:A 1,A 2,…,A 50,若A i -2,A i -1,A i 分别表示数列中连续的三项,则有A i =A i -2+A i-1,即知任何一项的前2项,就可以把这项写出来. 解法一:流程图如图2-2-33.开始输入 , A A 输出A 结束A := 0A := 1A := A + A i := 3i := i +1i >50是 否图2-2-33解法二:流程图如图2-2-34.i 为循环变量,3为i 的初始值;循环体为A i =A i -2+A i -1;终止条件为i >50.法一中有50个变量,输出后不再进行其他操作,因此可只设三个变量A 1,A 2,A 3.图2-2-34【例4】设区间[0,1]是方程f(x)=0的有解区间,画出用二分法算法求方程f(x)=0在区间[0,1]上的一个近似解的流程图.要求精确度为ε.分析:结合求精确度为ε的近似解的算法.(1)由f(a)·f(b)<0,确定有解区间[a,b];(2)取[a,b]的中点2ba+;(3)判断函数值f(2ba+)是否为0.①如果为0,则x=2ba+是方程的解,问题解决完毕.②如果不为0,则有两种情形.a.若f(a)·f(2ba+)<0,则(a,2ba+)为新的有解区间.b.若f(2ba+)·f(b)<0,则(2ba+,b)为新的有解区间.(4)判断新的有解区间的长度是否小于ε.①若大于ε,则在新的有解区间的基础上重复上述步骤.②若不大于ε,则取新的有解区间的中点为方程的近似解.解:算法流程图如图2-2-35.先写出算法,再根据算法写流程图.其算法原理是不断取区间中点得到新的有解区间,同时使精度提高,最终得到满足条件的解.设置两个循环变量a,b,其初始值分别为0,1,终止条件为f(2ba+)=0或b-a≤ε.输出结束a b+2a b +2。

C语言循环结构程序设计习题与答案

C语言循环结构程序设计习题与答案

一、单选题1、计算1!+2!+3!+4!+5!编程如下,程序中下划线处应填写#include <stdio.h>void main(){int i;int t= z s=;for(i=l;i<6;i++){t=t*i;s=s+t;)printf("l!+2!+3!+4!+5!=%d\n"z s);)A.l 1B.O 0C.O 1D.l 0正确答案:D2、下面代码段的输出是一int k,m;for(k=0;k<10;k++ ){if(m>50) continue;m=k*k;)printf("%d,%d\n”,k,m);A. 10,64B.9,81C.10,81D.8,64正确答案:A3、对于以下代码:int i;for(i=0;i<10;i++)pnntf("%d",i);for循环结束后,i的值是—A.llB.10C.9D.i不再存在了正确答案:B4、对于以下代码:int i=6;do{printf("%d", i-);}while(i-);正确的是—A,输出6420-2-4…,程序无法停机B,输出6420C.输出6420-2D输出642正确答案:A5、对于以下代码:int i=6;do{printf("%d", i-);}while(i);最后一个输出的值是—A.2B.3C.OD.l正确答案:D6、在代码:while(e)中,e等价于_A.e == 0B.e != 1C.e == 1D.e!=0正确答案:D7、在代码:while© |1)中,e等价于_A.e!=0B.e == 1C.e取任何值D.e == 0正确答案:C8、设有程序段int k=5;while(k=0) k=k-l;则下面描述中正确的是A,循环体语句一次也不执行B.while循环执行5次C.循环体语句执彳亍一次D彳盾环是无限循环正确答案:A9、下面程序段的运行结果是int n=0;while(n++<=2);printf("%d",n);A.有语法错B.2C.4D.3正确答案:C10、若有如下语句int x=3;do{ printf("%d\n"z x -=2);} while(!(-x));则上面程序段—A,是死循环B,输出的是1C.输出的是3和0D,输出的是1和・2正确答案:D11、下面程序的功能是计算正整数2345的各位数字平方和,请选择填空,答案是#includemain()int n,sum=0;n=2345;sum=sum+(n%10)*(n%10);n=_;}while(n);printf("sum=%d"/sum);}A.n/10B.n%10C.n/100D.n/1000正确答案:A12、下面程序段—for(t=l;t< = 100;t++){scanf("%d",&x);if(x<0) continue;printf("%3d",t);)A.最多允许输出100个非负整数B.x>=0时什么也不输出C.printf函数永远也不执行D・当x<0时整个循环结束正确答案:A13、下列运算符中结合方向与其他不同的是A.+=B.< =c.>D.+正确答案:A14、下列运算符中结合方向与其他不同的是A.&&B.?:c.||D.+正确答案:B15、以下代码输出结果是—int x=0,y=20,z=30 ;if ( x||(y=50)>z ) printf("y=%d"z y); else printf("y=%d",y);A.代码错误,不能输出B.y=50C.y=20D,不确定正确答案:B16、以下代码输出结果是—int x=0z y=20,z=30if ( x||(y=50)>z ) printf("y=%d"z y); else printf("y=%d",y);A.y=20B.代码错误,不能执行C.y=50D,不确定正确答案:B17、下列程序段的输出结果是一int a=3,b=15;a+=b;b=b/2;}while(b>l);printf("%d\rT,a);正确答案:28二、多选题1、在c语言中,叙述正确的是()。

循环结构程序设计习题及答案

循环结构程序设计习题及答案

第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输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。

循环结构的例题选讲

循环结构的例题选讲

例7、猴子吃桃问题. 猴子第一天摘下若干桃子,当 即吃了一半,还不过瘾,又多吃一 个,第二天早上又将剩下的桃子吃 掉一半,又多吃一个。以后每天都 了前一天剩下的一半零一个,到第 10天早上想吃时,就只剩一个桃子 了,求第一天共摘了多少个桃子。
// 猴子吃桃问题. main() { int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day- -; } printf(“total=%d\n”,x1); }
例4、输出所有的水仙花数(教材P97.8) main() { int I,j,k,n; for(n=100;n<1000;n++) {i=n/100; j=n/10%10; k=n%10; if(n==i*i*i+j*j*j+k*k*k;) printf(“%4d\n”,n) } }
例5、 一个数如果恰好等于它的所有真因子 之和,这个数就称为“完数”(或“完备 数”)。例,6的真因子为1,2,3,而 6=1+2+3,因此6是完数。求m~n之间的所 有完数之和,或最大的完数,或第二大的 完数,或所有完数。
例6、 求分数序列:2/1,3/2,5/3,8/5,13/8,….的 前20项之和.(每一个后项的分母是前一项 的分子,每一个后项的分子是前一项的分 子和分母之和)
main() { int i,t,n=20; float a=2,b=1,s=0; for(i=1;i<=n;i++) { s=s+a/b; t=a; a=a+b; b=t} printf(“sum=%9.6f\n”,s); }
• main() • { int i,j,k,s=0; • for(i=1;i<=500;i++) • { k=0; • for(j=1;j<i;j++) • if(i%j==0) k=k+j; • if(i==k) • { s=s+i; • printf("i=%d\n",i); } • printf("s=%d",s); • }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

循环结构程序设计典型例题例1:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。

算法分析:对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。

由于数列的题一般执行次数能确定,用for语句来编写比较方便。

此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。

解题思路是用循环语句求各项,并把值累加,因为是求前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;程序:#include<>main( ){ int i=2,j=3,n,c;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:下面这个程序,想想它实现的是什么功能?#include<>main( ){ int i,s=0;for(i=1;i<=100;i++){if(i%5==0) continue;s=s+i;}printf(“\n%d”,s);}在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。

所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。

例3:输出n~m中(0<n<m)能被3整除,且至少有一个数字是5的所有数。

算法分析:1 输入n与m的值2 用整型变量a从n-m循环,每次值加13.若a能被3整除,执行第4步,否则执行第9步4令整型变量x=a5.若x>0,执行第6步,否则执行第9步=x%107.若i值不为5,执行第8步,否则输出a,并执行第9步=x/10,并返回第5步9.返回第2步,察看下一个a程序:#include<>main( ){ long a,x,i,t,n,m;scanf(“%ld%ld”,&n,&m);for(a=n;a<=m;a++)if(a%3==0){ x=a;while(x>0){ i=x%10;if(i==5) {printf(“\t%ld”,a);break;} x=x/10;}}}问:能把a%3==0也放到for循环语句的表式2中,写成a<=m&&a%3==0吗?答:不可以!例4:求3-150中所有素数的和。

算法分析:1.用变量a从3到150循环,每次值增加12.用变量i从2到a-1循环,每次值增加13.若a%i==0 ,结束i的循环,执行第4步4.若i==a,把a累加到s上。

5.输出s的值注意:此题中执行第4步时有两种情况。

第一种:在第3步中发现了满足a%i==0的情况,直接跳出了i的循环,此时的i一定是在2到a-1中间的一个值,而且a不是素数。

第二种:一直没有发现满足a%i==0的i,在i==a时,不再满足i循环的执行条件,i循环结束,此时的a是素数!程序:#include<>main( ){ int a,s=0,i;for(a=3;a<=150;a++){ for(i=2;i<=a-1;i++)if(a%i==0) break;if(a==i) s=s+a;}printf(“\n%d”,s)}求素数的方法很多,大同小异。

此题可以做一些改动。

如:i的值可以是从2取到sqrt(a);可以不用最后察看i的值,而是通过在发现因子时改动标志变量,最后根据标志变量的值判断是否是素数。

例5:有一个八层高的灯塔,每层所点灯数都等于上一层的两倍,一共有765盏灯,求塔底灯数。

算法分析:此题的关键在于塔顶的灯数,只要知道了塔顶的灯数,就可知道塔底灯数。

这里采取试探的方法来求塔顶灯数。

设塔顶灯数为x,x的初值从1开始循环,每次值加1。

求出相应的灯的总数,总数不为765,继续下一个x的循环,直到某次求得灯总数为765时,结束x的循环,输出此时塔底灯数。

从1开始循环,每次值加 12.设k初值x,计算每层灯数。

设s初值0,累加每层灯数3. i从1到8循环,每次值加14. s=s+ k; k=k*2;5.如果s==765 ,结束x的循环4. s=s+ k; k=k*2;程序:#include<>main( ){ 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 共有多少组?算法分析:这是一道典型的三重嵌套循环的题目。

a、b、c都是位于1到99之间整数。

编程的基本思路是:找出1到99之间的所有a、b、c的排列,察看同时满足a>b>c、a+b+c<100、1/a2+1/b2=1/c2这三个条件的a、b、c有多少组。

值得注意的是, 1/a2+1/b2=1/c2这个条件并不能简单的原样照写,因为在求分数的过程中必然有四舍五入,不能得出真正的准确的结果,必须把条件变形成:c2(a2+b2)=a2b2才能得出正确的结果。

从1到99循环从1到99循环从1到99循环4.若a>b&&b>c&&a+b+c<100&&c*c*(a*a+b*b)==a*a*b*b,统计找到了一组5.输出找到的组数程序:#include<>main( ){ long a,b,c,n=0;for(c=1;c<=97;c++)for(b=c+1;b<=98;b++)for(a=b+1;a<=99;a++)if(a+b+c<100&&c*c*(a*a+b*b)==a*a*b*b)n++;pr intf(“\n%ld”,n);}特别注意此题中变量不能定义成int型。

此题可做改进,在循环时确保a>b>c,而不需要再在if中判断。

改进如下所示: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)分析:用变量e求和,e初值为1。

用变量t求阶乘,t初值为1。

用变量i从1开始累加循环,t=t*i,e=e+t。

#include<>void main( ){ int i=1;long t=1;float e=1;while(e-(int)e>=1e-6){ t=t*i;e=e+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)。

分析:用变量f1、f2、f作为数列相邻的三项,初值f1=1,f2=1。

用变量n从3到40循环,f=f1+f2,f1=f2,f2=f.#include<>main( ){ long f1=1,f2=1,f,n;for( n=3;n<=40;n++){ f=f1+f2;f1=f2;f2=f;}printf(“\nf=%ld”,f);}思考:求14万之内的最大的f(n).例8: Sn=1-1/3+1/5-1/7+…1/(2n-1) 求s(100)(保留4位小数)分析:用变量s求和,s初值为0。

用变量n从1到100循环,如果n是奇数(n%2!=0),s=s+1/(2*n-1),否则s=s-1/(2*n-1) 。

#include<>main( ){int n;float s=0;for( n=1;n<=100;n++)if(n%2!=0) s=s+(2*n-1)else s=(2*n-1);printf(“\n%.4f”,s);}例9:用牛顿迭代法求方程f(x)=2x3-4x2+3x-7=0在x=附近的实根,直到满足|xn-xn-1|<10-6为止。

牛顿迭代公式为:xn=xn-1-f(xn-1)/f ’(xn-1)算法分析:牛顿迭代法认为,以任意一个x的初值开始,都可以根据牛顿迭代公式xn=xn-1-f(xn-1)/f(xn-1)求出一串x的序列,这个序列将越来越趋向于某一个值,这个值就是方程f(x)的一个实根。

#include<>#include<>main( ){ 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”,x);}例10:求1000以内最大的20个素数之和。

分析:用变量s求和,s初值为0。

用变量I统计以求得素数的个数,I初值为0。

用变量a 从1000到1循环,如果a是素数,则s=s+a,I++。

当i值等于20时,跳出循环。

main( ){int a,s=0,I=0, j;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(I==20) break;}printf(“\n%d”,s);}例11:[200,1000]的双胞胎数的对数。

双胞胎数:两素数差为2称为双胞胎数。

分析:用变量n统计以求得双胞胎数的对数,n初值为0。

用变量a从200到998循环,如果a是素数,则令变量b=a+2,如果b也是素数,则n值增1。

素数求法同前,用变量I 循环。

main( ){int a,b,n=0,I;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);}例12:求[10,200]间可以被其因子的个数整除的整数的个数。

相关文档
最新文档