1.两个数的排序
编写函数,对输入的两个参数排序,分别使用引用和指针,作为参数。函数中输入a,b两个整数,调用函数,若a>b则交换a和b的值,使得在主函数a<=b。在主函数中输出a,b。
引用作为参数时,代码如下:
#include<iostream>
using namespace std;
void sort(int &x,int &y)
{
int t;
if(x>y)
{
t=x;
x=y;
y=t;
}
}
int main()
{
int a,b;
cin>>a>>b;
sort(a,b);
cout<<a<<" "<<b<<endl;
return 0;
}
指针作为参数时,代码如下:
#include<iostream>
using namespace std;
void sort(int *x,int *y)
{
int t;
if(*x>*y)
{
t=*x;
*x=*y;
*y=t;
}
}
int main()
{
int a,b;
cin >> a >> b;
sort(&a,&b);
cout << a <<" " << b <<endl;
return 0;
}
2.通过指向函数的指针调用函数
(1)编写自定义函数y=x^2(既y等于x的平方),自变量和函数值均为douoble。
(2)编写自定义函数y=2*sin(2*3.14*2*x+3.14)
设第一个函数的名字为x2,第二个函数的名字为mysin。编写主函数,输入自变量x,通过指向函数的指针调用它们的函数值。主函数如下:
#include<iostream>
#include<cmath>
using namespace std;
double x2(double x)
{
return pow(x,2);
}
double mysin(double x)
{
return 2*sin(2*3.14*2*x+3.14);
}
int main()
{
double(*f)(double);
double x;
cin>>x;
f=x2;
cout<<f(x)<<endl;
f=mysin;
cout<<f(x)<<endl;
return 0;
}
【提示】本题只要定义两个函数 x2和 mysin,主函数照抄(但应理解)。sin(x)调
用库函数,须包含<cmath>。
3.计算任意一元函数值的通用函数
(1)编写函数,可以计算任意一元函数的值,格式如下:
double anyfun(double (*f)(double),double x);
其中f是指向函数的指针,x是自变量。函数anyfun中只要返回f(x)即可。
(2)编写自定义函数计算y=x^2,即x的平方,自变量和函数值均为double,
函数名 x2
(3)编写自定义函数计算y=2*sin(2*3.14*2*x+3.14),函数名为mysin。
编写主函数,输入自变量x ,通过anyfun计算 x2和mysin在x的函数值,主
函数如下:
【提示】sin(x)调用库函数,须包含#include<cmath>。
【注意】本题与上题具有相同的计算结果,但调用函数的方式是不同的,这才是关
键!!代码如下:
#include<iostream>
#include<cmath>
using namespace std;
double x2(double x)
{
return pow(x,2);
}
double mysin(double x)
{
return 2*sin(2*3.14*2*x+3.14);
}
double anyfun(double (*f)(double),double x)
{
return f(x);
}
int main()
{
double anyfun(double (*f)(double),double x);
double x;
cin>>x;
cout<<anyfun(x2,x)<<" ";
cout<<anyfun(mysin,x)<<endl;
return 0;
}
4.通过指针访问结构体数组
定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性
别(char),年龄(int)。在主函数中定义结构体数组表示一个班级(不超过 50
人),通过指针若干人的信息,输入三个 0时表示结束,通过指针逆序输出
这些人的信息。字符串的比较可以使用字符串处理库函数。
运行结果如下:
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
struct Person
{
char name[20];
char sex[10];
int age;
};
int main()
{
struct Person a[50],*p=a;
cin>>p->name>>p->sex>>p->age;
while(strcmp(p->name,"0")!=0&&strcmp(p->sex,"0")!=0&&p->age!=0)
{
p++;
cin>>p->name>>p->sex>>p->age;
}
p--;
cout<<endl;
cout<<"姓名 "<<"性别 "<<"年龄 "<<endl;
while(p>=a)
{
cout<<p->name<<" "<<p->sex<<" "<<p->age<<" "<<endl;
p--;
}
}
5.动态申请变量
编写动态申请三个存放整数的存储单元,输入三个整数,输出它们的和。
【注意】输入、计算、输出都不是问题,关键是存放整数的空间是用 new申请的。
#include<iostream>
using namespace std;
int main()
{
int *a=new int;
int *b=new int;
int *c=new int;
cin>>*a>>*b>>*c;
cout<<*a+*b+*c<<endl;
delete a,b,c;
}
6.动态申请数组
编写程序,输入整数n,动态申请能存放n个double型数据的空间(动态
数组),输入若干实数,以 9999表示结束,实际个数不超过最大个数 n,逆序
输出数据。
【注意】关键是动态和指针,程序中不出现下标运算。注意释放空间。代码如下:
#include<iostream>
using namespace std;
int main()
{
int n,m;
double *p,*a;
cin>>n;
p=new double[n];
m=0;
a=p;
cin>>*a;
while(*a!=9999)
{
m++;
a++;
cin>>*a;
}
a=p+m-1;
cout<<*a;
a--;
while(a>=p)
{
cout<<" "<<*a;
a--;
}
cout<<endl;
delete []p;
return 0;
}
7.动态申请结构体数组
定义结构体PERSON表示一个人的基本信息,成员包含姓名(char),性别
(char),年龄(int)。在主函数中输入正整数 n,动态申请能存放 n个人的基本
信息的存储空间,通过指针输入若干人的信息,输入三个 0时表示结束,通过
指针逆序输出这些人的信息。实际人数不超过 n,字符串的比较可以使用字符串
处理库函数。代码如下:
#include <iostream>
#include <cstring>
using namespace std;
typedef struct PERSON
{
char name[100];
char sex[6];
int age;
}PE;
int main()
{
int n;
cin>>n;
PE *p = new PE[n];
PE *q = p;
do
{
cin>>p->name;
cin>>p->sex;
cin>>p->age;
}while(strcmp((p++)->name,"0")!=0);
p-=2;
while(p>=q)
{
cout<<p->name;
cout<<" "<<p->sex;
cout<<" "<<p->age<<endl;
p--;
}
delete []q;
return 0;
}
8.随机函数rand的使用
用随机函数rand,随机给出两个数,让使用程序的人求出两个数之和,可以
求2次,对了则打印“真棒,算对了。”,否则显示“真遗憾,算错了”。代码如下:
#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
int main()
{
int a,b,sum,flag=0;
srand(time(NULL));
a=rand();
cout<<"a:"<<a<<endl;
b=rand();
cout<<"b:"<<b<<endl;
cout<<"请输入两数之和:";
cin>>sum;
if(sum!=a+b)
{
cout<<"很遗憾,你算错了,最后一次机会!"<<endl;
flag++;
cout<<"请输入两数之和:";
cin>>sum;
}
if(flag==1 && sum==a+b)
cout<<"真棒,算对了。";
if(flag==0&&sum==a+b)
cout<<"真棒,算对了。";
if(flag==1&&sum!=a+b)
{
cout<<"很遗憾,错误次数超过2次"<<endl;
cout<<"正确答案是:"<<a+b;
}
}
9.职工信息处理
职工的信息有姓名char*name、年龄 intage、工龄 intworkage、性别 char,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)打印程序执行前后的工资状况和级别。
提示:数据初始为:
struct worker
wor[4]={{"a",60,40,'m',ture,5,450,true},{"b",56,26,'f',true,3,560,false},{"c",65,13,'m',true,4,500,true},{"d",30,15,'f',true,2,645,false}};
代码如下:
#include<iostream>
using namespace std;
struct worker
{
char *name;
int age;
int workage;
char sex;
bool marrage;
int grade;
int salary;
bool tired;
}wor[4]={{"a",60,40,'m',true,5,450,true},{"b",56,26,'f',true,3,560,false},
{"c",65,13,'m',true,4,500,true},{"d",30,15,'f',true,2,645,false}};
int main()
{
int i;
cout<<"Before chang wage!"<<endl;
cout<<"姓名 "<<"年龄 "<<"工龄 "<<"性别 "<<"婚姻情况 "<<"等级 "<<"工资 "<<"退休情况 "<<endl;
for(i=0;i<4;i++)
cout<<wor[i].name<<" "<<wor[i].age<<" "<<wor[i].workage<<" "<<wor[i].sex<<" "<<wor[i].marrage<<" "<<wor[i].grade<<" "<<wor[i].salary<<" "<<wor[i].tired<<" "<<endl;
for(i=0;i<4;i++)
{
if(wor[i].tired==true)
wor[i].salary+=wor[i].grade*20;
if(wor[i].tired==false)
wor[i].salary+=50;
}
cout<<"After chang wage!"<<endl;
for(i=0;i<4;i++)
cout<<wor[i].name<<" "<<wor[i].age<<" "<<wor[i].workage<<" "<<wor[i].sex<<" "<<wor[i].marrage<<" "<<wor[i].grade<<" "<<wor[i].salary<<" "<<wor[i].tired<<" "<<endl;
}