C语言_函数结构体的调用

C语言_函数结构体的调用

#include<stdio.h>
//定义存储函数的结构体
struct map{
	//定义无参数类型返回void的函数指针
	void (*p)();
};
/*
 * 通过实验观察系统如何处理整数上溢,浮点数上溢和浮点数下溢
 */
void one();
//编写一个程序,要求提示输入一个ASCIL码值,然后打印输入的字符
void two();
//编写一个程序。发出一声警报,然后打印下面的文本
void three();
//编写一个程序,读取一个浮点数,先打印成小数点形式,再打印成指数形式,然后如果系统支持,再打印成p记数法,
void four();
//一年大约有3.156e+7秒,编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数
void five();
//一个水分子的质量约为3.0e-23克,1夸脱水大约是950克,编写一个程序,提示用户输入谁的夸脱数,并显示水分子的数量。
void six();
//一英寸相当于2.54厘米,编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。
void seven();
//在美国的体积测量系统中,1品脱等于2杯,1杯等于8盎司,1盎司等于2大汤勺,1大汤勺等于3茶勺,编写一个程序,提示
//用户输入杯数,并以品脱,盎司,汤勺,茶勺为单位显示等价容量。思考对于该程序,为何使用浮点类型比整数类型更合适。
void eight();
int main(){
//定义存储函数指针的数组
struct map ma[30];
//存储函数指针
ma[0]={one};
ma[1]={two};
ma[2]={three};
ma[3]={four};
ma[4]={five};
ma[5]={six};
ma[6]={seven};
ma[7]={eight};
printf("请输入执行第几个方法:\n");
int size=0;
//刷新标准输出设备缓冲区
fflush(stdout);
//接收控制台输入存储到size的float变量
scanf("%d",&size);
//获取函数指针并运行
ma[size].p();
//结束
return 0;
};
void one(){
int size=333333333333;
float fl=444.1111111111111111111111111;
printf("%d %f %f\n",size,fl,-fl);
};
//
void two(){
int vb;
/*
 * scanf()接收的数据必须要赋值给数据地址,int或char变量不是地址。所以要利用取地址符&获取数据地址
 */
scanf("%d",&vb);
printf("%c\n",vb);
};
void three(){
printf("Startled by the sudden sound,Sally shouted,\nBy the Great Pumpkin,what was  that! \a");
};
void four(){
	float a;
	scanf("%f",&a);
	printf("%f %e  %a\n",a,a,a);
};
void five(){
int age;
printf("请输入你的年龄:\n");
//刷新stdout,显示stdout里的内容
fflush(stdout);
scanf("%d",&age);
printf("该年龄对应的秒数:%e",age*3.156e+7);
};
void six(){
printf("请输入水的跨脱数:\n");
fflush(stdout);
int size;
scanf("%d",&size);
printf("夸脱数为%d的水分子的数量为%e个:\n",size,size*950/3.0e-23);
};
void seven(){
printf("请输入身高(/英尺)\n");
fflush(stdout);
float height;
scanf("%f",&height);
printf("您的身高为:%f\厘米!\n",height*2.54f);
};
void eight(){
	printf("请输入杯数!\n");
	fflush(stdout);
	float bow;
	scanf("%f",&bow);
	float bow1=bow;
	float pintuo=bow/2;
	bow*=8;
	float angsi=bow;
	bow*=2;
	float tangshao=bow;
	bow*=3;
	float chashao=bow;
	printf("%f等于%f品脱,%f盎司,%f汤勺,%f茶勺!\n",bow1,pintuo,angsi,tangshao,chashao);
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值