脱碳葡萄糖 发表于 2022-8-2 17:18:11

求解答S1E8作业中的疑惑

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;
      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的字符数组去装一个名字,当然会乱码

额外减小 发表于 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;
}

并非我董事 发表于 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

额外减小 发表于 2022-8-2 17:44:32

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

额外减小 发表于 2022-8-2 18:26:52

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

你的第1点,我试了下输入汉字也没问题阿?用的DEV-C++

临时号 发表于 2022-8-2 18:30:54

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

输入汉字是没问题啊,我只是说可以储存256个英文字符,因为如果是中文字符的话占2个字节,如果储存中文字符的话只能储存128个中文字符,我这么说只是想严谨一点

脱碳葡萄糖 发表于 2022-8-2 20:03:28

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

也就是说,a这个数组,存放了256个char类型的变量,而每个char变量的取值范围是255?

临时号 发表于 2022-8-2 20:04:38

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

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

额外减小 发表于 2022-8-2 20:12:41

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

3q
页: [1]
查看完整版本: 求解答S1E8作业中的疑惑