练习:
MyFunction.h
#import <Foundation/Foundation.h>
struct sanguosha {
char name[20];
int age;
float fighting;
};
typedef struct sanguosha SGS;
//1.定义一个用来记录学生信息结构体,结构体有三个成员变量:姓名,年龄以及成绩
struct stu {
char name[20];
char sex;
int age;
};
//2.定义一个结构体Node,结构体内有两个成员变量,一个是一个int类型的变量(名字自己取),另一个是Node类型的指针
struct Node {
int num;
struct Node * p;
};
//5.
void fuzhi(struct stu * p,int count);
//6.
void move(char * s);
void insert(char *s1,char *s2,int pos);
//
void printStruct(SGS * per);
//1.定义一个用来存放学生信息的结构体,该结构体包含姓名,年龄,语文成绩,数学成绩,英语成绩,总成绩,平均成绩
struct student {
char name[20];
int age;
float chinese;
float math;
float english;
float sum;
float avg;
};
typedef struct student Stu;
void inputStudent(Stu * arr,int count);
void bubbleSort(Stu * p,int count);
void avgStu(Stu * arr,int count);
//8.定义一个结构体node,其中含有一个Stu和一个node类型的结构体指针p。定义两个node类型的变量a和b。要求a中的p指向b,b中的p指向a。
struct node1{
Stu stu;
struct node1 * p;//结构体指针
};
typedef struct node1 nod;
MyFunction.m
#import "MyFunction.h"
void printStruct(SGS * per){
printf("%s
%d
%.2f
",per->name,per->age,per->fighting);
}
//5.定义一个形参为指针类型的自定义函数,其功能是为第三题所定义的结构体数组赋值
void fuzhi(struct stu * p,int count){
for (int i = 0; i < count; i++) {
scanf("%s %c,%d",p->name,&p->sex,&p->age);//name是数组不用加&,sex age 需要用&取出地址
p++;
}
}
//6、编写函数insert(char *s1,char *s2,int pos),实现在字符串s1中的指定位置pos处插入字符串s2。(花了我1天的编程时间2010.3.12)
//HappyYear
//New
//7
//Happy New Year
//思路:
//1.s1字符串找第pos个位置
//2.将pos位置后的元素顺移动一位,插入s2字符串中一个元素
//3.接着插入直到s2字符串结束
void move(char * s){
char * p = s;
int length = 0;
while (*p != ' ') {
p++;
length++;
}
for (int i = 0; i < length; i++) {
*(p + 1) = *p;//*p往后一位*p+1移动
p--;
}
}
void insert(char *s1,char *s2,int pos){
char * p = s1;
for (int i = 0; i < pos - 1; i++) {
p++;
}
char * pp = s2;
while (*pp != ' ') {
move(p);
p++;
*p = *pp;
pp++;
}
}
//4.定义一个函数用来实现对第二题定义数组中的内容赋值,形参为指针类型
void inputStudent(Stu * arr,int count){
for (int i = 0; i <count; i++) {
scanf("%d",&arr[i].age);
scanf("%s",arr[i].name);
scanf("%f",&arr[i].chinese);
scanf("%f",&arr[i].math);
scanf("%f",&arr[i].english);
}
}
//5.定义并实现一个函数,其功能为按照年龄从小到大的顺序为第二题定义的数组排序,形参为指针类型
void bubbleSort(Stu * arr,int count){
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (arr[j].age > arr[j + 1].age) {
Stu temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//6.定义并实现一个函数,其功能为为第二题定义的数组中的每一个元素求出平均值
void avgStu(Stu * arr,int count){//arr是结构体数组名,count是人数
for (int i = 0; i < count; i++) {
arr[i].avg = (arr[i].chinese + arr[i].english + arr[i].math) / 3.0;
}
}
//7.定义并实现一个函数,其功能为打印第二题中定义结构体的所有元素,参数类型为指针类型
void printStudent(Stu * arr,int count){//数组基本形参里有个count
for (int i = 0; i < count; i++) {
printf("%s
%d
%.2f
%.2f
%.2f
%.2f
%.2f
",arr[i].name,arr[i].age,arr[i].chinese,arr[i].english,arr[i].math,arr[i].sum,arr[i].avg);
}
}
main.m
#import <Foundation/Foundation.h>
#import "MyFunction.h"
int main(int argc, const char * argv[])
{
SGS per1 = {"guansheng",33,39};
SGS per2 = {"linchong",43,79};
SGS per3 = {"qinming",53,69};
SGS per4 = {"huyanzhuo",44,59};
SGS per5 = {"dongping",33,89};
SGS per[5] = {per1,per2,per3,per4,per5};
SGS * p = per;
printf("%s
",(p + 1)->name);// p[1].name
printStruct(p + 4);
//3.定义一个长度为10的学生信息结构体数组
struct stu xuesheng[10] = {"",' ',0};
//4.定义一个结构体指针,指向上一题的结构体数组
struct stu * pp = xuesheng;
//5.
fuzhi(pp,3);
for (int i = 0; i < 3; i++) {
printf("%s,%c,%d
",pp->name,pp->sex,pp->age);
pp++;
}
//6.
char s1[] = "HappyYear";
char s2[]=" New ";
insert(s1, s2, 5);
printf("%s
",s1);
//2.定义一个长度为10的结构体(第一题定义的结构体)数组
Stu stu[10] = {0};
//3.定义一个结构体指针指向上题所定义的结构体数组
Stu * p = stu;
//4.
inputStudent(p, 10);//intputStudent(stu,10);
//5.
bubbleSort(p, 10);//bubbleSort(stu, 10);
//6.
avgStu(p, 10);//avgStu(stu,10);
//8.
nod a = {0};
nod b = {0};
a.p = &b;
b.p = &a;
return 0;
}