1、C语言基本类型:字符型,整型,浮点型
2、结构体(复杂类型):自定义类型 i
3、定义变量:为了分配空间
类型 变量名; //注:分配空间编译器通过类型来分配
初始化:定义变量同时赋值
3.1定义结构体(自定义)的类型
struct 类型名
{
属性1;
属性2;
属性3;
...
};
3.1.1无嵌套结构体:所有属性都是基本类型
//定义人的类型:人的信息(姓名,姓别,身高)
struct people
{
//姓名:
char name[10];
//性别
char sex;
//身高
unsigned short height;
};
3.1.2嵌套结构体:属性是一个结构体变量
struct people
{
...
struct *** 变量名;
...
};
3.2定义结构体变量:类型 变量名;
struct 类型名 变量名;
3.3引用结构元素:一定要通过结构体变量来引用属性。
.运算符 :引用复杂类型的成员
变量名.属性;
3.4结构体的分配空间法则:以最大字元素字节对齐 (*)
1、查找最大元素的类型
2、每个元素都分配以最大类型的最小的倍数。
3、共享空间?
注:gcc编译器可以指定对齐方式(这不是C语言的标准)
__attribute__((packed))
3.5结构体变量之间赋值: 注:同类型之间,不同类型的结构体是不能赋值的
struct people a,b;
a=b;
习题:
二分查找法 :
#include
void main()
{
int buf[] = {1,2,3,4,5,6,7,8,9,10,11};
//这半查找:
int mid,left=0,right=10;
int key = 2;//需要在序列中查找2是否存在
//从区间中获取中间元素的下标
while(left<=right)
{
mid = (left + right)/2;
if(keybuf[mid])
{
left=mid+1;
printf("右侧\n");
}
else if(key==buf[mid])
{
printf("查找成功\n");
break;//跳出循环
}
}
}
使用递归来用二分查找法实现查找 :
#include
int fun(int buf[10],int left,int right,int key)
{
int mid;
while(leftbuf[mid])
{
return fun(buf,mid+1,right,key);
}
else if(key==buf[mid])
{
return mid;
}
}
}
void main()
{
int buf[10] = {1,2,3,4,5,6,7,8,9};
int left=0,right=8;
int key = 2;
printf("第%d个",fun(buf,left,right,key)+1);
}
C语言结构体的实现 :
#include
//定义人的类型:人的信息(姓名,性别,年龄,身高,ID)
struct people
{
//性别:
char sex;
//ID
int id;
//姓名:
char name[10];
//身高:
unsigned short height;
};
//__attribute__((packed));
//学生结构
struct student
{
//属性:结构体
struct people msg;
//属性:普通
int c;
};
void main()
{
//定义变量: 类型 变量名;
int score = 100;
struct people chh = {'m',12,"chh",178};//按people类型来分配空间
//引用元素:通过名字来引用
//printf("%d\n",score);
printf("%c %d %s %d",chh.sex,chh.id,chh.name,chh.height);
printf("\n%d\n",sizeof(chh));
//定义结构体变量:分配空间
struct student chh2 = {{'m',180601,"chh",178},99};
//引用成员:变量名.属性
printf("性别:%c ID:%d 姓名:%s 身高:%d 普通:%d\n",chh2.msg.sex,chh2.msg.id,chh2.msg.name,chh2.msg.height,chh2.c);
}
习题:
1、打印所有学生信息
2、查找分类>90以上的学生信息
3、打印最高分学生信息(监哨值法)
4、查找学生分数高于平均的学生信息
#include
/*
* 结构体
*/
struct student
{
//姓名:
char name[100];
//性别:
char sex;
//成绩:
int score;
};
void main()
{
//定义数组:类型 数组名[长度];
struct student e[44]={{"lm",'m',64},\
{"tzw",'m',34},\
{"lxw",'w',76},\
{"dls",'w',100},\
{"chh",'m',95}\
};
//分配空间:
printf("%d\n",sizeof(e));//长度
//引用数组的元素:下标法
int i=0,temp;
for(i=0;i<5;i++)
{
printf("姓名:%s 性别:%c 分数:%d\n",e[i].name,e[i].sex,e[i].score);
}
//求大于90的
for(i=0;i<5;i++)
{
if((e[i].score)>90)
{
printf("%s大于90分:%d\n",e[i].name,e[i].score);
}
}
//求最高分
for(i=0;i<4;i++)
{
temp = e[i].score;
if(temp<(e[i+1].score))
{
temp = e[i+1].score;
}
}
printf("最高分是%d\n",temp);
//查找dls是否存在
char num[5] = "chs";
for(i=0;i<5;i++)
{
if(strcmp(e[i].name,num)==0)
{
printf("存在");
break;
}
else
{
printf("不存在");
}
}
int x = 0,j;
for(x=0;x<5;x++)
{
j = x;
temp = e[x].score;
if(e[j].score0 && temp=w)
{
printf("大于或等于%d的有%d\n",w,e[y].score);
}
}
}
习题 :
使用头文件 :
创建一个 donghua.c 的文件.
创建一个 donghua.h
main.c 的中调用donghua.c的方法.