结构体
结构体写在int main()前
struct 结构体名 {成员表列};
写复数:
实部r 虚部v
struct Plural {
int r;
int v;
};
也可以简洁为:
typedef struct {
int r;
int v;
} Plural;
不能将一个结构体变量作为一个整体进行输入和输出。
例如: 已定义student1和student2为结构体变量并且它们已有值。
printf(″%d,%s,%c,%d,%f,%\n″,student1); 错误
(2) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
例如:
scanf(″%d″,&student1.num); (输入student1.num的值)
printf(″%o″,&student1); (输出student1的首地址)
虚数加减运算
#include <stdio.h>
typedef struct {
int r;
int v;
} Plural;
Plural plus(Plural a,Plural b){
int r = a.r + b.r;
int v = a.v + b.v;
Plural x;
x.r = r;
x.v = v;
return x;
}
Plural minus(Plural a, Plural b){
int r = a.r - b.r;
int v = a.v - b.v;
Plural x;
x.r = r;
x.v = v;
return x;
}
void show(Plural a){
if(a.r == 0){
printf("%d", a.v);
}else if(a.v == 0){
printf("%d", a.r);
}else if(a.v < 0){
printf("%d%di", a.r, a.v);
}else{
printf("%d+%di", a.r, a.v);
}
}
int main(){
Plural p1,p2;
p1.r = 5;
p1.v = -2;
p2.r = 1;
p2.v = 3;
show(minus(p1, p2));
//show(plus(p1, p2));
return 0;
}
排列虚数结构体(比较实部大小后,若实部相同比较虚部大小)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int r;
int v;
} Plural;
Plural plus(Plural a,Plural b){
int r = a.r + b.r;
int v = a.v + b.v;
Plural x;
x.r = r;
x.v = v;
return x;
}
Plural minus(Plural a, Plural b){
int r = a.r - b.r;
int v = a.v - b.v;
Plural x;
x.r = r;
x.v = v;
return x;
}
int compare(Plural a, Plural b){
if(a.r - b.r != 0){
return a.r - b.r;
}else{
return a.v - b.v;
}
}
void swit(Plural** pp1, Plural** pp2){
Plural* temp = *pp1;
*pp1 = *pp2;
*pp2 = temp;
}
void sort(Plural* arr[], int len){
for(int i=0;i<len-1;i++){
for(int j=0;j<len-i-1;j++){
if(compare(*arr[j], *arr[j+1]) > 0){
swit(&arr[j], &arr[j+1]);
}
}
}
}
void show(Plural a){
if(a.r == 0){
printf("%di\n", a.v);
}else if(a.v == 0){
printf("%d\n", a.r);
}else if(a.v < 0){
printf("%d%di\n", a.r, a.v);
}else{
printf("%d+%di\n", a.r, a.v);
}
}
void showArr(Plural* arr[], int len){
for(int i=0;i<len;i++){
show(*arr[i]);
}
}
int main(){
Plural p1 = {2, 2}, p2 = {1, 5}, p3 = {1, 1}, p4 = {1, 2}, p5 = {0, 1};
Plural * arr[] = {&p1, &p2, &p3, &p4, &p5};
showArr(arr, 5);
sort(arr, 5);
printf("---------------\n");
showArr(arr, 5);
return 0;
}
用结构体建立链表:
struct student
{
int num;
float score;
struct student *next ;
};
其中成员num和score用来存放结点中的有用数据(用户需要用到的数据),next是指针类型的成员,它指向struct student类型数据(这就是next所在的结构体类型)
处理动态内存所需的函数
库函数提供动态地开辟和释放存储单元的
有关函数:
1)malloc函数: void *malloc(unsigned int size);
其作用:是在内存的动态存储区中分配一个长度为size的连续空间。
返回值:是一个指向分配域起始地址的指针(类型为void)。如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL)。