return0;
}
2
/*
2.编写程序,采用指针数组存放若干字符串,对用户输入的子字符串进行查找,
并输出所有包含该子字符串的字符串。
例如:
定义char*p[3]={“abcd”,”aefd”,”tbch”};
查找的字串:
bc
返回结果:
abcdtbch
*/
#include
#include
usingnamespacestd;
intmain()
{
char*p[3]={"abcd","aefd","tbch"};
chara[20];
cout<<"查找的字串:
"<cin>>a;
cout<<"返回结果:
"<inti,j,k,s2,s1;
s1=strlen(a);
for(i=0;i<3;i++)
{
s2=strlen(p[i]);
for(j=0;j<=(s2-s1);j++)
{
charb[20];
for(k=0;k{
b[k]=p[i][j+k];
}
b[s1]='\0';
if(strcmp(a,b)==0)
{
cout<
}
}
}
cout<return0;
}
3
/*
编写一个学生类,包含学生的姓名、年龄、成绩。
输入若干学生信息,
按成绩从高到低输出,对前70%的学生定义为合格(PASS),
后30%的学生定义为不合格(FAIL)。
例如:
输入学生人数:
3
第1个学生信息:
zhang1980
第2个学生信息:
huang2087
第3个学生信息:
yang1966
输出结果:
姓名年龄成绩是否合格
huang2087PASS
zhang1980PASS
yang1966FAIL
注:
请考虑使用格式输出将数据对齐。
*/
#include
#include
usingnamespacestd;
//定义学生类
classstudent
{
charname[20];
intage;
intgrade;
public:
voidset(char*n,inta,intg)
{
strcpy(name,n);
age=a;
grade=g;
}
char*getname(){returnname;}
intgetage(){returnage;}
intgetgrade(){returngrade;}
};
//mainfunction
intmain()
{
studentstu[60];//students
intN,i,j;//Nnumberofthestudents
charname[20];//name
intage;
intgrade;
intpass;//numberofstudentspassedtheexam
//inunttheinformation
cout<<"输入学生人数:
";
cin>>N;
//输入N个学生的信息
for(i=0;i{
cout<<"第"<
";
cin>>name>>age>>grade;
stu[i].set(name,age,grade);
}
//按成绩排序
for(i=0;i{
for(j=0;j{
if(stu[j].getgrade(){
studenttmp;
tmp=stu[j+1];
stu[j+1]=stu[j];
stu[j]=tmp;
}
}
}
pass=N*0.7+0.5;
//output
cout<<"输出结果:
"<cout<<"姓名\t年龄\t成绩\t是否合格"<for(i=0;i{
cout<if(i+1<=pass)//thefirst70%pass.
{
cout<<"PASS"<}
else
{
cout<<"FAIL"<}
}
return0;
}
4
/*
设计一个模板类array,实现数组元素的存放,数组元素包含intsize;
Telem[20](或者定义为指针形式),重载运算符[],
并产生模板类array和array,输出以下结果:
ArrayArray
97a
98b
99c
100d
101e
102f
103g
104h
注:
请考虑使用格式输出将数据对齐。
*/
#include
#include
usingnamespacestd;
//模板类
template
classarray
{
intsize;
Telem[20];
public:
voidset(T*,intN);//模板类的成员函数的声明
Toperator[](inti);//重载运算符[]
};
template
voidarray:
:
set(T*item,intN)//模板类的成员函数定义
{
inti;
for(i=0;i{
elem[i]=item[i];
}
}
template
Tarray:
:
operator[](inti)//模板类的运算符重载定义
{
returnthis->elem[i];
}
//mainfunction
intmain()
{
intvector1[10];//declaretwodatagroup(array)
charvector2[10];
inti;
intN=10;
arraya1;//declaretwoobjects
arraya2;
for(i=0;i{
vector1[i]='a'+i;
vector2[i]='a'+i;
}
a1.set(vector1,10);
a2.set(vector2,10);
cout.width(10);//formatedoutput
cout<<"Array";
cout.width(15);
cout<<"Array"<for(i=0;i{
cout.width(8);
cout<cout.width(15);
cout<}
return0;
}
5
/*
有5个嫌疑人:
a说:
"我不是小偷。
"
b说:
"c是小偷。
"
c说:
"小偷肯定是d。
"
d说:
"c冤枉人!
"
四人中有三人说的是真话,问到底谁是小偷?
请编写程序求解。
*/
//还可以有其他的求解方法
#include
usingnamespacestd;
#defineN_PEOPLE4//定义人的个数
#defineNUM_OF_TRUTH3//说真话人的个数
intmain()
{
inthypothesis[N_PEOPLE];//定义数组来描述假设,1表示真话,0表示假话
intnum_of_true[N_PEOPLE]={0,0,0,0};//四种假设下四个人陈述中说真话的数量
charname[4][2]={"A","B","C","D"};//4人的名字
inti,j;
intjudge(intindex,inthypothesis[]);//判断第index个人的陈述是否正确
//假设其中一个人是小偷,比如A是小偷,看几个人的描述跟这个假设吻合
//如果有三个描述和假设吻合,则假设成立,这个人就是小偷
//下面的循环从假设A是小偷开始一直到D,计算和假设吻合的描述个数
for(i=0;i{
//被假设成小偷的人被赋值成1,假设不是小偷的赋值成0
for(j=0;j{
hypothesis[j]=0;
}
hypothesis[i]=1;//设第i个人是小偷
//根据假设,求得符合假设的描述的个数
for(j=0;jnum_of_true[i]+=judge(j,hypothesis);//判断第j个人的陈述是否正确
}
for(i=0;icout<<"如果"<cout<<"结论:
\n";
for(i=0;iif(num_of_true[i]==NUM_OF_TRUTH)
cout<<"由题目所述,3人说了真话,所以,"<cin.get();
return0;
}
//这个函数来判断某一个人的描述是否和假设吻合,
//如果吻合返回1,否则返回0
//所有的描述被翻译成了代码
//比如A是小偷则hypothesis[0]=1,
//A不是小偷则hypothesis[0]=0
//以此类推翻译所有4个人的描述为代码
intjudge(intindex,inthypothesis[])
{
inttrue_or_false;
switch(index)
{
case0:
true_or_false=(hypothesis[0]==0);
break;
case1:
true_or_false=(hypothesis[2]==1);
break;
case2:
true_or_false=(hypothesis[3]==1);
break;
case3:
true_or_false=(hypothesis[3]==0);
break;
}
returntrue_or_false;
}
5
/*
a说:
"我不是小偷。
"
b说:
"c是小偷。
"
c说:
"小偷肯定是d。
"
d说:
"c冤枉人!
"
四人中有三人说的是真话,问到底谁是小偷。
*/
//解法1
#include
usingnamespacestd;
intmain()
{
inti,j;
intsum=0;//说真话的人的数量
intt[4],s[4];//t小偷假设方案;s各人真话or假话
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
t[j]=0;
s[j]=0;
}
t[i]=1;//假设第i人是小偷
if(t[0]==0)//如果0不是小偷,则他说的是真的
s[0]=1;
if(t[2]==1)//如果2是小偷,则1说的是真的
s[1]=1;
if(t[3]==1)//如果3是小偷,则2说的是真的
s[2]=1;
if(t[4]==1)//如果4是小偷,则3说的是真的
s[3]=1;
else
s[4]=1;/否则,如果4不是是小偷,则4说的是真的
sum=0;
for(j=0;j<4;j++)
sum=sum+s[j];//有几个人说的是真的
if(sum==3)//如果等于3,则这个方案是解
{
cout<<"谁说的是真的:
";
for(j=0;j<4;j++)
cout<
cout<cout<<"谁是小偷:
";
for(j=0;j<4;j++)
cout<cout<}
}
return0;
}