第3章 基本控制结构


第3章 基本控制结构




习题3



选择题


1.下列选项中属于C++语句的是____。
A);
B)a=17
C)i+5
D)cout<<'\n'


2.下列声明语句中没有起到定义作用的是____。
A)int count;
B)const double pi=3.14159;
C)in max(int a,int b){ return a>b ? a : b; }
D)extern long index;


3.下面程序的输出结果是____。

#include<iostream>
using namespace std;
int main()
{
	int a=2,b=-1,c=2;
	if(a<b)
		if(b<0) c=0;
	else c+=1;
	cout<<c<<endl;
}

A)0
B)1
C)2
D)3


4.下列for语句的循环次数为____。

for(int i=0,x=0;!x&&i<=5;++i);

A) 5 5 5
B) 6 6 6
C) 7 7 7
D)无穷次


5.下列语句段将输出字符'*'的个数为____。

int i=100;
while(1)
{
	i--;
	if(i==0) break;
	cout<<'*';
}

A) 98 98 98
B) 99 99 99
C) 100 100 100
D) 101 101 101


6.下面程序的输出结果是____。

#include<iostream>
using namespace std;
int main()
{
	int s;
	for(int k=2;k<6;k+=2)
	{
		s=1;
		for(int j=k;j<6;++j) s+=j;
	}
	cout<<s<<endl;
	return 0;
}

A)9
B)1
C)11
D)10


7.下面程序的输出结果是____。

#include<iostream>
using namespace std;
int main()
{
	int n=10;
	while(n>7)
	{
		n--;
		cout<<n<<',';
	}
	cout<<endl;
	return 0;
}

A)10,9,8,
B)9,8,7,
C)10,9,8,7,
D)9,8,7,6,


8.下列关于do...while语句的叙述中,正确的是____。
A)do...while语句所构成的循环不能用其他语句构成的循环来代替
B)do...while语句所构成的循环只能用break语句跳出
C)do...while语句所构成的循环只有在while后面的表达式非零时才结束
D)do...while语句所构成的循环只有在while后面的表达式为零时才结束


9.下面程序的输出结果是____。

#include<iostream>
using namespace std;
int main()
{
	int x;
	for(int i=1;i<=100;++i)
	{
		x=i;
		if(++x%2==0)
			if(++x%3==0)
				if(++x%7==0)
					cout<<x<<',';
	}
	cout<<endl;
	return 0;
}

A)39,81,
B)42,84,
C)26,68,
D)28,70,


10.下列关于break语句的叙述中,不正确的是____。
A)break语句可用在循环体中,它将使执行流程跳出本层循环体
B)break语句可用在switch语句中,它将使执行流程跳出当前switch语句
C)break语句可用在if语句中,它将使执行流程跳出当前if语句
D)break语句在一层循环体中可以出现多次


填空题


1.C++语言中用于控制程序执行流程的三种基本结构是 ____ 、 ____ 、 ____ 。


2.下面语句段的输出结果是____。

int x=0,y=2,z=3;
switch(x)
{
	case 0: switch(y)
	{
		case 1: cout<<'*'; break;
		case 2: cout<<'%'; break;
	}
	case 1: switch(z)
	{
		case 1: cout<<'$'; break;
		case 2: cout<<'*'; break;
		default: cout<<'#';
	}
}

3.下面语句段的输出结果是____。

int k=1,n=10,m=1;
while(k<=n)
{
	m*=2;
	n--;
}
cout<<m<<endl;

4.当执行完下面语句段后,i的值是 ____ 、j的值是 ____ 、k的值是 ____。

int a=10,b,c,d,i,j,k;
b=c=d=5;
i=j=k=0;
for(;a>b;++b) i++;
while(a>++c) j++;
do { k++; } while(a>d++);

5.将下面的语句断(a)补充完整,使其和语句段(b)在功能上完全等价:
(a)

double s=0.0;
________;
int k=0;
do
{
	s+=d;
	________;
	d=1.0/(k*(k+1));
}while(________);

(b)

double s=1.0;
for(int k=1;k<=10;++k) s+=1.0(k*(k+1));

编程题


1.编写程序,实现输入一个整数,判断其能否被 3 , 5 , 7 3,5,7 3,5,7整除,并输出以下信息之一:
(a)能同时被 3 , 5 , 7 3,5,7 3,5,7整除;
(b)能被其中两个数(要输出是哪两个数)整除;
(c)不能被 3 , 5 , 7 3,5,7 3,5,7中的任一个数整除。


2.编写程序,要求由用户输入任意三个实数,然后求出其中的最大值和最小值。


3.编写摄氏温度与华氏温度的换算程序。要求用户输入温度数值并指明该数值表示摄氏温度(C)还是华氏温度(F),程序将根据不同的输入(摄氏或华氏)进行不同的换算。例如,用户输入40.2C,程序输出104.36F,或用户输入104.36F,程序输出40.2C
已知,换算公式为:摄氏温度 = 5 9 ( =\frac{5}{9}( =95(华氏温度 − 32 ) -32) 32)


4.编写程序,求 1 − 3 + 5 − 7 + ⋯ − 99 + 101 1-3+5-7+\cdots-99+101 13+57+99+101的值


5.编写程序,根据公式 e = 1 + 1 1 ! + 1 2 ! + 1 3 ! + 1 4 ! + ⋯ e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+\cdots e=1+1!1+2!1+3!1+4!1+计算 e e e的值。要求:
(a)使用for循环,计算到公式的前 50 50 50项。
(b)使用while循环,直到公式最后一项的值小于 1 0 − 4 10^{-4} 104为止。


6.编写程序,输出从公元 1600 1600 1600年到公元 2000 2000 2000年中所有闰年的年份。要求每行输出 5 5 5个年份。判断公元年份是否为闰年的条件是:
(a)年份如能被 4 4 4整除,而不能被 100 100 100整除,则为闰年。
(b)年份如能被 400 400 400整除也是闰年。


7.编写程序,求“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如, 153 153 153是水仙花数,因为 1 3 + 5 3 + 3 3 = 153 1^3+5^3+3^3=153 13+53+33=153


8.编写程序,求 1000 1000 1000之内的所有“完全数”。所谓“完全数”是指一个数恰好等于其因子之和。例如, 6 6 6是完全数,因为 1 + 2 + 3 = 6 1+2+3=6 1+2+3=6


9.使用迭代法变成求 x = a x=\sqrt a x=a 。求平方根的迭代公式为:
x n + 1 = 1 2 ( x n + a x n ) x_{n+1}=\frac{1}{2}(x_n+\frac{a}{x_n}) xn+1=21(xn+xna)


10.编写程序,使用循环语句打印如下图案:

   *
  ***
 *****
*******
 *****
  ***
   *


习题参考答案



选择题


1.A
2.D
3.C
4.B
5.B
6.D
7.B
8.D
9.D
10.C


填空题


1.顺序结构、选择结构、循环结构
2.%#
3.1024
4.546
5.

double d=1.0
++k
k<=10

编程题


1.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	bool f3=0,f5=0,f7=0;
	int x; scanf("%d",&x);
	if(x%3==0) f3=1;
	if(x%5==0) f5=1;
	if(x%7==0) f7=1;
	if(f3&&f5&&f7)
		printf("%d能同时被3,5,7整除\n",x);
	else if(!f3&&!f5&&!f7)
		printf("%d不能被3,5,7中的任一个数整除\n",x);
	else {
		if(f3&&f5) printf("%d能被其中两个数(3,5)整除\n",x);
		if(f3&&f7) printf("%d能被其中两个数(3,7)整除\n",x);
		if(f5&&f7) printf("%d能被其中两个数(5,7)整除\n",x);
	}
	return 0;
}

2.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	double x,y,z;
	scanf("%lf %lf %lf",&x,&y,&z);
	printf("%lf\n",max(x,max(y,z)));
	printf("%lf\n",min(x,min(y,z)));
	return 0;
}

3.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	double x; char ch;
	scanf("%lf%c",&x,&ch);
	if(ch=='C')
		cout<<9.0*x/5.0+32<<'F'<<endl;
	if(ch=='F')
		cout<<5.0/9.0*(x-32)<<'C'<<endl;
	return 0;
}

4.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	int f=1,ans=0;
	for(int i=1;i<=101;i+=2){
		ans+=i*f;
		f*=-1;
	}
	printf("%d",ans);
	return 0;
}

5.完整代码如下:
(a)

#include<iostream>
using namespace std;
int main(){
	double e=1,res=1;
	for(int i=1;i<=50;++i){
		res*=i;
		e+=1.0/res;
	}
	cout<<e;
	return 0;
}

(b)

#include<iostream>
using namespace std;
int main(){
	double e=1,x=1;
	int cnt=1;
	while((1.0/x)>=0.0001){
		e+=1.0/x;
		x*=++cnt;
	}
	cout<<e;
	return 0;
}

6.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	int cnt=0;
	for(int i=1600;i<=2000;++i)
		if((i%4==0 && i%100!=0) || (i%400==0)){
			printf("%d ",i);
			if(++cnt==5){ cnt=0; puts(""); }
		}
	return 0;
}

7.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	for(int i=1;i<=9;++i)
		for(int j=0;j<=9;++j)
			for(int k=0;k<=9;++k)
				if(i*i*i+j*j*j+k*k*k == i*100+j*10+k)
					printf("%d\n",i*100+j*10+k);
	return 0;
}

8.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	for(int i=1;i<=1000;++i){
		int res=0;
		for(int j=1;j<i;++j)
			if(i%j==0) res+=j;
		if(res==i) printf("%d\n",i);
	}
	return 0;
}

9.前后两次求出的x的差的绝对值小于 1 0 − 5 10^{-5} 105,完整代码如下:

#include<iostream>
#include<cmath> 
using namespace std;
int main(){
	double a,xnow,xpre=0;
	scanf("%lf",&a);
	xnow=a/2.0;
	while(fabs(xnow-xpre)>=0.00001){
		xpre=xnow;
		xnow=1.0/2.0*(xnow+a/xnow);
	}
	cout<<xnow;
	return 0;
}

10.完整代码如下:

#include<iostream>
using namespace std;
int main(){
	for(int i=1;i<=4;++i){
		for(int j=4-i;j;--j) printf(" ");
		for(int j=1;j<=i*2-1;++j) printf("*");
		puts("");
	}
	for(int i=1;i<=3;++i){
		for(int j=1;j<=i;++j) printf(" ");
		for(int j=1;j<=(4-i)*2-1;++j) printf("*");
		puts("");
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值