STUD 程序设计基础 实验二----选择结构(部分题解)

发布于:2022-10-13 ⋅ 阅读:(463) ⋅ 点赞:(0)

7-1 sdut-C语言实验-求绝对值(选择结构)

从键盘上输入任意一个整数,然后输出它的绝对值!

输入格式:

从键盘上输入任意一个整数。

输出格式:

输出它的绝对值。

-输入样例:

在这里给出一组输入。例如:

-4

-输出样例:

在这里给出相应的输出。例如:

4
​
#include <stdio.h>
int main()
{
    int a,b;
    scanf("%d",&a);
    if(a<=0)//如果a<=0的条件,注意此处不用分号;
    {//养成良好习惯,用{}标记代码段
        b = -a;//绝对值,此时b得到了a的正值
        printf("%d",b);
    }
    else//else就代表了上述if条件的否命题,如果成立
        printf("%d",a);
    return 0;//if语句自上而下执行
}

​

 7-3 sdut-C语言实验-时间间隔

从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。
如:3点5分25秒应表示为--03:05:25.假设两个时间在同一天内,时间先后顺序与输入无关。

输入格式:

输入包括两行。
第一行为时间点1。
第二行为时间点2。

输出格式:

以“小时:分钟:秒”的格式输出时间间隔。
格式参看输入输出。

输入样例:

12:01:12
13:09:43

输出样例:

在这里给出相应的输出。例如:

01:08:31
/*思考:直接做会被时间逢六十进位而影响,所以主要的思路
是都换成秒之后,再进行运算,而后再通过数学运算转换成分
钟和小时,再输出*/ 
#include <stdio.h>
int main()
{
	int h1,h2,m1,m2,s1,s2;
	char c;
	scanf("%d%c%d%c%d",&h1,&c,&m1,&c,&s1);//可以直接用:表示,也可用字符型变量
	scanf("%d%c%d%c%d",&h2,&c,&m2,&c,&s2);
	int t1,t2;
	t1 = h1*3600+m1*60+s1;
	t2 = h2*3600+m2*60+s2;//都换算成秒数
	if(t1>t2)//做差的时候要分大小
	{
	int t,h,m,s;
	t = t1-t2;
	h = t/3600;
	m = (t-h*3600)/60;
	s = t-h*3600-m*60; 
	printf("%02d:%02d:%02d",h,m,s);//%02d的含义是,%d占两位,空缺的用0填补
	}
	else
	{
	int t,h,m,s;
	t = t1-t2;
	h = t/3600;
	m = (t-h*3600)/60;
	s = t-h*3600-m*60; 
	printf("%02d:%02d:%02d",h,m,s);
	}
	return 0;
}

将上述代码段优化可得

/*思考:直接做会被时间逢六十进位而影响,所以主要的思路
是都换成秒之后,再进行运算,而后再通过数学运算转换成分
钟和小时,再输出*/ 
#include <stdio.h>
int main()
{
	int a1,a2,a3,t1,t2,t3,n1,n2,n3;
	scanf("%d:%d:%d\n",&a1,&a2,&a3);
	scanf("%d:%d:%d\n",&t1,&t2,&t3);
	n1=a1*3600+a2*60+a3;
    n2=t1*3600+t2*60+t3;
        if(n1>n2) n3=n1-n2;
    	else n3=n2-n1;//直接将运算结果放在最前面,在后面进行判断
	printf("%02d:%02d:%02d",n3/3600,n3/60%60,n3%60);
	return 0;
}

    

7-5 sdut-C语言实验——找中间数

输入三个整数,找出其中的中间数。(这里的中间数指的是大小,不是位置。)

输入格式:

输入3个整数。

输出格式:

输出中间数。

输入样例:

在这里给出一组输入。例如:

1 2 3

输出样例:

在这里给出相应的输出。例如:

2
​
#include <stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);//输入三个整数 
	if(a>=b&&b>=c||c>=b&&b>=a)//保证特殊情况不要忽略"="号的使用
	printf("%d",b);
	else if(b>=a&&a>=c||c>=a&&a>=b)//此处应使用if else的级联结构,否则if会一直判断,从而影响
	printf("%d",a);//一些特殊情况比如"1 1 2"的判断
	else if(a>=c&&c>=b||b>=c&&c>=a)
	printf("%d",c);
	return 0;
}

​

7-6 sdut-C语言实验——三个数排序

输入三个整数x,y,z,请把这三个数由小到大输出。

输入格式:

输入数据包含3个整数x,y,z,分别用逗号隔开。

输出格式:

输出由小到大排序后的结果,用空格隔开。

输入样例:

在这里给出一组输入。例如:

2,1,3

输出样例:

在这里给出相应的输出。例如:

1 2 3
#include<stdio.h>
int main()
{
	int a,b,c,t;//定义三个整数以及一个空变量t用于交换数值
	/*此处有多种思路,比如分情况讨论a>b>c,再输出,但是有六种情况
	较为复杂,因此我们采用交换数值的方式*/
	scanf("%d,%d,%d",&a,&b,&c);//输入三个整数 
	if(a>b)
	{
		t = a;//空变量t得到a的值 
		a = b;//a的到b的值(此时a、b的值相等,都是较小值) 
		b = t;//因为"t = a"故此时t最大,b又得到了t的值,故此时b为较大值 
	}
	/*同理,我们可以继续赋值,直到把最大的值赋到同一个变量
	然后再按顺序输出,即得到了排序*/
	if(a>c)//顺序往下,此时已经是较大值
	{
		t = a;
		a = c;
		c = t;//原因同上述操作,此时a的值最小 
	} 
	if(b>c)
	{
		t = b;
		b = c;
		c = t;
	}/*为什么用if不用else if,因为三者是并列关系,都需要运行
	如果都不满足的话,直接就按照a,b,c输出,就不需要if,所以忽略了else的情况*/ 
	printf("%d %d %d",a,b,c);//经过前两个if已经把a的值赋到最小 
	return 0;
}

7-10 sdut-C语言实验-虎子算电费

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量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 a;
	scanf("%lf",&a);//double型输入必须是lf的形式,float可以是f 
	if(a>=0&&a<=50)
	printf("cost = %.2f",a*0.53);
		else if(a>50)
		printf("cost = %.2f",50*0.53+(a-50)*0.58);//看清题目条件 
		/*当然此处也可以声明变量b
		→b = a*0.53或b = 50*0.53+a*0.58
		printf("cost = %.2lf",b)*/ 
	else//这里的else自动代指a<0的情况(呼应第一个if) 

	/*____________________________________________________________
	⭐注意这里分支的级联结构,如果把第二个else if换成if
	则三个分支为并列结构,此处的else成为上面(a>50)的否命题
	也就是当a<50是输出 "Invalid Value!" 导致错误 ,所以如果不
	采用if(a<0)的格式,注意else代表的含义 ⭐
	____________________________________________________________*/
	printf("Invalid Value!") ;
	return 0;
 } 

​

7-11 计算分段函数[1]

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

 

输入格式:

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

输出格式:

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

输入样例1:

10

输出样例1:

f(10.0) = 0.1

输入样例2:

0

输出样例2:

f(0.0) = 0.0
#include <stdio.h>
int main()
{
	float a,b;
	scanf("%f",&a);
	if(a==0)//⭐if或else如果不加"{}",只会运行后一行的代码
	{//而不是直到下一个分支⭐一定要注意码风
		b = 0;
		printf("f(%.1f) = %.1f",a,b);	
	}
        /*如果a=0是直接
         printf("f(0.0) = 0.0")也是个好的思路*/
	else
	{
		b = 1.0/a;
		printf("f(%.1f) = %.1f",a,b);
	}//注意格式,输出保留的位数以及空格
	return 0; 
}

7-12 计算分段函数[2]

本题目要求计算下列分段函数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

⭐sqrt的用法:

变量 = sqrt(被开方数)

a = sqrt(x)a=x^0.5

⭐pow用法:

变量 = pow(底数指数)

a = pow(x,2)a=x^2  

故pow可以取代sqrt的用法,但是都要使用头文件#include<math.h>

#include<stdio.h>
#include<math.h>
int main()
{
	double x,result;//注意要求此处输入实数x,故用double 
	scanf("%lf",&x);//double双精度浮点输入用lf⭐
	if(x>=0)
	{
		result = sqrt(x);
	/*里不要在写一个
		printf("f(%.2lf) = %.2f",x,result);
		所有的结果留在最后输出
		否则printf运行两次*/ 
	 }
	else
	{
		result = pow(x+1,2)+2*x+1/x;
		//注意这里2*x,不能写成2x
	 }	//⭐⭐⭐一定不要忘记"{}"就算只有一行
	printf("f(%.2lf) = %.2f",x,result);//两位小数
	return 0;
}
		

	


网站公告

今日签到

点亮在社区的每一天
去签到