鱼C论坛

 找回密码
 立即注册
查看: 527|回复: 1

[已解决]小白求助

[复制链接]
发表于 2023-12-9 15:36:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj。对于整数部分,P1P2...Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。

输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入 复制
0.111111111111111111111111111111
0.111111111111111111111111111111
样例输出 复制
0.222222222222222222222222222222
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)
int main(void)
{
        char dig1[101], dig2[101];
        int i;

        scanf("%s%s", dig1, dig2);
        char* p1 = strchr(dig1, '.');
        char* p2 = strchr(dig2, '.');
        int loc1 = p1 - dig1 + 1;
        int loc2 = p2 - dig2 + 1;
        int diff = (loc1 >= loc2) ? loc1 : loc2;
        char dig[101];

        for (i = 0; dig1[i] == '\0' && dig2[i] == '\0'; i++) {
                if (loc1 >= loc2) {
                        if (i < diff) {
                                dig[i] = dig1[i];
                        }
                        else if (i == loc1) {
                                dig[i] = '.';
                        }
                        else {
                                dig[i] = dig1[i - diff] + dig2[i];
                        }
                }
                else {
                        if (i < diff) {
                                dig[i] = dig2[i];
                        }
                        else if (i == loc2) {
                                dig[i] = '.';
                        }
                        else {
                                dig[i] = dig1[i] + dig2[i - diff];
                        }
                }
        }

        printf("%s", dig);

        return 0;
}
这个C语言程序错哪了?
最佳答案
2023-12-9 15:36:58
这个C语言程序有几处错误:

1. 在使用scanf函数读取输入时,需要使用"%s"格式控制符,并且传入的参数应该是一个字符数组的地址,而不是一个字符变量的地址。因此,应该将dig1和dig2声明为字符数组。

2. 在使用strchr函数查找小数点位置之前,应该先将dig1和dig2初始化为合适的值,即给字符数组分配足够的内存空间,并使用strcpy函数将输入的字符串复制到字符数组中。

3. 在for循环中,应该使用比较运算符"!="来比较dig1和'\0',而不是"=="。同时,在计算每个位置上的数位时,应该使用dig1[i]和dig2[i]来获取对应位置上的字符。

4. 在计算两个数相加的过程中,应该将字符转换为数字,然后进行相加。可以使用atoi函数将字符转换为整数。

5. 在printf函数中,应该使用"%c"格式控制符来输出字符,而不是"%s"。

下面是修改后的代码:
#include <stdio.h>#include <string.h>#pragma warning(disable:4996)int main(void){    char dig1[101], dig2[101];    scanf("%s%s", dig1, dig2);    char* p1 = strchr(dig1, '.');    char* p2 = strchr(dig2, '.');    int loc1 = p1 - dig1 + 1;    int loc2 = p2 - dig2 + 1;    int diff = (loc1 >= loc2) ? loc1 : loc2;    char dig[101];    for (int i = -1; dig1[i+1] != '\0' || dig2[i+1] != '\0'; i++) {        if (loc1 >= loc2) {            if (i < diff) {                dig[i+1] = dig1[i+1];            }            else if (i == loc1) {                dig[i+1] = '.';            }            else {                dig[i+1] = dig1[i+1] + dig2[i+1] - '0';            }        }        else {            if (i < diff) {                dig[i+1] = dig2[i+1];            }            else if (i == loc2) {                dig[i+1] = '.';            }            else {                dig[i+1] = dig1[i+1] + dig2[i+1] - '0';            }        }    }    printf("%s\n", dig);    return 0;}
希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-9 15:36:58 | 显示全部楼层    本楼为最佳答案   
这个C语言程序有几处错误:

1. 在使用scanf函数读取输入时,需要使用"%s"格式控制符,并且传入的参数应该是一个字符数组的地址,而不是一个字符变量的地址。因此,应该将dig1和dig2声明为字符数组。

2. 在使用strchr函数查找小数点位置之前,应该先将dig1和dig2初始化为合适的值,即给字符数组分配足够的内存空间,并使用strcpy函数将输入的字符串复制到字符数组中。

3. 在for循环中,应该使用比较运算符"!="来比较dig1和'\0',而不是"=="。同时,在计算每个位置上的数位时,应该使用dig1[i]和dig2[i]来获取对应位置上的字符。

4. 在计算两个数相加的过程中,应该将字符转换为数字,然后进行相加。可以使用atoi函数将字符转换为整数。

5. 在printf函数中,应该使用"%c"格式控制符来输出字符,而不是"%s"。

下面是修改后的代码:
#include <stdio.h>#include <string.h>#pragma warning(disable:4996)int main(void){    char dig1[101], dig2[101];    scanf("%s%s", dig1, dig2);    char* p1 = strchr(dig1, '.');    char* p2 = strchr(dig2, '.');    int loc1 = p1 - dig1 + 1;    int loc2 = p2 - dig2 + 1;    int diff = (loc1 >= loc2) ? loc1 : loc2;    char dig[101];    for (int i = -1; dig1[i+1] != '\0' || dig2[i+1] != '\0'; i++) {        if (loc1 >= loc2) {            if (i < diff) {                dig[i+1] = dig1[i+1];            }            else if (i == loc1) {                dig[i+1] = '.';            }            else {                dig[i+1] = dig1[i+1] + dig2[i+1] - '0';            }        }        else {            if (i < diff) {                dig[i+1] = dig2[i+1];            }            else if (i == loc2) {                dig[i+1] = '.';            }            else {                dig[i+1] = dig1[i+1] + dig2[i+1] - '0';            }        }    }    printf("%s\n", dig);    return 0;}
希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表