本题是字符串的处理
main()函数中,是字符串的读入,调用insert函数
Insert函数的功能是在字符串str原有字符的中间插入“*”号,然后输出
(1)i值存放的是字符串的长度;
(2)由于C语言中,数组的下标是由0开始的,所以2*i表示的是偶数位的位置,2*i-1表示的是奇数位的位置,所以偶数位是原来输入字符串的内容,奇数位是符号"*",但由于字符串长度为4,str[4]并无内容,因此str[8]=" ";
(3)最后将字符串的值输出。
其实重点在于循环
while(i>0){
str[2*i]=str[i];
//第一次str[8]=str[4]=" ";第二次str[6]=str[3]="d";第三次str[4]=str[2]="c";第四次str[2]=str[1]="b"
str[2*i-1]="*";
//第一次str[7]="*";第二次str[5]="*";第三次str[3]="*";第四次str[1]="*"
i--;//i值每次减一,循环4次后等于0跳出循环,str[0]="a"不变
}
char型对应数值是ASCII码,是有符号数。
而你代码中ch+32结果是129(97+32)。
第一参数按%c输出是?,因为127往后是扩展编码,不用做显示。
第二参数按%d输出,你前面赋值将129赋值给了char型的变量ch。
129是无符号数,赋值给ch后,ch的二进制码是1000,0001(129对应的无符号二进制)。
但ch作为字符型,是有符号数,所以最高位被解读成负号。这就变成了一个负数。
负数在计算机中是按照补码保存的。
因此,打印时要将补码转成原码:
1000,0001(补码)=>1000,0000(反码)=>1111,1111(原码)。
有符号二进制1111,1111转成10进制打印,就是-127。