C语言程序设计基础练习题二

  • 1-1本题目要求计算下列分段函数f(x)的值:

在这里插入图片描述

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。
输入样例1:
10
输出样例1:
f(10.00) = 3.16
输入样例2:
-0.5
输出样例2:
f(-0.50) = -2.75

#include <stdio.h> 
#include <math.h>
int main() 
{
	double x,y;
	scanf("%lf",&x);
	if(x >= 0)
	{
		y = pow(x,0.5);
	}
	else
	{
		y = pow(x+1 , 2) + 2*x + 1/x;
	}
	printf("f(%.2lf) = %.2lf",x,y);
	
	return 0;
}
  • 1-2 本题要求将输入的任意3个整数从小到大输出。

输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8

#include <stdio.h> 
int main() 
{
	int x,y,z,n;
	scanf("%d%d%d",&x,&y,&z);
	
	if(x>y)
	{
		n = x;
		x = y;
		y = n;	
	}
	if(x>z)
	{
		n = x;
		x = z;
		z = n;
	}
	if(y>z)
	{
		n = y;
		y = z;
		z = n;
	}
	printf("%d->%d->%d",x,y,z);
	 
	return 0;
}

  • 1-3 假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:

    当工资不超过1600时,税率为0;
    当工资在区间(1600, 2500]时,税率为5%;
    当工资在区间(2500, 3500]时,税率为10%;
    当工资在区间(3500, 4500]时,税率为15%;
    当工资超过4500时,税率为20%。

输入格式:
输入在一行中给出非负工资。
输出格式:
在一行输出个人所得税,精确到小数点后2位。
输入样例1:
1600
输出样例1:
0.00
输入样例2:
1601
输出样例2:
0.05
输入样例3:
3000
输出样例3:
140.00
输入样例4:
4000
输出样例4:
360.00
输入样例5:
5000
输出样例5:
680.00

#include <stdio.h>
int main() {
	double money,tax;
	scanf("%lf",&money);

	if(money <= 1600) {
		tax = 0;
	} else if(money>1600 && money<=2500) {
		tax = (money-1600)*0.05;
	} else if(money>2500 && money<=3500) {
		tax = (money-1600)*0.1;
	} else if(money>3500 && money<=4500) {
		tax = (money-1600)*0.15;
	} else if(money>4500) {
		tax = (money-1600)*0.2;
	}
	printf("%.2lf",tax);

	return 0;
}

  • 1-4 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式:
输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。
输出格式:
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。
输入样例1:
-1 2
输出样例1:
-1/2=-0.50
输入样例2:
1 -3
输出样例2:
1/(-3)=-0.33
输入样例3:
5 0
输出样例3:
5/0=Error

#include <stdio.h>
int main() 
{
	int a,b;
	scanf("%d%d",&a,&b);
	double c = 1.0*a/b;
	if(a>=-100 && a<=100 && b>=-100 && b<=100) 
    {
		if(b>0) 
        {
			printf("%d/%d=%.2lf",a,b,c);
		} 
        else if(b<0) 
        {
			printf("%d/(%d)=%.2lf",a,b,c);
		} 
        else 
        {
			printf("%d/%d=Error",a,b);
		}
	}

	return 0;
}
  • 1-5 为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。

输入格式:
输入在一行中给出非负实数x。
输出格式:
在一行输出应交的水费,精确到小数点后2位。
输入样例1:
12
输出样例1:
16.00
输入样例2:
16
输出样例2:
22.50

#include <stdio.h>
int main() 
{
	double fee,volume;
	scanf("%lf",&volume);

	if(volume<=15) 
	{
		fee = 4 * volume /3;
	} 
	else 
	{
		fee = 2.5*volume - 17.5;
	}
	printf("%.2lf",fee);

	return 0;
}

  • 1-6 本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
输入样例:
1201 1530
输出样例:
03:29

#include <stdio.h>
int main() 
{
	int starttime,endtime;
	int starthour,endhour,usehour;
	int startminute,endminute,useminute;

	scanf("%d%d",&starttime,&endtime);

	starthour = starttime / 100;
	endhour = endtime / 100;
	startminute = starttime % 100; 
	endminute = endtime % 100;

	if(endminute < startminute)
	{
		useminute = (endminute+60) - startminute;
		usehour = endhour-1-starthour;
	}
	else
	{
		useminute = endminute - startminute;
		usehour = endhour - starthour;
	}
	
	printf("%.2d:%.2d",usehour,useminute);

	return 0;
}
  • 1-7 本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

    起步里程为3公里,起步费10元;
    超起步里程后10公里内,每公里2元;
    超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
    营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
输入样例1:
2.6 2
输出样例1:
10
输入样例2:
5.1 4
输出样例2:
14
输入样例3:
12.5 9
输出样例3:
34

#include <stdio.h>
#include <math.h>
int main() 
{
	double mileage,money;
	int waittime;
	scanf("%lf%d",&mileage,&waittime);
	
	if(mileage <= 3)
	{
		money = 10;
	}
	else if(mileage>3 && mileage<=10)
	{
		money = 10 + (mileage-3)*2;
	}
	else
	{
		money = 24 + (mileage-10)*3; 
	}
	
	if(waittime >= 5)
	{
		//money = money + ceil(1.0*waittime/5)*2;//这道题理解起来太难了,按照输出样例来看,是把九分钟多出来的四分钟忽略不计了
		money = money + waittime/5 * 2; 
	}
	
	printf("%.0lf",money);

	return 0;
}
  • 1-8 三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:
在一行中输出唯一的那个不一样的球。
输入样例:
1 1 2
输出样例:
C

#include <stdio.h>
int main() 
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a==b && a!=c) 
	{
		printf("C");
	}
	else if(a==c && a!=b)
	{
		printf("B");
	}
	else if(b==c && b!=a)
	{
		printf("A");
	}
	
	return 0;
}
  • 1-9 本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

    大于等于90分为A;
    小于90且大于等于80为B;
    小于80且大于等于70为C;
    小于70且大于等于60为D;
    小于60为E。

输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A

#include <stdio.h>
int main()
{
  int score;
  char grade;
  scanf("%d",&score);
  if(score >= 90)
  {
  	grade = 'A';
  }
  else if(score >= 80 && score < 90)
  {
  	grade = 'B';
  } 
  else if(score >= 70 && score < 80)
  {
  	grade = 'C';
  } 
  else if(score >= 60 && score < 70)
  {
  	grade = 'D';
  } 
  else 
  {
  	grade = 'E'; 
  }
  
  printf("%c",grade);

  return 0;
}
  • 1-10 为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。
输入样例1:
10
输出样例1:
cost = 5.30
输入样例2:
100
输出样例2:
cost = 55.50

#include <stdio.h>
int main()
{
  double used,cost;
  scanf("%lf",&used);
  
  if(used <= 50 && used >= 0)
  {
      
      printf("cost = %.2lf",used * 0.53);
  }
  else if(used > 50)
  {
      printf("cost = %.2lf",0.53*50 + (used-50)*(0.53+0.05));
  }
  else
  {
  	  printf("Invalid Value!");
  }

  return 0;
}
  • 1-11 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
输入样例1:
-7 / 2
输出样例1:
-3
输入样例2:
3 & 6
输出样例2:
ERROR

#include <stdio.h>
int main()
{
	int data1,data2,result;
	char op;
	scanf("%d %c %d",&data1,&op,&data2);
	
	switch(op)
	{
		case'+':
            printf("%d",data1 + data2);	
			break;
		case'-':
			printf("%d",data1 - data2);
			break;
		case'*':
			printf("%d",data1 * data2);
			break;
		case'/':
			printf("%d",data1 / data2);
			break;	
		case'%':
			printf("%d",data1 % data2);
			break;
		default:
			printf("ERROR");		
	}

	return 0;
}
  • 1-12 中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

输入格式:
输入在一行中给出一个不超过1000的正整数N。
输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例1:
103
输出样例1:
Fishing in day 103

#include <stdio.h>
int main() {
	int days,data;
	scanf("%d",&days);
	
	data = days % 5;  //余数
	if(data <= 3 && data >= 1)
	{
		printf("Fishing in day %d",days);
	}
	else
	{
		printf("Drying in day %d",days);
	}

	return 0;
}
  • 1-13 现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
输入格式:
输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。
输出格式:
在一行中输出应付款额,保留小数点后2位。
输入样例:
40 97 m
输出样例:
301.34

#include <stdio.h>
int main() {
	double oil_amount,price,cost;
	int oil_type;
	char service_type;
	scanf("%lf %d %c",&oil_amount,&oil_type,&service_type);
	switch(oil_type) 
		{
			case 90:
				price = 6.95;
				break;
			case 93:
				price = 7.44;
				break;
			case 97:
				price = 7.93;
				break;
			default:
				return 0;
		}

	if(service_type == 'm')
	{
		cost = oil_amount * price * (1-0.05);
	}
	else if(service_type == 'e')
	{
		cost = oil_amount * price * (1-0.03);
	}
	printf("%.2lf",cost);

	return 0;
}
  • 1-14 模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。

输入格式:
输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。
输出格式:
在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK。
输入样例1:
40
输出样例1:
Speed: 40 - OK
输入样例2:
75
输出样例2:
Speed: 75 - Speeding

#include <stdio.h>
int main() {
	int V;
	scanf("%d",&V);

	if(V > 60) 
	{
		printf("Speed: %d - Speeding",V);
	} 
	else
	{
		printf("Speed: %d - OK",V);
	}

	return 0;
}
  • 1-15 判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。

输入格式:
直接输入一个5位数正整数。
输出格式:
输出“yes”或“no”。此处均为小写字母
输入样例:
12521
输出样例:
yes
输入样例:
65432
输出样例:
no

#include <stdio.h>
int main()
{
  int num,num1,num2,num3,num4;
  scanf("%d",&num);
  
  num1 = num / 10000;   //万位 
  num2 = num%10000 / 1000;  //千位 
  num3 = num%100 / 10;  //十位
  num4 = num%10;  //个位 
  
  if(num1 == num4 & num2 == num3) 
  {
  	printf("yes");
  }
  else
  {
  	printf("no");
  }
  
  return 0;
}

顺便吐槽一下在PTA提交太严苛了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值