发布时间:2023-05-07 11:00
以十进制显示数字,使用%d;以八进制 显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须使用%#o、%#x、%#X。 ——《C Primier Plus》第六版
#include
int main()
{
printf("%#o %#0X", 1234, 1234);
return 0;
}
反向输出四位数
#include
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d", n % 10);
n /= 10;
}
printf("\n");
return 0;
}
关于字符@!~,但是计算机中存储的是二进制,所以要给这些字符编码比如A:65,a:97。这些数字叫ASCII码。
#include
int main()
{
int ch = 0;
ch = getchar();
putchar(ch);
return 0;
}
此处ch为整型,输入一个字符时,将ASCII码赋值到ch中,如A就是65,然后putchar会将ASCII码转化成对应的字符输出。
#include
int main()
{
int ch = 0;
ch = getchar();
putchar(ch+32);
return 0;
}
A:65 a:97,差32,所以大小写转化只需要多加32.
#include
int main()
{
int ch = 0;
while(ch = getchar())
{
putchar(ch + 32);
}
return 0;
}
比如输入A,A此时在输入缓冲区中,但是没有送给getchar,还要加上回车才能给它,即A\n。
A变成a后,因为循环又从输入缓冲区中看到了\n(10),加上32为'*'。
是不是不舒服。
#include
int main()
{
int ch = 0;
while(ch = getchar())
{
putchar(ch + 32);
getchar();
}
return 0;
}
只需要再加个getchar()把\n吃掉就好了!
不过,这个循环会让你一直输入,是个无底洞。
#include
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
putchar(ch + 32);
getchar();
}
return 0;
}
getchar函数在文件读取错误或者文件结束时,返回EOF(End of file),通常放在文件的末尾。
#include
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
printf("%c\n", ch+32);
getchar();
}
return 0;
}
%15d的效果是靠着右边的墙排排站。
#include
int main()
{
printf("%#X\n", 0xABCDEF);
return 0;
}
十六进制为%X或%x,#用于显示前导的0X或0x.
printf函数返回的是:打印在屏幕上的字符的个数。
#include
int main()
{
int ret = printf("hehe");
printf("%d\n", ret);
return 0;
}
#include
int main()
{
printf("\n%d", printf("Hello world!"));
return 0;
}
先调第一个printf1函数,那么它的值是后面一个printf2,printf2先打印Hello world!,再返回返回值为打印的字符的个数,再换行打印printf1。
有小数最好用double,虽然还有float,但是浮点数默认都是double类型,而且double类型的数值范围比float大很多,推荐使用double。
C语言编程时常量写为0时,系统默认其是一个整型常量int,写0.0时系统默认其是双精度浮点型常量double。
%f为单精度类型的数据(占4个字节),而%lf为双精度类型的数据(占8个字节)。超出范围会四舍五入。
%.2f,%.2lf代表小数点后保留2位小数。
#include
int main()
{
int id = 0;
double c_score = 0.0;
double math_score = 0.0;
double eng_score = 0.0;
scanf("%d;%lf,%lf,%lf", &id, &c_score, &math_score, &eng_score);
printf("The each subject score of No. %d is %.2lf, %.2lf, %.2lf.", id, c_score, math_score, eng_score);
return 0;
}
输入 17140216;80.845,90.55,100.00
double类型,float类型在存储时会有精度丢失,所以四舍五入的答案不对。
那为什么会有精度丢失呢?
是因为我们输入时是十进制,但是在计算机内部计算时需要先转换成二进制。
参考:如何理解double精度丢失问题? - 知乎
比如把0.1转换成二进制,0.1 = 1 / 10。那么二进制就是0.1 = 1 / 1010 = 0.0001100110011……,放进double类型中。