郑州轻工业大学OJ 1031 ~ 1040

目录

 

1031.判断点在第几象限

1032: 员工薪水

1033: 五级制成绩

1034: 夏季促销

1035: 分段函数求值

1036: 某年某月有多少天

1037: 四则运算

1038: 绝对值最大

1039: n个数求和

1040: 数列求和1


 

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;
}

 

 

 

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值