本帖最后由 电气2001于治福 于 2021-2-25 16:48 编辑
0. 如果正、负号运算符的优先级低于加、减号运算符,那么 -3 + 5 的值应该是多少?
答:-8,因为C语言规定优先级高的先进行运算,因此表达式是先计算 3 + 5 的和,再取负号。当然,这样的结果明显不符合逻辑,
所以C语言规定正、负号运算符的优先级是高于双目的算术运算符的优先级。
1. 请问下边程序会显示什么内容?
01. #include <stdio.h>
02.
03. int main()
04. {
05. int a = 2, b = 1;
06.
07. printf("%d\n", a / 'b');
08.
09. return 0;
10. }
答:0,因为字符 'b' 对应的 ASCII 值为 98,a / 'b' == 2 / 98 == 0,
2. 如果不上机实验,你知道下边代码会输出什么吗?
01. #include <stdio.h>
02.
03. int main()
04. {
05. int a;
06. (a = 2) + 3 * 4;
07. printf("a = %d\n", a);
08.
09. return 0;
10. }
答:a = 2
如果不加小括号,那么变量 a 的值最终应该是 14 才对,因为赋值运算符的优先级要低于算术运算符,所以先计算,后赋值。
但这里我们使用了优先级最高的小括号将赋值运算的过程括起来,因此先将变量 a 赋值为 2,再进行计算(计算结果不再赋值给变量
a)。
3. 请写出下边表达式的值(如果结果为浮点数,请保留六位小数)
答:
A. 5 / 3 = 1 // 整型除以整型,结果为整型,直接舍弃小数
B. 1 / 0 出错 // 除数不能为 0
C. 1.2 + 3 = 4.200000 // 浮点型加整型,编译器会自动将“精度较小”的类型先转换为“精度较大”的类型,再进行运算,所以结果为浮
点型
D. 1.2 * 0 = 0.000000 // 同上
E. 6.0 / 2 = 3.000000 // 同上
F. 10 / 6.0 = 1.666667 // 结果为无限循环小数,小数点后第六位四舍五入
G. 3 / 5 = 0 // 同 A
4. 下边代码中存在两处错误,请指出:
01. #include <stdio.h>
02.
03. int main()
04. {
05. int a = (5 + 1.2) % 2;
06. printf("%d\n", a);
07. }
答:
1. 求余运算符两边要求均为整型,5 + 1.2 的结果为浮点型;
2. printf() 函数后边的分号写成了中文的分号(;),大部分新手经常遇到这样错把中文符号当代码的问题,请重视!
5. 下边代码是实现摄氏度转换为华氏度,公式没错,但结果却并不正确(输入 32 摄氏度,转换后正确的结果应该是 89.6 华氏
度),请修改。
答:虽然公式是正确的,但代码中忽视了 9 / 5 的结果会舍弃小数,等于 1,所以得到的答案偏差比较大。
应该这么改:
01. #include <stdio.h>
02.
03. int main()
04. {
05. float fah, cel;
06.
07. printf("请输入摄氏度:");
08. scanf("%f", &cel);
09.
10. fah = 9.0 / 5.0 * cel + 32;
11. printf("转换为华摄度是:%.2f\n", fah);
12.
13. return 0;
14. }
#include <stdio.h>
#include <math.h>
int main()
{
float price,area,yir,mir; // 单价,面积,年利率,月利率
float interest,loan; // 利息,贷款总额
float ave_repay,down_payment; // 月均还款,首期付款
float total_price,total_repay; // 房款总额,还款总额
int ratio,time; // 按揭成数,按揭年数
printf("请输入单价 (元/平方):");
scanf("%f",&price);
printf("请输入面积:");
scanf("%f",&area);
printf("请输入按揭成数:");
scanf("%d",&ratio);
printf("请输入按揭年数:");
scanf("%d",&time);
printf("请输入当前基准年利率:");
scanf("%f",&yir);
mir = yir / 100 /12;
time = time * 12;
total_price = price * area;
loan = total_price * ratio / 10;
ave_repay = loan * mir * pow((1 + mir),time) / (pow((1 + mir),time) - 1);
interest = ave_repay * time - loan;
total_repay = loan + interest;
down_payment = total_price * (1 - (float)ratio /10);
printf("========== 报告结果 ==========\n");
printf("房款总额: %.2f元\n", total_price);
printf("首期付款: %.2f元\n", down_payment);
printf("贷款总额: %.2f元\n", loan);
printf("还款总额: %.2f元\n", total_repay);
printf("支付利息: %.2f元\n", interest);
printf("月均还款: %.2f元\n", ave_repay);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
float p0 = 10000,p1,p2,p3;
float r1 = 0.075, r2 = 0.0225,r3 = 0.0275,r5 = 0.0275;
p1 = p0 * (1 + r5 *5);
p2 = p0 * (1 + r3 * 3) * (1 + r2 * 2);
p3 = p0 * pow((1 + r1),5);
printf("第一种方案的本息和是: %.2f\n",p1);
printf("第二种方案的本息和是: %.2f\n",p2);
printf("第三种方案的本息和是: %.2f\n",p3);
return 0;
}
|