1.平均数 average
输入3个平均数,输出它们的平均值,保留3位小数。
1 #include<stdio.h>
2 int main()
3 {
4 int a,b,c;
5 scanf("%d%d%d",&a,&b,&c);
6 printf("%.3f\n", (a+b+c)/3.0);
7 }
注意:
(1)第6行 /3.0的地方实际上是整型/浮点型=浮点型 做了自动类型转换 如果写成 /3 就会报错:
exe1-1.c:6:2: 警告: 格式 ‘%f’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat]
(2)printf 输出格式控制
printf()函数的一般形式为 : printf(“格式控制字符串”,输出列表项)
控制字符串分为格式说明和普通字符(原样输出)
每个格式说明都由%开头,以一个格式字符串结束。在此之间可以加入左对齐符号,前导补零符号,宽度及精度说明,输出长度修正及指定输出类型的格式字符:
% - 0 m.n 1或h 格式字符
格式字符的详细说明如下:
d 输出带符号的十进制整数
o 以八进制无符号形式输出整数
0x 或0X 以十六进制无符号形式输出整数 x则输出小写字母 X输出大写字母
u 以无符号十进制形式输出整数
c 输出一个字符
s 输出字符串的字符,直到遇到‘\0’,或者输出由精度指定的字符数
f 以小数形式输出单、双精度,隐含输出6位小数。若指定精度为0,则小数部分不输出
e 或E 以标准指数形式输出单、双精度数,数字部分的小数位数为6位。
g或G 系统自动! 采用%f或%e 以使输出宽度最小。
关于长度修正符号l
%ld 输出long
%lf 输出double
关于域宽和精度 m指输出数据的总宽度,n指浮点型数的小数位数。 默认n=6
2.温度 temperature
输入华氏温度f,输出对应的摄氏温度c ,保留3位小数。提示:c=5(f-32)/9
1 #include<stdio.h>
2 int main()
3 {
4 float a;
5 scanf("%f",&a);
6 printf("%.3f\n",5*(a-32)/9);
7 return 0;
8 }
注意:
输入格式控制
scanf()函数的一般形式为 : printf(“格式控制字符串”,地址列表)
控制字符含义和printf函数相似,但有不同之处,完整格式:
赋值抑制符 指定输入数据域宽 长度修正符 格式字符,符号如下
% * m.n l或h 格式字符
其中m表示输入数据的最大位数,系统截断换取输入。输入实型时n的小数点位数控制不可用。
长度修正符l 用于输入长整型数据及double型数据,加h用于输入短整型数据。
格式字符的详细说明如下:
d,i 输入带符号十进制整数
o 输入八进制无符号整数
x或X 输入十六进制无符号整数, 大小写形式相同
u 输入无符号十进制整数
c 输入单个字符
s 输入字符串
f 输入实数,以小数或指数形式
3.连续和 sum
输入正整数n,输出1+2+3...+n的值。
1 #include<stdio.h>
2 int main()
3 {
4 int m,n,sum;
5 scanf("%d", &m);
6 for(n=1;n<=m;n++)
7 {
8 sum+=n;
9 }
10 printf("%d\n", sum);
11 return 0;
12 }
输入正整数n(n<360), 输出n度的正弦/余弦函数值。
在gcc环境下总是报错 链接外部库的方法-lm 是 link(链接)到 /usr/lib/libm.a 或 /usr/lib/libm.so 的意思,libm 是 library math 的意思
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 double n,p,q,degree;
6 scanf("%lf", &n);
7 const double pi= 4.0 *atan(1.0);
8 degree=n*pi/180;
9 p=sin(degree);
10 q=cos(degree);
11 printf("%lf %lf\n",p,q);
12 return 0;
13 }
edward@edward:~/Desktop/Algorithm$ ./exe1-4
360
-0.000000 1.000000
edward@edward:~/Desktop/Algorithm$ ./exe1-4
0
0.000000 1.000000
edward@edward:~/Desktop/Algorithm$ ./exe1-4
90
1.000000 0.000000
5.距离 distance
输入4个浮点数x1,x2,y1,y2 输出平面坐标系中点(x1,y1)到(x2,y2)的距离。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 float x1,x2,y1,y2,dis;
6 scanf("%f%f%f%f", &x1,&y1,&x2,&y2);
7 dis=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
8 printf("%f\n",dis);
9 return 0;
10 }
编译链接gcc -o exe1-5 exe1-5.c -lm
运行edward@edward:~/Desktop/Algorithm$ ./exe1-5
1 1 2 2
1.414214
6. 偶数 odd
检测输入的整数 是否为偶数 偶数输出yes 否则输出no。
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 scanf("%d",&a);
6 if(a%2==0) printf("yes\n");
7 else printf("no\n");
8 return 0;
9 }
除了求余还有什么好方法判断是奇数还是偶数呢? 我想要不就是奇数的平方为奇数,不过代价教大。
7.打折 discount
一件衣服95元,若消费满300,可打85折,输入购买件数,输出支付金额,保留2位小数.
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 float sum;
6 scanf("%d", &a);
7 sum=95*a;
8 if(sum>300) printf("%.2f元\n", sum*0.85);
9 else printf("%f元\n", sum);
10 return 0;
11 }
8.绝对值 abs
输入一个浮点数,输出它的绝对值,保留两位小数。
函数名:abs
功能:返回整型数的绝对值.
用法:Abs(number)
直接用abs 处理浮点数肯定是不行的 考虑 平方后再开方。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 float a;
6 scanf("%f", &a);
7 printf("%.2f\n", sqrt(pow(a,2)));
8 return 0;
9 }
23.53454524
23.53
-32.4454
32.45
补充:其实也可以用fabs(double x)函数计算
9.三角形 triangle
输入三角形的三边长度值(正整数),判断它是否能成为直角三角形的三个边长。
如果可以输出“yes” 如果不能 输出“no” 。如果根本无法否成三角形,输出“not a triangle”。
要判定是不是三角形 需要用到三角形两边之和大于第三边,两边之差的绝对值小于第三边。
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 int a, b,c;
6 //先排序在判断两短边之和是否大于第三边 两边之差是否小于第三边
7 scanf("%d%d%d",&a,&b,&c);
8 int max, min, mid;
9 max=a; if(max<b)max=b; if(max<c)max=c;
10 min=a; if(min>b)min=b; if(min>c)min=c;
11 mid=a+b+c-max-min;
12 if((min+mid>max)&&(max-min<mid)&&(max-mid<min))
13 {
14 float temp=sqrt(pow(min,2)+pow(mid,2));
15 if(temp==max)printf("yes\n"); //会自动转换max 为float型比较
16 else printf("no\n");
17 }
18 else printf("not a triangle\n");
19 return 0;
20 }
edward@edward:~/Desktop/Algorithm$ ./exe1-9
3 4 5
yes
edward@edward:~/Desktop/Algorithm$ ./exe1-9
4 5 6
no
edward@edward:~/Desktop/Algorithm$ ./exe1-9
1 2 3
not a triangle
10. 年份 year
输入年份,判断是否为润年,是输出yes 否则输出no
1 #include<stdio.h>
2 int main()
3 {
4 int a;
5 scanf("%d",&a);
6 //四年一闰,百年不闰,四百年再闰
7 if(a%100==0)
8 {
9 if((a%4==0)&&(a%400==0)) printf("yes\n");
10 else printf("no\n");
11 }
12 else if(a%4==0) printf("yes");
13 else printf("no\n");
14 return 0;
15 }
edward@edward:~/Desktop/Algorithm$ ./exe1-10
1900
no
edward@edward:~/Desktop/Algorithm$ ./exe1-10
2000
yes
==================================================我是分割线==================================================
补充C语言常用的数学函数
三角函数:(所有参数必须为弧度)
1.acos
函数申明:acos (double x);
用途:用来返回给定的 X 的反余弦函数。
2.asin
函数申明:asin (double x);
用途:用来返回给定的 X 的反正弦函数。
3.atan
函数申明:atan (double x);
用途:用来返回给定的 X 的反正切函数。
4.sin
函数声明:sin (double x);
用途:用来返回给定的 X 的正弦值。
5.cos
函数声明:cos (double x);
用途:用来返回给定的 X 的余弦值。
6.tan
函数声明:tan (double x);
用途:用来返回给定的 X 的正切值。
7.atan2
函数声明:atan2 (double y, double x);
用途:返回给定的 X 及 Y 坐标值的反正切值
感觉上面好罗嗦,其实只要记住 三角函数是针对弧度的 并且弧度值是double型的。其他函数:
其他函数
8.atof
函数名: atof (const char *s);
功 能: 把字符串转换成浮点数
用 法: double atof(const char *nptr);
程序例:
#i nclude <stdlib.h>
#i nclude <stdio.h>
int main(void)
{
float arg,*point=&arg;
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
9. ceil 和 floor
函数名: ceil
floor
功 能: 向上舍入
向下舍入
用 法: double ceil(double x);
double floor(double x);
程序例:
#i nclude<math.h>
int main(void)
{
double number = 123.54;
double down, up;
down = floor(number);
up = ceil(number);
printf("original number %5.2lf\n", number);
printf("number rounded down %5.2lf\n", down);
printf("number rounded up %5.2lf\n", up);
return 0;
}该程序运行结果:original number 123.54
number rounded down 123.00
number rounded up 124.00
10.fabs
函数名:fabs
功能:求浮点数x的绝对值.
用法:fabs (double x);
11.fmod
函数名: fmod
功 能: 计算x对y的模, 即x/y的余数
用 法: double fmod(double x, double y);
程序例:
#i nclude <stdio.h>
#i nclude <math.h>
int main(void)
{
double x = 5.0, y = 2.0;
double result;
result = fmod(x,y);
printf("The remainder of (%lf / %lf) is \
%lf\n", x, y, result);
return 0;
}
12.abs
函数名:abs
功能:返回整型数的绝对值.
用法:Abs(number)
number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0.
幂指数:
13.exp
函数名:exp
功能:返回 e 的 n 次幂.
用法:exp (double x);
14.frexp
函数名: frexp
功 能: 把一个双精度数分解为尾数的指数
用 法: double frexp(double value, int *eptr);
程序例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double mantissa, number;
int exponent;
number = 8.0;
mantissa = frexp(number, &exponent);
printf("The number %lf is ", number);
printf("%lf times two to the ", mantissa);
printf("power of %d\n", exponent);
return 0;
}
15.log
函数名:log
功 能: 自然对数函数ln(x)
用 法: double log(double x);
程序例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double result;
double x = 8.6872;
result = log(x);
printf("The natural log of %lf is %lf\n", x, result);
return 0;
}
log(x,y)=ln(y)/ln(x)
16.ldexp
函数名: ldexp
功 能: 计算value*(2的exp幂 ).
用 法: double ldexp(double value, int exp);
程序例:
#i nclude
#i nclude
int main(void)
{
double value;
double x = 2;
/* ldexp raises 2 by a power of 3 then multiplies the result by 2 */
value = ldexp(x,3);
printf("The ldexp value is: %lf\n", value);
return 0;
} 运行结果为:2*2^3=16.
17.log10
函数名:log10
功能:返回以 10 为底的对数.
用法:log10 (double x);
18.sqrt
函数名:sqrt
功能:返回指定数字的平方根.
用法:sqrt (double x);
19.modf
函数名:modf
功 能: 把数分为指数和尾数
用 法: double modf(double value, double *iptr);
程序例:
#i nclude <math.h>
#i nclude <stdio.h>
int main(void)
{
double fraction, integer;
double number = 100000.567;
fraction = modf(number, &integer);
printf("The whole and fractional parts of %lf are %lf and %lf\n",number, integer, fraction);
return 0;
}
20.pow
函数名:pow
功能:返回指定数字的指定次幂.
用法:pow (double x, double y);(将返回x的y次幂)
双曲函数:
21.cosh
函数名:cosh
功能:返回指定角度的双曲余弦值.
用法:Double Cosh(double x(以弧度计量的角度)) ;
22.sinh
函数名:sinh
功能:返回指定角度的双曲正弦值。
用法:sinh (double x);(其中参数x必须为弧度制)
23.tanh
函数名:tanh
功能:回指定角度的双曲正切值.
用法:tanh (double x);