第四次数组部分补充习题.docx
《第四次数组部分补充习题.docx》由会员分享,可在线阅读,更多相关《第四次数组部分补充习题.docx(21页珍藏版)》请在冰豆网上搜索。
![第四次数组部分补充习题.docx](https://file1.bdocx.com/fileroot1/2023-2/8/4ff345f0-c717-4ed4-886b-8b244ca0c478/4ff345f0-c717-4ed4-886b-8b244ca0c4781.gif)
第四次数组部分补充习题
第三次作业没有完成的程序题
2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。
#include
usingnamespacestd;
intmain()
{
intn;
intu=0,v=0;
intsum=0;
intcount=0;//算是一个计数器
doubleaverage;
cout<<"输入任意的一个整数"<cin>>n;//先输入一个值,否则系统会随机给定一个值
while(n!
=0)
{
count=count+n;
if(n>0)
u=u+1;
else//else(n<0);注意如果else后跟着条件就要加分号
v=v+1;
cin>>n;//继续进行判断
}
cout<<"负数有:
"<"<
average=sum/count;
cout<<"这组数的平均值为:
"<return0;
}
2.6编程输出下列图形,中间一行英文字母由输入得到。
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
还是不懂后面的
#include
usingnamespacestd;
intmain()
{
charin;
inti,j;
do
{
cout<<"输入一个字母:
";
cin>>in;
if((in>=97)&&(in<=122))in-=32;//小写改大写
}
while((in<65)||(in>90));
intline=in-'A';
for(i=0;i<=line;i++)
{//上三角
for(j=line-i;j>0;j--)cout<<"";//前方空格
for(j=1;j<=2*i+1;j++)cout<<''<cout<}
for(i=line;i>0;i--)
{//下三角(少一行)
for(j=0;j<=line-i;j++)cout<<"";
for(j=1;j<=2*i-1;j++)cout<<''<cout<}
return0;
}
2.5编程打印如下图形:
*
***
*****
*******
***
***
***
#include
usingnamespacestd;
intmain()
{
inti,j;
for(i=1;i<5;i++)
{
for(j=4-i;j>0;j--)
cout<<"";
for(j=1;j<=2*i-1;j++)
cout<<"*";
cout<}
for(i=1;i<4;i++)
cout<<"***\n";
return0;
}
2.12将100元换成用10元、5元和1元的组合,共有多少种组合方法。
#include
usingnamespacestd;
intmain()
{
inti,j,k,count=0;
for(i=0;i<=10;i++)//控制是十元的个数
for(j=0;j<=20;j++)//控制五元的个数
{
k=10*i+5*j;
if(k>=0)
{
cout<
count++;//计数器
}
}
cout<return0;
}
2.11编程求1000之内的所有完全数。
所谓完全数指的是一个数恰好等于它的所有因子和。
例如6=1+2+3,就是一个完全数。
#include
usingnamespacestd;
intmain()
{
inti,j,sum_yz;
for(i=1;i<=1000;i++)//找从1到1000的满足题意的数
{
sum_yz=0;
for(j=1;j<=i;j++)//找其因子
if(i%j==0)
sum_yz=sum_yz+j;
if(i=sum_yz)
cout<
}
return0;
}
以下作业截止提交时间为:
2012年4月30日23:
00
一、没有全部完成第三章编程题的或程序有错的,首先完成第三章的程序作业。
第四章数组部分补充习题
二程序设计
1.若有一字符串正反读都一样(如level、madam),称之为回文。
请编写一程序验证输入的字符串是否为回文。
#include
usingnamespacestd;
intmain()
{
charhui[10];
intn;
cout<<"请输入您要验证的数组:
"<for(inti=0;i<=10;i++)
{
cin>>hui[i];
if(hui[i]=='z')
{
n=i-1;
break;
}
}
cout<<"您所输入的字符串为:
";
for(i=0;icout<for(i=0;i<=(n+1)/2;i++)
{
intj=n-i;
if(hui[i]==hui[j])
{
continue;//如果对应相等则继续进行判断
}
else//else后一定不能跟着表达式
{
cout<<"您所输入的不是回文"<break;
}
}
if(i>=(n+1)/2)//从循环中跳出来有两种可能,一种是不是回文,一种是i>(n+1)/2
cout<<"您所输入的是回文";
return0;
}
结果:
能正常运行并得出想要的结果。
2.将一个数组中的值按由小到大重新存放。
例如,原来顺序8,3,5,4,1。
要求改为1,3,4,5,8。
编程实现之。
#include
usingnamespacestd;
intmain()
{
constintM=100;
intnum[M];
intn;
cout<<"输入一组数,并且以0结束,这组数为:
"<for(intu=0;u{
cin>>num[u];
if(num[u]==0)
{
n=u-1;
break;
}
}
for(inti=0;ifor(intj=n;j>i;j--)
if(num[j-1]>num[j])
{
intx=num[j-1];
num[j-1]=num[j];
num[j]=x;
}
cout<<"结果是:
"<for(intk=0;k<=n;k++)
{
cout<cout<}
return0;
}
结果:
能正常运行,并得到想要的结果。
3.设有下列矩阵:
A=
请编程序找出符合下列特征的所有元素,并打印出他们在矩阵中的位置:
(1)它们既是所在行的最小值,又是所在列的最小值;
#include
usingnamespacestd;
intmain()
{
intmin,tmp,MIN;
intP=0,q=0;
inta[4][4]={
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16};
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)//找到一行中的最小值,确定列数
{
min=a[i][j];
for(intk=j;k<4;k++)
if(a[i][k]>min)
P++;
if(P!
=3-j)
continue;
else
for(intn=0;n<4;n++)
{
MIN=a[n][j];
for(intu=n;u<4;u++)//在该列中跟其他进行比较
{
if(a[u][j]>MIN)
q++;
}
if(q!
=3-n)
continue;
else
if(i!
=n)
continue;
else
cout<<"第"<
}
}
}
return0;
}
结果:
能正常运行,并得出想要的结果。
自己编的程序不对,看了同学的。
(2)它们既是所在行的最大值,又是所在列的最大值;
#include
usingnamespacestd;
intmain()
{
intmax,tmp,MIN;
intp=0,q=0;
inta[4][4]=
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16
};
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
max=a[i][j];
for(intk=j;k<4;k++)
if(a[i][k]p++;
if(p!
=3-j)
continue;
else
for(intn=0;n<4;n++)
{
max1=a[n][j];
for(intu=n;u<4;u++)
{
if(a[u][j]q++;
}
if(q!
=3-n)
continue;
else
if(i!
=n)
continue;
else
cout<<"第"<
}
}
}
return0;
}
结果:
能正常运行,并得出想要的结果。
(3)它们是所在行的最小值,却是所在列的最大值;
#include
usingnamespacestd;
intmain()
{
intmin,tmp,MIN;
intp=0,q=0;
inta[4][4]=
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16
};
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
min=a[i][j];
for(intk=j;k<4;k++)
if(a[i][k]>min)
p++;
if(p!
=3-j)
continue;
else
for(intn=0;n<4;n++)
{
MIN=a[n][j];
for(intu=n;u<4;u++)
{
if(a[u][j]q++;
}
if(q!
=3-n)
continue;
else
if(i!
=n)
continue;
else
cout<<"第"<
}
}
}
return0;
}
结果:
能运行,但没有显示结果。
(4)它们是所在行的最大值,却是所在列的最小值。
#include
usingnamespacestd;
intmain()
{
intmax,tmp,MIN;
intp=0,q=0;
inta[4][4]=
{
1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16
};
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
max=a[i][j];
for(intk=j;k<4;k++)
if(a[i][k]p++;
if(p!
=3-j)
continue;
else
for(intn=0;n<4;n++)
{
MIN=a[n][j];
for(intu=n;u<4;u++)
{
if(a[u][j]>MIN)
q++;
}
if(q!
=3-n)
continue;
else
if(i!
=n)
continue;
else
cout<<"第"<
}
}
}
return0;
}
结果:
能正常运行并的出想要的结果。
4.编写程序,将上题中的矩阵用二维数组存储矩阵元素,从键盘输入数据,将矩阵转置后按行输出。
#include
usingnamespacestd;
intmain()
{
intA[4][4];
intx;
cout<<"请输入您要转置的4*4阶行列式:
"<for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
cin>>A[i][j];
}
cout<<"您输入的4*4阶行列式为:
"<for(i=0;i<4;i++)
{
for(intj=0;j<4;j++)
cout<cout<}
cout<<"转置后的行列式为:
"<for(i=0;i<4;i++)
{
for(intv=i;v<4;v++)
{
x=A[i][v];
A[i][v]=A[v][i];//如果有多条语句,一定要用{}括起来
A[v][i]=x;
}
}
cout<<"转置后的行列式为:
"<for(i=0;i<4;i++)
{
for(intj=0;j<4;j++)//为什么前面已经定义了j后面还要在定义一次?
{
cout<}
cout<}
return0;
}
结果:
能正常运行并得出想要的结果。
5.编写程序,将两个字符串连接起来,要求不使用strcat()函数。
#include
usingnamespacestd;
intmain()
{
charA[20];
intn;
cout<<"输入一个字符串A并以z为结束"<for(inti=0;i<20;i++)
{
cin>>A[i];
if(A[i]=='z')
{
n=i;
break;
}
}
charB[20];
intm;
cout<<"输入一个字符串B并以z为结束"<for(intj=n;j<40;j++)
{
cin>>B[j];
if(B[j]=='z')
{
m=j;//这里是m=j-1
break;
}
}
charC[100];
for(intv=0;v{
if(vC[v]=A[v];
else
C[v]=B[v];
}
cout<<"连接后的字符串C为:
"<for(intx=0;xcout<cout<return0;
}
结果:
能正常运行并得到想要的结果。
6.输入三个字符串,请使用字符串比较函数strcmp()将这三个字符串排序后按从小到大的顺序输出。
#include
#include
usingnamespacestd;
intmain()
{
chara[10],b[10],c[10];
chard[10],e[10],f[10];
cout<<"请分别输入三组字符串";
cin>>a;
cin>>b;
cin>>c;
if((strcmp(a,b)>0)&&(strcmp(a,c)>0))//第一种情况如果a>b,a>c
{
if(strcmp(b,c)>0)//比较b,c的大小,如果b>c
for(inti=0;i<10;i++)
d[i]=a[i],e[i]=b[i],f[i]=c[i];//a>b>c分别赋值给d,e,f.
else
for(inti=0;i<10;i++)//a>c>b
d[i]=a[i],e[i]=c[i],f[i]=b[i];
}
else
{
if((strcmp(b,a)>0)&&(strcmp(b,c)>0))//如果b>a,b>c.
{
if(strcmp(a,c)>0)//b>a>c分别赋值给d,e,f.
for(intj=0;j<10;j++)
d[j]=b[j],e[j]=a[j],f[j]=c[j];
else//b>c>a分别赋值给d,e,f.
for(intj=0;j<10;j++)
d[j]=b[j],e[j]=c[j],f[j]=a[j];
}
else
if(strcmp(a,b)>0)
for(intk=0;k<10;k++)
d[k]=c[k],e[k]=a[k],f[k]=b[k];
else
for(intk=0;k<10;k++)
d[k]=c[k],e[k]=b[k],f[k]=a[k];
}
cout<<"排序后的字符串排列为:
"<return0;
}
结果:
能正常运行,得出想要的结果,不知道理解的对不对。