第四章
4.1 什么是算术运算?什么是关系运算?什么是逻辑运算?
算术运算:对数字进行加减乘除取余操作
关系运算:指的是对两个操作数进行比较,判断它们之间的大小、相等性等关系
逻辑运算:指的是对两个或多个逻辑值进行操作,得到一个新的逻辑值
4.2 C语言中如何表示“真“和”假”? 系统如何判断一个量的“真“和“假”?
用1来表示真,0来表示假
系统会判断非0数为真,0为假
4.3写出下面各逻辑表达式的值。设 a=3,b=4,c=5
(1) a+b>c && b==c
(2) a || b+c && b—c
(3) !(a>b) && !c || 1
(4) !(x=a) && (y=b) && 0
(5) !(a+b)+c—1 && b+c/2
(1). 0
(2). 1
(3). 1
(4). 0
(5). 1
4.4 有3个整数 a,b,c,由键盘输入,输出其中最大的数。
#include <stdio.h>
int main()
{
int a,b,c,max;
scanf("%d %d %d", &a, &b, &c);
max = a > b ? a : b; //比较a,b赋最大值给max
max = max > c ? max : c; //比较c和max中的较大者赋值给max
printf("%d", max); //输出a,b,c中最大值
return 0;
}
4.5. 从键盘输人一个小于 1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分) 要求在输人数据后先对其进行检查是否为小于 1000 的正数。若不是.则要求重新输人。
#include <stdio.h>
#include <math.h>
int main()
{
double num;
printf("请输入一个大于0小于1000的数:");
scanf("%lf", &num); //输入
while (!(num > 0 && num < 1000)) //检查是否为小于 1000 的正数。若不是.则要求重新输人。
{
printf("输出的数不符合,请重新输入:");
scanf("%lf", &num); //输入
}
printf("%d", (int) sqrt(num)); //输出整数部分
return 0;
}
4.6 有一个函数
y = x (x<1)
y = 2x-1 (1 <= x && x < 10 )
y = 3x-11 (x>=10)
写程序,输入x的值,输出y相应的值
#include <stdio.h>
int main()
{
double x,y; //定义x,y
printf("请输入x:");
scanf("%lf", &x); //输入x
//根据x求y
if(x<1)
{
y = x;
}
if(1 <= x && x < 10)
{
y = 2 * x - 1;
}
if (x >= 10)
{
y = 3 * x - 11;
}
printf("y的值为%.2lf", y); //数
return 0;
}
4.7 略
4.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; //定义score
printf("请输入分数:");
scanf("%f", &score);
if (score >= 0 && score <= 100)
{
if (score >= 90)
{
printf("A");
} else if (score >= 80 && score <= 89)
{
printf("B");
} else if (score >= 70 && score <= 79)
{
printf("C");
} else if (score >= 60 && score <= 69)
{
printf("D");
} else if (score < 60)
{
printf("E");
}
}
return 0;
}
4.9. 给一个不多于 5 位的正整数.要求:
求出它是几位数:
分别输出每一位数字;
按逆序输出各位数字,例如原数为 321,应输出 123。
#include <stdio.h>
int main()
{
int num, i, t, j;
int s[6];
scanf("%d", &num);
t = num;
do
{
i++;
} while ( t = t/10);
printf("这是一个%d位数\n", i);
t = num;
for (j = i; j != 0; j--)
{
s[j] = t % 10;
t /= 10;
}
printf("正序为:");
for (j = 1; j <= i; ++j)
{
printf("%d", s[j]);
}
printf("\n反序为:");
for (j = i; j != 0; j--)
{
printf("%d", s[j]);
}
return 0;
}
4.10 企业发放的奖金根据利润提成。利润Ⅰ低于或等于100000元的,奖金可提成10%;
利润高于100000元,低于200000元(100000<Ⅰ <=200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%:
200000<Ⅰ <=400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;
400000<Ⅰ≤600000元时,高于400000元的部分按3%提成:
600000<Ⅰ≤1000000时,高于600000元的部分按1.5%提成;
Ⅰ>1000000时,超过1000000元的部分按1%提成。从键盘输人当月利润Ⅰ,求应发奖金总数。
#include <stdio.h>
int main()
{
double I, salary,n1,n2,n3,n4,n5;
scanf("%lf", &I);
n1 = 100000 * 0.1;
n2 = (200000 - 100000) * 0.075 + n1;
n3 = (400000 - 200000) * 0.05 + n2;
n4 = (600000 - 400000) * 0.03 + n3;
n5 = (1000000 - 600000) * 0.015 + n4;
if (I < 100000 )
{
salary = I * 0.1;
}
if (I >= 100000 && I < 200000)
{
salary = n1 + (I - 100000) * 0.075;
}
if (I >= 200000 && I < 400000)
{
salary = n2 + (I - 200000) * 0.05;
}
if (I >= 400000 && I < 600000)
{
salary = n3 + (I - 400000) * 0.03;
}
if (I >= 600000 && I < 1000000)
{
salary = n4 + (I - 600000) * 0.015;
}
if(I >= 1000000)
{
salary = n5 + (I - 1000000) * 0.01;
}
printf("%lf", salary);
return 0;
}
4.11 输人 4 个整数.要求按由小到大的顺序输出
#include <stdio.h>
int main()
{
int a[4], i, j, t;
for (i = 0; i < 4; ++i)
{
scanf("%d", a+i);
}
for (i = 0; i < 4-1; ++i)
{
for (j = 0; j < 4 - i - 1; ++j)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; i < 4; ++i)
{
printf("%2d", a[i]);
}
return 0;
}
4.12 有4个圆塔.圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2)
圆半径为1,这 4个塔的高度为10m。
塔以外无建筑物。今输人 任一点的坐标.求 该点的建筑高度(塔外的高度为零)。
#include <stdio.h>
#include <math.h>
double distance(int x, int y, int x1, int y1)
{
return sqrt(pow((x - x1), 2) + pow((y - y1), 2));
}
int main()
{
double x, y;
scanf("%lf %lf", &x, &y);
if (distance(x, y, 2, 2) <= 1)
{
printf("高度为10");
}else if (distance(x, y, 2, -2) <= 1)
{
printf("高度为10");
}else if (distance(x, y, -2, 2) <= 1)
{
printf("高度为10");
}else if (distance(x, y, -2, -2) <= 1)
{
printf("高度为10");
}else {
printf("高度为0");
}
return 0;
}