Lazy loaded image
技术分享
C Language Algorithm
Words 1141Read Time 3 min
2024-10-18
2024-11-8
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()
  1. 遍历数组
      • 外层循环 i0n-2 遍历每个元素。
      • 内层循环 ji+1n-1,用于将 a[j]a[i] 进行比较,找到符合条件的顺序。
  1. 获取整数部分绝对值
      • 使用 fabs 函数获取 a[i]a[j] 的整数部分绝对值,分别存入 abs_iabs_j
  1. 比较规则
      • 整数部分比较:若 abs_i 大于 abs_j,则交换 a[i]a[j],确保排序是升序。
      • 小数部分比较:若 abs_i 等于 abs_j,则通过 fabs(a[i] - abs_i)fabs(a[j] - abs_j) 比较小数部分绝对值。小数部分绝对值较大时,优先排列在前面(降序)。
  1. 交换
      • 如果满足交换条件,则用临时变量 tempa[i]a[j] 交换,实现排序。
这样,最终的排序规则是:整数部分绝对值升序、在相同整数部分情况下按小数部分绝对值降序排列。
 
 
上一篇
Third Order Rubik’s Cube CFOP
下一篇
Why Next.js

Comments
Loading...