C 语言学习记录-OJ-1

OJ 系统 C 语言练习第一天

第一题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <math.h>

double Fac(double n); //求阶乘函数

int main()
{
double x; //需要输入的x
scanf("%lf", &x);
double a = 0; //用来记录最后一项的值的变量
double e = 0; //用来记录结果的变量
double i = 0; //计数变量
do{
a = pow(x,i) / Fac(i);
e = e + a;
i++;
}while(a >= 0.00000001); //判断最后一项的精确值是否达到10的-8次方;
printf("%.8lf", e);
return 0;
}

double Fac(double n){
int i;
double sum = 1;
for (i = 1; i < n + 1; i++)
{
sum = sum * i;
}
return sum;
}

第二题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdio.h"
#include "math.h"

int main()
{
int a,b,c;
double p,q,s;
scanf("%d%d%d",&a,&b,&c);
if(a + b < c || a + c < b || b + c < a) printf("No");
else
{
p = (a + b + c) / 2;
q = p * (p-a) * (p-b) * (p-c);
s = pow(q,0.5);
printf("%.2lf", s);
}
return 0;
}

第三题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "stdio.h"
#include "math.h"

int main()
{
int s;
scanf("%d", &s);
int sec,min,hour,day;
int m,h;
if(s >= 86400){
day = (s - (s % 86400)) / 86400;
h = (s - (s % 3600)) / 3600;
hour = h - (24 * day);
m = (s - (s % 60)) / 60;
min = m - (day * 24 * 60) - (hour * 60);
sec = s % 60;
}
else if(s >= 3600){
day = 0;
hour = (s - (s % 3600)) / 3600;
m = (s - (s % 60)) / 60;
min = m - (hour * 60);
sec = s % 60;
}
else if(s >= 60){
day = 0;
hour = 0;
min = (s - (s % 60)) / 60;
sec = s % 60;
}
else{
day = 0;
hour = 0;
min = 0;
sec = s;
}
printf("%02d %02d:%02d:%02d",day, hour, min, sec);
return 0;
}

第四题

1.int abs(int i); 求整数的绝对值。
2.long labs(long n); 求长整型数的绝对值。
3.double fabs(double x); 求实数的绝对值。
4.double floor(double x); 求不大于x的最大整数,它相当于数学函数[x]。
5.double ceil(double x); 求不小于x的最小整数。
6.double sqrt(double x); 求x的平方根。
7.double log10(double x); 求x的常用对数。
8.double log(double x); 求x的自然对数。
9.double exp(double x); 求欧拉常数e的x次方。
10.double pow10(int p); 求10的p次方。
11.double pow(double x, double y); 求x的y次方。
12.double sin(double x); 正弦函数。
13.double cos(double x); 余弦函数。
14.double tan(double x); 正切函数。15.double asin(double x); 反正弦函数。
16.double acos(double x); 反余弦函数。
17.double atan(double x); 反正切函数。18.double atan2(double x); 反正切函数2。

第五题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdio.h"
#include "math.h"

int main()
{
double num, time;
int i;
scanf("%lf%lf", &num,&time);
if(time > 36){
for(i = 0;i < time;i++)
{
num = num + num * 0.012;
}
printf("%.2lf", num);
return 0;
}
else if(time > 24){
for(i = 0;i < time;i++)
{
num = num + num * 0.0111;
}
printf("%.2lf", num);
return 0;
}
else if(time > 12){
for(i = 0;i < time;i++)
{
num = num + num * 0.01;
}
printf("%.2lf", num);
return 0;
}
else{
for(i = 0;i < time;i++)
{
num = num + num * 0.009;
}
printf("%.2lf", num);
return 0;
}

return 0;
}

第六题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdio.h"
#include "math.h"

int main()
{
double a,b,c,delta,x,x1,x2,x3,x4,xu1,xu2;
scanf("%lf%lf%lf",&a,&b,&c);
delta = b*b-4*a*c;
if(a == 0){
printf("No");
}
else if(delta >= 0){
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
if(x1 > x2){
x3 = x1;
x4 = x2;
printf("%.2lf %.2lf", x4,x3);
return 0;
}
printf("%.2lf %.2lf", x1,x2);
}
else if(delta < 0){
x1 = -b / (2*a);
xu1 = sqrt(-delta) / (2*a);
printf("%.2lf-%.2lfi %.2lf+%.2lfi", x1,xu1,x1,xu1);
}
return 0;
}

第七题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdio.h"
#include "math.h"

int main()
{
/*
输入两个三位数
求:他们之间(包括自己)能同时被3和5整出的数字之和
*/
int a,b,c,d;
while(scanf("%d%d", &a,&b)!=EOF){
//保证永远c>d
if(a >= b){
c = a;
d = b;
}
else{
c = b;
d = a;
}
int i = d;
int sum = 0;
while(i <= c){
if(i % 5 == 0 && i % 3 == 0){
sum = sum + i;
}
i++;
}
printf("%d\n", sum);
}

}

第八题

原题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "stdio.h"
#include "math.h"

int main()
{
int n,a,b;
char x;
scanf("%d", &n);
int i;
for(i=0;i<n;i++){
//敲黑板,划重点
//这个地方要在输入数据前吸收掉前面的回车,因为回车也是一个字符
scanf("%*c%c%d%d",&x,&a,&b);
if(x == '+'){
printf("%d\n", a+b);
}
else if(x == '-'){
printf("%d\n", a-b);
}
else if(x == '*'){
printf("%d\n", a*b);
}
else if(x == '/'){
printf("%.2lf\n", (double)a/(double)b);
}
}
return 0;
}