标准数学库
应用之一:乘方(C语言的运算符只有四则运算,没有乘方)
#include<stdio.h>
#include<math.h> //包含标准数学库(头文件<math.h>)
int main(void)
{
double d;
d = pow(3, 3);
printf("%f\n",d);
return 0;
}
重复将ASCII码转成字母
#include<stdio.h>
#define A_G 103
int main(void)
{
int n = 96;
while (n++ < A_G)
printf("%c", n);
printf("\n");
return 0;
}
abcdefg
分钟转小时
一个可重复将n分钟转换成n1小时n2分钟格式的程序,条件是输入正整数
#include<stdio.h>
#define M_TO_H 60
void mtoh(int n);
int main(void)
{
int a;
printf("请输入分钟数:");
scanf("%d", &a);
while (a > 0)
{
mtoh(a);
printf("请输入分钟数:");
scanf("%d", &a);
}
printf("输入了小于等于零的数,程序结束。\n");
return 0;
}
void mtoh(int n)
{
int n1, n2;
n1 = n / M_TO_H;
n2 = n % M_TO_H; //%是取余符号
printf("结果是%d小时%d分钟。\n", n1, n2);
}
请输入分钟数:454
结果是7小时34分钟。
请输入分钟数:5615
结果是93小时35分钟。
请输入分钟数:262626
结果是4377小时6分钟。
请输入分钟数:151
结果是2小时31分钟。
请输入分钟数:-888
输入了小于等于零的数,程序结束。
天数转星期
这里演示的是不带函数和#define
预处理的版本
#include<stdio.h>
int main(void)
{
int day, week, left;
printf("请输入天数:\n");
scanf("%d", &day);
while (day > 0)
{
week = day / 7;
left = day % 7;
printf("相当于%d星期%d天。\n", week, left);
printf("请输入天数:\n");
scanf("%d", &day);
}
printf("输入了小于等于零的数,程序结束。\n");
return 0;
}
请输入天数:
55
相当于7星期6天。
请输入天数:
88
相当于12星期4天。
请输入天数:
66
相当于9星期3天。
请输入天数:
44
相当于6星期2天。
请输入天数:
84456
相当于12065星期1天。
请输入天数:
177
相当于25星期2天。
请输入天数:
0
输入了小于等于零的数,程序结束。
while与递增运算符
#include<stdio.h>
int main(void)
{
int a, i;
printf("请输入一个整数:\n");
scanf("%d", &a);
printf("接下来将打印比该数大0到10的所有整数。\n");
i = 0; //首先进行的是第0次操作
while(i++ < 11) //次数i与右侧的值相比较,相符则进行块中的操作,随后将i的值加1
{
printf("%d\n", a);
++a;
//与前面的不同,此处递增是前缀,表示“先加1再赋值”,
//但在此由于语句中只有这一个式子所以与a++;实际上相同
}
return 0;
}
请输入一个整数:
9
接下来将打印比该数大0到10的所有整数。
9
10
11
12
13
14
15
16
17
18
19
前缀与后缀递增符号
如前述,前缀递增者,先加1再使用之;后缀递增者,使用之后加1
#include<stdio.h>
int main(void)
{
int a = 10; //初始值指定
int b, c;
b = a++; //后缀,a的值先赋给b,随后a加上了1变为11
c = ++a; //前缀,a的值先加1变为12,随后赋给c,a,c此时皆12
printf("%d\n%d\n%d", a, b, c);
return 0;
}
12
10
12
递减规则相同
#include<stdio.h>
int main(void)
{
int a = 10; //初始值指定
int b, c;
b = a--; //后缀,a的值先赋给b,随后a减去了1变为9
c = --a; //前缀,a的值先减1变为8,随后赋给c,a,c此时皆8
printf("%d\n%d\n%d", a, b, c);
return 0;
}
8
10
8
数列求和
(1)
#include<stdio.h>
int main(void)
{
int n, i, t;
printf("请输入末项:");
scanf("%d", &n);
i = 0;
t = 0;
while (i++ < n)
{
t = t + i;
}
printf("从1加到%d的总和是%d。\n", n, t);
return 0;
}
请输入末项:100
从1加到100的总和是5050。
(2)
#include<stdio.h>
int main(void)
{
int n, i, t;
printf("请输入末项:");
scanf("%d", &n);
i = 0;
t = 0;
while (i++ < n)
{
t = t + i * i;
}
printf("从1加到%d的平方和是%d。\n", n, t);
return 0;
}
请输入末项:100
从1加到100的平方和是338350。
(3)
#include<stdio.h>
int main(void)
{
int m, n, i, t;
printf("请输入首项:");
scanf("%d", &m);
printf("请输入末项:");
scanf("%d", &n);
i = m;
t = i * i;
for (;m <= n;) //使用模仿while风格的for
{
while (++i < n + 1)
{
t = t + i * i;
}
printf("从%d加到%d的平方和是%d。\n", m, n, t);
printf("请输入首项:");
scanf("%d", &m);
printf("请输入末项:");
scanf("%d", &n);
i = m;
t = i * i;
}
printf("输入的末项小于首项,程序结束。\n");
return 0;
}
请输入首项:6
请输入末项:6
从6加到6的平方和是36。
请输入首项:2
请输入末项:3
从2加到3的平方和是13。
请输入首项:4
请输入末项:6
从4加到6的平方和是77。
请输入首项:9
请输入末项:8
输入的末项小于首项,程序结束。
求余
由于求余运算只能对整数型起作用,故对于输入小数的情况需要使用强制类型转换使其抛掉小数部分
#include<stdio.h>
int main(void)
{
float a, b;
int c;
printf("请输入除数:\n");
scanf("%f", &b);
printf("请输入被除数:\n");
scanf("%f", &a);
while (a > 0)
{
c = (int)a % (int)b; //强制类型转换,此处将小数点型的数去尾成整数
printf("余数是%d。\n", c);
printf("请输入除数:\n");
scanf("%f", &b);
printf("请输入被除数:\n");
scanf("%f", &a);
}
printf("输入了小于等于零的数,程序结束。\n");
return 0;
}
请输入除数:
4.2
请输入被除数:
18.45
余数是2。
请输入除数:
13
请输入被除数:
65
余数是0。
请输入除数:
999
请输入被除数:
6666
余数是672。
请输入除数:
999.99
请输入被除数:
6666.66
余数是672。
请输入除数:
-8457
请输入被除数:
-78451
输入了小于等于零的数,程序结束。
绝对值
#include<stdio.h>
#include <math.h>
double cal(double a, double b);
int main(void)
{
double m, n, r;
printf("Please enter 2 numbers:");
while(scanf("%lf%lf", &m, &n) == 2)
{
r = cal(m, n);
printf("Result: %f\n", r);
printf("Please enter 2 numbers:");
}
printf("You didn't (fully) enter 2 numbers. The program will exit.\n");
return 0;
}
double cal(double a, double b)
{
double c;
c = fabs(a - b) / (a * b); //abs(), fabs()在<math.h>中用以求整数型和浮点型的绝对值
return c;
}
Please enter 2 numbers:88 -77.1
Result: -0.024334
Please enter 2 numbers:-88 77.1
Result: -0.024334
Please enter 2 numbers:77 a
You didn't (fully) enter 2 numbers. The program will exit.
温度换算
#include<stdio.h>
void temperatures(double f);
//指定以下为常量,与#define大致相同,不过这种形式也可以写进函数的花括弧内部
const double h = 5.0;
const double j = 9.0;
const double u = 32.0;
const double g = 273.16;
int main(void)
{
double a;
int x;
printf("请输入华氏温度:\n");
/*
对下两行的解释是,将scanf()函数的返回值赋给x,
如果读取的是数字,返回值为1,否则返回值为0,
由此,就可以指定while的循环条件了
*/
x = scanf("%lf", &a);
while (x == 1)
{
temperatures(a);
printf("请输入华氏温度:\n");
x = scanf("%lf", &a);
}
printf("你输入了非数字,程序结束。\n");
return 0;
}
void temperatures(double f)
{
double c, k;
c = (h / j) * (f - u);
k = c + g;
printf("摄氏温度是:%.2f\n", c);
printf("开氏温度是:%.2f\n", k);
}
请输入华氏温度:555摄氏温度是:290.56开氏温度是:563.72请输入华氏温度:99.254摄氏温度是:37.36开氏温度是:310.52请输入华氏温度:0摄氏温度是:-17.78开氏温度是:255.38请输入华氏温度:-74摄氏温度是:-58.89开氏温度是:214.27请输入华氏温度:not_temp你输入了非数字,程序结束。