C语言100题进阶(11~20)

C语言100题进阶(11~20)

11.13个人围成一圈,从第一个人开始顺序报数,1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用循环链表处理。
不会
12.拆分实数的整数与小数部分:要求自定义一个函数void splitfloat(float x, int *intpart, float *fracpart),其中x是被拆分的实数,intpart和fracpart分别是将实数x拆分出来的整数部分与小数部分。编写主函数,并在其中调用函数splitfloat()。

//12.拆分实数的整数与小数部分:要求自定义一个函数
//void splitfloat(float x, int *intpart, float *fracpart)
//其中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分
//编写主函数,并在其中调用函数splitfloat()。
#include<stdio.h>
void splitfloat(float x, int *intpart, float *fracpart)
{
   
	*intpart=x/1;
	*fracpart=x-*intpart;
}
main()
{
   
	float x,xiao;
	float *fracpart=&xiao;
	int zheng;
	int *intpart=&zheng;
	scanf("%f",&x);
	splitfloat(x,intpart,fracpart);
	printf("%d,%f",*intpart,*fracpart);
}

13.动态内存分配的方法实现冒泡排序

//13.动态内存分配的方法实现冒泡排序
#include<stdio.h>
#include<stdlib.h>
main()
{
   
	int n,i,j,temp;
	int *a;
		scanf("%d",&n);
		a=(int *)malloc(n*sizeof(int));
	if(a==NULL)
		printf("kong");
	for(i=0;i<n;i++)
		scanf("%d",a+i);
	for(i=0;i<n-1;i++)
		for(j=0;j<=i;j++)
		{
   
			if(*(a+j)>*(a+j+1))
			{
   
				temp=*(a+j);
				*(a+j)=*(a+j+1);
				*(a+j+1)=temp;
			}
		}
		for(i=0;i<n;i++
### 关于C语言进阶练习 以下是几个典型的C语言进阶练习及其解析: #### 目一:成绩等级评定 此目涉及条件运算符的应用。以下是一个完整的实现代码[^2]。 ```c #include <stdio.h> int main() { int score; char grade; printf("请输入分数: "); scanf("%d", &score); // 使用三元运算符判断成绩对应的等级 grade = (score >= 90) ? 'A' : ((score >= 60) ? 'B' : 'C'); printf("成绩等级:%c\n", grade); return 0; } ``` 该程序通过输入学生的分数,利用条件运算符 `(condition)?value_if_true:value_if_false` 来决定学生的成绩等级,并最终输出结果。 --- #### 目二:整型变量混合计算 这道目考察不同类型数据之间的转换以及表达式的求值过程[^3]。 ```c #include <stdio.h> void main() { int a = -3; unsigned b = 2; long c = a + b; printf("%ld\n", c); } ``` 在此代码中,`a` 是带符号整数,而 `b` 是无符号整数。当执行加法操作时,编译器会自动将两者提升至相同的类型后再进行计算。由于 `-3` 转换为无符号形式后可能变为较大的正数值(取决于具体平台),因此实际输出的结果可能会超出预期范围。这种行为称为 **隐式类型转换** 或者 **强制类型提升**。 --- #### 目三:病房分配逻辑设计 这是一个更复杂的场景模拟问,涉及到数组、结构体或者简单的算法设计[^4]。 假设我们需要根据病人的病情严重程度为其分配合适的病房,则可以按照如下方式编写代码: ```c #include <stdio.h> #define MAX_PATIENTS 10 typedef struct Patient { int id; int severity; // 病情严重度 [0, 10] } Patient; // 分配病房函数 char assignRoom(int severity) { if (severity >= 8) { return 'I'; // ICU重症监护室 } else if (severity >= 5 && severity <= 7) { return 'W'; // 普通病房 } else { return 'O'; // 外科观察区 } } int main() { Patient patients[MAX_PATIENTS]; for (int i = 0; i < MAX_PATIENTS; ++i) { printf("请输入第%d位患者的ID和病情严重度(0~10): ", i + 1); scanf("%d %d", &patients[i].id, &patients[i].severity); char roomType = assignRoom(patients[i].severity); printf("患者ID:%d 的房间类型为: %c\n", patients[i].id, roomType); } return 0; } ``` 上述代码定义了一个 `Patient` 结构体用于存储每位患者的信息,并提供了一个基于病情严重性的简单分类方法来指定其应入住的区域。 --- ### 总结 以上三个实例分别展示了基础语法应用、复杂数据类型的处理以及面向对象编程思想初步引入等内容,在学习过程中可以帮助加深理解并提高实践能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惜寒偙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值