一、数据类型转换
1 #include<stdio.h> 2 //某些场合,必须进行数据类型转换,以匹配调用 3 void main0(){ 4 printf("%f",1);//printf不管你是什么类型,解析失败就是0 0.000000 5 printf(" %d",1.0);//0 6 printf(" %f",(float)1);//1.000000 7 printf(" %d",(int)1.0);//1 8 getchar(); 9 } 10 11 void main1(){ 12 //实数转整数,会舍弃小数点部分 13 //printf("%d",1/2);//0 14 //printf(" %d",1/2.0);//0 15 int num=3/2; 16 float f1=1/2.0;//0.5 整数与实数,结果为实数 17 float f2=3/2;//1.000000 整数与整数,结果为整数 18 //1按照%f解析失败,就是0.000000 19 printf("%d,%f",num,num);//1 0.000000 20 //0.5按照%d解析失败,就是0 21 printf(" %f,%d",f1,f1);//0.500000 0 22 printf(" %f,%d",f2,f2);//1.000000 0 23 getchar(); 24 }
1.隐式转换
1 #include<stdio.h> 2 //赋值号会自动进行赋值类型转换 3 void main(){ 4 int x=3.8; 5 printf("%d,%d",sizeof(x),sizeof(3.0));// 4 8 6 printf(" %d",x);//3 7 getchar(); 8 }
2.显式转换(强制转换)
1 #include<stdio.h> 2 // +-*/赋值->自动转换 printf需要强制转换 3 void main(){ 4 printf("%c",(char)65.0); 5 getchar(); 6 }
二、偷钱小程序
1 #include<stdio.h> 2 #include<stdlib.h> 3 // 1234.45->1234.4 4 // 1234.46->1234.5 5 // 五舍六入 6 // 1234.45->12344.5 +0.4 12344.9 12344 1234.4 7 // 1234.46->12344.6 +0.4 12345 12345 1234.5 8 void main(){ 9 float RMB,changeRMB; 10 scanf("%f",&RMB); 11 printf("现在有%0.2f元",RMB); 12 changeRMB=((int)(RMB*10.0f+0.4f))/10.0f; 13 printf(" 现在有%0.2f元 ",changeRMB); 14 changeRMB<RMB?printf("可以偷%f元 ",RMB-changeRMB):printf("原封不动 "); 15 16 system("pause"); 17 }
练习:123.345 小数点第三位先五舍六入,第二位再四舍五入
1 #include<stdio.h> 2 #include<stdlib.h> 3 // 123.345->123.340->123.300 小数点第三位先五舍六入,第二位再四舍五入 4 // 123.346->123.350->123.400 5 // 五舍六入,再四舍五入 6 // 123.345->12334.5 +0.4 12334.9 12334 123.34->1233.4 +0.5 1233.9 1233 123.3 7 // 123.346->12334.6 +0.4 12335 12335 123.35->1233.5 +0.5 1234 1234 123.4 8 void main(){ 9 float RMB,change_start_RMB,change_end_RMB; 10 scanf("%f",&RMB); 11 printf("现在有%0.3f元",RMB); 12 change_start_RMB=((int)(RMB*100.0f+0.4f))/100.0f; 13 printf(" 第三位五舍六入后有%0.3f元",change_start_RMB); 14 change_end_RMB=((int)(change_start_RMB*10.0f+0.5f))/10.0f; 15 printf(" 第二位四舍五入后有%0.3f元 ",change_end_RMB); 16 change_end_RMB<RMB?printf("可以偷%f元 ",RMB-change_end_RMB):printf("原封不动 "); 17 18 system("pause"); 19 }
三、进制转换itoa
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int num; 6 char str[32]; 7 scanf("%d",&num); 8 printf("%d,%u,%o,%x",num,num,num,num);//十进制,无符号十进制,八进制,16进制 9 //要转换的数据,保存的字符串,要转换的进制 10 itoa(num,str,2); 11 printf(" %s",str); 12 13 system("pause"); 14 }