/**********End**********/
}
2
题目:
下面的函数统计子字符串substr在字符串str中出现的次数,如果substr在str中不出现,
则返回值0。
请完成该函数。
格式:
intstr_count(char*substr,char*str)
输出结果见图:
样张.JPG
-------------------------------------------------------*/
#include
#include
usingnamespacestd;
/**********Program**********/
intstr_count(char*substr,char*str){
intq=strlen(substr),p=strlen(str),a=0,w=0,y=0,b=0,o=0;
for(inti=0;i
{
for(a=0;a{intb=i;
if(substr[a]==str[b])//当字符串ss的第一个字符与字符串s的第a个字符相等时;
{w++;b=b+1;}//w表示字符串s中能与ss相等的数目;
if(w==q)
{y++;w=0;//当又一次在s中寻找到ss时y++;
}
continue;}
}
returny;
}
/**********End**********/
voidmain(void)
{
charss[100];
char*s="ABCDabcd1234+-*/XYZxyz/ABCDabcd1234+-*/Aa1ABCDabcd";
cout<<"母串="<
cout<<"待计数子串=";
cin.getline(ss,99);
cout<<"子串在母串中共出现"<}
3
题目:
定义一个函数min,求n个数中的平均值、最小数和其下标,
并在主函数中打印平均值、最小数和下标。
格式:
intmin(int*s,intn,double&aver)
注意:
如有多个最小值,以第一个为准。
输出结果见图:
样张.JPG
-------------------------------------------------------*/
#include
usingnamespacestd;
/**********Program**********/
intmin(int*s,intn,double&aver){
intj=0,i;
doublesum=s[0];
for(i=1;i{
sum+=s[i];
if(s[i]
j=i;
}
aver=sum/n;
returnj;
}
/**********End**********/
voidmain(void)
{
intpos;
doubleaver;
ints[10]={34,12,83,56,29,93,56,12,88,72};
ints1[3]={12,83,56};
intn=10;
inti;
pos=min(s,n,aver);
cout<"<for(i=0;icout<
cout<<"\n平均值="<cout<<"最小值="<
cout<<"位置="<n=3;
pos=min(s1,n,aver);
cout<"<for(i=0;icout<cout<<"\n平均值="<cout<<"最小值="<cout<<"位置="<}
4
题目:
输入一个16进制数,将其转换为10进制数
输出结果见图:
样张.JPG
#include
#include
usingnamespacestd;
voidmain()
{
chardata16[4]="A7";
intdata10=0,d;
inti;
/**********Program**********/
方法1sscanf(data16,"%X",&data10);
方法2//for(i=0;data16[i]!
='\0';i++)
//{
//d=((data16[i]>='0'&&data16[i]<='9')
//?
data16[i]-'0':
data16[i]-'A'+10);
//data10=data10*16+d;
//}
/**********End**********/
cout<}
5
题目:
有一个3×4的矩阵,要求编写程序求出其中值最大的那个元素的值,
以及其所在的行号和列号。
运行结果见样张.JPG
#include
usingnamespacestd;
voidmain(void)
{
inta[3][4]={{1,3,5,6},{8,10,11,9},{18,13,14,15}};
intmax;//保存最大值
intn;//保存最大值所在行的行号
intm;//保存最大值所在列的列号
/**********Program**********/
max=0;
max=a[0][0];
for(inti=0;i<3;i++)//i是行,三行四列;//这里的ij要注意顺序。
{for(intj=0;j<4;j++)
{if(a[i][j]>max)
{max=a[i][j];
n=i;
m=j;}}}
/**********End**********/
cout<<"a[3][4]矩阵中最大的值为:
"<cout<<"最大值行号:
"<cout<<"最大值列号:
"<}
/*-------------------------------------------------------
数组与指针2
1题目:
输入一个字符串,把其中的字符按逆序输出,如输入light,输出thgil.
#include
#include
usingnamespacestd;
voidmain()
{
charc,str[]="light";
inti,length;
/**********Program**********/
inttemp;
intj=0;
length=0;
do
{if(str[j]!
='\0')//统计出字符串的长度;
length++;j++;
}while(str[j]!
='\0');
//cout<for(i=0;i{temp=str[i];//倒序输出
str[i]=str[length-1-i];
str[length-1-i]=temp;
if(i>((length-1)/2-1))
{str[length]='\0';
break;}
}
/**********End**********/
cout<}
2
题目:
m个人的成绩存放在score数组中,请编写函数fun,它的功能是:
将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如,但score数组的数据为10、20、30、40、50、60、70、80、90时,
函数返回的人数应该时4,below中的数据应为10、20、30、40。
输出结果见图:
样张.JPG
#include
usingnamespacestd;
/**********Program**********/
intchoose(int*grade,intN,int*below)
{
intq=0,sum=0,ave=0;
for(inti=0;i{sum=sum+grade[i];}
ave=sum/N;
intj=0,w=0;
for(i=0;i{
if(grade[i]{
below[j]=grade[i];
j++;
w++;
}
below[j+1]='\0';}//添加结束符;这一步不能至于括号外
returnw;
}
/**********End**********/
voidmain(void)
{constintN=9;
intscore[N]={10,20,30,40,50,60,70,80,90};
intbelow[N]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
intnumber,i;
number=choose(score,N,below);
cout<<"低于平均分的人数="<cout<<"低于平均分的分数=";
for(i=0;icout<}
3
题目:
编写程序求解M*M矩阵的两条对角线上的元素之和。
#include
usingnamespacestd;
constintM=5;
voidmain(void)
{
intminor;//主对角线上元素之和
intleading;//次对角线上元素之和
inta[M][M]={
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
};
/**********Program**********/
minor=0;
leading=0;
for(inti=0;i<5;i++)
{
minor=minor+a[i][i];
leading=leading+a[i][4-i];
}
/**********End**********/
cout<<"主对角线上元素之和="<cout<<"次对角线上元素之和="<}
4
题目:
有n个数,已按由小到大顺序排列好,要求输入一个数,把它插入到原有数列中,
而且仍然保持有序,同时输出新的数列。
输出结果见图:
样张.JPG
-------------------------------------------------------*/
#include
#include
usingnamespacestd;
voidmain()
{
inti,n,j;
inta[11]={10,20,30,40,50,60,70,80,90,100};
for(i=0;i<10;i++)
cout<cout<cout<<"输入插入数\n";
cin>>n;
/**********Program**********/
ints=0,d=0;//sum表示数列长度;
do
{
s++;d++;
}while(a[d]!
='\0');
intsum=0;//sum和s用两个变量较好。
sum=s;
a[sum]=n;
a[sum+1]='\0';
intmin=0,tep=0;
for(i=0;i<=sum;i++)
{
min=i;
for(j=i+1;j<=sum;j++)
{if(a[min]>a[j])
{min=j;
tep=a[i];
a[i]=a[min];
a[min]=tep;}
}}
cout<<"插入后的数组"<for(i=0;icout<cout</**********End**********/
}
类的组合;1定义一个点类Point,包括x坐标和y坐标(int)。
定义一个CRect类,代表一个矩形,
要求CRect类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象,
要求CRect类中有两个成员函数RectHeight()和RectWidth(),通过这两个函数能得到
矩形的高和宽。
(高和宽必须为非负数)
输出结果见样张.JPG
#include
#include
usingnamespacestd;
/**********Program**********/
classPoint
{
public:
intx,y;
Point(intx1=0,inty1=0){x=x1;y=y1;}
voidsetP(intx1,inty1){x=x1;y=y1;}
};
classCRect
{
Pointlefttop,rightbottom;
public:
CRect(Pointa,Pointb):
lefttop(a),rightbottom(b){}
CRect(){}voidSetR(Pointa,Pointb){lefttop=a;rightbottom=b;}
intRectHeight()
{returnfabs(lefttop.y-rightbottom.y);}
intRectWidth()
{returnfabs(rightbottom.x-lefttop.x);
}};
/**********End**********/
intmain()
{
Pointp1(1,9),p2(8,5),p3,p4;//p1-左上角坐标1-x坐标9-y坐标p2-右下角坐标8-x坐标5-y坐标
CRectcr(p1,p2),cr1;
cout<<"Height="<cout<<"Width="<p3.setP(1,1);//改变p坐标
p4.setP(3,5);//改变p4坐标
cr1.SetR(p3,p4)