目录
2. C语言中如何表示“真”和“假”? 系统如何判断一个量的“真”和“假”?
5.从键盘输入一个小于 1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于 1000 的正数。若不是,则要求重新输入。
6.有一个函数:y= x (x < 1);2x-1 (1 <= x < 10);3x-11 (x >= 10)写程序,输入 x的值,输出y相应的值。
8. 给出一百分制成绩,要求输出成绩等级A'、'B'、'C'、'D'、'E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为''D',60分以下为'E'。
9. 给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为 321,应输出 123。
1.什么是算术运算? 什么是关系运算? 什么是逻辑运算?
- 算术运算:指的是四则运算,加减乘除,乘方,开方这些运算统称。(运算符:+ - * / % ++ --)
- 关系运算:在C语言中,关系运算也可以称为比较运算,用于进行两个量、或者两个表达式结果之间的关系表示。(运算符:< > <= >= == !=)
- 逻辑运算:对表达式进行逻辑与或非上的逻辑真假测试。(运算符:&& || !)
2. C语言中如何表示“真”和“假”? 系统如何判断一个量的“真”和“假”?
- 在C语言中,用0表示假,用1表示真。
- 虽然C用语言中,假的用0表示,真的用1表示,但是在系统真正进行判断的时候,可不是0 、1的判断。在系统判断中,0表示假,但是非假即真,也就是非0值都是真。
3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。
优先级:算术运算符 > 关系运算符 > 逻辑运算符(这不是绝对,逻辑非优先级最高)
(1)a+b>c && b==c
3+4 > 5 && 4==5
7 > 5 && 4 == 5
1 && 0
0
(2)a‖b+c && b-c
3 || 4 + 5 && 4-5
3 || 9 && -1
3 || 1
1
(3)!(a>b) && !c‖1
!(3 > 4) && !5 || 1
!(0) && 0 || 1
1 && 0 || 1
0 || 1
1
(4)!(x=a) && (y=b) && 0
!(x=3) && (y=4) && 0
!(3) && 4 && 0
0 && 4 && 0
0 && 0
0
(5)!(a+b)+c-1 && b+c/2
!(3+4) + 5 - 1 && 4 + 5/2
!(7) + 5 - 1 && 4 + 5/2
0 + 5 - 1 && 4 + 5/2
4 && 4 + 2
4 && 6
1
4.有 3个整数a,b,c,由键盘输入,输出其中最大的数。
#include <stdio.h> int main() { int a, b, c, max = 0; printf("请输入要比较的三个数:>"); scanf("%d%d%d", &a, &b, &c); if (a > b) max = a; else max = b; if (max < c) max = c; printf("最大值是:%d\n", max); return 0; }
5.从键盘输入一个小于 1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于 1000 的正数。若不是,则要求重新输入。
#include <stdio.h> #include <math.h> int main() { int num = 0; printf("请输入一个数:>"); scanf("%d", &num); if (num >= 1000) { printf("输入数据有误,请重新输入:>"); scanf("%d", &num); } int ret = (int)sqrt(num); printf("%d\n", ret); return 0; }
6.有一个函数:
y= x (x < 1);2x-1 (1 <= x < 10);3x-11 (x >= 10)
写程序,输入 x的值,输出y相应的值。
#include <stdio.h> int main() { float x, y; printf("请输入x的值:"); scanf("%f", &x); if (x < 1) { y = x; } else if (x >= 1 && x < 10) { y = 2 * x - 1; } else y = 3 * x - 11; printf("y = %.2f\n", y); return 0; }
7.有一函数:
y= -1(x < 0); 0(x = 0);1(x > 0)
有人编写了以下两个程序,请分析它们是否能实现题目要求。不要急于上机运行程序,先分析两个程序的逻辑,画出它们的流程图,分析它们的运行情况。然后上机运行程序,观察和分析结果。
(1)
# include <stdio. h>
int main()
{
int x,y;
printf(″enter x:");
scanf(″d%",&x);
y=-1;
if(x!=0)
if(x>0)
y=1;
else
y=0;
printf("x=%d,y=%d\n",x,y);
return 0;
}
else总是会找离自己最近的else if进行配对,因此本题中的else虽然与外层if对齐,但是与它配对的却是内层if。所以这段代码不
能够实现题目要求。
(2)
# include <stdio. h>
int main()
{
int x,y;
printf(″enter x:'');
scanf("%d",&x);
y=0;
if(x>=0)
if(x>0) y=1;
else y=-1;
printf(″x = %d, y = %d\n",x,y);
return 0;
}
这段代码的错误和第一小题一样,所以也实现不了题目要求。
8. 给出一百分制成绩,要求输出成绩等级A'、'B'、'C'、'D'、'E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为''D',60分以下为'E'。
#include <stdio.h> int main() { float score; printf("请输入你的成绩:"); scanf("%f", &score); if (score >= 90) printf("A\n"); else if (score >= 80 && score < 90) printf("B\n"); else if (score >= 70 && score < 80) printf("C\n"); else if (score >= 60 && score < 70) printf("D\n"); else printf("E\n"); return 0; }
9. 给一个不多于5位的正整数,要求:
①求出它是几位数;
②分别输出每一位数字;
③按逆序输出各位数字,例如原数为 321,应输出 123。
#include <stdio.h> int main() { int num = 0; printf("请输入一个不大于5位的正整数:"); scanf("%d", &num); if (!(num >= 0 && num <= 99999)) { printf("输入有误\n"); return -1; } printf("%d ", num % 10); if (num > 10) printf("%d ", (num / 10) % 10); if (num > 100) printf("%d ", (num / 100) % 10); if (num > 1000) printf("%d ", (num / 1000) % 10); if (num > 10000) printf("%d ", (num / 10000) % 10); return 0; }
10.企业发放的奖金根据利润提成。利润 I 低于或等于 100 000元的,奖金可提成10%;利润高于 100 000 元,低于200 000元((100000<I≤200000)时,低于 100 000元的部分按10%提成,高于 100 000 元的部分,可提成 7.5%;200 000<I≤400 000 时,低于200 000元的部分仍按上述办法提成(下同)。高于200 000元的部分按5%提成;400000<I≤600000元时,高于 400 000 元的部分按3%提成;(600000<1≤1000000时,高于600 000元的部分按 1.5%提成;l>1000000时,超过1000 000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
要求:
(1) 用 if语句编程序;
#include <stdio.h> int main() { double I; printf("请输入你的利润:"); scanf("%lf", &I); double salary_10 = 100000 * 0.1; double salary_20 = salary_10 + (100000 * 0.075); double salary_40 = salary_20 + (200000 * 0.05); double salary_60 = salary_40 + (200000 * 0.03); double salary_100 = salary_60 + (400000 * 0.015); double salary = 0; if (I < 100000) { salary = I * 0.1; } else if (I > 100000 && I <= 200000) { salary = salary_10 + (I - 100000) * 0.075; } else if (I > 200000 && I <= 400000) { salary = salary_20 + (I - 200000) * 0.05; } else if (I > 400000 && I <= 600000) { salary = salary_40 + (I - 400000) * 0.03; } else if (I > 600000 && I <= 1000000) { salary = salary_60 + (I - 600000) * 0.015; } else if (I > 1000000) { salary = salary_100 + (I - 1000000) * 0.01; } printf("你的奖金是:%.2f\n", salary); return 0; }
(2) 用 switch语句编程序。
#include <stdio.h> int main() { double I; printf("请输入你的利润:"); scanf("%lf", &I); double salary_10 = 100000 * 0.1; double salary_20 = salary_10 + (100000 * 0.075); double salary_40 = salary_20 + (200000 * 0.05); double salary_60 = salary_40 + (200000 * 0.03); double salary_100 = salary_60 + (400000 * 0.015); double salary = 0; int level = I / 100000; switch (level) { case 0: salary = I * 0.1; break; case 1: salary = salary_10 + (I - 100000) * 0.075; break; case 2: case 3: salary = salary_20 + (I - 200000) * 0.05; break; case 4: case 5: salary = salary_40 + (I - 400000) * 0.03; break; case 6: case 7: case 8: case 9: salary = salary_60 + (I - 600000) * 0.015; break; default: salary = salary_100 + (I - 1000000) * 0.01; break; } printf("你的奖金是:%.2f\n", salary); return 0; }
11. 输入4个整数,要求按由小到大的顺序输出。
#include <stdio.h> int main() { int num1, num2, num3, num4; printf("请输入4个数字:"); scanf("%d%d%d%d", &num1, &num2, &num3, &num4); if (num1 > num2) { int tmp = num1; num1 = num2; num2 = tmp; } if (num1 > num3) { int tmp = num1; num1 = num3; num3 = tmp; } if (num1 > num4) { int tmp = num1; num1 = num4; num4 = tmp; } if (num2 > num3) { int tmp = num2; num2 = num3; num3 = tmp; } if (num2 > num4) { int tmp = num2; num2 = num4; num4 = tmp; } if (num3 > num4) { int tmp = num3; num3 = num4; num4 = tmp; } printf("%d %d %d %d", num1, num2, num3, num4); return 0; }
12. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,2)、(2,-2),圆半径为1,见图 4.17。这 4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
#include <stdio.h> #include <math.h> int main() { double x, y; printf("请输入x,y轴坐标<x,y>:"); scanf("%lf,%lf", &x, &y); if (fabs(x) > 3 || fabs(y) > 3) { printf("该点的建筑高度是0m\n"); return 0; } //计算输入位置距离圆心的长度,先计算两个边长 double a_x = fabs(fabs(x) - 2); double b_y = fabs(fabs(y) - 2); double bevel = sqrt(a_x * a_x + b_y * b_y); if (bevel > 1) printf("该点的建筑高度是0m\n"); else printf("该点的建筑高度是10m\n"); return 0; }