作业:补充完作业代码3.c,打印完所有地址和内容,查询什么是小端模式,什么是大端模式, 他们的优缺点
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//计算结构体空间大小
//1.找成员内
void test_mem_size(void)
{
// typedef struct
// {
// char ch;
// short sh;
// int ih;
//
// }Mem_size;
//
// Mem_size stu01;
// printf("%d\n",sizeof(stu01));//size=4,ch变量只占用一个字节,另外浪费
//
// typedef struct
// {
// char ch;
// short sh;
// int ih;
//
// }Mem_size01;
//
// Mem_size01 stu02;
//
// printf("%d\n",sizeof(stu02)); //size=8,ch变量只占用一个字节,另外浪费
//目的:测试结构成员存放具体地址及情况
// char *p=&stu02;
// stu02.ch='c';
// stu02.sh=0x1234;
// stu02.ih=0x56789ABC;
//
// printf("%#p\n",p);
// printf("%c\n",*p);
// printf("%#p\n",p+1);
// printf("%x\n",*(p+1));
// printf("%#p\n",p+2);
// printf("%x\n",*(p+2));
// printf("%#p\n",p+3);
// printf("%x\n",*(p+3));
// printf("%#p\n",p+4);
// printf("%x\n",*(p+4));
typedef struct{
char ch01;
char ch02;
char ch03;
char ch04;
char ch05;
short sh01;
short sh02;
int ih;
}Mem_size03;
Mem_size03 stu03;
char *p=&stu03;
stu03.ch01='c';
stu03.sh01=0x1234;
stu03.ih=0x56789ABC;
printf("%#p\n",p);
printf("%c\n",*p);
printf("%#p\n",p+1);
printf("%x\n",*(p+1));
printf("%#p\n",p+2);
printf("%x\n",*(p+2));
printf("%#p\n",p+3);
printf("%x\n",*(p+3));
printf("%#p\n",p+4);
printf("%x\n",*(p+4));
printf("%#p\n",p+5);
printf("%x\n",*(p+5));
printf("%#p\n",p+6);
printf("%x\n",*(p+6));
printf("%#p\n",p+7);
printf("%x\n",*(p+7));
printf("%#p\n",p+8);
printf("%x\n",*(p+8));
printf("\n");
printf("\n");
printf("\n");
Mem_size03 stu04;
char *p1=&stu04;
stu04.ch01='c';
stu04.sh01=0x1234;
stu04.ih=0x56789ABC;
printf("%#p\n",p1);
printf("%c\n",*p1);
printf("%#p\n",p1+1);
printf("%x\n",*(p1+1));
printf("%#p\n",p1+2);
printf("%x\n",*(p1+2));
printf("%#p\n",p1+3);
printf("%x\n",*(p1+3));
printf("%#p\n",p1+4);
printf("%x\n",*(p1+4));
printf("%#p\n",p1+5);
printf("%x\n",*(p1+5));
printf("%#p\n",p1+6);
printf("%x\n",*(p1+6));
printf("%#p\n",p1+7);
printf("%x\n",*(p1+7));
printf("%#p\n",p1+8);
printf("%x\n",*(p1+8));
//以此类推
}
void test_malloc_struct(void)
{
typedef struct
{
int id;
char name[20];
float score;
}Stu_info;
//p是一个结构体类型指针变量
Stu_info *p=NULL;
//1.无返回值的类型转化,不建议
//p=malloc(sizeof(int)*10)
//2.返回指针变量进行强制类型转化,提高代码阅读性
p=(Stu_info *)malloc(sizeof(Stu_info));
//通过取*法
(*p).id=999;
strcpy((*p).name,"咪咪");
(*p).score=999;
printf("id=%d name=%s score=%f\n",(*p).id,(*p).name,(*p).score);
// 通过取向法
p->id=996;
strcpy(p->name,"咪咪");
p->score=99.9;
//打印输出
printf("id=%d name=%s score=%f\n",p->id,p->name,p->score);
(*(p+1)).id=998;
strcpy((*(p+1)).name,"咪咪");
(*(p+1)).score=99;
printf("id=%d name=%s score=%f\n",(*(p+1)).id,(*(p+1)).name,(*(p+1)).score);
(p+1)->id=997;
strcpy((p+1)->name,"咪咪");
(p+1)->score=99.1;
printf("id=%d name=%s score=%f\n",(p+1)->id,(p+1)->name,(p+1)->score);
}
int main()
{
test_mem_size();
//test_malloc_struct();
return 0;
}
2.
#include <stdio.h>
#include <string.h>
void test_shuju(void)
{
struct stu
{
int num;
char name[20];
char sex;
float score;
}boy[6]={{101,"li ping",'m',45},
{102,"zhang ping",'m',62.5},
{103,"he fang",'m',92.5},
{104,"cheng ling",'f',87},
{106,"wang ming",'m',58}
};
int i,j=0;
for(i=0;i<5;i++)
{
if(boy[i].score<60)
j++;
}
printf("不及格人数为:%d\n",j);
struct stu n={105,"ma li",'f',20};
struct stu *p=NULL;
p=&boy;
memcpy((void *)(boy+5),(void *)(boy+4),sizeof(boy[4]));
memcpy((void *)(boy+4),(void *)(&n),sizeof(n));
for(i=0;i<6;i++)
{
printf("num=%d name=%s sex=%c score=%.1f\n",(*(p+i)).num,(*(p+i)).name,(*(p+i)).sex,(*(p+i)).score);
}
printf("\n");
memset((void *)(boy+3),0,sizeof(boy[3]));
for(i=0;i<6;i++)
{
printf("num=%d name=%s sex=%c score=%.1f\n",(*(p+i)).num,(*(p+i)).name,(*(p+i)).sex,(*(p+i)).score);
}
}
int main()
{
test_shuju();
return 0;
}
3. 编写一个程序,完成根据学员姓名查询成绩的功能(要求查询通过函数实现),
定义一个学员结构体,包含姓名,成绩,定义一个结构体数组,保存所有学员的
信息(假定有3个学生),首先录入学员信息,然后调用查询函数获得要查询学员成绩
#include <stdio.h>
#include <string.h>
struct stu
{
int id;
char name[20];
float score1;
float score2;
float score3;
float avg;
};
void stu_fun(struct stu bb[3],int n)
{
int i;
float temp=0;
int s;
for(i=0;i<3;i++)
{
//float temp;
if(temp<bb[i].avg)
{
temp=bb[i].avg;
s=i;
}
}
//printf("%f",temp);
printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f\n",bb[s].id,bb[s].name,bb[s].score1,bb[s].score2,bb[s].score3);
printf("%f平均分为:",temp);
}
void stu_avg(struct stu b[3],int n)
{
int i;
float num=0;
for(i=0;i<3;i++)
{
num=b[i].score1+b[i].score2+b[i].score3;
b[i].avg=num/3;
printf("第%d位学生的平均成绩为:%f\n",i+1,b[i].avg);
}
}
void print_stu_arr(struct stu aa[3],int n)
{
int i;
for(i=0;i<3;i++)
{
printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f\n",aa[i].id,aa[i].name,aa[i].score1,aa[i].score2,aa[i].score3);
}
}
void test_student(void)
{
struct stu a[3];
int i;
for(i=0;i<3;i++)
{
printf("请输入第%d个学生的学号、姓名、3门课程成绩:\n",i+1);
scanf("%d",&a[i].id);
getchar();
gets(a[i].name);
scanf("%f",&a[i].score1);
scanf("%f",&a[i].score2);
scanf("%f",&a[i].score3);
//printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f",a.id,a.name,a.score1,a.score2,a.score3);
//print_stu_arr(a,3);
}
print_stu_arr(a,3);
stu_avg(a,3);
stu_fun(a,3);
}
int main()
{
test_student();
return 0;
}