C语言结构体,二分法,头文件(习题)

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  的文件.

 C语言结构体,二分法,头文件(习题)_第1张图片

创建一个  donghua.h

C语言结构体,二分法,头文件(习题)_第2张图片

  main.c  的中调用donghua.c的方法.

C语言结构体,二分法,头文件(习题)_第3张图片

你可能感兴趣的:(♬,--,C\C++)