/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目:程序将由数字字符组成的字符串转换为10进制实数,
例如将"123.4567"转换为123.45670。
程序运行如样张所示。
-----------------------------------------------------------------------
注意:请勿改动程序中的其他部分。
---------------------------------------------------------------------*/
#include<stdio.h>
#include<ctype.h>
double conver(char s[]){
int I,i,poi;
double F,p;
F=I=i=poi=0;
p=0.1;
/**********Program**********/
while(s[i])
{
if(s[i]=='.')
poi=1;
else if(isdigit(s[i])){
if(poi==0)
I=I*10+s[i]-'0';
else{
F+=p*(s[i]-'0');
p=p*0.1;
}
}
i++;
}
/********** End **********/
return I+F;
}
int main()
{
char d[3][15]={"123.4567","0.12345","4567.0"};
int i;
for(i=0;i<3;i++)
printf("%12.5f\n",conver(d[i]));
return 0;
}
解释如下:
/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目:程序将由数字字符组成的字符串转换为10进制实数,
例如将"123.4567"转换为123.45670。
程序运行如样张所示。
-----------------------------------------------------------------------
注意:请勿改动程序中的其他部分。
---------------------------------------------------------------------*/
#include<stdio.h>
#include<ctype.h>
double conver(char s[]){
int I,i,poi;
double F,p;
F=I=i=poi=0;
p=0.1;
/**********Program**********/
while(s[i]) // 取 s数组中 第i个元素
{
if(s[i]=='.') // 如果是 小数点,则poi 标记为1
poi=1;
else if(isdigit(s[i])){ // 如果是数字
if(poi==0) // 还没取到小数点,这里读取到的数字都是整数部分
I=I*10+s[i]-'0'; // 计算整数部分值,并累加
else{ // 取到小数点了,这里读取的数字是小数部分
F+=p*(s[i]-'0'); // 按小数部分累加,【s[i] - '0' 得到 数字字符 对应的 整数】
p=p*0.1;
}
}
i++; // 继续下一个字符判断
}
/********** End **********/
return I+F;
}
int main()
{
char d[3][15]={"123.4567","0.12345","4567.0"};
int i;
for(i=0;i<3;i++)
printf("%12.5f\n",conver(d[i]));
return 0;
}
编辑环境:sources insight
运行环境:gcc
如果需要坐标的方式也可以,注释掉的代码就是坐标移动,将其取消注释,然后稍微改一下就可以了,实现图
针对学习C语言的问题,推荐以下练习题目和相关资料:
《C Primer Plus》这本书有很多练习题和代码实例,适合初学者和进阶者。
《算法竞赛入门经典:训练指南》这本书虽然是算法题精选,但是C语言是其最主要的编程语言,适合想要进阶的学习者。
LeetCode是一个国际化的在线算法编程平台,不仅提供了许多高质量的算法题目,而且免费,适合有一定编程基础的学习者。
针对每一个题目的具体解决方案,需要根据实际情况进行分析和实现。在编写代码时,需要注意以下几点:
指针问题。C语言中指针操作非常灵活,但是也容易出现内存泄漏等问题,需要特别注意。
数组问题。C语言中数组名和数组首元素的地址一样,但是需要注意数组下标越界的问题,否则会出现严重的内存错误。
函数问题。C语言中函数和模块之间可以乱调用,容易出现维护难度大的问题,需要遵循开发框架和编码规范。
具体的解决方案需要根据具体的问题进行分析和实现,需要具备坚持的力度和实践的耐心。