1.动态申请结构体数组
定义结构体PERSON 表示一个人的基本信息,成员包含姓名(char),性别(char),年龄(int)。在主函数中输入正整数n,动态申请能存放n 个人的基本信息的存储空间,通过指针输入若干人的信息,输入三个 0 时表示结束,通过指针逆序输出这些人的信息。实际人数不超过 n,字符串的比较可以使用字符串处理库函数。
运行结果如下:
程序如下:
#include
#include
using namespace std;
struct student //定义结构体
{
char name[20];
char sex[20];
int age;
};
struct student *p; //指针*p指向名为student的结构体
int main()
{
int n,i;
int count=0;
cin>>n;
student *stu=new student[n]; //动态申请储存空间
p=stu;
cin>>p->name>>p->sex>>p->age;
while(strcmp(p->name,"0")!=0&&strcmp(p->sex,"0")!=0&&p->age!=0)
{
count++;
p++;
cin>>p->name>>p->sex>>p->age;
}
p--;
while(p>=stu)
{
cout<<p->name<<p->sex<<p->age<<endl;
p--; //实现倒序输出
}
return 0;
}
2.用随机函数rand,
随机给出两个数,让使用程序的人求出两个数之和,可以求2次,对了则打印“真棒,算对了。”,否则显示“真遗憾,算错了”。
运行结果如下:
两次都错的情况:
有一次答对的情况:
程序如下:
#include
#include //头文件,产生随机数
#include //为保证种子不同,即用不同的时间
using namespace std;
int main()
{
int a,b,i,sum;
srand(time(0)); //设置种子
a=rand()%100; //%100让随机数变小,有无不产生影响 产生随机数
cout<<"a="<<a<<endl;
b=rand()%100;
cout<<"b="<<b<<endl;
i=0;
while(1)
{
i++;
if(i>2)
{
cout<<"超过两次了!";
cout<<endl;
break;
}
else
{
if(i==2)
cout<<"最后一次机会!"<<endl;
cout<<"请输入两个数之和:"<<endl;
cin>>sum;
if(sum=a+b)
{
cout<<"恭喜你,算对了"<<endl;
break;
}
else
{
cout<<"很遗憾,你算错了"<<endl;
if(i==2&&sum!=a+b)
cout<<"正确答案是:"<<a+b<<endl;
}
}
}
}
知识补充:
srand是种下的随机种子数,你每回种下的种子不一样,用rand得到的随机数就不一样,为了每回种下不一样的种子,所以就选用time(0),time(0)是得当前的值。(因为每时每刻的时间不一样)
3.职工信息处理
职工的信息有姓名char *name、年龄 int age、工龄 int workage、性别 char sex sex=’F’ sex=’M’、婚姻状况 bool marrage marrage=true magrrage=false 、级别 int grade 、工资 salary 、在职否 bool tired tired=true tired=false 。现在要进行工资的调整,规定凡是退休职工一律增加工资50元,在职1~5级职工的工资分别增加20、40、60、80、100元。编程实现上述工资调整。
要求如下:
(1)分析要存放的信息,设计合适的数据结构;(2)分析要对信息进行的操作,进行处理;
(3)打印程序执行前后的工资状况和级别。
#include
using namespace std;
struct worker //struct和class基本一致,struct默认访问权限为public,而 class是private
{char *name;
int age;
int workage;
char sex;
bool marrage;
int grade;
double salary;
bool tired;
}
wor[4]={{"a",60,40,'m',true,5,450,true},{"b",56,26,'f',true,3,560,false},{"c",66,13,'n',true,4,500,true},{"d",30,15,'f',true,2,645,false}}; //数据初始化
int main()
{
int i;
cout<<"before change vage!"<<endl;
for(i=0;i<4;i++)
cout<<wor[i].name<<'\t'<<wor[i].age<<'\t'<<wor[i].workage<<'\t'<<wor[i].sex<<'\t'<<wor[i].marrage<<'\t'<<wor[i].grade<<'\t'<<wor[i].salary<<'\t'<<wor[i].tired<<endl;
cout<<"after change vage!"<<endl;
for(i=0;i<4;i++)
{
if(wor[i].tired==true)
wor[i].salary +=50; //退休职工 工资加50
else
wor[i].salary +=wor[i].grade *20;//根据等级加工资
}
for(i=0;i<4;i++)
cout<<wor[i].name<<'\t'<<wor[i].age<<'\t'<<wor[i].workage<<'\t'<<wor[i].sex<<'\t'<<wor[i].marrage<<'\t'<<wor[i].grade<<'\t'<<wor[i].salary<<'\t'<<wor[i].tired<<endl;
return 0;
} //'\t'水平制表(tab=4个空格)