习题5 循环

选择题

1、如下程序的运行结果为 【 正确答案: B】。

A.9             B.8           C.7                 D.6

2、C语言的for语句中的表达式可以部分或全部省略,但两个 【 正确答案: C】不能省略。

但当三个表达式均省略后,因缺少判断条件,循环会无限制在执行下去,形成死循环。
A.<            B.++              C.;               D.,

3、如下程序的运行结果为 【 正确答案: A】。

#include <stdio.h>

int main() 

{

     int t = 3;

     while(t++<=4)

           printf("%d ",t);

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

     return 0;

}

A.4 5 6         B. 3 4 5              C.2 3 4           D.2 2 2

解析:

while(t++<=4)

printf("%d ",t);

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

(1)第1次    3<=4  为真,t变为4   输出4

(2)第2次    4<=4  为真,t变为5   输出5

(3)第3次   5<=4  为假,t变为6  结束循环

(4)输出6

4、有如下程序段

int k = 1;

while( !k==0 )

{

     k = k + 1;

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

}

则以下说法中正确的是 【 正确答案: B】。
A.while循环执行2次               B.循环是无限循环
C.循环体一次也不执行            D.循环体执行一次

解析:while( !k==0 )  由于k=1,所以 !k为0       0==0永远为真

5、以下叙述正确的是 【 正确答案: D】。
A. do-while语句构成的循环不能用其它语句构成的循环来代替
B. do-while语句构成的循环只能用break语句退出
C. 用do-while语句构成的循环,while后的表达式为非零时结束循环
D. 用do-while语句构成的循环,while后的表达式为零时结束循环

6、语句for(表达式1; ;表达式3)也可以理解为 【 正确答案: B】。
A.  for(表达式1;0 ;表达式3)
B.  for(表达式1;1 ;表达式3)
C.  for(表达式1; 表达式1;表达式3)

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

7、以下语句中,正确的是 【 正确答案: D】。
A.continue语句的作用是结束整个循环的执行
B.只能在switch语句体内使用break语句
C.在循环体内使用break和continue语句的作用相同
D.只能在循环体内和switch语句体内使用break语句

8、有如下程序段

int t = 0;

while(t=1)

{......}

由以下叙述中,正确的是 【 正确答案: B】。
A. 循环控制表达式的值为0,不执行循环体
B. 循环控制表达式的值为1,执行循环体
C. 循环控制表达式不合法
D. 以上说法都不正确

解析:while (t=1)中t=1为赋值,不是相等比较。赋值后t为1,为真

9、以上描述中,正确的是 【 正确答案: C】。

A.do-while语句中,循环体不能使用复合语句
B.do-while循环由do开始,到while结束,在while (表达式) 后面不能写分号
C.在do-while循环中,循环体至少执行一次
D.在do-while循环中,根据情况可以省略while

10、若i,j 已经定义为int型,则以下程序段中循环体总的执行次数是 【 正确答案: A】。

for(i=6; i; i--)

      for (j=0; j<4; j++)

     {  ......  }

A.24              B.20           C.25           D.28

解析:for(i=6; i; i--)中的表达式2  i  等价于i!=0

编程题

1、换零钱

【问题描述】用一张100元人民币换5元、1元、0.5元面值的人民币,要求各种面值的人民币至少各一张,且总张数为100张,问共有多少种换法,各种面值分别为多少张?

【输入形式】无
【输出形式】各种满足条件的换法及换法总数

各种换法前输出

5yuan 1yuan 0.5yuan

每种换法占一行,格式:"%4d%6d%6d\n"(分别与5元、1元、0.5元对应)

最后输出换法总数

【样例输入】无
【样例输出】

5yuan 1yuan 0.5yuan

     1    91     8

     2    82    16

     3    73    24

     4    64    32

     5    55    40

     6    46    48

     7    37    56

     8    28    64

     9    19    72

    10    10    80

    11     1    88

total:11

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	int x=0,y=0,z=0,total=0;
	printf("5yuan 1yuan 0.5yuan\n");
	for(x=1;x<=20;x++)
	{
	    for(y=1;y<=100;y++)
	    {
	        for(z=1;z<=200;z++)
	        {
	            if ((x*5+y*1+z*0.5==100)&&(x+y+z==100))
	            {
		            total++;
		            printf("%4d%6d%6d\n",x,y,z);
	            }
	        }			
	    }
	}
	printf("total:%d\n",total);
	return 0;
}

2、最大公约数和最小公倍数

【问题描述】输入两个正整数m和n,求其最大公约数和最小公倍数。

【输入形式】两个正整数
【输出形式】最大公约数和最小公倍数
【样例输入】15,25
【样例输出】

gcd:5

lcm:75

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	int x,y,z,a,gcd=0,lcm;
	scanf("%d,%d",&x,&y);
	z=x*y;
	if (x<y)
	{
		a=x;
		x=y;
		y=a;
	}
	if(x%y==0)
	{
		lcm=x;
		gcd=y;
	}
	else
	{
	    while(x%y!=0)
	    {
		    gcd=x%y;
		    x=y;
		    y=gcd;
	    }
	    lcm=z/gcd;
	}
	printf("gcd:%d\n",gcd);
	printf("lcm:%d\n",lcm);
	return 0;
}

3、分数序列和

【问题描述】有一分数序列:

求该数列的前n项之和,n由键盘输入。 

【输入形式】一个整数n
【输出形式】该数列的前n项之和
【样例输入】3
【样例输出】5.1667

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	double a=2.0,b=1.0,c;
	double d,sum=0;
	int n,m;
	scanf("%d",&n);
	for(m=1;m<=n;m++)
	{
		d=(double)a/b;
		c=a;
		a=a+b;
		b=c;
		sum=sum+d;
	}
	printf("%.4f\n",sum);
	return 0;
}

4、用梯形法求定积分

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	double a,b,d,s,sd,xd,sum=0;
	int i,n;
	scanf("%lf,%lf,%d",&a,&b,&n);
	d=(b-a)/n;
	for(i=0;i<=n-1;i++)
	{
		sd=2*pow(a+d*i,5)+5*pow(a+d*i,3);
		xd=2*pow(a+d*(i+1),5)+5*pow(a+d*(i+1),3);
		s=(sd+xd)*d/2.0;
		sum=sum+s;
	}
	printf("%.2f\n",sum);
	return 0;
}

5、水仙花数

【问题描述】输出指定范围的水仙花数。所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。

提示:有两种方法

  分割法:三位数拆成三个数字

  拼接法:三位数字拼成三位数
【输入形式】两个整数:指定的范围
【输出形式】该范围内的水仙花数
【样例输入】100 200
【样例输出】153

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	int a,b,c,x,y,i;
	scanf("%d %d",&x,&y);
	for(i=x;i<=y;i++)
	{
		a=i/100%10;
		b=i/10%10;
		c=i%10;
		if(pow((double)a,3)+pow((double)b,3)+pow((double)c,3)==i)
		printf("%d\n",i);
	}
	return 0;
}

6、牛顿迭代法求根

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	double x,y,a,y1;
	scanf("%lf",&a);
	do
	{
		x=a;
		y=2*x*x*x-4*x*x+3*x-6;
		y1=6*x*x-8*x+3;
		a=x-y/y1;
	}
	while(fabs(x-a)>=1e-10);
	printf("%.2f\n",a);
	return 0;
}

7、编程求指定范围中三个数字之和为12、积为42的三位数

【问题描述】编程求出[a,b]之间满足下列条件的三位数:该数的三个数字之积为42,三位数字之和为12。a,b由键盘输入。
【输入形式】一个区间a,b的值
【输出形式】该区间内满足条件的三位数
【样例输入】200 300
【样例输出】

237

273

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	int a,b,c,x,y,i;
	scanf("%d %d",&x,&y);
	for(i=x;i<=y;i++)
	{
		a=i/100%10;
		b=i/10%10;
		c=i%10;
		if(a*b*c==42&&a+b+c==12)
		printf("%d\n",i);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺❀氯ྀൢ躅ྀൢ❀༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值