第三章实验4 for语句及嵌套综合习题答案Word文档格式.docx
《第三章实验4 for语句及嵌套综合习题答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《第三章实验4 for语句及嵌套综合习题答案Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
1+2!
="
s;
}
30!
如果用整数存储会溢出
floats=0,t=1;
intn;
=30;
学生另解,双重循环
思路:
sum=0;
for(i=1;
i<
i++)
{
求i!
放入f;
;
sum=sum+f;
main()
{inti,j,f,sum=0;
for(i=1;
f=1;
for(j=1;
j<
=i;
j++)
f=f*j;
sum+=f;
}
cout<
+...+10="
sum<
endl;
return0;
}
2、求出1-1000之内的完全平方数。
所谓的完全平方数是指能够表示成为另一个整数的平方的整数。
要求每行输出8个数。
(课本P66页四、6)
输出1000以内的完全平方数最简单的方法就是从1开始求平方并输出,直到i的平方大于1000.
至于每行输出8个数,i代表找到的第i个完全平方数,i是8的倍数时换行,红色代码实现每8个换行
#include<
voidmain()
for(inti=1;
i*i<
=1000;
'
\t'
if(i%8==0)cout<
}格式输出另解,可尝试去掉setiosflags设置实现右对齐
math.h>
iomanip.h>
//如果使用了控制符,要加iomanip头文件
voidmain()
{
inti;
for(i=1;
setw(9)<
setiosflags(ios:
:
left)<
i*i;
//左对齐,指定输出项的宽度,在输出的数据项之间进行隔开
if(i%8==0)cout<
另解
这个方案要先找到最大的平方数小于1000的数k=sqrt(1000),这样循环次数就可以确定了
#include<
inti,k=sqrt(1000);
for(i=1;
=k;
{
setw(4)<
if(i%8==0)cout<
\n'
另解:
这个偷懒了,用break中断循环
#include<
intn=0;
40;
intj=i*i;
if(j>
1000)break;
if(n%8==0)cout<
n++;
setw(8)<
j;
这个解决方法比较麻烦,从1-1000依次判断i是否是完全平方数,如果一个数的平方根的平方等于该数,这说明此数是完全平方数
{longinti,j=0,x;
for(i=1;
x=(long)sqrt(i);
if(x*x==i)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
i;
j++;
if(j%8==0)
\n"
}
3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如:
6的银子为1,2,3,而6=1+2+3,因此6是“完数”。
编程序找出1000之内的所有完数,并按下面格式输出其因子:
6,itsfactorsare1,2,3
参照谭浩强C程序设计第四版学习辅导P43页第9题
或谭浩强C++程序设计题解与上机辅导P26页第20题
for(m=2;
m<
找到m因子并累加起来
如果满足完数定义,找到所有因子并输出
main()
intm,s,i;
m++)
s=0;
m;
i++)//内循环找到m的所有因子并累加到s变量
if((m%i)==0)s=s+i;
if(s==m)
isa完数"
itsfactorsare:
i++)//内循环找m的所有因子并输出
if(m%i==0)cout<
"
另解:
因子之间带逗号的
for(inti=2;
intsum=0;
for(intl=1;
l<
l++)
if(i%l==0)sum+=l;
if(sum==i)
cout<
itsfactorsare"
sum=0;
{
if(i%l==0)cout<
"
}
\b'
'
//'
退格符,相当于backspace把多余的逗号去掉
4、以表格格式显示1到10的乘法表,如下图所示。
思路:
先输出表头
用row做行索引,col做列索引
for(row=1;
row<
row++)
输出第row行第一列和分隔符|
输出第row行乘法表
换行
{introw;
/*行索引*/
intcol;
/*列索引*/
\n乘法表:
X|"
/*表头*/
for(col=1;
col<
col++)
col;
---+"
42;
-'
for(row=1;
row<
row++)
setw
(2)<
|"
col++)/*内循环(列)*/
row*col;
1、译密码。
为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。
例如,可以按以下规律将电文变成密码:
将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。
见下图。
字母按上述规律转换,非字母字符不变。
如″Wonderful!
″转换为″Asrhivjyp!
″。
输入一行字符,要求输出其相应的密码。
iostream>
usingnamespacestd;
intmain()
{charc;
Pleaseinput"
while((c=getchar())!
='
)
if((c>
a'
&
&
c<
z'
)||(c>
A'
Z'
))
c=c+4;
if(c>
+4||c>
)c=c-26;
c;
解2:
v'
V'
elseif(c>
w'
||c>
W'
)c=c-22;
2、求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。
2+22+222+2222+22222(此时n=5),a,n由键盘输入。
参照谭浩强C程序设计第四版学习辅导P41页第5题
或谭浩强C++程序设计题解与上机辅导P24页第17题
思路:
要求用户输入a和n
=n;
计算第i项tn
把第i项累加到sn中
计算第i项用内循环实现太麻烦,可以用上一轮循环的第i-1项推出,比如第i-1项为222,求2222,可用222*10+2(tn=tn*10+a)或者222+2000(tn=tn+a,a每次循环都乘以10)
{inta,n,sn=0,tn=0;
a,n=:
cin>
>
a>
n;
for(inti=1;
tn=tn*10+a;
//赋值后的tn为i个a组成数的值
sn=sn+tn;
//赋值后的sn为多项式前i项之和
a+aa+aaa+...="
sn<
另解:
inta,n,sn=0,tn=0;
tn=tn+a;