上机编程题C++文档格式.docx
《上机编程题C++文档格式.docx》由会员分享,可在线阅读,更多相关《上机编程题C++文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
例如:
s="
1234abcdef567"
则:
a[]中存储着1234567
返回:
7
不能修改程序的其他部分,只能修改fun()函数。
intfun(char*s,inta[])
inta[1024];
intlen=fun("
a);
for(inti=0;
i<
len;
i++)
{
cout<
a[i]<
'
'
}
intj=0;
for(inti=0;
s[i]!
=0;
i++)//字符串内循环
if(s[i]>
='
0'
&
s[i]<
9'
)//判断字符是否为0~9的字符
a[j++]=s[i]-'
//如果为0~9的字符,转换为整型
returnj;
//返回数字个数
(1)该程序功能是把字符串中出现的数字转换成数字存储在数组中,然后返回转换的个数。
其中,字符和整型的ASCII差为96,即为'
的ASCII码值。
(2)从已给部分源程序的main主函数开始入手,核心函数fun实现题目中要求的功能,其中intfun(char*s,inta[])中的s为要转换的字符串,a为存放转换为数字的数组,返回值为转换的个数。
(1)j变量用来记录转换的个数,首先初始化为0。
(2)然后利用for循环对每一个当前字符进行判断是否为数字字符。
(3)如果为数字字符,就将其减去字符'
,即实现字符和整型的转换。
并且,将j的变量值加1。
3、完成fun()函数,其功能是:
求出M行N列二维数组每行元素中的最小值,并计算它们的和值。
和值通过形参传回主函数输出。
#defineM2
#defineN4
voidfun(inta[M][N],int*sum)
voidmain()
intx[M][N]={7,6,5,2,4,2,8,3};
ints;
fun(x,&
s);
s<
return;
inti,j,k,s=0;
for(i=0;
M;
i++)//外循环
k=0;
for(j=1;
N;
j++)
if(a[1][k]>
a[i][j])k=j;
//求得每一行的最小值
s+=a[i][k];
//最小值求和
*sum=s;
//返回求和值
(1)该程序功能是求二维数组每行元素中的最小值,并计算它们的和值。
本题解题思路基本可以分为两重循环,外重循环为对二维数组的所有行进行循环,内重循环为对每一行内进行列循环,求出每一行中的最小值。
最后求出这些最小值的和。
(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(inta[M][N],int*sum)中的a参数为二维数组,sum为要求得的和。
(1)依次访问每一行的元素。
(2)在对每一行的访问过程中选出最小数。
(3)将选出的最小数求和。
4、请完成函数fun(inti),实现以下功能:
当i等于5时,则打印如下内容。
voidfun(intn)
intn;
请输入打印的行数:
"
cin>
>
n;
if(n<
1)
输入的行数必须大于0"
return;
fun(n);
inti;
i++)//外层循环,要打印的行数
intj;
for(j=0;
n-i-1;
j++)//循环打印空格
for(;
j++)//循环打印#
//打印每一行的回车
(1)该程序功能是打印题目中要求的#字形状。
它的解题思路,在不显示#字地方,用空格占位。
(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(intn)中的n参数为输入的要打印的行数。
(1)外层循环打印每一行。
(2)内层循环,分为打印空格和打印#。
打印空格由第一个位置到第n-i-1。
打印#,是由打印完空格开始一直到行结束。
(3)最后在外循环中打印每一行的结束。
5、完成fun()函数,其功能是:
将两个从小到大有序数组a和b,复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。
voidfun(inta[],intn,intb[],intm,int*c)
intA[]={3,5,7,9,11,18,21};
intB[]={6,15,19,21,39};
intC[25],i;
for(i=0;
25;
i++)C[i]=0;
cout<
A[]="
for(i=0;
i<
7;
i++)
cout<
A[i]<
'
endl;
B[]="
5;
B[i]<
fun(A,7,B,5,C);
C[]="
12;
C[i]<
inti,j;
for(i=j=0;
n&
m;
)
*c++=a[i]<
b[j]?
a[i++]:
b[j++];
//比较两个数组中元素大小
while(i<
n)*c++=a[i++];
while(j<
m)*c++=b[j++];
(1)该程序功能是将两个从小到大有序数组a和b,复制合并出一个有序整数序列c。
它的解题思路,因为要合并的数组是有序数组,所以在循环中依次比较两个数组中的元素大小,如果它比另一个数组的元素小,那么将其拷贝到c,并将其向后移动,直到数组结尾。
(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(inta[],intn,intb[],intm,int*c)中的a,b参数为要合并的数组,n和m为两个数组的大小,c为合并的结果。
(1)首先都指向数组的第一个元素。
(2)然后利用for循环对要合并的两个数组中的元素进行比较,直到两个数组结束。
(3)取比较结果小的元素,并将指向这个数组的位置向后移动一位。
6、完成函数fun(inta[],intn),实现递归函数fun(inta[],intn)的返回值是数组a[]的前n个元素之和。
intfun(inta[],intn)
intA[]={1,2,3,4};
fun(A,sizeof(A)/sizeof(int))<
if(n>
0)
returna[n-1]+fun(a,n-1);
//递归求n项的和
return0;
//项数小于等于0,返回求和值0
(1)该程序功能是利用递归实现数组前n项的和。
函数的递归是在调用一个函数的过程中出现直接或间接调用该函数本身。
(2)从已给部分源程序的main主函数开始入手,核心函数intfun(inta[],intn)中调用该函数本身,利用递归调用实现计算结果,其中参数a为数组名,n为要求和的项数。
(1)如果要计算的项数小于等于0,那么直接返回0。
(2)否则调用递归语句"
a[n-1]+fun(a,n-1)"
,实现0到第n项的和。
7、完成空出的函数fun(inta[],int*index),使函数输入n(<
100)个整数到指定数组,求该数组中最大元素的值和此元素的下标,最大元素值以函数值返回,此元素的下标通过指针形参带回调用函数。
要求函数实现以下的功能:
(1)获得输入的n个整数;
(2)把最大的数字的下标在第二个参数中输出;
(3)把最大的数字作为返回值。
#defineMAXLINE100
intfun(inta[],int*index)
{
intA[MAXLINE];
intindex;
intmaxdata;
maxdata=fun(A,&
index);
themaxdatais:
maxdata<
theposionis:
index<
inti,n;
do//输入数组的大小
Pleaseinputn\n"
cin>
}while(n>
99);
cout<
Pleaseinputa[n]\n"
i++)//输入数组中元素的值
a[i];
*index=0;
//元素下标值初始化
for(i=1;
i++)//循环找出最大值
if(a[*index]<
a[i])
*index=i;
//记录比较大元素的下标
returna[*index];
//返回最大的元素值,其中index为最大值的下标
(1)该程序功能是求数组中最大元素的值和此元素的下标。
它的解题思路,初始化记录下标变量为0,指向数组第一个元素,逐个把所有元素和标记字符进行比较,并将大值的下标赋值给记录下标变量,从而找出最大值。
(2)从已给部分源程序的main主函数开始入手,核心函数intfun(inta[],int*index)中的a参数为输入的数组,其中index为记录最大值下标变量。
(1)首先输入数组大小,然后利用循环输入数组元素。
(2)利用for循环对每一个当前数组元素与index标记的元素进行大小比较。
(3)循环中将求得的最大数据a[i]的下标标志位赋给标志位index。
8、阅读下列函数说明和C代码,完成空出部分的程序,实现函数fun(char*s1,char*s2)将字符串s2连接在字符串s1之后,构成一个首指针为s1的字符串。
不能修改函数的其他部分。
#defineMAXLINE1000
voidfun(char*s1,char*s2)
chars1[MAXLINE];
chars2[256];
pleaseinputastring:
cin.getline(s1,MAXLINE);
pleaseinputotherstring:
cin.getline(s2,256);
fun(s1,s2);
s1<
inti=0;
s1[i]!
i++);
//指向第一个串尾
s2[j]!
j++)//利用循环将第二个串拷贝到第一个串尾
s1[i++]=s2[j];
s1[i]=0;
//加尾符
(1)该程序功能是将字符串s2连接在字符串s1之后。
它的解题思路,首先指向字符串s1的尾,然后将第二个字符串s2的内容依次拷贝到第一个串的尾。
(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(char*s1,char*s2)中的s1和s2为要连接的字符串。
(1)首先利用循环指向第一个串尾。
(2)然后利用for循环将第二个串连接到第一个串尾。
(3)最后在新生成的串尾加尾符号。
9、阅读下列函数说明和代码,完成空出部分程序。
函数fun(char*s,char*sl,char*s2)中形参字符串sl和s2有相同的字符个数,且sl中各字符互不相同。
该函数实现将已知字符串s中所有在字符串sl中也存在的字符,都用字符串s2中的对应位置的字符代替。
设字符串s、sl和s2分别为:
s[]="
ABCABC"
sl[]="
AC"
s2[]="
ZX"
则s2中的字符Z和X分别对应sl中的字符C和A,函数调用fun(s,sl,s2)将字符串s的内容变为"
ZBXZBX"
。
iostream>
voidfun(char*s,char*s1,char*s2)
voidmain()
chars[]="
ABCABC"
fun(s,"
AC"
"
ZX"
);
std:
:
std:
char*p,*q;
for(;
*s;
s++)//在串s中找符合条件的字符,然后替换
for(p=s1,q=s2;
*p;
p++,q++)//让指针p,q分别指向s1和s2
if(*p==*s)//如果s中存在s1中p指向的字符
*s=*q;
//那么用q指向的s2中的字符替换
(1)该程序功能是将已知字符串s中所有在字符串sl中也存在的字符,都用字符串s2中的对应位置的字符代替。
它的解题思路,首先是找到符合替换条件的字符,然后进行替换。
(2)从已给部分源程序的main主函数开始入手,核心函数voidfun(char*s,char*s1,char*s2)中的s1,s2参数为要替换的字符串,s为要被替换的字符串。
(1)让指针p,q分别指向s1和s2。
(2)然后利用for循环对s中的每一个当前字符与p指向的字符进行比较。
(3)如果
(2)中的比较结果相等,那么用q指向s2中对应的字符替换。
10、阅读下列函数说明和代码,完成空出部分程序。
函数fun(int*arr,intn)的功能是将指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。
并返回互不相同的元素的个数。
intfun(int*a,intn)
voidmain()
intA[]={6,6,5,4,4,3,3,2,1};
intj=fun(A,sizeof(A)/sizeof(int));
j;
std:
A[i]<
intk=0;
//指向数组第一个元素
j=1;
//指向数组第二个元素
while(j<
n)//将本次循环k指向的元素依次与其他元素比较,如果不同,则存入数组
if(a[j]!
=a[k])
a[++k]=a[j];
//k指向下一个元素
j++;
returnk+1;
//为新数组大小
(1)该程序功能是将指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。
它的解题思路,由第一个元素开始,利用循环将所有元素,依次与它后面的元素比较,如果不同存入数组。
(2)从已给部分源程序的main主函数开始入手,核心函数intfun(int*a,intn)中的参数a为输入的数组,n为数组大小。
(1)首先指向数组第一个元素a[k],然后将第二元素a[j]与它比较,不同存入数组第二个元素(a[++k])。
(2)同时,将被比较的位置向后移动一位(j++)。
循环直到数组的最后一个元素比较完毕。
11、阅读下列函数说明和代码。
函数sort(int&
m,int&
n,int&
l)实现将三个整数m、n、l由大到小输出。
m最大,l最小。
程序分析:
程序实现时,可以把最大的数放到m上,先将m与n进行比较,如果m<
n则将m与n的值进行交换,然后再用m与l进行比较,如果m<
l则将m与l的值进行交换,这样能使m最大。
然后再将n与l进行比较,若n<
l则将n与l的值互换,互换后则l最小。
将函数sort(int&
l)补充完整,实现三个数的排序。
请勿改动主函数。
voidsort(int&
m,int&
n,int&
l)
intx=9;
inty=13;
intz=-3;
sort(x,y,z);
x<
y<
z<
intt;
if(m<
n)
{t=m;
m=n;
n=t;
}/*交换x,y的值*/
if(m<
l)
m=l;
l=t;
}/*交换x,z的值*/
if(n<
{t=n;
n=l;
}/*交换z,y的值*/
sort函数实现3个参数的从大到小的排序,可以采用很多方法来排序,比如选择法排序、冒泡法排序等,这里要求采用比较的方法来实现排序,由于需要排序的数据较少,只有3个,逐个比较就可以找到最大最值小进行排序。
(1)由审题分析可知,三次比较便可将m、n、l排序。
(2)在实现时,先将m与n进行比较,如果m<
l则将n与l的值互换,互换后则l最小,这样就得到m最大,l最小的排序结果。
(3)在sort函数内用三个if比较即可,条件成立则进行交换。
12、阅读下列函数说明和代码。
函数show()的功能是将1、2、3、4四个数字,组成互不相同且无重复数字的四位数,并将这些数输出到屏幕,输出的内容如下:
123412431324134214231432213421432314234124132431312431423214324134123421412341324213423143124321
将函数show()补充完整。
voidshow()
show();
for(inti=1;
i++)
for(intj=1;
for(intl=1;
l<
l++)
for(intk=1;
k++)
if(i!
=j&
j!
=k&
i!
=k&
=l&
k!
=l)//条件判断
//输出显示
}
函数show()的功能是将1、2、3、4四个数字组成互不相同且无重复数字的四位数,并打印在屏幕上,可用循环来查找符合条件的四位数,用每一层循环的循环变量表示4位数当中的一个数,因此需4重循环,在最内层循环判断是否满足条件,满足条件则输出。
(1)四重循环变量分别为i、j、l和k,分别从1变化至4,分别表示四位数的第一、第二、第三和第四位数。
(2)在最内层循环内,如果i、j、k和l互不相同则i、j、k和l表示的四位数互不相同,把i、j、k和l打印在屏幕上。
13、阅读下列函数说明和代码。
函数num(char*str)实现返回字符串中非数字的个数。
abc123abc45
返回输出:
6
将函数num()补充完整。
intnum(char*str)
charstr[1024];
cin.getline(str,1024);
charnumberis"
num(str)<
intnumber=0;
for(inti=0