C++ 做题 Ⅶ

x33g5p2x  于2022-04-10 转载在 其他  
字(3.6k)|赞(0)|评价(0)|浏览(359)

1、结构体统计学生信息
输入N个学生的姓名、语文数学成绩,按总分从高到低输出。
【分析】:

  1. 定义结构体,字符串类型-名字,数值类型-语文、数学、总分。
  2. 输入N,循环输入数据个数到N。
  3. 对输入数据进行冒泡排序。
  4. for循环输出控制从大到小输出。
#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:

  1. 声明函数指针,函数原型是 int test(int a); 那函数指针声明 int (*fp)(int a); 注意不能写成 int *fp(int a); 不然计算机会编译成 声明函数 fp(int a),返回类型 int * 。
  2. 获取函数的地址,简单使用函数名赋值即可,例如 fp=test;这表明函数名与数组名一样可以看作是指针。
  3. 使用函数指针调用函数,建议用(*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;

引用结构体指针变量指向结构体变量的成员如下:

  1. 指针名->成员名 p->sex
  2. (*指针名).成员名 (*p).sex

结构体指针运用实例

#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;
}

相关文章