目录
1031.判断点在第几象限
考察分支结构的嵌套使用
对于一个不会出现在坐标轴上的点,想要判断它的象限,只需要根据它横、纵坐标与0的大小关系判断。
#include <stdio.h>
int main()
{
int x, y, ans;
scanf("%d %d", &x, &y);
if(x > 0)
{
if(y > 0) ans = 1;
else ans = 4;
}
else
{
if(y > 0) ans = 2;
else ans = 3;
}
printf("%d", ans);
return 0;
}
1032: 员工薪水
使用if...else语句对员工的销售额进行判断,对处于不同区间内的销售额进行不同的计算处理即可。
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
double b = 1500;
if(a <= 10000)
{
b += a * 0.05;
}
else if(a > 10000 && a <= 50000)
{
b += 500 + (a - 10000) * 0.03;
}
else if(a > 50000)
{
b += 500 + 1200 + (a - 50000) * 0.02;
}
printf("%.2f",b);
return 0;
}
1033: 五级制成绩
本题是一道非常经典的分支(判断)结构例题,此处使用if...else、switch两种语句尝试实现,建议两种方法全部掌握。
if...else实现直接判断分数所在区间,对不同区间分数进行不同的操作(不同输出),switch则根据原分数十位上的数字(此处100分十位上的数字视为10)进行区分,根据十位上数字的不同来区分最终等级。
// if...else实现
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a >= 90)
{
printf("A");
}
else if(a >= 80)
{
printf("B");
}
else if(a >= 70)
{
printf("C");
}
else if(a >= 60)
{
printf("D");
}
else
{
printf("E");
}
return 0;
}
//switch实现
#include <stdio.h>
int main()
{
int a;
char ch;
scanf("%d",&a);
a /= 10;
switch(a)
{
case 10:
case 9: ch = 'A'; break;
case 8: ch = 'B'; break;
case 7: ch = 'C'; break;
case 6: ch = 'D'; break;
default : ch = 'E';
}
printf("%c", ch);
return 0;
}
1034: 夏季促销
注意本题与1032(员工薪水)有所不同,1032的同一员工薪水需要分区间进行提成计算,而本题只需要根据消费金额的总值确定打折区间,然后对总金额进行统一处理(乘上折扣)。
#include <stdio.h>
int main()
{
double a, b;
scanf("%lf", &a);
if(a < 500)
{
b = a;
}
else if(a < 1000)
{
b = 0.95 * a;
}
else if(a < 3000)
{
b = 0.90 * a;
}
else if(a < 5000)
{
b = 0.85 * a;
}
else
{
b = 0.80 * a;
}
printf("%.2f", b);
return 0;
}
1035: 分段函数求值
本题根据变量 x 的值所在区间的不同,在计算 y 值时使用不同的表达式进行计算即可
注意:在这里用到了 abs()函数,这个函数的作用是将括号内的表达式的值取绝对值(仅对整数有效),如:abs(-8) 的值为 8, abs(79) 的值为 79
#include <stdio.h>
int main()
{
int x, y;
scanf("%d", &x);
if(x < -2)
{
y = 7 - 2 * x;
}
else if(x < 3)
{
y = 5 - abs(3 * x + 2);
}
else
{
y = 3 * x + 4;
}
printf("%d", y);
return 0;
}
1036: 某年某月有多少天
本题同样有 if...else 语句和 switch 语句两种写法,两种写法的相同点在于,都需要先对年份进行闰年判断,再根据闰年/平年来区分当月天数
// if ... else 实现
#include <stdio.h>
int main()
{
int year, month;
scanf("%d %d", &year, &month);
int flag = 0; // 用变量 flag 记录 当前年份是否闰年
// 如果是闰年则 flag 值记为 1,否则记为 0
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) flag = 1;
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
printf("31");
}
else if(month == 2)
{
printf("%d", 28 + flag); //如果是平年,2月有28天,闰年比平年多 1天,闰年时 flag 刚好为 1,平年时 flag 为 0
}
else
{
printf("30");
}
return 0;
}
// switch 实现
#include <stdio.h>
int main()
{
int year, month, day;
scanf("%d %d", &year, &month);
int flag = 0; // 用变量 flag 记录 当前年份是否闰年
// 如果是闰年则 flag 值记为 1,否则记为 0
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) flag = 1;
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31; break;
case 4: case 6: case 9: case 11:
day = 30; break;
default: day = 28 + flag;
}
printf("%d", day);
return 0;
}
1037: 四则运算
本题需要分别用浮点数变量和字符型变量去存储两个实数及运算符,然后使用if else 去判断运算符类型,进而计算表达式的值并输出
注意,当运算符为除号时,需判断除数是否为0,由于本题用浮点数变量存储操作数,在与0进行比较时可能出现精度问题,故按照题面要求,当运算符为除号时,只要除数值小于1e-10即将其视为0,输出 “Wrong input!”
#include <stdio.h>
#include <math.h>
int main()
{
double x, y;
char op;
scanf("%lf %c %lf", &x, &op, &y);
if(op == '+')
{
printf("%.2lf", x + y);
}
else if(op == '-')
{
printf("%.2lf", x - y);
}
else if(op == '*')
{
printf("%.2lf", x * y);
}
else if(op == '/')
{
if(y < 1e-10) printf("Wrong input!");
else printf("%.2lf", x / y);
}
else printf("Wrong input!");
return 0;
}
1038: 绝对值最大
用三个变量 a,b,c存储读入的三个整数,另用一个变量 ans 存储最终答案,按照题面要求,我们只需要输出最先出现的那个绝对值最大的整数,搭配上面提到过的绝对值函数 abs(),本题程序实现如下:
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int ans = a; // ans用于存储当前所有数中绝对值最大且出现最早的数
if(abs(b) > abs(ans)) ans = b;
if(abs(c) > abs(ans)) ans = c;
printf("%d", ans);
return 0;
}
1039: n个数求和
终于步入到了循环的领域,从本题开始,后面的题目会越来越有意思,循环的加入将使我们写出的程序实用性更高,但同时也将带来一定的挑战
声明三个变量,n,x,sum,n用来存储待求和整数的个数,x用于循环中每次读入待求和整数,sum用于记录当前所有已读入待求和整数的和
由于初次接触循环,本题将用while 和 for两种循环方式分别实现,建议全部尝试并掌握
// for循环实现
#include <stdio.h>
int main()
{
int n, x, sum = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
{
scanf("%d", &x);
sum += x;
}
printf("%d", sum);
return 0;
}
// while循环实现
#include <stdio.h>
int main()
{
int n, x, sum = 0;
scanf("%d", &n);
while(n --)
{
scanf("%d", &x);
sum += x;
}
printf("%d", sum);
return 0;
}
1040: 数列求和1
将1视为 1/1,我们可以轻易找到规律,即第n项分子为1,分母为(2 * n - 1),于是本题只需要循环枚举前n项并求和即可
由于最终要输出浮点数,我们直接用浮点数变量来记录答案
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
double ans = 0;
for(int i = 1; i <= n; i ++)
{
ans += 1.0 / (2 * i - 1);
}
printf("%.2lf", ans);
return 0;
}