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<stdio.h>

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(key<buf[mid])	//查找值在左侧
		{
			right=mid-1;
			printf("左侧\n");
		}
		else if(key>buf[mid])
		{
			left=mid+1;
			printf("右侧\n");
		}
		else if(key==buf[mid])
		{
			printf("查找成功\n");
			break;//跳出循环
		}
	}
}

使用递归来用二分查找法实现查找 : 

#include<stdio.h>

int fun(int buf[10],int left,int right,int key)
{
	int mid;
	while(left<right)
	{
		mid = (left+right)/2;
		if(key<buf[mid])
		{
			return fun(buf,left,mid-1,key);
		}
		else if(key>buf[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<stdio.h>
//定义人的类型:人的信息(姓名,性别,年龄,身高,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<stdio.h>
/*
 * 结构体
 */
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].score<e[j-1].score)
		{
			while(j>0 && temp<e[j-1].score)
			{
				e[j].score=e[j-1].score;
				j--;
			}
				e[j].score=temp;
		}
	}

    //求大于平均分的所有分数
	for(x=0;x<5;x++)
	{
		printf("%d\n\n",e[x].score);
	}

	int y=0,z=0,w=0;
	for(y=0;y<5;y++)
	{
		z = z + e[y].score;	
	}
		w = z/5;
		printf("平均分:%d\n",w);
	for(y=0;y<5;y++)
	{
		if((e[y].score)>=w)
		{
			printf("大于或等于%d的有%d\n",w,e[y].score);
		}
	}
}

习题 :

        用二分查找来实现对结构体数组元素的查找(分数)。

猜你喜欢

转载自blog.csdn.net/superman___007/article/details/81125116
今日推荐