C语言的数据格式问题

C语言运用输入和输出语句时所遇到的问题
#include
#include
int main()
{
    int i,j;
    scanf("%d",&i);
    printf("%c",i*1.1);
    j=100;
    printf("%c",j);
    if(i<=100000)
    {
        printf("%c",i*1.1);
    }
    
}

运行结果如下图

img


我认为我输入30后会依次打印出来 !d! 但实际只打印出来了d,不知道是何原因

我目前所掌握的知识是%c 和 %d 只要数据大小为0-127之间都可以互换,但如上图出现此种情况,我不知道是哪里错了,请各位指点

修改如下,见注释,供参考:

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j;
    scanf("%d",&i);
    printf("%c",(int)(i*1.1)); //修改
    j=100;
    printf("%c",j);
    if(i<=100000)
    {
        printf("%c",(int)(i*1.1));//修改
    }
    return 0;
}

该回答引用ChatGPT

在C语言中,字符变量在内存中被存储为一个8位的整数,也就是一个ASCII码。当您使用%c输出一个整数时,printf会将这个整数转换为对应的ASCII码,并输出对应的字符。

在您的代码中,当您输入30后,程序会将30乘以1.1,得到33,然后printf使用%c将33转换为ASCII码,并输出相应的字符。ASCII码表中,33对应的字符是感叹号"!",因此程序输出了一个感叹号。而在下一个printf语句中,您输出的是一个整数100的ASCII码,也就是字符"d"的ASCII码。

所以,程序输出的结果是一个感叹号和一个字符"d"。

为了打印浮点数或乘法运算的结果,请使用%f格式化符号,例如:

float i;
scanf("%f", &i);
printf("%f", i * 1.1);

如果您想输出整数而不是字符,请使用%d格式化符号,例如:

int i;
scanf("%d", &i);
printf("%d", i * 11 / 10);

注意,除以10可以转化为乘以1.1,但是在进行乘法运算时,一定要确保使用浮点数类型或者强制类型转换,否则可能会导致计算错误。