1、结构体统计学生信息
输入N个学生的姓名、语文数学成绩,按总分从高到低输出。
【分析】:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
struct student{ //定义结构体:名字,语文数学成绩,总分
string name;
float chinese,math;
float total;
};
student a[101];
int n;
int main(){
cout<<"请输入n个学生信息:";
cin>>n;
cout<<"姓名 语文 数学"<<endl;
for(int i=0;i<n;++i){ //输入信息
cin>>a[i].name;
cin>>a[i].chinese>>a[i].math;
a[i].total = a[i].chinese+a[i].math;
}
for(int i=n-1;i>0;--i)
for(int j=0;j<i;++j){ //冒泡排序
if(a[j].total<a[j-1].total)
swap(a[j],a[j-1]);
}
cout<<"------------------------------------------"<<endl;
cout<<"姓名 语文 数学 总分"<<endl;
for(int i=0;i<n;++i) //输出信息
cout<<a[i].name<<" "<<a[i].chinese<<" "<<a[i].math<<" "<<a[i].total<<endl;
return 0;
}
2、对三个整型变量进行排序,将最小值赋给第一个变量,大于最小值的赋给第二个变量,最大值赋给第三个变量。
#include <iostream>
#include <cstdio>
using namespace std;
void swap(int *x,int *y){ //交换函数
int t=*x;
*x=*y;
*y=t;
}
void sort(int *x,int *y,int *z){ //排序函数
if(*x>*y) swap(x,y);
if(*x>*z) swap(x,z);
if(*y>*z) swap(y,z);
}
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
sort(&a,&b,&c);
printf("%d %d %d",a,b,c);
return 0;
}
3、编写一个函数,在包含N个函数的数组中找到第一个质数,若有则返回该数的地址,否则返回NULL。
#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
int n,a[101];
bool prime(int n){ //判断素数函数
if (n<2) return false;
if(n==2) return true;
for(int i=2;i<=sqrt(n);++i)
if(n%i==0)
return false;
return true;
}
int *find(){ // 如果是素数,则返回地址
for(int i=1;i<=n;++i)
if(prime(a[i]))
return &a[i];
return NULL;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]); //输入值
int *p=find();
if(p!=NULL)
printf("%d\n%d",p,*p);
else
printf("不能发现");
return 0;
}
4、函数指针
函数指针基本操作3:
int test(int a);
那函数指针声明 int (*fp)(int a);
注意不能写成 int *fp(int a);
不然计算机会编译成 声明函数 fp(int a)
,返回类型 int * 。(*fp)(int数值)
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int t(int a){ //定义函数t
return a*2;
}
int main(){
printf("%d\n%d",t,*t);
int (*p)(int b); //定义函数指针变量p,形参可不一致
p=t; //把t地址赋给函数指针p
printf("\n%d\n%d",t(1),t(2));
printf("\n%d,%d",p(5),(*p)(10));
return 0;
}
这里 *p <==> 函数t,定义int (*p)(int b); 可以进行赋值p=t。
使用typedef 定义函数指针示例。
#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
int t(int a){ //定义函数t
return a*2;
}
typedef int (*LP)(int);
int main(){
printf("%d\n%d",t,*t);
// int (*p)(int b); //定义函数指针变量p
LP p=t; //定义LP类型函数指针p,把t赋给p
printf("\n%d\n%d",t(1),t(2));
printf("\n%d,%d",p(5),(*p)(10));
return 0;
}
5、使用函数指针数组,模拟菜单功能。
#include <iostream>
#include <cstdio>
using namespace std;
void t1(){ cout<<"1号"; }
void t2(){ cout<<"2号"; }
void t3(){ cout<<"3号"; }
void t4(){ cout<<"4号"; }
typedef void (*LP)();
int main(){
LP a[]={t1,t2,t3,t4};
int x;
cin>>x;
a[x]();
return 0;
}
6、结构体指针
结构体指针变量定义:
结构体名 *指针变量名(student *p;)
struct student{
char name[20];
char sex;
float score;
}; student *p;
引用结构体指针变量指向结构体变量的成员如下:
结构体指针运用实例
#include <iostream>
#include <cstdio>
using namespace std;
struct student{
char name[20];
char sex;
int score;
}s[3]={{"小明",'f',98},
{"吴昊",'m',88},
{"天猫",'f',58},
};
int main(){
student *p;
for(p=s;p<s+3;++p)
printf("%s%7c%7d\n",p->name,(*p).sex,(*p).score);
return 0;
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44775255/article/details/124019010
内容来源于网络,如有侵权,请联系作者删除!