2.1 在屏幕上显示Hello World!
2.2 求华氏温度100°F对应的摄氏温度
2.3 计算分段函数
2.4 输出华氏--摄氏温度转换表
2.5 生成乘方表与阶乘表
例2-1. 在屏幕上显示一个短句:
Hello World!
/* 显示Hello World! */
#include<stdio.h>
int main() /* 主函数 */
{
printf("Hello World!\n"); /* printf--输出函数, \n--换行符, ;--语句结束 */
return 0;
}
例2-2. 在屏幕上显示一个短句:
Programming is fun!
And Programming in C is even more fun!
#include<stdio.h> /* 编译预处理命令 */
int main()
{
printf("Programming is fun!\n");
printf("And Programming in C is even more fun!\n");
return 0;
}
思考:可以用一条语句完成吗? 能否打印一个简单图案?
从华氏温度转换到摄氏温度: $C=\frac{5*(F-32)}{9}$
例2-3. 求华氏温度100°F对应的摄氏温度
摄氏温度 C=5*(F-32)/9
输出: fahr=100, celsius=37
#include<stdio.h>
int main()
{
int celsius, fahr; /* 变量定义 */
fahr=100;
celsius=5*(fahr-32)/9; /* 变量使用 */
printf("fahr=%d,celsius=%d\n", fahr, celsius); /* 输出结果 */
return 0;
}
int celsius, fahr;
celsius=5*(fahr-32)/9;
变量定义的一般形式是:
变量名的定义一般用
int celsius, fahr; //定义整型变量
float x; //定义单精度浮点型变量
double area, height; //定义双精度浮点型变量
double型数据精度比float型高,取值范围更大
#include<stdio.h>
int main()
{
int celsius, fahr;
fahr=100; //变量先赋值
celsius=5*(fahr-32)*9; //变量后引用
printf("fahr=%d,celsius=%d\n",fahr,celsius);
return 0;
}
fahr=100;
celsius=5*(fahr-32)/9;
思考:
数学式:5(f-32)/9 --> C语言表达式:
数学式:s(s-a)(s-b)(s-c) --> C语言表达式:
双目运算符两侧操作数的类型要相同
fahr=100;
celsius=5*(fahr-32)/9
数据输出:用格式化输出函数printf()
printf("Hello World!\n");
printf("fahr=%d, celsius=%d\n", fahr, celsius);
fahr=
例2-4. 求分段水费
输入用户的月用水量$x$(吨),计算并输出该用户应支付的水费$y$(元)(保留2位小数) $$ y=f(x)=\begin{cases} \frac{4x}{3} &x\leq 15\\ 2.5x-10.5 &x>15 \end{cases} $$
例2-4. 求分段水费
输入用户的月用水量$x$(吨),计算并输出该用户应支付的水费$y$(元)(保留2位小数) $$ y=f(x)=\begin{cases} \frac{4x}{3} &x\leq 15\\ 2.5x-10.5 &x>15 \end{cases} $$
要解决的问题:
#include<stdio.h>
int main()
{
double x,y;
printf("Enter x(x>=0):\n"); /* 输入提示 */
scanf("%lf", &x); /* 调用scanf函数输入数据 */
if(x<=15) /* if-else语句 */
{
y=4*x/3;
}
else
{
y=2.5*x-10.5;
}
printf("f(%f)=%.2f\n", x, y);
return 0;
}
Enter x(x>=0):
9.5
f(9.500000)=12.67
Enter x(x>=0):
15
f(15.000000)=20.00
Enter x(x>=0):
21.3
f(21.300000)=42.75
x<=15 比较x和15的大小,比较结果为
当x取值为9.5时,x
<=15的结果是:真
当x取值为21.3时,x<=15的结果是:假
x<y x
<=y x==y
x>y x>=y x!=y
注意区分=和==
表示比较的数学式 | C关系表达式 |
---|---|
$x\leq 10$ | x<=10< /td> |
$x\geq 10$ | x>=10 |
$x\neq 10$ | x!=10 |
$x=10$ | x==10 |
用关系表达式描述条件
if(表达式)
语句1
else
语句2
if(x<=15){
y=4*x/3;
}else{
y=2.5*x-10.5;
}
函数定义为 $$ f(x)=\begin{cases} \frac{1}{x} & x\neq 0\\ 0 & x=0 \end{cases} $$
if(x!=0){
y=1/x;
}else{
y=0;
}
#include<stdio.h>
int main()
{
double x, y;
printf("Enter x:\n");
scanf("%lf", &x);
if(x!=0)
{
y=1/x;
}
else
{
y=0;
}
printf("f(%.2f)=%.1f\n", x, y);
return 0;
}
input x:
2.5
f(2.50)=0.4
input x:
0
f(0.00)=0.0;
数据输入:格式化输入函数scanf()
scanf("%lf", &x);
scanf("%lf", &x);
scanf("x=%lf", &x);
第1行,输入为
第2行,输入为
例2-3. 求华氏温度100°F对应的摄氏温度
摄氏温度 C=5*(F-32)/9
输出: fahr=100, celsius=37
#include<stdio.h>
ing main()
{
int celsius, fahr;
printf("Enter fahr:\n");
scanf("%d", &fahr);
celsius=5*(fahr-32)/9;
printf("fahr=%d, celsius=%d\n", fahr, celsius);
return 0;
}
例2-4. 以第一天的能力值为基数,用initial表示,能力值相比前一天最高的值factor就是努力参数,坚持天数为day,让我们一起来看看坚持的力量。
输入能力的初始值initial、努力参数factor和坚持天数day,根据下列公式计算出坚持努力后达到的能力值,输出时保留两位小数
$$ result=initial(1+factor)^{day} $$
#include<stdio.h>
#include<math.h>
int main()
{
int day;
double factor, initial, result;
printf("Enter initial: ");
scanf("%lf", &initial);
printf("Enter factor: ");
scanf("%lf", &factor);
printf("Enter day: ");
scanf("%d", &day);
result=initial*pow(1+factor, day);
printf("result=%.2f\n", result);
return 0;
}
scanf("
输入: 1 0.01 365
输出: 37.78
输入存款金额mone、存期year和年利率rate,根据公式计算存款到期时的本息合计sum(税前),输出时保留两位小数
$$ sum=money(1+rate)^{year} $$
#include<stdio.h>
#include<stdio.h>
int main()
{
int money, year;
double rate, sum;
printf("Enter money, year, rate: ");
scanf("%d %d %lf", &money, &year, &rate);
sum=money*pow((1+rate), year);
printf("sum=%.2f\n", sum);
return 0;
}
例2-6. 输入2个整数lower和upper,输出一张华氏--摄氏温度转换表,华氏温度的取值范围是[lower, upper],每次增加1°
#include<stdio.h>
int main()
{
int fahr, lower, upper;
double celsius;
printf("Enter lower: ");
scanf("%d", &lower);
printf("Enter upper: ");
scanf("%d", &upper);
if(lower<=upper)
{
printf("fahr celsius\n");
for(fahr=lower; fahr<=upper; fahr++)
{
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n", fahr, celsius);
}
}
else
{
printf("Invalid value\n");
}
return 0;
}
for(fahr=lower; fahr<=upper; fahr++)
{
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n", fahr, celsius);
}
Enter lower:
Enter upper:
fahr celsius
30 -1.1
31 -0.6
32 0.0
33 0.6
34 1.1
35 1.7
for(
循环体语句
实现C语句的重复执行
3个表达式、循环体语句
for(fahr=lower; fahr<=upper; fahr++)
{
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n", fahr, celsius);
}
/* 代码1 */
for(fahr=lower; fahr<=upper; fahr++)
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n", fahr, celsius);
/* 代码2 */
for(fahr=lower; fahr<=upper; fahr++);
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n", fahr, celsius);
思考:以上两段代码的执行结果如何? 为什么?
例2-7. 输入一个正整数,求$\sum_{i=1}^{n}i$
当n=100时,计算的是1+2+3+...+100的值
抽取具有共性的算式:sum=sum+i
若sum初值为0,该算式重复100次,i从1变到100,每次增1
设i为循环变量,则有:
指定循环起点的表达式1: i=1
给出循环条件的表达式2: i
<=100
设置循环步长的表达式3: i++
循环体中的语句: sum=sum+i;
for(i=1; i<=100; i++)
{
sum=sum+i;
}
#include<stdio.h>
int main()
{
int i, sum;
sum=0; /* 设置累加和sum的初值为0 */
for(i=1; i<=100; i++) /* 循环重复100次 */
{
sum=sum+i; /* 反复累加 */
}
printf("sum=%d\n", sum); /* 输出累加和 */
return 0;
}
思考:循环体能否改为
for(int i=1; i<=100; i++)
{
sum=0;
sum=sum+i;
}
#include<stdio.h>
int main()
{
int i;
double sum;
sum=0; /* 设置累加和sum的初值为0 */
for(i=1; i<=100; i++) /* 循环重复100次 */
{
sum=sum+1.0/i; /* 反复累加 */
}
printf("sum=%f\n", sum); /* 输出累加和 */
return 0;
}
思考:循环体第9行能否改为
指定次数的循环程序设计,一般包含四个部分:
#include<stdio.h>
int main()
{
int i, sum;
sum=0;
printf("Enter n:");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
sum=sum+i;
}
printf("sum=%d\n", sum);
return 0 ;
}
#include<stdio.h>
int main()
{
int i;
double sum;
sum=0;
printf("Enter n:");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
sum=sum+1.0/i;
}
printf("sum=%lf\n", sum);
return 0;
}
求前n项,即循环n次,每次累加1项
循环中可写成sum=sum+item; 而item=1.0/2*(i-1);
#include<stdio.h>
int main()
{
int i, n;
double item, sum;
printf("Enter n:");
scanf("%d", &n);
sum=0;
for(i=1; i<=n; i++)
{
item=1.0/(2*i-1); /* 计算第i项的值 */
sum=sum+item; /* 累加第i项的值 */
}
printf("sum=%f\n", sum);
return 0;
}
例2-8. 输入一个正整数n,求1-1/3+1/5-...的前n项和
关键是确定循环体内的结构,item=flat*1.0/2*(i-1); sum=sum+
flag=-flag;
denominator=denominator+2;
item=flag*1.0/denominator;
sum=sum+item;
#include<stdio.h>
int main()
{
int denominator, flag, i, n; /* denominator分母(1,3,5,...), flag(1,-1) */
double item, sum;
printf("Enter n:");
scanf("%d", &n);
flag=1;
denominator=1;
item=1;
sum=0;
for(i=1; i<=n; i++)
{
sum=sum+item; /* 累加第i项的值 */
flag=-flag; /* 准备下一次循环 */
denominator=denominator+2;
item=flat*1.0/denominator; /* 计算第i+1项的值 */
}
printf("sum=%lf\n", sum);
return 0;
}
例2-9. 输入一个正整数n,计算n!的值
循环体内的结构:product=product*item(第i项); item=i;
#include<stdio.h>
int main()
{
int i, n;
double product;
printf("Enter n:");
scanf("%d", &n);
product=1; /* 置阶乘product的初始值为1 */
for(i=1; i<=n; i++)
{
product=product*i; /* 循环重复n次,计算n! */
}
printf("product=%.0f\n", product);
return 0;
}
输入实数$x$和正整数$n$,计算$x^n$的值
循环体内的结构:power=power*item(第i项); item=x;
#include<stdio.h>
int main()
{
int i, n;
double x, power;
printf("Enter x, n:\n");
scanf("%lf%d", &x, &n);
power=1; /* 置power的初始值为1 */
for(i=1; i<=n; i++)
{
power=power*x; /* 循环重复n次,计算x的n次幂 */
}
printf("power=%.0f\n", power);
return 0;
}
例2-10. 输入一个正整数n,生成一张2的乘方表,输出$2^0$到$2^n$的值,可以调用幂函数计算2的乘方
for(i=0; i
<=n; i++){
power=pow(2,n); /* 调用幂函数pow(2,i)计算2的i次方 */
输出power的值;
}
#include<stdio.h>
#include<math.h>
int main()
{
int i, n;
double power;
printf("Enter n:");
scanf("%d", &n);
for(i=0; i<=n; i++)
{
power=pow(2,i); /* 调用幂函数pow(2,i)计算2的i次方 */
printf("pow(2,%d)=%.0f\n", i, power);
}
return 0;
}
例2-11. 输入一个正整数n(n<=16),生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double
for(i=0; i<=n; i++)
{
product=fact(i); /* 调用自定义的函数fact(i)计算 */
printf("%f", product);
}
#include<stdio.h>
double fact(int n); /* 自定义函数的声明 */
int main()
{
int i, n;
double result;
printf("Enter n:");
scanf("%d", &n);
for(i=0; i<=n; i++)
{
result=fact(i); /* 调用自定义的耿当fact(i)计算i! */
printf("%d!=%.0f\n", i, result);
}
return 0;
}
double fact(int n) /* 函数首部 */
{
int i;
double product;
product=1;
for(i=1; i<=n; i++)
{
product=product*i;
}
return product; /* 将函数结果回送主函数 */
}
/* 声明自定义函数,以分号结束。自定义函数包含函数名、函数参数和函数类型 */
double fact(int n);
int main()
{
//......
result=fact(i); /* 调用自定义函数fact(i)计算i! */
//......
}
/* 定义求n!的函数 */
double fact(int n)
{
//......
}