2022 选择结构习题及答案(if_else)

C#编程:结构化习题集——条件与选择
本文提供一系列C#编程练习,涵盖比较大小、分段函数计算、运费计算、整数除法等多个场景。通过这些习题,旨在帮助读者熟练掌握if_else结构在不同问题中的应用。

一,比较大小

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

#include<stdio.h>

int main()
{
	int a,b,c,x,y,z;
	scanf("%d%d%d",&x,&y,&z);
	if(x>y)
    {
	    if(z>x){a=z;b=x;c=y;}
	        else if(z>y){a=x;b=z;c=y;}
	            else {a=x;b=y;c=z;}
	}
	else 
    {
	    if(z>y){a=z;b=y;c=x;}
	        else if(z>x){a=y;b=z;c=x;}
	            else {a=y;b=x;c=z;}
	}
	printf("%d->%d->%d",c,b,a);
	return 0;
}

二,计算分段函数

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

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

#include <stdio.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;
}

三,计算运费

运输公司对用户计算运费。路程(s)越远,每千米运费就越低。标准如下:

  • s<250km ,没有折扣;
  • 250km≤s<500km, 2%的折扣;
  • 500km≤s<1000km, 5%的折扣;
  • 1000km≤s<2000km,8%计算运费的折扣;
  • 2000km≤s<3000km,10%的折扣;
  • 3000km≤s,15%的折扣。

设每千米每吨货物的基本运费为p,货物重为 w,距离为s,折扣为d,则总运费f的计算公式为:
f=p×w×s×(1-d)

输入格式:

在一行中以小数形式输入基本运费、货重和距离,以空格作为分隔符。

输出格式:

在一行输出计算出来的运费,精确到小数点后2位的值。

#include <stdio.h>

int main()
{
    float f,p,w,s;
    scanf("%f%f%f",&p,&w,&s);
    if (s>=3000)
        f=p*w*s*0.85;
    else if (2000<=s&&s<3000)
        f=p*w*s*0.90;
    else if (1000<=s&&s<2000)
        f=p*w*s*0.92;
    else if (500<=s&&s<1000)
        f=p*w*s*0.95;
    else if (250<=s&&s<500)
        f=p*w*s*0.98;
    else if (s<250)
        f=p*w*s;
    printf("freight=%.2f",f);
    return 0;
}

四,A除以B

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

输入格式:

输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

#include <stdio.h>
 
int main()
{
    double A,B;
    scanf("%lf %lf",&A,&B);
    if (B>0)
        printf("%.0lf/%.0lf=%.2lf\n",A,B,A/B);
    else if (B<0)
             printf("%.0lf/(%.0lf)=%.2lf\n",A,B,A/B);
        
    else
        printf("%.0lf/%.0lf=Error\n",A,B);
    return 0;
}

五,计算火车运行时间

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

输入格式:

输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:

在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,b,c,d;
    scanf("%d %d",&a,&b);
    c=b/100-a/100;
    d=b%100-a%100;
    if (d<0)
       {
        d=d+60;
        c=c-1;
        printf("%02d:%02d",c,d);
        }
    else
        printf("%02d:%02d",c,d);
    return 0;
}

六,出租车计价

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

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

输入格式:

输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

#include<stdio.h>
int main()
{
	float distance;
	float cost;
	int time;
	scanf("%f%d",&distance,&time);
	if (distance>0 && distance<=3)
		cost=10+(time/5)*2;
	else if (distance > 3 && distance <= 10)
		cost=10+2*(distance-3)+(time/5)*2;
	else if (distance>10)
		cost=24+(distance-10)*3+(time/5)*2;
	printf("%.0f",cost);
	return 0;
}

七, 后天

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式:

输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式:

在一行中输出D天的后天是星期几。

#include <stdio.h>

int main()
{
    int D;
    scanf("%d",&D);
    if (D<=5)
      {printf("%d",D+2);}
    else 
      {printf("%d",D-5);}
    return 0;
}

八,三天打鱼两天晒网

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

输入格式:

输入在一行中给出一个不超过1000的正整数N。

输出格式:

在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

#include<stdio.h>

int main()
{
	int N,A;
	scanf("%d",&N);
	A = N % 5;
	if (N > 0 && N <= 1000)
	{
		if (A == 0 || A == 4)
			printf("Drying in day %d" ,N);
		else
			printf("Fishing in day %d", N);
	}

	return 0;
}

九,判断输入的字符是哪种类型

通过键盘输入一个字符,编程判断并输出用户输入的是什么类型的字符。

输入格式:

输入一个字符。

输出格式:

在一行中输出该字符是哪种类型的字符。

  • 若用户输入字符为'0''9'之间,输出This is a digit.
  • 若用户输入字符在'A''Z'之间,输出This is a capital letter.
  • 若用户输入字符在'a''z'之间,输出This is a small letter.
  • 其他情况,输出Other character.
    #include<stdio.h>
    
    int main()
    {
        char c;
        scanf("%c", &c);
        if(c>='0' && c<='9') printf("This is a digit.");
            else if(c>='A' && c<='Z') printf("This is a capital letter.");
                else if(c>='a' && c<='z') printf("This is a small letter.");
                    else printf("Other character.");
        return 0;
    }

十,两个数的简单计算器

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

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:

当运算符为+-*/%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR

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

    return 0;
}

十一,求一元二次方程的根

本题目要求一元二次方程ax2+bx+c=0的根,结果保留2位小数。

输入格式:

输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

输出格式:

根据系数情况,输出不同结果:

1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

3)如果方程只有一个根,则直接输出此根;

4)如果系数都为0,则输出"Zero Equation";

5)如果a和b为0,c不为0,则输出"Not An Equation"。

#include<stdio.h>
#include<math.h>

int main()
{
    float a,b,c;
    double d,x1,x2;
    scanf("%f%f%f",&a,&b,&c);
    d=(b*b*1.0-4.0*a*c)*1.0;/*判别式*/
        x1=(-b+pow(d,0.5))/(2.0*a)*1.0;/*求根公式,注意除号后计算加括号*/
        x2=(-b-pow(d,0.5))/(2.0*a)*1.0;
        if(d>0&&a!=0){/*两个实根*/
    if(x1>x2){
        printf("%0.2f\n%0.2f",x1,x2);
             }else{
        printf("%0.2f\n%0.2f",x2,x1);}}
    else if(a==0&&b==0&&c==0){
        printf("Zero Equation");}
    else if(a==0&&b==0&&c!=0){
        printf("Not An Equation");}
    else if(d==0){/*一个实根*/
        printf("%0.2f",-b/(2.0*a)*1.0);}
    else if(d<0&&a!=0){/*复数根*/
        if(-b/(2*a)!=0){/*对称轴为复数根实部,负判别式开根号为复数根虚部*/
            printf("%0.2f+%0.2fi\n",-b/(2*a)*1.0,1.0*sqrt(-d)/(2.0*a));
            printf("%0.2f-%0.2fi\n",-b/(2*a)*1.0,1.0*(sqrt(-d))/(2.0*a));}
       else{printf("0.00+%.2fi\n",1.0*sqrt(-d)/(2.0*a));
            printf("0.00-%.2fi\n",1.0*sqrt(-d)/(2.0*a));}
    }else{
       printf("%0.2f",(c/b)*(-1.0));}
    return 0;
}

十二,计算空间某点高度

有4个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。这4个塔的高度分别为5m,7m,10m,18m,塔外无建筑物,编写程序,输入一点的坐标,输出高度。

输入格式:

在一行中输入一个点的横纵坐标,以”,”分隔。

输出格式:

输出该点的高度。

#include <stdio.h>

int main()
{
    int h;
    float x1=2,y1=2;
    float x2=-2,y2=2;
    float x3=-2,y3=-2;
    float x4=2,y4=-2;
    float x,y,d1,d2,d3,d4;
    scanf("%f,%f",&x,&y);
    //求该点到各中心点的距离
    d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
    d2=(x-x2)*(x-x2)+(y-y2)*(y-y2);
    d3=(x-x3)*(x-x3)+(y-y3)*(y-y3);
    d4=(x-x4)*(x-x4)+(y-y4)*(y-y4);
    //判断该点是否在塔外
    if(d1>1 && d2>1 && d3>1 && d4>1)
        h=0;
    else if (d1<=1 && d2>=1 && d3>=1 && d4>=1)
        h=5;
    else if (d1>=1 && d2<=1 && d3>=1 && d4>=1)
        h=7;
    else if (d1>=1 && d2>=1 && d3<=1 && d4>=1)
        h=10;
    else if (d1>=1 && d2>=1 && d3>=1 && d4<=1)
        h=18;
    printf("%dm",h);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值