C语言学习Day16 循环嵌套

这篇博客通过C语言展示了如何找出100到999之间的水仙花数,并进一步扩展到寻找1000到9999之间的四维水仙花数。此外,还演示了用C语言打印星号图案的代码,展示了外层循环控制行数,内层循环控制列数的编程思想。

16-1

#include <stdio.h>

/*

复习:

	while:先判断后执行 

	do-while():先执行后判定 

	for(表达式1;表达式2;表达式3):

 	break:

 	continue:

*/

int main()

{

	int a,b,c;

	for(int i=100;i<=999;i++){

		a=i/100;

		b=(i/10)%10;

		c=i%10;

		if(i==a*a*a+b*b*b+c*c*c){

			printf("%d\n",i);

		}

	}

 

	//水仙花数 

}

16-2

#include <stdio.h>

int main()

{

	int i,g , s , b , q;

	for(i=1000;i<=9999;i++)

	{

		q = i/1000;

	 	s = i/10%10;

	 	b = i/100%10;

	 	g = i%10;

	 	

	 	if(i==q*q*q*q+s*s*s*s+b*b*b*b+g*g*g*g)

		printf("%d\n",i);

	}	

		

}

16-3

#include <stdio.h>

/*

	外层:控制行数

	内层:控制列数 

	*

	**

	***

	****

	*****

*/

int main()

{

	for(int k=0; k<5; k++){//k循环几次 

		for(int i=0; i<=k; i++){//i循环10次 k=0 i=0 		*

			printf("*");				//  k=1 i=0,1		**

										//  k=2 i=0,1,2 	***

		}								//  k=3 i=0,1,2,3	****

		printf("\n");

	}

	

		

		

}

在C语言中,结构体嵌套是一种将一个结构体定义为另一个结构体成员的技术。这种设计允许开发者创建更复杂、层次化的数据结构,适用于操作系统内核、嵌入式系统、网络协议解析等场景。结构体嵌套的定义和使用方法如下: ### 定义嵌套结构体 嵌套结构体的定义方式有两种: 1. **在外部结构体定义中直接定义内部结构体**: 可以在一个结构体定义中直接嵌套另一个结构体,如下所示: ```c struct Date { int day; int month; int year; }; struct Employee { char name[50]; struct Date birthDate; // 嵌套结构体作为成员 float salary; }; ``` 2. **先定义内部结构体,再引用到外部结构体中**: 如果内部结构体已经在其他地方定义,可以直接引用它,如下所示: ```c struct Address { char street[100]; char city[50]; char zipCode[10]; }; struct Person { char name[50]; struct Address homeAddress; // 使用已定义的结构体 int age; }; ``` ### 初始化嵌套结构体 嵌套结构体的初始化可以采用以下方式: 1. **直接初始化**: ```c struct Employee emp = {"John Doe", {15, 8, 1990}, 5000.0}; ``` 2. **分步初始化**: ```c struct Employee emp; emp.birthDate.day = 15; emp.birthDate.month = 8; emp.birthDate.year = 1990; strcpy(emp.name, "John Doe"); emp.salary = 5000.0; ``` ### 访问嵌套结构体成员 嵌套结构体的成员可以通过点操作符(`.`)或箭头操作符(`->`)访问: 1. **使用点操作符**: ```c printf("Birth Date: %d/%d/%d\n", emp.birthDate.day, emp.birthDate.month, emp.birthDate.year); ``` 2. **使用指针和箭头操作符**: ```c struct Employee *ptrEmp = &emp; printf("Birth Date: %d/%d/%d\n", ptrEmp->birthDate.day, ptrEmp->birthDate.month, ptrEmp->birthDate.year); ``` ### 嵌套结构体的内存布局 嵌套结构体的内存布局遵循C语言的对齐规则。嵌套的结构体成员将作为外部结构体的一部分存储在连续的内存中,其大小和对齐方式取决于编译器的实现和目标平台的架构。可以使用 `sizeof` 运算符查看结构体的实际大小,例如: ```c printf("Size of struct Employee: %lu\n", sizeof(struct Employee)); ``` ### 注意事项 1. **避免循环嵌套**:结构体A包含结构体B,而结构体B又包含结构体A,这会导致编译错误。可以通过使用指针来解决此类问题。 2. **合理使用嵌套结构体**:虽然嵌套结构体可以提高代码的可读性和组织性,但过度使用可能导致代码复杂化。 3. **内存对齐问题**:不同的编译器可能有不同的内存对齐策略,因此在跨平台开发时需要注意。 通过上述方法,可以在C语言中灵活地定义和使用嵌套结构体,以构建更复杂的数据模型[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值