2014 第三章实验4 for语句及嵌套综合习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return 0;
}
2、求出1-1000之内的完全平方数。所谓的完全平方数是指能够表示成为另一个整数的平方的整数。要求每行输出8个数。(课本P66页四、6)
思路:输出1000以内的完全平方数最简单的方法就是从1开始求平方并输出,直到i的平方大于1000.
至于每行输出8个数,i代表找到的第i个完全平方数,i是8的倍数时换行,红色代码实现每8个换行
{
tn=tn*10+a;
}
sum+=tn;
}
cout<<"Sn="<<sum<<endl;
}
else cout<<"输入错误。"<<endl;
}
3、输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=13+53+33。
参照谭浩强C程序设计第四版学习辅导P43页第8题
{
求i!放入f;;
sum=sum+f;
}
#include<iostream.h>
main()
{ int i,j,f,sum=0;
for( i=1;i<=10;i++)
{
f=1;
for(j=1;j<=i ;j++)
f=f*j;
sum+=f;
}
cout<<"1!+2!+...+10="<<sum<<endl;
{
int a,n,sum=0,tn;
cout<<"求Sn=a+aa+aaa+…+aa…a(n个a)之值,请输入a(1至9)和n(正整数)的值。"<<endl;
cin>>a>>n;
if(a>=1&&a<=9&&n>0)
{
for(int i=1;i<=n;i++)
{
tn=0;
for(int l=1;l<=i;l++)
或谭浩强C++程序设计题解与上机辅导P25页第19题
思路:这道题比较简单,水仙花数是3位数,这样循环次数就确定了,从100到999,对每个三位数先拆成三个个位,然后计算个位数的立方和,判断是否等于原数,注意判断相等用==而不是=
#include<iostream.h>
main()
{
int i,j,k,n;
if(j>1000)break;
if(n%8==0)cout<<endl;
n++;
cout<<setw(8)<<j;
}
cout<<endl;
}
另解
这个解决方法比较麻烦,从1-1000依次判断i是否是完全平方数,如果一个数的平方根的平方等于该数,这说明此数是完全平方数
#include <math.h>
main()
{
int a,n,sn=0,tn=0;
cout<<"a,n=:";
cin>>a>>n;
for (int i=1;i<=n;i++)
{
tn=tn+a;//赋值后的tn为i个a组成数的值
sn=sn+tn; //赋值后的sn为多项式前i项之和
a=a*10;
}
cout<<"a+aa+aaa+...="<<sn<<endl;
1、求1!+2!+3!...+10!的和。(课本P66页四、5)
1!+2!+3!...+30!呢,程序有什么区别?
#include<iostream.h>
int main()
{
int n,s=0,t=1;
for(n=1;n<=10;n++)
{
t*=n;
s+=t;
}
cout<<"1+2!+3!...+10!="<<s;
for (row = 1; row <=10; row++)
{
cout<<setw(2)<<row<<" |";
for (col = 1; col <=10; col++) /*内循环(列) */
cout<<setw(4)<<row * col;
cout<<'\n';
}
}
1、译密码。为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。见下图。字母按上述规律转换,非字母字符不变。如″Wonderful!″转换为″Asrhivjyp!″。输入一行字符,要求输出其相应的密码。
#include <iomanip.h>
#include<iostream.h>
int main()
{ long int i,j=0, x;
for (i=1;i<=1000;i++)
{
x=(long)sqrt(i);
if(x*x==i)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
#include<math.h>
#include<iomanip.h>//如果使用了控制符,要加iomanip头文件
void main()
{
int i;
for(i=1;i*i<=1000;i++)
{
cout<<setw(9)<<setiosflags(ios::left)<<i*i;
//左对齐,指定输出项的宽度,在输出的数据项之间进行隔开
{
计算第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)
#include<iostream.h>
main()
{ int a,n,sn=0,tn=0;
{
c=c+4;
if(c>'Z' && c<='Z'+4 || c>'z') c=c-26;
}
cout<<c;
}
cout<<endl;
}
解2:#include<iostream>
using namespace std;
int main( )
{char c;
cout<<"Please input"<<endl;
}
if(sum==i)
{
cout<<i<<",its factors are ";
sum=0;
for(int l=1;l<i;l++)
{
if(i%l==0)cout<<l<<",";
}
cout<<'\b'<<' '<<endl;//'\b'退格符,相当于backspace把多余的逗号去掉
}
}
}
4、以表格格式显示1到10的乘法表,如下图所示。
{
cout<<setw(4)<<i;
j++;
if (j%8 == 0)
cout<<"\n";
}
}
cout<<"\n";
}
3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的银子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:6,its factors are 1,2,3
cout<<"narcissus numbers are:"<<endl;
for (n=100;n<1000;n++)
{i=n/100;
#include<iostream.h>
void main()
{
for(int i=1;i*i<=1000;i++)
{
cout<<i*i<<'\t';
if(i%8==0)cout<<endl;
}
cout<<endl;
}格式输出另解,可尝试去掉setiosflags设置实现右对齐
#include<iostream.h>
if(i%8==0)cout<<endl;
}
cout<<endl;
}
另解
这个方案要先找到最大的平方数小于1000的数k=sqrt(1000),这样循环次数就可以确定了
#include <iomanip.h>
#include<iostream.h>
main()
{
int i,k=sqrt(1000);
for (i=1;i<=k;i++)
cout<<"\n乘法表:\n";
cout<<" X |";/*表头*/
for (col = 1; col <=10; col++)
cout<<setw(4)<<col;
cout<<'\n';
cout<<"---+";
for (col = 1; col < 42; col++)
cout<<'-';
cout<<'\n';
if (m%i==0) cout<<i<<" ";
cout<<endl;
}
}
}
另解:因子之间带逗号的
#include<iostream.h>
void main()
{
for(int i=2;i<=1000;i++)
{
int sum=0;
for(int l=1;l<i;l++)
{
if(i%l==0)sum+=l;
{
s=0;
for (i=1;i<m;i++)//内循环找到m的所有因子并累加到s变量
if ((m%i)==0) s=s+i;
if(s==m)
{
cout<<m<<" is a完数"<<endl;
cout<<"its factors are:";
for (i=1;i<m;i++)//内循环找m的所有因子并输出
while ((c=getchar( ))!='\n')
{
if((c>='a' && c<='v') || (c>='A' && c<='V'))
c=c+4;
else if(c>='w' && c<='z' || c>='W' && c<='Z') c=c-22;
cout<<c;
}
cout<<endl;
{
cout<<setw(4)<<i*i;
if (i%8==0) cout<<'\n';
}
}
另解:这个偷懒了,用break中断循环
#include<iostream.h>
#include<iomanip.h>
void main()
{
int n=0;
for(inti=1;i<40;i++)
{
int j=i*i;
思路:
先输出表头
用row做行索引,col做列索引
for (row=1;row<=10;row++)
{
输出第row行第一列和分隔符|
输出第row行乘法表
换行
}
#include <iomanip.h>
#include<iostream.h>
main()
{ int row; /*行索引*/
int col; /*列索引*/
}
另解
#include<iostream.h>
#include <math.h>
void main()
{
int a,b,c,n,m=0,sum=0;
cout<<"Sn=a+aa+aaa+...(n个a)"<<endl;
cout<<"输入整数a和n"<<endl;
cin>>a>>n;
for(b=0;b<=n-1;b++)
#include<iostream>
using namespace std;
int main( )
{char c;
cout<<"Please input";
while ((c=getchar( ))!='\n')
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
}
30!如果用整数存储会溢出
#include<iostream.h>
int main()
{
floats=0,t=1;
int n;
for(n=1;n<=30;n++)
{
t*=n;
s+=t;
}
cout<<"1+2!+3!...+30!="<<s;
}
学生另解,双重循环
思路:
sum=0;
for( i=1;i<=10;i++)
}
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
for (i=1;i<=n;i++)
cout<<"a,n=:";
cin>>a>>n;
for (int i=1;i<=n;i++)
{
tn=tn*10+a;//赋值后的tn为i个a组成数的值
sn=sn+tn; //赋值后的sn为多项式前i项之和
}
cout<<"a+aa+aaa+...="<<sn<<endl;
}
另解:
#include<iostream.h>
{
c=a*pow(10,b);//用pow函数实现10的b次方
m=m+c;
sum=sum+m;
}
cout<<"Sn=a+aa+....="<<sum<<endl;
}
另解:这个解法用了双重循环,麻烦,但也是一种思路
#include<ioபைடு நூலகம்tream.h>
#include<math.h>
void main()
参照谭浩强C程序设计第四版学习辅导P43页第9题
或谭浩强C++程序设计题解与上机辅导P26页第20题
思路:
for (m=2;m<=1000;i++)
{
找到m因子并累加起来
如果满足完数定义,找到所有因子并输出
}
#include<iostream.h>
main()
{
int m,s,i;
for (m=2;m<=1000;m++)
}
2、求出1-1000之内的完全平方数。所谓的完全平方数是指能够表示成为另一个整数的平方的整数。要求每行输出8个数。(课本P66页四、6)
思路:输出1000以内的完全平方数最简单的方法就是从1开始求平方并输出,直到i的平方大于1000.
至于每行输出8个数,i代表找到的第i个完全平方数,i是8的倍数时换行,红色代码实现每8个换行
{
tn=tn*10+a;
}
sum+=tn;
}
cout<<"Sn="<<sum<<endl;
}
else cout<<"输入错误。"<<endl;
}
3、输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=13+53+33。
参照谭浩强C程序设计第四版学习辅导P43页第8题
{
求i!放入f;;
sum=sum+f;
}
#include<iostream.h>
main()
{ int i,j,f,sum=0;
for( i=1;i<=10;i++)
{
f=1;
for(j=1;j<=i ;j++)
f=f*j;
sum+=f;
}
cout<<"1!+2!+...+10="<<sum<<endl;
{
int a,n,sum=0,tn;
cout<<"求Sn=a+aa+aaa+…+aa…a(n个a)之值,请输入a(1至9)和n(正整数)的值。"<<endl;
cin>>a>>n;
if(a>=1&&a<=9&&n>0)
{
for(int i=1;i<=n;i++)
{
tn=0;
for(int l=1;l<=i;l++)
或谭浩强C++程序设计题解与上机辅导P25页第19题
思路:这道题比较简单,水仙花数是3位数,这样循环次数就确定了,从100到999,对每个三位数先拆成三个个位,然后计算个位数的立方和,判断是否等于原数,注意判断相等用==而不是=
#include<iostream.h>
main()
{
int i,j,k,n;
if(j>1000)break;
if(n%8==0)cout<<endl;
n++;
cout<<setw(8)<<j;
}
cout<<endl;
}
另解
这个解决方法比较麻烦,从1-1000依次判断i是否是完全平方数,如果一个数的平方根的平方等于该数,这说明此数是完全平方数
#include <math.h>
main()
{
int a,n,sn=0,tn=0;
cout<<"a,n=:";
cin>>a>>n;
for (int i=1;i<=n;i++)
{
tn=tn+a;//赋值后的tn为i个a组成数的值
sn=sn+tn; //赋值后的sn为多项式前i项之和
a=a*10;
}
cout<<"a+aa+aaa+...="<<sn<<endl;
1、求1!+2!+3!...+10!的和。(课本P66页四、5)
1!+2!+3!...+30!呢,程序有什么区别?
#include<iostream.h>
int main()
{
int n,s=0,t=1;
for(n=1;n<=10;n++)
{
t*=n;
s+=t;
}
cout<<"1+2!+3!...+10!="<<s;
for (row = 1; row <=10; row++)
{
cout<<setw(2)<<row<<" |";
for (col = 1; col <=10; col++) /*内循环(列) */
cout<<setw(4)<<row * col;
cout<<'\n';
}
}
1、译密码。为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。见下图。字母按上述规律转换,非字母字符不变。如″Wonderful!″转换为″Asrhivjyp!″。输入一行字符,要求输出其相应的密码。
#include <iomanip.h>
#include<iostream.h>
int main()
{ long int i,j=0, x;
for (i=1;i<=1000;i++)
{
x=(long)sqrt(i);
if(x*x==i)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
#include<math.h>
#include<iomanip.h>//如果使用了控制符,要加iomanip头文件
void main()
{
int i;
for(i=1;i*i<=1000;i++)
{
cout<<setw(9)<<setiosflags(ios::left)<<i*i;
//左对齐,指定输出项的宽度,在输出的数据项之间进行隔开
{
计算第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)
#include<iostream.h>
main()
{ int a,n,sn=0,tn=0;
{
c=c+4;
if(c>'Z' && c<='Z'+4 || c>'z') c=c-26;
}
cout<<c;
}
cout<<endl;
}
解2:#include<iostream>
using namespace std;
int main( )
{char c;
cout<<"Please input"<<endl;
}
if(sum==i)
{
cout<<i<<",its factors are ";
sum=0;
for(int l=1;l<i;l++)
{
if(i%l==0)cout<<l<<",";
}
cout<<'\b'<<' '<<endl;//'\b'退格符,相当于backspace把多余的逗号去掉
}
}
}
4、以表格格式显示1到10的乘法表,如下图所示。
{
cout<<setw(4)<<i;
j++;
if (j%8 == 0)
cout<<"\n";
}
}
cout<<"\n";
}
3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的银子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:6,its factors are 1,2,3
cout<<"narcissus numbers are:"<<endl;
for (n=100;n<1000;n++)
{i=n/100;
#include<iostream.h>
void main()
{
for(int i=1;i*i<=1000;i++)
{
cout<<i*i<<'\t';
if(i%8==0)cout<<endl;
}
cout<<endl;
}格式输出另解,可尝试去掉setiosflags设置实现右对齐
#include<iostream.h>
if(i%8==0)cout<<endl;
}
cout<<endl;
}
另解
这个方案要先找到最大的平方数小于1000的数k=sqrt(1000),这样循环次数就可以确定了
#include <iomanip.h>
#include<iostream.h>
main()
{
int i,k=sqrt(1000);
for (i=1;i<=k;i++)
cout<<"\n乘法表:\n";
cout<<" X |";/*表头*/
for (col = 1; col <=10; col++)
cout<<setw(4)<<col;
cout<<'\n';
cout<<"---+";
for (col = 1; col < 42; col++)
cout<<'-';
cout<<'\n';
if (m%i==0) cout<<i<<" ";
cout<<endl;
}
}
}
另解:因子之间带逗号的
#include<iostream.h>
void main()
{
for(int i=2;i<=1000;i++)
{
int sum=0;
for(int l=1;l<i;l++)
{
if(i%l==0)sum+=l;
{
s=0;
for (i=1;i<m;i++)//内循环找到m的所有因子并累加到s变量
if ((m%i)==0) s=s+i;
if(s==m)
{
cout<<m<<" is a完数"<<endl;
cout<<"its factors are:";
for (i=1;i<m;i++)//内循环找m的所有因子并输出
while ((c=getchar( ))!='\n')
{
if((c>='a' && c<='v') || (c>='A' && c<='V'))
c=c+4;
else if(c>='w' && c<='z' || c>='W' && c<='Z') c=c-22;
cout<<c;
}
cout<<endl;
{
cout<<setw(4)<<i*i;
if (i%8==0) cout<<'\n';
}
}
另解:这个偷懒了,用break中断循环
#include<iostream.h>
#include<iomanip.h>
void main()
{
int n=0;
for(inti=1;i<40;i++)
{
int j=i*i;
思路:
先输出表头
用row做行索引,col做列索引
for (row=1;row<=10;row++)
{
输出第row行第一列和分隔符|
输出第row行乘法表
换行
}
#include <iomanip.h>
#include<iostream.h>
main()
{ int row; /*行索引*/
int col; /*列索引*/
}
另解
#include<iostream.h>
#include <math.h>
void main()
{
int a,b,c,n,m=0,sum=0;
cout<<"Sn=a+aa+aaa+...(n个a)"<<endl;
cout<<"输入整数a和n"<<endl;
cin>>a>>n;
for(b=0;b<=n-1;b++)
#include<iostream>
using namespace std;
int main( )
{char c;
cout<<"Please input";
while ((c=getchar( ))!='\n')
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
}
30!如果用整数存储会溢出
#include<iostream.h>
int main()
{
floats=0,t=1;
int n;
for(n=1;n<=30;n++)
{
t*=n;
s+=t;
}
cout<<"1+2!+3!...+30!="<<s;
}
学生另解,双重循环
思路:
sum=0;
for( i=1;i<=10;i++)
}
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
for (i=1;i<=n;i++)
cout<<"a,n=:";
cin>>a>>n;
for (int i=1;i<=n;i++)
{
tn=tn*10+a;//赋值后的tn为i个a组成数的值
sn=sn+tn; //赋值后的sn为多项式前i项之和
}
cout<<"a+aa+aaa+...="<<sn<<endl;
}
另解:
#include<iostream.h>
{
c=a*pow(10,b);//用pow函数实现10的b次方
m=m+c;
sum=sum+m;
}
cout<<"Sn=a+aa+....="<<sum<<endl;
}
另解:这个解法用了双重循环,麻烦,但也是一种思路
#include<ioபைடு நூலகம்tream.h>
#include<math.h>
void main()
参照谭浩强C程序设计第四版学习辅导P43页第9题
或谭浩强C++程序设计题解与上机辅导P26页第20题
思路:
for (m=2;m<=1000;i++)
{
找到m因子并累加起来
如果满足完数定义,找到所有因子并输出
}
#include<iostream.h>
main()
{
int m,s,i;
for (m=2;m<=1000;m++)