c语言结构体类型有哪些,C语言-结构体类型

//产品按金额排序,如果金额相等按编号排序,并得到总和

//1.定义1个结构体数组

//2.从键盘获取结构体数据,函数形参是指向结构体的指针,和产品个数,实参结构体数组和产品个数

//3.交换数据函数 char类型交换;

int类型交换

//4.排序 条件判断调用交换函数

//5.总金额 强制转换类型atoi();long型

atol();

//6.输出,函数形参是指向结构体的指针,和产品个数,实参结构体数组和产品个数

//7.输入名字查找所有同名产品

//学习了char int 结构体 等 数据类型的相关操作

#include stdio.h //括号自己加吧,只能这样写了

#include stdlib.h

#include string.h

#define N 5  //定义10个产品

//#define MIN(a,b) ((a)>(b)?(b):(a))

typedef struct{

int num;  //产品编号

char name[20];  //产品名称

char money[10];  //产品金额

}*Pg,Gd;

void write_data(Pg goods, int n)

{

int i = 0;

printf("请输入%d个产品信息的编号、名称、金额:\n",n);

for (i = 0; i < n; i++)

{

printf("请输入第%d个产品信息的编号、名称、金额:\n",i);

scanf_s("%d %s %s",

&goods[i].num,&goods[i].name,20,&goods[i].money,10);//scanf_s必须字符长度

}

}

void data_out(Pg goods, int n)

{

int i = 0;

printf("%d个产品信息的编号、名称、金额分别是\n",n);

for (i = 0; i < n; i++)

printf("[ %d %s %s ]\n", goods[i].num, goods[i].name,

goods[i].money);

}

void swap(Pg goods_1, Pg goods_2)

{

Gd t;

t.num = goods_1->num;  //t.num=(*goods_1).num

strcpy_s(t.name, goods_1->name);

strcpy_s(t.money, goods_1->money);

goods_1->num = goods_2->num;

strcpy_s(goods_1->name, goods_2->name);

strcpy_s(goods_1->money, goods_2->money);

goods_2->num = t.num;

strcpy_s(goods_2->name, t.name);

strcpy_s(goods_2->money, t.money);

}

void sortBy_Money(Pg goods,int n)

{

int i = 0, j = 0;

for (i = 0; i < N - 1; i++)

{

for (j = 0; j < N - i; j++)

if (strcmp(goods[j].money, goods[j + 1].money)>0)//char

类型比较大小判断

swap(&goods[j], &goods[j + 1]);

if (strcmp(goods[j].money , goods[j + 1].money)==0)

{

if (goods[j].num>goods[j + 1].num)  //int类型比较大小判断

swap(&goods[j], &goods[j + 1]);

}

}

}

int sum_Money(Pg goods,int n)

{

int sum = 0;

int i = 0;

for (i = 0; i < n; i++)

sum = sum + atoi(goods[i].money);

//强制类型转换,字符串->整数;atol()长整形 long sum

return sum;

}

void find_Name(Pg goods, int n)

{

int i = 0;

int flog = 0;

char name[20] = "NULL";

printf("请输入你要查找的产品名:\n");

scanf_s("%s", &name, sizeof(name)*1);

for (i = 0; i < n; i++)

{

if (strcmp(name, goods[i].name) == 0)

{

flog = 1;  //可以找同名的

printf("%d %s %s\n", goods[i].num, goods[i].name,

goods[i].money);

}

}

if (flog==0)

printf("你要找的产品名不存在\n");

}

int main(void)

{

Gd goods[N];

int sum = 0;

//char c[20];

//char b[20];

//printf("请输入姓名:\n");

write_data(goods,N);

data_out(goods, N);

sortBy_Money(goods, N);

sum=sum_Money(goods, N);

printf("******按金额大小排序后为******\n");

data_out(goods, N);

printf("总金额是:%d\n", sum);

find_Name(goods, N);

//scanf_s("%s",&b,20);//scanf_s参数必须跟字符串长度

//strcpy_s(c,b);

//printf("名字是:%s\n", c);

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值