结构体的定义方式
#include <stdio.h>
#include <string.h>
struct Student
{
char name[32];
int age;
int score;
}; //注意添加分号,不加要出问题
int main()
{
struct Student list;
struct Student list2 = {"老默",43,89};
list.age = 12;
list.score = 88;
strcpy(list.name,"牛");
printf("name:%s;age = %d;score = %d\n",list.name,list.age,list.score);
printf("name:%s;age = %d;score = %d\n",list2.name,list2.age,list2.score);
return 0;
}
#include <stdio.h>
#include <string.h>
struct Student
{
char name[32];
int age;
int score;
}; //注意添加分号,不加要出问题
int main()
{
struct Student list;
struct Student list2 = {"老默",43,89};
struct Student max;
list.age = 12;
list.score = 88;
strcpy(list.name,"牛");
max = list;
if(list.score < list2.score){
max = list2;
}
printf("name:%s;age = %d;score = %d\n",max.name,max.age,max.score);
return 0;
}
结构体与数组
#include <stdio.h>
#include <string.h>
struct Student
{
char name[32];
int age;
float score;
}; //注意添加分号,不加要出问题
int main()
{
int i;
struct Student arr[3] = {{"老默",43,89.6},{"高启强",40,88.8},{"高启盛",38,99.5}};
int len ;
len = sizeof(arr) / sizeof(arr[0]);
for(i = 0; i < len; i++){
printf("name:%s;age = %d;score = %.2f\n",arr[i].name,arr[i].age,arr[i].score);
}
return 0;
}
选民小练习
#include <stdio.h>
#include <string.h>
struct Student
{
char name[32]; //姓名
int votes; //得票
}; //注意添加分号,不加要出问题
int main()
{
int i;
int j;
struct Student arr[3];
struct Student max;
int len; //参选人数
len = sizeof(arr) / sizeof(arr[0]);
int invalidTicket = 0; //废票
int mark = 0; //标记
char name[32] = {'\0'}; //群众想投票给谁
int totalVotes = 5;
//选民信息登记
for(i = 0;i < len; i++){
printf("输入第%d个选民姓名\n",i+1);
scanf("%s",arr[i].name);
arr[i].votes = 0;
//puts('\n');
}
//输出竞选信息
for(i = 0;i < len; i++){
printf("姓名:%s,票数:%d\n",arr[i].name,arr[i].votes);
}
//投票环节
for(i = 0;i < totalVotes; i++){
memset(name,'\0',sizeof(name)); //清空姓名
puts("你心中的人选是:");
scanf("%s",name);
mark = 0;
for(j = 0; j < len;j++){
if(strcmp(name,arr[j].name) == 0){
arr[j].votes++;
mark = 1;
}
}
if(mark == 0){
puts("输入无效姓名,弃票!");
//printf("%d\n",invalidTicket);
invalidTicket++;
}
}
//输出结果
for(i = 0;i < len; i++){
printf("姓名:%s,票数:%d\n",arr[i].name,arr[i].votes);
}
//选出票数最多的
max = arr[0];
for(i = 0; i < len; i++){
if(max.votes < arr[i].votes){
max = arr[i];
}
}
printf("%s以%d票数当选!废票:%d张\n",max.name,max.votes,invalidTicket);
return 0;
}
结构体与指针
#include <stdio.h>
#include <string.h>
struct Student
{
int data;
char cdata;
}; //注意添加分号,不加要出问题
int main()
{
struct Student str1 = {10,'a'};
struct Student *p;
p = &str1;
printf("data:%d,cdata:%c\n",str1.data,str1.cdata);
printf("data:%d,cdata:%c\n",p->data,p->cdata); //指针变量通过"->",来访问
return 0;
}
选民--结构体指针
#include <stdio.h>
#include <string.h>
struct Student
{
char name[32]; //姓名
int votes; //得票
}; //注意添加分号,不加要出问题
int main()
{
int i;
int j;
struct Student arr[3];
struct Student *p;
p = arr;
struct Student max;
int len; //参选人数
len = sizeof(arr) / sizeof(arr[0]);
int invalidTicket = 0; //废票
int mark = 0; //标记
char name[32] = {'\0'}; //群众想投票给谁
int totalVotes = 5;
//选民信息登记
for(i = 0;i < len; i++){
printf("输入第%d个选民姓名\n",i+1);
scanf("%s",p->name);
p->votes = 0;
//puts('\n');
p++;
}
p = arr;
//输出竞选信息
for(i = 0;i < len; i++){
printf("姓名:%s,票数:%d\n",p->name,p->votes);
p++;
}
//投票环节
p = arr;
for(i = 0;i < totalVotes; i++){
memset(name,'\0',sizeof(name)); //清空姓名
puts("你心中的人选是:");
scanf("%s",name);
mark = 0;
p =arr;
for(j = 0; j < len;j++){
if(strcmp(name,p->name) == 0){
p->votes++;
mark = 1;
}
p++;
}
if(mark == 0){
puts("输入无效姓名,弃票!");
//printf("%d\n",invalidTicket);
invalidTicket++;
}
}
//输出结果
p = arr;
for(i = 0;i < len; i++){
printf("姓名:%s,票数:%d\n",p->name,p->votes);
p++;
}
//选出票数最多的
p = arr;
max = arr[0];
for(i = 0; i < len; i++){
if(max.votes < arr[i].votes){
max = arr[i];
//p++;
}
}
printf("%s以%d票数当选!废票:%d张\n",max.name,max.votes,invalidTicket);
return 0;
}
选民--结构体指针数组函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Student
{
char name[32]; //姓名
int votes; //得票
}; //注意添加分号,不加要出问题
struct Student *initXms(struct Student *p,int *pnumber)
{
int i;
struct Student *pback = p;
if(p == NULL){
puts("请输入有几个参选人员:");
scanf("%d",pnumber);
p = (struct Student *)malloc(*pnumber*sizeof(struct Student));
}
for(i = 0;i < *pnumber; i++){
printf("输入第%d个选民姓名\n",i+1);
scanf("%s",p->name);
p->votes = 0;
//puts('\n');
p++;
}
//p = pback;
return p-*pnumber;
}
void printfInit(struct Student *p,int number)
{
int i;
for(i = 0; i < number; i++){
printf("姓名:%s,票数:%d\n",p->name,p->votes);
p++;
}
}
void peopleVots(struct Student *p,int number,int totalVotes,int *invalidTicket )// 选举信息 选举人数 投票人数 废票数量
{
char name[32] = {'\0'};
int mark = 0;
struct Student *pback = p;
int i;
int j;
for(i = 0;i < totalVotes; i++){
memset(name,'\0',sizeof(name)); //清空姓名
puts("你心中的人选是:");
scanf("%s",name);
mark = 0;
p =pback;
for(j = 0; j < number;j++){
if(strcmp(name,p->name) == 0){
p->votes++;
mark = 1;
}
p++;
}
if(mark == 0){
puts("输入无效姓名,弃票!");
*invalidTicket = *invalidTicket + 1;
//*invalidTicket++; //???????????????
//printf("%d\n",*invalidTicket);
}
}
printf("废票:%d\n",*invalidTicket);
}
void theElect(struct Student *p,int number,int *invalidTicket)
{
int i;
struct Student *max = p;
struct Student *pback = p;
for(i = 0; i < number; i++){
if(max->votes < p->votes){
max = p;
}
p++;
}
printf("%s以%d票数当选!废票:%d张\n",max->name,max->votes,*invalidTicket);
}
int main()
{
//选民信息登记
struct Student *xm = NULL;
int number = 0;
xm = initXms(xm,&number);
printfInit(xm,number); //输出信息
//投票环节
int totalVotes = 5;
int invalidTicket = 0;
peopleVots(xm,number,totalVotes,&invalidTicket);
printfInit(xm,number); //输出信息
theElect(xm,number,&invalidTicket);
return 0;
}
结构体二级指针
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Student
{
char name[32]; //姓名
int votes; //得票
}; //注意添加分号,不加要出问题
void initXms(struct Student **p,int *pnumber) //二级指针
{
int i;
//struct Student *pback = p;
if(*p == NULL){
puts("请输入有几个参选人员:");
scanf("%d",pnumber);
*p = (struct Student *)malloc(*pnumber*sizeof(struct Student));
}
for(i = 0;i < *pnumber; i++){
printf("输入第%d个选民姓名\n",i+1);
scanf("%s",(*p)->name);
(*p)->votes = 0;
//puts('\n');
(*p)++;
}
*p = *p - *pnumber;
}
void printfInit(struct Student *p,int number)
{
int i;
for(i = 0; i < number; i++){
printf("姓名:%s,票数:%d\n",p->name,p->votes);
p++;
}
}
void peopleVots(struct Student *p,int number,int totalVotes,int *invalidTicket )// 选举信息 选举人数 投票人数 废票数量
{
char name[32] = {'\0'};
int mark = 0;
struct Student *pback = p;
int i;
int j;
for(i = 0;i < totalVotes; i++){
memset(name,'\0',sizeof(name)); //清空姓名
puts("你心中的人选是:");
scanf("%s",name);
mark = 0;
p =pback;
for(j = 0; j < number;j++){
if(strcmp(name,p->name) == 0){
p->votes++;
mark = 1;
}
p++;
}
if(mark == 0){
puts("输入无效姓名,弃票!");
*invalidTicket = *invalidTicket + 1;
//*invalidTicket++; //???????????????
//printf("%d\n",*invalidTicket);
}
}
printf("废票:%d\n",*invalidTicket);
}
void theElect(struct Student *p,int number,int *invalidTicket)
{
int i;
struct Student *max = p;
struct Student *pback = p;
for(i = 0; i < number; i++){
if(max->votes < p->votes){
max = p;
}
p++;
}
printf("%s以%d票数当选!废票:%d张\n",max->name,max->votes,*invalidTicket);
}
int main()
{
//选民信息登记
struct Student *xm = NULL;
struct Student **pxm = &xm;
int number = 0;
initXms(&xm,&number);
printfInit(xm,number); //输出信息
//投票环节
int totalVotes = 5;
int invalidTicket = 0;
peopleVots(xm,number,totalVotes,&invalidTicket);
printfInit(xm,number); //输出信息
theElect(xm,number,&invalidTicket);
return 0;
}
共同体/联合体
#include <stdio.h>
//注意数据覆盖
struct TestT
{
int idata;
char cdata;
int ddata;
};
union TestU
{
int idata;
char cdata;
int ddata;
};
int main()
{
struct TestT t1;
union TestU u1;
printf("结构体t1的大小是:%d\n",sizeof(t1));
printf("联合体u1的大小是:%d\n",sizeof(u1));
t1.idata = 10;
t1.cdata = 'a';
t1.ddata = 20;
printf("idata:%p,%d\n",&t1.idata,t1.idata);
printf("cdata:%p,%d\n",&t1.cdata,t1.cdata);
printf("ddata:%p,%d\n",&t1.ddata,t1.ddata);
u1.idata = 10;
u1.ddata = 20;
u1.cdata = 'a';
printf("idata = %d\n",u1.idata);
printf("idata:%p\n",&u1.idata);
printf("cdata:%p\n",&u1.cdata);
printf("ddata:%p\n",&u1.ddata);
return 0;
}
#include <stdio.h>
struct Person
{
char name[32];
int age;
char zhiYe;
char addr[32];
union {
int class;
char keMu[12];
}mes;
};
int main()
{
struct Person p[2];
int i;
for(i=0;i<2;i++){
printf("请输入职业:t代表老师,s代表学生\n");
scanf("%c",&(p[i].zhiYe));
if(p[i].zhiYe == 's'){
printf("请输入学生班级:\n");
scanf("%d",&(p[i].mes.class));
printf("请输入学生名字:\n");
scanf("%s",p[i].name);
}
else{
printf("请输入老师的科目:\n");
scanf("%s",p[i].mes.keMu);
printf("请输入老师名字:\n");
scanf("%s",p[i].name);
}
getchar();
}
for(i=0;i<2;i++){
if(p[i].zhiYe == 's'){
printf("学生的名字是:%s,班级是%d\n",p[i].name,p[i].mes.class);
}
else{
printf("老师的名字是:%s,职业是%s\n",p[i].name,p[i].mes.keMu);
}
}
return 0;
}
typedef
#include <stdio.h>
typedef unsigned int u8; //将已有的名新增一个名字
typedef int u16 ;
typedef int arr[10];
struct Test
{
int data;
int data2;
};
typedef struct Test T;
typedef struct
{
int data1;
int data;
}Demo;
void printInfo(T t)
{
printf("%d ",t.data);
}
int main()
{
arr a;
a[0] = 10;
printf("%d\n",a[0]);
struct Test t1;
t1.data = 100;
printf("%d ",t1.data);
T t2;
t2.data = 1000;
printInfo(t2);
Demo d;
d.data1 = 999;
printf("%d ",d.data1);
return 0;
}
#include <stdio.h>
typedef struct
{
int num;
char name[32];
char sex;
}Person,*pPerson;
void printInfo(Person p)
{
printf("%d号姐姐:%s %c\n",p.num,p.name,p.sex);
}
void printInfo3(Person *p)
{
printf("%d号姐姐:%s %c\n",p->num,p->name,p->sex);
}
void printInfo2(pPerson pp)
{
printf("%d号姐姐:%s %c\n",pp->num,pp->name,pp->sex);
}
int main()
{
Person p1 = {1,"高启强",'g'};
Person p2 = {2,"高启盛",'g'};
printInfo(p1);
printInfo(p2);
pPerson pp1 = &p1;
pPerson pp2 = &p2;
printInfo2(pp1);
printInfo2(pp2);
Person *pp3 = &p1;
Person *pp4 = &p2;
printInfo3(pp3);
printInfo3(pp4);
return 0;
}