type
status
date
slug
summary
tags
category
icon
password
【程序设计】
题目:从字符串s中提取所有的正负号、数字和小数点等组成的子串,将其转换为
实数存储到数组a中,然后对其排序。
例如:字符串s为"abc34.5y-3.8-.03hh-a125-0.55ASgf-3#"
程序运行结果为:
-0.5500 -0.0300 -3.8000 -3.0000 34.5000 125.0000
编写程序:
1.函数 int fun(char s[],double a[])功能为:将字符串s中提取所有的正负号、
数字和小数点等组成的子串转换为实数存储到数组a中,函数返回提取的实数个数。
2.函数void sort(double a[],int n)功能为:将n个浮点数按绝对值大小进行排序,
排序规则为:按照整数部分绝对值升序排序,整数部分绝对值相等时,按小数部分
绝对值降序排序。
Code
C 库函数 - atof()
描述
C 库函数 double atof(const char *str) 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
声明
下面是 atof() 函数的声明。
参数
- str -- 要转换为浮点数的字符串。
返回值
函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
Code Explain
Function fun()
- 初始化:
count记录提取到的数字个数,i用于遍历字符串s。
- 查找数字或符号的开头:
- 如果
s[i]是+、-或数字字符,则可能是数字的起始。 - 创建
temp数组临时存储该数字子串。
- 提取数字子串:
- 如果有
+或 符号,将其放入temp,并移动索引i。 - 进入循环,逐字符检查是否是数字或小数点,并逐一存入
temp。 hasDigit记录是否至少包含一个数字,确保子串有效。
- 转换并存储:
- 如果
temp包含有效数字(即hasDigit == 1),则使用atof将其转换为浮点数,存入数组a中,并增加count。
- 返回:函数返回最终提取出的数字个数
count。
Function sort()
- 遍历数组:
- 外层循环
i从0到n-2遍历每个元素。 - 内层循环
j从i+1到n-1,用于将a[j]与a[i]进行比较,找到符合条件的顺序。
- 获取整数部分绝对值:
- 使用
fabs函数获取a[i]和a[j]的整数部分绝对值,分别存入abs_i和abs_j。
- 比较规则:
- 整数部分比较:若
abs_i大于abs_j,则交换a[i]和a[j],确保排序是升序。 - 小数部分比较:若
abs_i等于abs_j,则通过fabs(a[i] - abs_i)和fabs(a[j] - abs_j)比较小数部分绝对值。小数部分绝对值较大时,优先排列在前面(降序)。
- 交换:
- 如果满足交换条件,则用临时变量
temp将a[i]和a[j]交换,实现排序。
这样,最终的排序规则是:整数部分绝对值升序、在相同整数部分情况下按小数部分绝对值降序排列。
- Author:Tao Chen
- URL:https://www.nextdaddy.cn/article/1239b3f5-e6ae-8089-a56f-e88a3b91b921
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!



