视频链接
注意:inch需要除以12.0,这样可以把inch转换成float型
或者将inch定义为double,double是浮点型(表示双精度浮点数),float也是浮点型(表示单精度浮点数)
int main() {
printf("请分别输入身高的英尺和英寸,如输入\"5 7\"表示5英尺7英尺:");
int foot;
int inch;
scanf("%d %d", &foot, &inch);
// 注意:inch需要除以12.0,这样可以把inch转换成float型
// 或者将inch定义为double,double也是浮点型(表示双精度浮点数),float也是浮点型(表示单精度浮点数)
printf("身高是%.4f米 \n", ((foot + inch / 12.0) * 0.3048));
}
注意foot和inch的类型,int除以int还是int,所以要用float或者double
int main() {
printf("请分别输入身高的英尺和英寸,如输入\"5 7\"表示5英尺7英尺:");
fflush(stdout);
// 注意foot和inch的类型,int除以int还是int,所以要用float或者double
float foot;
float inch;
scanf("%f %f", &foot, &inch);
//scanf("%lf %lf", &foot, &inch); 如果foot和inch都是double
printf("身高是%.4f米 \n", ((foot + inch/ 12 ) * 0.3048));
}
整数
int
print("%d",...)
scanf("%d",...)
带小数点的数
double
print("%f",...)
scanf("%lf",...)
表达式是一系列运算符(operator)和算子(operand)的组合,用来计算一个值。
#include
#include
int main() {
int hour1, minute1;
int hour2, minute2;
printf("请输入第一个时间,小时和分钟用空格隔开:");
scanf("%d %d", &hour1, &minute1);
printf("请输入第二个时间,小时和分钟用空格隔开:");
scanf("%d %d", &hour2, &minute2);
int temp_time1 = hour1 * 60 + minute1;
int temp_time2 = hour2 * 60 + minute2;
int a = abs(temp_time1 - temp_time2);
int hour = a / 60;
int minute = a % 60;
printf("时间差是:%d小时,%d分钟", hour, minute);
}
a=6
的结果是a被赋予的值,也就是6a=b=6
——> a=(b=6)
赋值运算,自右向左运算符 | 运算 | 结合关系 | 举例 |
---|---|---|---|
+ | 单目不变 | 自右向左 | a*+b |
- | 单目取负 | 自右向左 | a*-b(b取相反数,再和a相乘) |
#include
#include
int main() {
double x;
double n;
printf("请输入本金和年期,用空格隔开:");
scanf("%lf %lf", &x, &n);
double total = x * pow(1 + 0.033, n);
printf("%.2lf", total);
}
符号 | 含义 |
---|---|
+= | total +=5 --> total = total +5 |
-= | 自减 |
*= | 自乘 |
/= | 自除 |
%= | 自求余 |
++ | count++ --> count += 1 |
– | count-- --> count -= 1 |
int main() {
int a = 5;
int b = a++;
int c = ++a;
printf("b=%d,c=%d", b, c);
}
// b=5,c=7
a = 5
赋值给b,然后a才自加一,这个时候b = 5, a = 6
a = 7
赋值给c,所以c的值是7逆序的三位数:程序每次读入一个三位数,然后输出按位逆序的数字
int main() {
int input;
printf("请输入一个三位数字:");
scanf("%d", &input);
int a = input / 100;//百位
int b = (input - a * 100) / 10;//十位
int c = input - a * 100 - b * 10;//个位
int output = c * 100 + b * 10 + a;
printf("倒序数为:%d", output);
}
BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。输出对应的十进制数。
如输入18,会输出12。
补充知识:进制转换
18变成二进制 0001 0010,变成十六进制 0x12 (用0x去表示这个数是十六进制的)
16进制的十六个代表数是0123456789ABCDEF
int x;
printf("input a number please:");
scanf("%d",&x);
printf("%x",x);//%x意思是将数值按十六进制输出,而且不会带有"0x"
if (条件成立){
...
}
关系运算的结果为真时输出1,否则为0
printf("%d\n",5==3)
// output:0
所有的关系运算符(==,!=,<,>)的优先级比算术运算(+,-,*,/)的低,但是比赋值运算符(=)的高
7 >= 3 + 4 // 7 >= 7 --> output:1
int a = b > 0; // if b = 1, then a = 1
判断是否相等的==
!=
的优先级比其他的低,而连续的关系运算是从左到右进行的
5 > 3 == 6 > 4 // 1 == 1 --> 1
6 > 5 > 4 // 6>5 --> 判断 1 > 4 --> 0
找零计算器需要用户做两个操作:输入购买的金额,输入支付的票面,而找零计算器的功能是:计算并打印找零,或告知用户余额不足以购买。
int main() {
double a;
double b;
printf("请输入购买金额和支付票面:");
scanf("%lf %lf", &a, &b);
double c = b - a;
if (c>=0){
printf("找零%.2lf元",c);
} else{
printf("支付金额不足!");
}
}
const
修饰符,用来修饰后面的int,功能是:对变量声明为只读特性,并保护变量值以防被修改。
const int m = 35;
if (条件成立){
...
} else{
// 条件不成立的话
...
}
if (条件成立)
如果条件成立,则执行这一行语句
// 如果条件成立时,要执行多行命令,则需要用{}括起来
else
总是和最近的那个if
匹配if (exp1)
st1;
else if (exp2)
st2;
else
st3;
分段函数
f ( x ) = { − 1 x < 0 0 x = 0 2 x x > 0 f(x) =\begin{cases}-1 & x<0\\0 & x=0\\2x & x>0\end{cases} f(x)=⎩⎪⎨⎪⎧−102xx<0x=0x>0
int main() {
int x;
int f = 0;
if (x < 0) {
f = -1;
} else if (x == 0) {
f = 0;
} else {
f = 2 * x;
}
}
int main(){
int a;
printf("print a number:");
scanf("%d",&a);
if (a == 1){
printf("hello");
} else if (a == 2){
printf("good morning");
} else if (a == 3){
printf("good afternoon");
} else{
printf("goodbye");
}
}
case 1+1:
break
,就会顺序执行到下面的case里去,直到遇到一个break
,或者switch结束为止。switch (控制表达式){
case 常量:
语句
case 常量:
语句
case 常量:
语句
default:
语句
}
// switch-case
int main() {
int type;
scanf("%d", &type);
switch (type) {
case 1:
printf("hello");
break;
case 2:
printf("good morning");
break;
case 3:
printf("good afternoon");
break;
default:
printf("goodbye");
}
}
超速判断
int main() {
int input;
printf("input a number:");
scanf("%d", &input);
if (input > 60) {
printf("Speed:%d - speeding",input);
} else{
printf("Speed:%d - OK",input);
}
}
三天打鱼两天晒网
int main() {
int date;
printf("input a date:");
scanf("%d", &date);
int date2 = date % 5;
if (date2 <= 3) {
printf("Fishing in day %d", date);
} else {
printf("Drying in day %d", date);
}
}
用天平找小球
int main() {
int a, b, c;
printf("input three numbers:");
scanf("%d %d %d", &a, &b, &c);
if (a != b && a == c) {
printf("B");
} else if (a != b && b == c) {
printf("B");
} else if (a != c && a == b) {
printf("C");
}
}
12-24小时制
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入在一行中给出带有中间的“:”符号(半角的冒号)的24小时制的时间,如12:34
表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6
表示5点零6分。
提示:在scanf的格式字符串中加入“:”,让scanf来处理这个冒号。
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串“AM”或表示下午的字符串“PM”。如“5:6 PM”表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。
如输入21:11,输出9:11 PM
int main() {
int time1, time2;
printf("输入时间,小时和分钟用冒号隔开:");
scanf("%d:%d", &time1, &time2);
int temp2 = time1 % 12;
if (time1 >= 0 && time1 < 12) {
printf("%d:%d AM", time1, time2);
} else if (time1 == 12) {
printf("%d:%d PM", time1, time2);
} else {
printf("%d:%d PM", temp2, time2);
}
}
成绩转换
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入在一行中给出1个整数的百分制成绩。在一行中输出对应的五分制成绩。
如输入90,输出A
int main() {
int x;
printf("input your grades:");
scanf("%d",&x);
if (x >= 90) {
printf("A");
} else if (x < 90 && x >= 80) {
printf("B");
} else if (x < 80 && x >= 70) {
printf("C");
} else if (x < 70 && x >= 60) {
printf("D");
} else {
printf("E");
}
}