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