【无标题】

1.将指针指向结构体,对指针取内容,利用指针将结构体整体进行交换。 

#include <stdio.h>
#include <string.h>
typedef struct{
	int num;
	char name[20];
	char sex;
	float score;
}Mem;
Mem boy[6]={{101,"li ping",'m',45},
			{102,"zhang ping",'m',62.5},
			{103,"he fang",'m',92.5},
			{104,"cheng ling",'f',87},
			{106,"wang ming",'m',58}};
Mem *p=boy;
void fail_mem(Mem *a,int n)
{
	int i,count=0;
	for(i=0;i<n;i++)
	{
		if((*(p+i)).score<60)
		count++;	
	}
	printf("不及格人数为%d\n",count);
}
void print_allmem(Mem *a,int n)
{
	int i;
	*(a+n-1)=*(a+n-2);//这里直接将结构体当做一个整体进行交换
	*(a+n-2)=*(a+n-3);
	(*(a+n-3)).num=105;
	strcpy((*(a+n-3)).name,"ma li");
	(*(a+n-3)).sex='f';
	(*(a+n-3)).score=20;
	for(i=0;i<n;i++)
		printf("%d %s %c %f\n",(a+i)->num,(a+i)->name,(a+i)->sex,(a+i)->score);
}
void print_others(Mem *a,int n)
{
	Mem temp={0};
	printf("\n");
	int i;
	*(a+4)=temp;
	for(i=0;i<n;i++)
		printf("%d %s %c %f\n",(a+i)->num,(a+i)->name,(a+i)->sex,(a+i)->score);
}
int main()
{
	fail_mem(p,6);
	print_allmem(p,6);
	print_others(p,6);
	return 0;
}

 2.声明并定义一个枚举变量,该变量充当结构体成员。值得注意的是,枚举内部成员之间用逗号隔开,且被系统从0开始付初值。

#include <stdio.h>
#include <string.h>
typedef struct{
	enum {
		 eint,
		 efloat,
		 estr
	}kind;//声明并定义一个枚举变量,该变量充当结构体成员。值得注意的是,枚举内部成员之间用逗号隔开,且被系统从0开始付初值
	union{
		int a;
		float b;
		char s[20];
	};//联合体的变量可以省略,内部成员可直接充当结构体成员	
}Type;
void print(Type msg)
{
	switch(msg.kind)
	{
		case eint:
			printf("%d\n",msg.a);
			break;
		case efloat:
			printf("%f\n",msg.b);
			break;
		case estr:
			printf("%s",msg.s);
			break;
		default:
			break;
	}
}
int main()
{
	int i;
	Type msg[3];
	msg[0].kind=eint;
	msg[0].a=123;
	msg[1].kind=efloat;
	msg[1].b=1.23;
	msg[2].kind=estr;
	strcpy(msg[2].s,"helloworld");
	for(i=0;i<3;i++)
		print(msg[i]);
	return 0;
} 

 3.在地址的位上进行操作,实现从高位向低位的打印。x*2^位数,代表向左移动相应位数后的值,且后空余位置补0。x/2^位数,代表向右移动相应位数的值,且最高位若为1则左补1,为0则补0.

#include <stdio.h>
int main()
{
    unsigned int a=456,b=0x1<<31;
    for(i=0;i<32;i++)
    {
        a&b?putchar('1'):putchar('0');
        a<<=1;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值