两道关于C语言的小题

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:55:42
第一道是:
main()
{int x,y;
scanf("%2d%1d",&x,&y);
printf("%d\n",x+y);
}
运行时输入123457
结果是得:15
第二道:
main()
{char c='A';
c+='6'-'3';
printf("%c",c);
printf("%x",c);
printf("%o",c);
printf("%d",c);}
结果是:D4410468
请问它们的原理是什么啊?

第一道:
scanf("%2d%1d",&x,&y);的意思是:读取两个整数,第一个整数读取2个长度的,存进整形变量x,第二个整数读取一个长度的,存进y里,多余的数忽略。
第二道:
c+='6'-'3';‘6’-‘3’是他们的ASCII码相减,所以是3,即等价为 c+=3;
而c原本等于‘A’,ASCII码加3后为‘D’,所以printf("%c",c)输出字符‘D’
printf("%x",c);printf("%o",c);printf("%d",c);是分别输出他们的十六进制(44)、八进制(104)和十进制(68),所以结果为D4410468

第一题scanf("%2d%1d",&x,&y);即x占两位,为12,y占一位为3,x+y=15
第二题c+='6'-'3';c=c+'3'='D'
%c 一个字符 :D
%o 无符号八进制整数:44
%x 使用十六进制数字0f的无符号十六进制整数:104
%d 有符号十进制整数:68

main()
{int x,y;
scanf("%2d%1d",&x,&y);/*ld 改d吧*/
printf("%d\n",x+y);
} main()
{char c='A';
c+='6'-'3';
printf("%c",c);/* 'A'=65 101 41 加上3
printf("%x",c);
printf("%o",c);
printf("%d",c);}
结果是:D4410468

第一题:读入%2d 指读入两位 x=12 %1d-》y=3