步骤
1)声明(定义)结构体,确定结构体名
2)编写结构体的成员
3)编写处理结构体的函数
小狗案例
1)编写一个 Dog 结构体,包含 name(char[10])、age(int)、weight(double)属性
2)编写一个 say 函数,返回字符串,方法返回信息中包含所有成员值。
3)在 main 方法中,创建 Dog 结构体变量,调用 say 函数,将调用结果打印输出
代码展示:
#include<stdio.h>
/*
1)编写一个 Dog 结构体,包含 name(char[10])、age(int)、weight(double)属性
2)编写一个 say 函数,返回字符串,方法返回信息中包含所有成员值。
3)在 main 方法中,创建 Dog 结构体变量,调用 say 函数,将调用结果打印输出
*/
//定义Dog结构体
struct Dog{
char *name; //姓名
int age; //年龄
double weight; //身高
};
char* say(struct Dog dog){
//将这个信息放入到一个字符串(字符数组)
static char info[50]; //局部静态变量
sprintf(info, "name=%s age=%d weight=%.2f", dog.name, dog.age, dog.weight);
return info;
}
void main(){
//定义结构体变量
struct Dog dog;
char * info = NULL;
dog.name = "张呆呆";
dog.age = 18;
dog.weight = 3.45;
info = say(dog);// 结构体默认是值传递,只有指针,数组,默认是地址传递。
printf("%s",info);
}
景区门票案例
1)一个景区根据游人的年龄收取不同价格的门票。
2)编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出
3)规则:年龄>18 , 门票为 20 元,其它情况免费。
4)可以循环从控制台输入名字和年龄,打印门票收费情况, 如果名字输入 n ,则退出程序。
5)代码演示
#include<stdio.h>
#include<string.h>
/*
1)一个景区根据游人的年龄收取不同价格的门票。
2)编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出
3)规则:年龄>18 , 门票为 20 元,其它情况免费。
4)可以循环从控制台输入名字和年龄,打印门票收费情况, 如果名字输入 n ,则退出程序。
*/
struct Visitor {
char name[10]; //姓名
int age; //年龄
double pay; //票价
};
//用函数去判断
//编写函数处理业务
//说明:因为结构体默认是值传递,会拷贝一份完整数据,效率较低
// 因此,为了提高效率,我们直接接收地址(指针)
void ticket(struct Visitor * visitor){
if((*visitor).age > 18){
(*visitor).pay = 20;
}else{
(*visitor).pay = 0;
}
}
void main(){
//测试
//创建结构体变量(创建一个游客)
struct Visitor visitor;
//循环的输入名字和年龄
while(1){
printf("请输入游客名字\n");
scanf("%s", visitor.name);
//判断如果名字输入 n ,则退出程序
if(strcmp("n", visitor.name) == 0) {
break;
}
printf("请输入游客年龄\n");
scanf("%d", &visitor.age);
//调用函数 ticket , 获取应付的票价
ticket(&visitor);
printf("该游客应付票价=%.2f\n", visitor.pay);
}
printf("退出程序");
getchar();
}