02-0. 整数四则运算
#include <stdio.h>
int main(){
int a,b;
printf("输入两个整数:\n");
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n",a,b,a+b);
printf("%d - %d = %d\n",a,b,a-b);
printf("%d * %d = %d\n",a,b,a*b);
printf("%d / %d = %d\n",a,b,a/b);
/*printf("请输入两个正整数:");
scanf("%d %d",&a,&b);
printf("和为%d\t",a+b);
printf("差为%d\t",a-b);
printf("积为%d\t",a*b);
printf("商为%d\t",a/b);
*/
return 0;
}
严格遵守输出格式,仔细读题,样例输出有空格,程序输出就必须有空格!!!可以直接拷贝样例,然后修改为相应的变量。
sanf("%d,%d",&a,&b);
——————————————
此时要求在终端输入【1,2】,如果输入【1 2】,第二个【2】无法正确读入。
sanf("price %d,%d",&a,&b);
______________
【price 1 2】
变量定义与输入输出类型必须一致,不会编译报错,但是结果是错误的。
定义c为int却要求输出%f,只会输出0.000;定义为float却要求输出%d,只会输出0.000。
int a=22;
int b=2;
float c;
c=a/b;
printf("%f\n",c);
printf("%d",c);
_____________
11.000000
0
int\int=int 让输出%f,会输出0.0000;
int a=22.5;
int b=1.2;
printf("%f\n",a/b);
_____________
0.000000
int\int 让输出%d,没有问题,int变量定义时输入了小数会自动抹去小数。
int a=10.12;直接抹掉小数
//int b=2.3;直接抹掉小数
//printf("%d",a/b); 输出4
02-1. 厘米换算英尺英寸
#include <stdio.h>
int main(){
int foot, inch, cm, t_int;
float meter, t_float;
printf("请输入一个厘米制的数字:\n");
scanf("%d", &cm);
meter = cm * 1.0 / 100;//cm*1.0为浮点;metre浮点
t_int = meter / 0.3048;//英尺单位的整数int型
t_float = meter / 0.3048;//英尺单位的确切值,float型
foot = t_int;
inch = (t_float - t_int)*12;//这样就求到了一个数的小数部分
printf("%d %d\n",foot,inch);
return 0;
/*报错啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
float cm=0,m=0;
float foot;
float inch;
printf("请输入要换算的长度,单位厘米:");
scanf("%f",&cm);
m=cm/100.0;
foot=m/0.3048;
inch=(foot*12)%12;
// [Error] invalid operands to binary % (have 'float' and 'int')
printf("%d %f",foot,inch);
return 0;
*/
}
问题——%是整数运算符 - 对双精度或浮点数使用 fmod 或 fmodf
inch=(foot*12)%12;
//[Error] invalid operands to binary % (have 'float' and 'int')
套路:一个小数(5.57)如何分别得到它的整数部分和小数部分?
int foot, inch, cm, t_int;
float meter, t_float;
printf("请输入一个厘米制的数字:\n");
scanf("%d", &cm);
meter = cm * 1.0 / 100;// cm*1.0为浮点;meter浮点
t_int = meter / 0.3048;// f/f但赋值为int ✔英尺单位的整数int型 整数部分
t_float = meter / 0.3048;//英尺单位的确切值,float型 带小数的值
foot = t_int;
inch = ( t_float - t_int)*12;//这样就求到了一个数的 小数部分
02-2. 然后是几点
#include <stdio.h>
int main(){
int clock,clock_h,clock_m;
int time,time_h,time_m;
int h,m;
scanf("%d %d",&clock,&time);
clock_h=clock/100;//11
clock_m=clock-clock_h*100;//30
time_h=time/60;//-110 -1
// printf("%d\n",time_h);
time_m=time%60;//-50
if (clock_m+time_m<=0)
{
time_h-=1;
time_m=60+time_m;//60+30-50
}
else if (clock_m+time_m>=60)
{
time_h+=1;
time_m-=60;
}
h=clock_h+time_h;
m=clock_m+time_m;
printf("%d",h*100+m);
return 0;
}
1130 -110的时候注意,11,30,-1,-50,小时等于11-1-1=9;分钟等于30+(60-50),为什么要+60因为往小时借了一位。
02-3. 逆序的三位数
#include <stdio.h>
int main(){
int x;
int a,b,c;
scanf("%d",&x);//scanf一定不能遗漏&
a=x/100;//百位
b=(x-100*a)/10;//十位
c=x-100*a-10*b;//个位
printf("%d",c*100+b*10+a);
return 0;
}
scanf一定不能遗漏&
套路:取一个数的个十百位
bai = start / 100;
shi = start % 100 / 10;
ge = start % 10;
02-4. BCD解密
#include <stdio.h>
int main(){
int x,a,b;
scanf("%d",&x);
//知识点补充:16进制转换位10进制:0x54=16*5+1*4=84
a=x/16;
b=x%16;
printf("%d",a*10+b);
return 0;
}
知识点补充:16进制转换位10进制:0x54=16*5+1*4=84
0x只是前缀,类似16进制标识符。
18=10010=0x12=BCD(12)
套路:输入输出转进制
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);//输入x,10进制格式
printf("%x",x);//以16进制输出。
return 0;
}
套路:将10进制数转换为2进制
方法1
#include <stdio.h>
int main(void)
{
int n,length; //length用来装二进制数的个数
int a[20]; //定义一个数组来装余2得到的余数
scanf("%d",&n); //输入十进制的数字
while(n/2){ //当n=1时,n/2=0,此时while(0)不执行while中的语句,直接执行下面的语句
a[length++] = n%2; //将除2得到的余数装入数组中
n = n/2; //除二
}
a[length++] = n%2; //存储最后一个余数
//将余数从下往上输出
for(int i = length-1;i>=0;i--)
printf("%d",a[i]);
}
方法2
#include <stdio.h>
int main()
{
int remainder = 0; //余数 ,二进制输出为0,1组成,这里最好用long, int的表示范围较小;
int binary = 0; //二进制数
int i = 1;
int num = 0;
printf("请输入一个正整数:\n");
scanf("%ld", &num);
if (num >= 0)
{
while (num != 0)
{
remainder = num % 2;
binary += i * remainder;
num /= 2;
i *= 10;
}
printf("这个数转为二进制为:%ld", binary);
}
else
printf("您输入的数非法!");
return 0;
}