鱼C论坛

 找回密码
 立即注册
查看: 2094|回复: 9

[已解决]求解答S1E8作业中的疑惑

[复制链接]
发表于 2022-8-2 17:18:11 | 显示全部楼层 |阅读模式
10鱼币
1.此段代码中的fah变量,如果声明为int类型,最终答案为7.00(小数部分全是0);如果按小甲鱼老师的答案,声明为float类型,则能得到正确答案,小数部分也不是0了。请问这是为啥?
#include <stdio.h>

int main()
{
        int fah;
        float cel;

        printf("请输入华氏度:");
        scanf("%d", &fah);

        cel = (fah - 32) * 5 / 9;

        printf("转换为摄氏度是:%.2f\n", cel);

        return 0;
}

2.
(1)此段代码中,请问变量a的数量为何要设置为256?
(2)而且char类型的取值范围最高不是255吗?
(3)小甲鱼老师说,不写数量,编译器会自动计算数量,可是我自己试了char a[];这种写法会报错,char a[]="";则会乱码,请问是为什么呀?
#include <stdio.h>

int main()
{
        char a[256];
        int h;
        float m, in;
        double lb;

        printf("请输入您的姓名:");
        scanf("%s", &a);

        printf("请输入您的身高(cm):");
        scanf("%d", &h);

        printf("请输入您的体重(kg):");
        scanf("%f", &m);

        printf("========== 正在为您转换 ==========\n");

        in = h / 2.54;
        lb = m / 0.453;

        printf("%s的身高是%.2f(in),体重是%.2f(lb)\n", a, in, lb);

        return 0;
}
最佳答案
2022-8-2 17:18:12
第二个问题:
(1)a是一个字符数组,它可以储存256个英文字符,储存长度为255的字符串
(2)char类型的取值是255,但这里的意思是创建一个数组a,它可以放256个char类型的值
(3)小甲鱼老师的意思是
#include <stdio.h>

int main()
{
    char a[] = "Hello";
    printf("%s\n",a);
    return 0;
}
这样写是没问题的,因为他会计算"Hello"的长度,但你这里char a[];写既没有指定储存的字符串,又没有指定长度,当然会报错,至于char a[] = "";的意思等同于char a[] = {'\0'};也就是说,a的数量为1,然而你后面让这个数量为1的字符数组去装一个名字,当然会乱码

最佳答案

查看完整内容

第二个问题: (1)a是一个字符数组,它可以储存256个英文字符,储存长度为255的字符串 (2)char类型的取值是255,但这里的意思是创建一个数组a,它可以放256个char类型的值 (3)小甲鱼老师的意思是 这样写是没问题的,因为他会计算"Hello"的长度,但你这里char a[];写既没有指定储存的字符串,又没有指定长度,当然会报错,至于char a[] = "";的意思等同于char a[] = {'\0'};也就是说,a的数量为1,然而你后面让这个数量为1的字符数组去装 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 17:18:12 | 显示全部楼层    本楼为最佳答案   
第二个问题:
(1)a是一个字符数组,它可以储存256个英文字符,储存长度为255的字符串
(2)char类型的取值是255,但这里的意思是创建一个数组a,它可以放256个char类型的值
(3)小甲鱼老师的意思是
#include <stdio.h>

int main()
{
    char a[] = "Hello";
    printf("%s\n",a);
    return 0;
}
这样写是没问题的,因为他会计算"Hello"的长度,但你这里char a[];写既没有指定储存的字符串,又没有指定长度,当然会报错,至于char a[] = "";的意思等同于char a[] = {'\0'};也就是说,a的数量为1,然而你后面让这个数量为1的字符数组去装一个名字,当然会乱码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 17:32:45 | 显示全部楼层
第一个问题:小甲鱼说了,整型/整型,结果仍为整型,会舍弃小数部分,当你把其中一个操作数变为浮点型,就返回浮点型,计算机这么做是为了保证精度。
所以你一种是把fah变量改浮点,另一种是把9改成9.0即可
#include <stdio.h>

int main()
{
        int fah;
        float cel;

        printf("请输入华氏度:");
        scanf("%d", &fah);

        cel = (fah - 32) * 5 / 9.0;

        printf("转换为摄氏度是:%.2f\n", cel);

        return 0;
}

评分

参与人数 1鱼币 +5 收起 理由
脱碳葡萄糖 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 17:39:34 | 显示全部楼层
本帖最后由 并非我董事 于 2022-8-2 17:42 编辑

1.
高转低会损失精度,这里出现了自动类型转换
float转int,比如
float a = 3.14;
int a;
b = a;
printf("%d\n",a);
此时会输出结果3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 17:44:32 | 显示全部楼层
第2个问题,是一个数组,就是说,这个数组存放了256个相同类型(char)的变量,为了能够保证输入的所有字符都被储存。
第二小问我没看懂
第三小问,是因为你必须将数组全部元素初始化,才可以让计算机帮你计算元素个数,数组的元素个数必须在他所处的那行代码出就确定。
char a[]=" " 这个语句应该是只将第一个元素初始化为空格,然后就是只有一个元素。所以你以后就越界访问了

评分

参与人数 1鱼币 +5 收起 理由
脱碳葡萄糖 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 18:26:52 | 显示全部楼层
临时号 发表于 2022-8-2 17:48
第二个问题:
(1)a是一个字符数组,它可以储存256个英文字符,储存长度为255的字符串
(2)char类型的取值是25 ...

你的第1点,我试了下输入汉字也没问题阿?用的DEV-C++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 18:30:54 | 显示全部楼层
额外减小 发表于 2022-8-2 18:26
你的第1点,我试了下输入汉字也没问题阿?用的DEV-C++

输入汉字是没问题啊,我只是说可以储存256个英文字符,因为如果是中文字符的话占2个字节,如果储存中文字符的话只能储存128个中文字符,我这么说只是想严谨一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-2 20:03:28 | 显示全部楼层
临时号 发表于 2022-8-2 17:18
第二个问题:
(1)a是一个字符数组,它可以储存256个英文字符,储存长度为255的字符串
(2)char类型的取值是25 ...

也就是说,a这个数组,存放了256个char类型的变量,而每个char变量的取值范围是255?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 20:04:38 | 显示全部楼层
脱碳葡萄糖 发表于 2022-8-2 20:03
也就是说,a这个数组,存放了256个char类型的变量,而每个char变量的取值范围是255?

是的,准确的说是256个char类型的数据,不是变量

评分

参与人数 1鱼币 +1 收起 理由
脱碳葡萄糖 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 20:12:41 | 显示全部楼层
临时号 发表于 2022-8-2 18:30
输入汉字是没问题啊,我只是说可以储存256个英文字符,因为如果是中文字符的话占2个字节,如果储存中文字符 ...

3q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-21 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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