第4章数组Word文档下载推荐.docx
- 文档编号:16638287
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:15
- 大小:31.23KB
第4章数组Word文档下载推荐.docx
《第4章数组Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章数组Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
(a)t(b)一个地址值(c)java(d)javac++
9.若用数组名作为调用函数的实参,则传递给形参的是(a)。
(a)数组存贮首地址(b)数组的第一个元素值
(c)数组中全部元素的值(d)数组元素的个数
10.在下列选项中,(b,d)是错误的。
(a)gets和puts函数可以输入输出包含空格的字符串
(b)cin不能输入包含空格的字符串
(c)cout不能输出包含空格的字符串
(d)使用赋值运算符可以对字符数组整体赋值
11.下列描述中,错误的是(c)。
(a)输出字符指针就是输出字符串
(b)输出字符指针的间接引用就是输出单个字符
(c)具有相同字符的两个字符串常量相等
(d)两个数组名的比较是地址的比较
12.判断字符串s1和s2是否相等的表达式为(d)。
(a)s1=s2(b)s1==s2
(c)strcpy(s1,s2)==0(d)strcmp(s1,s2)==0
13.判断字符串s1是否大于字符串s2的表达式为(c)。
(a)s1>
s2(b)strcmp(s1,s2)==0
(c)strcmp(s1,s2)>
0(d)strcmp(s2,s1)>
4.2阅读下列程序,写出执行结果
1.#include<
iostream.h>
voidmain()
{inti,conut=0,sum=0;
floataverage;
inta[]={1,2,3,4,5,6,7,8,9,10};
for(i=0;
i<
10;
i++)
{if(a[i]%2==0)continue;
sum+=a[i];
conut++;
}
average=sum/conut;
cout<
"
conut="
<
conut<
'
\t'
average="
average<
endl;
}
答案:
conut=5average=5
2.#include<
{inta[9]={1,2,3,4,5,6,7,8,9};
int*p=a,sum=0;
for(;
p<
a+9;
p++)
if(*p%2==0)sum+=*p;
sum="
sum<
sum=20
3.constintn=5;
#include<
iomanip.h>
{inta[n][n]={0},i,j,k;
for(k=1,i=0;
n;
for(j=i;
j>
=0;
j--,k++)
a[j][i-j]=k;
for(i=0;
{for(j=0;
j<
j++)
setw(3)<
a[i][j];
1361015
259140
481300
712000
110000
4.intf(int[],int);
{inta[]={-1,3,5,-7,9,-11};
f(a,6)<
intf(inta[],intsize)
{inti,t=1;
size;
i++)
if(a[i]>
0)t*=a[i];
returnt;
135
5.intf(int[][3],int,int);
{inta[][3]={0,1,2,3,4,5,6,7,8};
f(a,3,3)<
intf(inta[][3],introw,intcol)
{inti,j,t=1;
row;
for(j=0;
col;
{a[i][j]++;
if(i==j)t*=a[i][j];
returnt;
45
6.#include<
{chars[]="
abccda"
inti;
charc;
for(i=1;
(c=s[i])!
='
\0'
;
{switch(c)
{case'
a'
:
%'
continue;
case'
b'
$'
break;
c'
*'
d'
#'
$#
*#
%
7.#include<
{char*str[]={"
basic"
};
char**p;
p=str;
3;
*(p+i)<
c++
basic
pascal
8.#include<
{chars1[]="
Fortran"
s2[]="
Foxpro"
char*p,*q;
p=s1;
q=s2;
while(*p&
&
*q)
{if(*p==*q)
*p;
p++;
q++;
For
9.#include<
string.h>
{charstr[][10]={"
vb"
},s[10];
strcpy(s,(strcmp(str[0],str[1])<
0?
str[0]:
str[1]));
if(strcmp(str[2],s)<
0)strcpy(s,str[2]);
s<
C++
4.3编程题
1.已知求成绩的平均值和均方差公式:
,其中n为学生人数,s
为第i个学生成绩。
求某班学生的平均成绩和均方差。
解答:
略。
2.用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。
程序定义了三个函数:
函数createAry对数组元素赋值,函数outAry输出数组,以及函数isPrime判断素数。
由主函数main调用它们,完成题目要求。
stdlib.h>
time.h>
math.h>
intisPrime(int);
voidcreateAry(int[],int);
voidoutAry(constint[],int);
{inta[10]={0};
createAry(a,10);
//对数组元赋值
outAry(a,10);
//输出数组元素
for(inti=0;
i++)//寻找数组中的素数
{if(isPrime(a[i]))
a[i]<
是素数!
"
endl;
cout<
(isPrime(25))<
endl;
voidcreateAry(inta[],intn)
{srand(time(0));
inti,j,x;
i=0;
while(i<
n)
{x=rand();
if(x<
10||x>
=100)//取两位数的随机值
continue;
j=0;
while(j<
=i&
a[j]!
=x)//舍弃相同元素
j++;
if(j>
i)a[i++]=x;
//不同元素送入数组
voidoutAry(constinta[],intn)//输出数组元素
{cout<
数组元素:
intisPrime(intk)//判断k是否为素数
{inti;
intm=int(sqrt(k));
for(i=2;
=m;
i++)
if(k%i==0)return0;
return1;
3.将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。
解答:
4.从键盘上输入一个正整数,判别它是否为回文数。
所谓回文数是指正读和反读都一样的数。
例如,123321是回文数。
本程序首先拆分整数的每位数字按顺序存放一个数组中。
然后用两个变量记录数组元素最大和最小的下标值,它们是两个高端和低端指针。
在循环中,比较这两个下标指示对称位置的元素,并使两个指针同时向中间移动(i++,j--)。
只要发现一个不相等的元素,表示不是回文。
直至i==j,若没有出现不相等元素,则该整数是回文。
{intb[10],i,j,k,flag;
longnum,n;
num="
cin>
num;
k=0;
n=num;
do//拆分整数,把各数字放入数组b
{b[k++]=n%10;
n=n/10;
}while(n!
=0);
flag=1;
//判断标志
i=0;
j=k-1;
//设置指示下标的指针
j)
if(b[i++]!
=b[j--])//对称位置元素不相等
{flag=0;
if(flag)cout<
num<
是回文!
elsecout<
不是回文!
本题判断一个整数是否回文,可以不用数组拆分数字,直接用高位与低位数字比较。
还可以把程序写成递归方式。
请读者试一试。
5.把两个已升序的整型数组合并为一个升序数组。
设计好你的算法,得到较高的运行效率。
把两个长度为m和n的有序数组a、b归并为长度m+n的有序数组c,可以利用原数组a、b的有序性,分别用指针i和j指示数组a和b的当前元素下标,当a[i]<
b[j],把a[i]写入数组c,否则把b[j]写入数组c。
若其中一个数组的元素读完,则把另一个数组的剩余元素全部写入c。
程序略。
6.输入一个星期几号,输出相应的英文单词。
要求使用指针数组实现。
{char*weekday[7]={"
sunday"
monday"
tuesday"
wednesday"
thursday"
friday"
saturday"
};
intd;
pleaseinputweekday:
d;
if(d>
=0&
d<
=6)cout<
d<
---"
*(weekday+d)<
inputerror!
7.编写函数:
(1)在一个二维数组中形成如以下形式的n阶矩阵:
(2)去掉靠边元素,生成新的n-2阶矩阵;
(3)求矩阵主对角线下元素之和;
(4)以方阵形式输出数组。
由main函数中调用以上函数进行测试。
本题没有指定矩阵的阶,因此应按输入要求建立动态数组。
注意,C++的new运算只能申请一维动态数组,所以要按照地址公式变换成二维数组的访问形式。
另外,new返回地址保存在指针变量中,即动态数组名是间接地址。
为了使函数正确在动态数组上操作,函数使用指针引用参数。
voidcreate(int*&
app,intn);
voiddel(int*&
app,int*&
bpp,intn);
intmaindiagonal(int*&
voidoutput(int*&
app,int);
{int*ap=NULL,*bp=NULL,n;
输入矩阵的阶:
n;
create(ap,n);
\n形成矩阵:
\n"
output(ap,n);
去掉靠边元素生成的矩阵:
del(ap,bp,n);
output(bp,n-2);
主对角线元素之和:
maindiagonal(ap,n)<
//形成n阶矩阵函数
voidcreate(int*&
app,intn)
{app=newint[n*n];
inti,j,k=0;
{if(i<
=j)app[k]=1;
elseapp[k]=i-j+1;
k++;
//去掉靠边元素生成n-2阶矩阵函数
bpp,intn)
{inti,j,k=0;
bpp=newint[(n-2)*(n-2)];
for(i=0;
if(i&
j&
n-1&
j<
n-1)
{bpp[k]=*(app+i*n+j);
}
//求主对角线元素之和函数
{inti,j,k=0,sum=0;
if(i==j)
sum+=*(app+i*n+j);
}
returnsum;
//以方阵的形式输出数组函数
{inti,j;
*(app+i*n+j)<
8.设某一城市三个百货公司某个季度销售电视机的情况和价格由如下表格表示。
编写程序,每个表格数据以数组存放,求各个百货公司的电视机营业额。
牌号公司
康佳
TCL
牌号
价格
3500
3300
长虹
3800
第一百货公司
300
250
150
第二百货公司
200
240
第三百货公司
280
210
180
9.设计函数求一整型数组的最小元素及其下标。
在主函数中定义和初始化该整型数组,调用该函数,并显示最小元素值和下标值。
用一辅助变量,在寻找最小值的同时,记录被更新元素的下标值。
10.假设有从小到大排列的一组数据存放在一个数组中,在主函数中键入一个在该数组的最小值和最大值之间的数,并调用一函数把键入的数插入到原有的数组中,保持从小到大的顺序,并把最大数挤出。
要求在主函数中输出改变后的数组。
voidinsert(inta[],int,int);
{inta[]={10,12,23,25,48,48,53,58,60,78};
intx,n,i;
pleaseinputinsertdata:
x;
n=sizeof(a)/sizeof(int);
//求数组长度
insert(a,n,x);
//插入元素
cout<
voidinsert(inta[],intn,intx)
{inti,p,j;
a[n-1])
{for(i=1;
i++)//查找插入位置
if(x<
a[i])
{p=i;
break;
for(j=n-1;
=p;
j--)//后移元素,挤出最大值
a[j]=a[j-1];
a[p]=x;
//插入元素
11.编写程序,按照指定长度生成动态数组,用随机数对数组元素赋值,然后逆置该数组元素。
输出逆置前后的数组元素序列。
就地逆置可以采用对称位置元素交换的方法。
请参阅第4题判回文算法。
12.把一个字符串插入到另一个字符串中指定位置。
本题应该注意源串(被插串)的允许长度,考虑当源串定义的长度不够时的处理方法:
(1)串截断。
即仅保留源串允许长度的字符;
(2)重新申请空间,保存插入后的字符串。
13.把某班学生的姓名和学号分别存放到两个数组中,从键盘上输入某一学生学号,查找该学生是否在该班,若找到该学生,则显示出相应的姓名。
14.把一组C++关键字存放到一个二维数组中,找出这些关键字的最小者。
需使用字符串处理函数。
15.使用指针函数编写程序把两个字符串连接起来。
略
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组