学习c语言第十三天(结构体)

一.结构体声明

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

描述复杂对象。

结构体成员可以是标量、数组、指针、结构体。

定义和初始化:

struct peo
{
	char namer[20];
	char tele[12];
	char sex[5];
	int high;
};
struct peo
{
	char namer[20];
	char tele[12];
	char sex[5];
	int high;
}p1,p2;//p1,p2是创建的变量
void print(struct peo *p1)
{
	printf("%s %s %s %d\n",p1->name,p1->tele, p1->sex,p1->high);
}
void pri(struct peo p1)
{
	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
}
int main()
{
	struct peo p1 = {"张三","15066296762","男",181};
	printf("%s %s %s %d\n", p1.name,p1.tele,p1.sex,p1.high);
	print(&p1);
	pri(p1);
	return 0;
}

二.结构体传参

传指针节省空间        穿内容需要copy一份

函数传参的时候,参数是需要压栈的,
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。结构体传参的时候,要传结构体的地址。

三.练习

1.下面哪个是位操作符:(A)


A.&
B .&&

C.||

D.|

2.下面代码的结果是:()

#include <stdio.h>

int main()
{
    int a, b, c;
    a =5;
    c=++a;
    b=++c,c++,++a,a++;//逗号表达式,=优先级大于,
    b+= a++ +c;
    printf("a=%d b=%d c=%d\n:",a, b, c);
    return 0;
}

a=9 b=23 c=8

3.//写一个函数返回参数二进制中1的个数

第一种方法

int sum_1(unsigned int n)
{
	int count = 0;

	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n /=2;
	}
	
	return count;
}
int main()
{
	int n = 0;
	scanf("%d",&n);
	int sum=sum_1(n);
	printf("%d",sum);
	return 0;
}

第二种方法 

第三种方法

n=n&(n-1)每运行一次可以去掉n最右边的0

n=15        1111

n-1=14     1110

n=1110
 int sum_1( int n)
{
	int count = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	
	return count;
}

//判断一个数是不是2的n次方,化成二进制只有一个一
n&(n-1)==0则为2的n次方

4.求两个数二进制中不同位的个数


编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7

int count_diff_bit(int m,int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if ((m >> i & 1) != (n >> i & 1))
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d",&m,&n);
	int ret = count_diff_bit(m,n);
	printf("%d",ret);
	return 0;
}
第二种方法
int count_diff_bit(int m,int n)
{
	int count = 0;
	int ret = m ^ n;//相同为0,相异为1
	while (ret)
	{
		ret = ret & (ret - 1);
		count++;
	}
	return count;
}

5.打整数二进制的奇数位和偶数位

​​​​int main()
{
	int i = 0;
	int n = 0;
	scanf("%d",&n);
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d",n>>i&1);
	}
	for (i = 31; i >= 0; i -= 2)
	{
		printf("%d", n >> i & 1);
	}
	return 0;
}

6.        D

7.<

全局变量、静态变量不初始化的时候默认值是0;

局部变量是随机值

sizeof返回的结果是size_t类型的,是无符号整型;相当于非常大的整数

8.D

9.打印X型图案

10.获得月份天数

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值