目录
代码一: 字符 'A’对应整型为65
已知字母A的ASCII码为65,有如下程序:
#include <stdio.h>
int main()
{
char c1,c2;
c1='A'+'8'-'4'; //65+4=69--->E
c2='A'+'8'-'5'; //65+3=68--->D(对应int型为68)
printf("%c,%d\n",c1,c2);
}
请问输出结果是:
E,68
代码二: 八进制 自加符 ++
//已知k的初值为八进制数
#include <stdio.h>
int main(){
int k=011; //k=1+8=9
printf("先使用,k的值为:%d\n",k++); //先使用,后自加,故k的值使用时为9。而后自加,为10
printf("后自加,k的值为:%d",k); //这时,k的值为10
}
注释中已经有所说明:
代码三:强制类型转换符
#include <stdio.h>
int main()
{
int m;
m=(int)((double)9/2)-9%2; //9%2 即9对2取余,结果为1。而后,4.5-1=3.5。因为为int型,所以结果=3。
printf("m=%d\n",m); //m=3
printf("------------------------------\n");
printf("原因:\n");
printf("(double)9/2=%lf\n\n",(double)9/2);
printf("(int)(double)9/2=%d\n\n",(int)(double)9/2);
}
输出:
代码四:逗号表达式 &&判断符
#include <stdio.h>
int main()
{
int i=2,j=3,k=4,a=4,b=5,c=3;
int m;
m=(a=i<j)&&(b=j>k)&&(c=i,j,k);//i<j为真,故a=1。j>k为假,故b=0。由于1&&0已经为假,故第三个括号不执行,c仍为原值3.
printf("m=%d\n",m);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n\n",c);
//上面的逗号表达式本来应当取最后一个值k,即4
printf("本来,c=%d\n",(c=i,j,k));
}
输出:
原因在注释中已经说明啦!
代码五:|| 符
#include <stdio.h>
int main()
{
int a=1,b=2,m=0,n=0,k;
k=( n=b>a || (m=a<b)); //b>a为真,故n=1。又因为 || 运算符即'或',一真则真,故k=1。后面的括号不再执行,m取值不变,仍为0
printf("%d,%d\n\n",k,m);
printf("m=a<b,即m=%d\n",m=a<b);
}
输出:
代码六: n++ 与++n
#include <stdio.h>
int main()
{
int m=12,n=34;
printf("%d%d",m++,++n); //1235 m先使用,即12。n先自加,故35。
printf("%d%d\n",n++,++m);//3514 n先使用 故35。m在上一步中,使用之后自加,为13,此时先自加,故14
//故最后输出 12353514
}
输出:
代码七:自减运算符,||运算符
#include <stdio.h>
int main()
{
int x=1,y=1;
int m=(!x || y--); //!x取值为0,由||运算符,故还应继续执行,y--取值为1(先使用)
printf("m=%d\n\n",m); //故m最终取值为1(0||1,取值应为1)
printf("--------------\n");
printf("原因:");
printf("!x=%d\n",!x);
printf("此时,y-- = %d\n",y); //此时,y为0 (使用完之后,自减,故为0)
}
——————————————————————————————————————————————————————————————————
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
暂时到此,吃完饭之后,继续更新C语言常规基础练习题。