您的位置:首页 > 健康 > 养生 > 学习c语言第十三天(结构体)

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

2025/1/1 22:57:12 来源:https://blog.csdn.net/2301_79600945/article/details/140691773  浏览:    关键词:学习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最右边的0n=15        1111n-1=14     1110n=1110int 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,相异为1while (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.获得月份天数

11.KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。 

int main()
{int a = 0;int b = 0;int c = 0;scanf(" %d %d %d",&a,&b,&c);if (a + b > c && a + c > b && b + c > a){if (a == b && b == c){printf("等边三角形");}else if ((a == b && c != a) || (a == c && b != c) || (b == c && c != a)){printf("等腰三角形");}elseprintf("是三角形");}else{printf("不是三角形");}return 0;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com