配色: 字号:
《C语言程序设计(第2版)》第02章用C语言编写程序
2023-05-24 | 阅:  转:  |  分享 
  
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World!2.2 求华氏温度 100°F 对应的摄氏温度2.3
计算分段函数2.4 输出华氏—摄氏温度转换表2.5 生成乘方表与阶乘表 本章要点怎样编写程序,在屏幕上显示一些信息?怎样编写程
序,实现简单的数据处理,例如将华氏温度转换为摄氏温度?怎样使用 if 语句计算分段函数?怎样用 for 语句求 1+2+……+10
0?如何定义和调用函数生成一张乘方表?2.1 在屏幕上显示Hello World! 例2-1 在屏幕上显示一个短句:Hello
World!2.1 在屏幕上显示Hello World!/ 显示“Hello World!” /
注释文本 # include int main(void) 主函
数{ printf(“Hello World! \n”); 语句结束 return
0;} 输出函数 换行符1.任何程序都有主函数2.程序由若干语句组成3.语句由;结束2.1 在屏
幕上显示一些信息例2-2 在屏幕上显示:Programming is fun!And Programming in C is ev
en more fun!# include 编译预处理命令int mai
n(void){ printf("Programming is fun! \n"); printf("And Prog
ramming in C is even more fun! \n"); return 0;} 2.2 求华氏温
度 100°F 对应的摄氏温度 摄氏温度 C=(5/9)(F-32)2.2.1 程序解析2.2.2 常量、变量和数据类型2.2
.3 算术运算和赋值运算2.2.4 格式化输出函数printf2.2.1 程序解析例2-3 求华氏温度 100°F 对应的摄
氏温度。摄氏温度 C=5(F-32)/9 #include int main(void){ int
celsius, fahr; 变量定义 fahr = 100;
变量使用 celsius = 5 (fahr - 32) / 9; printf
("fahr = %d, celsius = %d\n", fahr, celsius);输出结果 return 0;}输出
:fahr =100, celsius = 372.2.2 常量、变量和数据类型int celsius, fahr; celsi
us = 5 (fahr - 32) / 9;数据常量:在程序运行过程中,其值不能被改变 变量:在程序运行过程中,其值可以被改
变 数据类型常量:5 和 9是整型常量(整数)变量:在定义时指定变量的定义变量定义的一般形式:类型名 变量名表;例如:int
celsius, fahr; 定义整型变量float x;
定义单精度浮点型变量double area, length; 定义双精度浮点型变量double型数据比float精度高,
取值范围大 变量名:小写字母;见名知义变量的定义定义变量时要指定变量名和数据类型类型名 变量名表;int celsius,
fahr; float x;double area, length;变量名代表内存中的一个存储单元存放该变量的
值该存储单元的大小由变量的数据类型决定C语言中的变量代表保存数据的存储单元数学中的变量代表未知数 x = x+1变量的定义与使用变
量必须先定义,后使用。#include int main(void){ int celsius, f
ahr; fahr = 100;
celsius = 5 (fahr - 32) / 9; printf("fahr = %d, celsius =
%d\n", fahr, celsius); return 0;}一个变量名只能定义一次变量一般都定义在程序的头上不能定
义在程序的中间或后面应该先赋值,后引用2.2.3 算术运算和赋值运算fahr = 100;
celsius = 5 (fahr - 32) / 9; 1、算术运算双目算术运算符:+ -
/ %算术表达式:用算术运算符将运算对象连接起来的符合C语言语法规则的式子 数学式:5(F-32) /9 C表达
式:5 (fahr - 32) / 9 或者:数学式:s(s-a)(s-b)(s-c)C表达式:算术运算双目算术运算符:+
- / %算术表达式:用算术运算符将运算对象连接起来的符合C语言语法规则的式子 注意/ 整数除整数,得整数如:1
/2 = 0,9/4 = 2 ?5 (fahr - 32) / 9 和 5 / 9 (fahr - 32) 等价吗% 针对
整型数据如: 5%6=5,9%4=1,100%4=0双目运算符两侧操作数的类型要相同赋值运算赋值运算符 =赋值表达式:用 = 将
一个变量和一个表达式连接起来的式子 变量 = 表达式例如:fahr = 100; celsius = 5 (fahr - 32
) / 9; 计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量=的左边必须是一个变量2.2.4 格式化输出函
数printf数据输出:格式化输出函数 printf #include printf("Hello World!
\n");printf("fahr = %d, celsius = %d\n", fahr, celsius);printf(格
式控制字符串, 输出参数1, … , 输出参数n);用双引号括起来,表示输出的格式要输出的数据printf-格式控制字符串prin
tf("Hello World! \n"); printf("fahr = %d, celsius = %d\n", fahr,
celsius);printf("Hi\n", fahr);格式控制字符串:普通字符:原样输出格式控制说明:按指定的格式输出数据,
%…与数据类型有关int型 :%dfloat double型:%fprintf("fahr = %d, celsius = %d\
n", fahr, celsius);输出:fahr =100, celsius = 372.3 计算分段函数 2.3.1 程序
解析2.3.2 关系运算2.3.3 if-else语句2.3.4 格式化输入函数scanf2.3.5 常用数学库函数2.3
.1 程序解析例2-4 分段计算水费输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数) 要解决的
问题:输入计算分段函数输出,并保留2位小数2.3.1 程序解析-求分段函数 #include int main
(void){ 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.5f(9.500000)=12.67Enter x (x>=0):15f(15.000000)=20.00数据必须输入吗?
Enter x (x>=0):21.3f(21.300000)=42.752.3.2 关系运算x <= 15比较 x 和 15
的大小比较的结果:真 假当 x 取值9.5时, x <= 15的结果是:?当 x 取值21.3时, x <= 15的结果是:?
关系运算 — 比较运算,比较两个操作数关系运算符x < y x <= y x == yx > y x
>= y x != y关系表达式:用关系运算符将2个表达式连接起来的式子。如:x <= 1区分= 和==运用关系表达式
表示比较的数学式 C关系表达式x≤10x≥10x≠10x = 10x <= 10x >= 10x != 10x
== 10用关系表达式描述条件判断 x 是否为负数x < 0判断 x 是否不为零x != 02.3.3 if - else语句i
f (表达式) 语句1else 语句2if(x <= 15) y = 4 x / 3; else
y = 2.5 x - 10.5;计算二分段函数 if (表达式) 语句1else 语句2if(x != 0)
y = 1/x;else y = 0;源程序#include int main(v
oid){ double x, y; printf("Enter x:\n"); scanf("%lf", &
x); if(x != 0) y = 1/x; else y = 0; print
f("f(%.2f) = %.1f\n", x, y); return 0;}#include /例
2-4 /int main(void){ double x, y; printf("Enter x (x>=0):
\n"); scanf("%lf", &x); if(x <= 15) y = 4 x / 3;
else y = 2.5 x - 10.5; printf("f(%f
) = %.2f\n", x, y); return 0;}运行结果#include int main
(void){ double x, y; printf("Enter x:\n"); scanf("%lf",
&x); if(x != 0) y = 1/x; else y = 0; pri
ntf("f(%.2f) = %.1f\n", x, y); return 0;}input x:2.5f(2.50)=0
.4input x:0f(0.00)=0.0软件测试的基本思想 软件测试精心设计一批测试用例 [输入数据,预期输出结果] ,然后分
别用这些测试用例运行程序,看程序的实际运行结果与预期输出结果是否一致。input x:2.5f(2.50)=0.4input x:
0f(0.00)=0.0if(x != 0) y = 1/x;else y = 0;if(x <=
15) y = 4 x / 3;else y = 2.5 x - 10.5;Enter x (x>=0):9.
5f(9.500000)=12.67Enter x (x>=0):15f(15.000000)=20.00Enter x (x>=
0):21.3f(21.300000)=42.752.3.4 格式化输入函数scanf数据输入:格式化输入函数 scanf #i
nclude scanf("%lf", &x);scanf(格式控制字符串, 输入参数1, … , 输入参数n)
;用双引号括起来,表示输入的格式变量地址scanf-格式控制字符串格式控制字符串:格式控制说明: 按指定的格式输入数据, %…与数
据类型有关int型 :%dfloat型:%fdouble型:%lf普通字符:原样输入例如:scanf("%lf", &x);输入:
9.5scanf("x=%lf", &x);输入: x=9.5尽量不要出现普通字符改进例2-3的程序例2-3 求华氏温度 100
°F 对应的摄氏温度。摄氏温度 C=5(F-32)/9 #include int main(void){
int celsius, fahr; fahr = 100; celsius = 5 (fahr - 3
2) / 9; printf("fahr = %d, celsius = %d\n", fahr, celsius);
return 0;}scanf("%d", &fahr);printf(“Enter fahr: \n");Enter fa
hr:100fahr =100, celsius = 372.3.5 常用数学库函数库函数C语言处理系统提供事先编好的函数,供用
户在编程时调用。scanf(), printf(), exp()在相应的系统文件(头文件)中定义一些必需的信息。#include命
令用户调用库函数时,将相应的头文件包含到源程序中。例如调用scanf, printf,需要 #include
用sqrt,需要 #include 常用数学库函数平方根函数 sqrt(x) 绝对值函数 fabs(x)fabs(
-3.56) 的值为3.56幂函数 pow(x, n) :xnpow(1.1, 2) 的值为1.21(即1.12)指数函数 exp
(x):exexp(2.3) 的值为e2.3以e为底的对数函数 log(x):ln xlog(123.45) 的值为4.81583
6以10为底的对数函数 log10(x):log10xlog10(123.45) 的值为2.091491。 例2-5 计算存款的
本息输入存款金额 money、存期 year 和年利率 rate,根据公式计算存款到期时的本息合计sum(税前),输出时保留2位小
数。sum = money ( 1 + rate)yearsum = money pow((1 + rate), year)例
2-5 程序# include # include int main(void){ in
t money, year; double rate, sum; printf(“Enter money:");
scanf("%d", &money); printf(“Enter year: "); scanf("%d
", &year); printf(“Enter rate:"); scanf("%lf", &rate);
sum = money pow((1 + rate), year); printf("sum = %.2f", su
m); return 0;}Enter money: 1000Enter year: 3Enter rate: 0.02
5sum = 1076.89scanf("%d%d%lf", &money, &year, &rate);调用scanf函数输入多
个数据scanf("%d%d%lf", &money, &year, &rate); 输入:1000 3 0.025scanf
需要多个输入参数和多个格式控制说明输入参数的类型、个数和位置要与格式控制说明一一对应 ? scanf("%d%lf%d ", &m
oney, &year, &rate);程序运行时,输入的多个数据之间必须有间隔。scanf("%d%lf%d ", &money
, &rate , &year);如何输入?输入参数、格式控制说明、输入数据2.4 输出华氏-摄氏温度转换表2.4.1 程序解析
2.4.2 for语句2.4.3 指定次数的循环程序设计2.4.1 程序解析例2-6输入2个整数lower和 upper,输出
一张华氏-摄氏温度转换表,华氏温度的取值范围是[lower, upper],每次增加1°F。 fahr celsius 30
-1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1
.72.4.1 程序解析-温度转换表#include int main(void){ int fahr, l
ower, upper; double celsius; printf("Enter lower:"); s
canf("%d", &lower); printf("Enter upper:"); scanf("%d", &up
per); printf("fahr celsius\n");// 温度重复转换:华氏温度从lower开始,到upper结
束,每次增加1°F for (fahr = lower; fahr <= upper; fahr ++) {
celsius = (5.0 / 9.0) (fahr - 32); printf("%d %6.1f\n
", fahr, celsius); } return 0;} fahr = fahr+1Enter lower:
30Enter upper: 35fahr celsius 30 -1.1 31 -0.6 32 0
.0 33 0.6 34 1.1 35 1.7例2-6中for语句的流程for (fahr = lo
wer; fahr <= upper; fahr ++) { celsius = (5.0 / 9.0) (f
ahr - 32); printf("%d %6.1f\n", fahr, celsius); }fahr
= fahr+2输出?Enter lower: 30Enter upper: 35fahr celsius 30 -
1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7fo
r(表达式1;表达式2;表达式3) 循环体语句实现C语句的重复执行2.4.2 for语句-循环语句3个表达式、循环体语句
!书写顺序和执行顺序不同!表达式1只执行一次循环(控制)变量:for语句中,通过改变或判断某个变量的值来控制循环的执行for (f
ahr = lower; fahr <= upper; fahr ++) { celsius = (5.0 / 9.0) (f
ahr - 32.0); printf("%d %6.1f\n", fahr, celsius); }for语句中的循环变量赋初值
判断其值改变其值for (fahr = lower; fahr <= upper; fahr ++) { celsius = (5
.0 / 9.0) (fahr - 32.0); printf("%d %6.1f\n", fahr, celsius); }
表达式1:给循环变量赋初值,指定循环的起点。fahr = lower表达式2:给出循环的条件,判断循环是否达到终点?fahr <=
upper表达式3:设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。fahr++循环体语句:被反复执行的语句,一条
语句。for语句的说明for (fahr = lower; fahr <= upper; fahr ++) { celsius =
(5.0 / 9.0) (fahr - 32.0); printf("%d %6.1f\n", fahr, celsius)
; }for (fahr = lower ; fahr <= upper; fahr = fahr + 1) celsiu
s = (5.0 / 9.0) (fahr - 32.0); printf("%d %6.1f\n", fa
hr, celsius); 复合语句{ }和空语句 ;for (fahr = lower ; fahr <= upper;
fahr = fahr + 1); celsius = (5.0 / 9.0) (fahr - 32.0);
printf("%d %6.1f\n", fahr, celsius); !不要在for语句中随意加分号求 1+2+
……+100抽取具有共性的算式:sum = sum + i sum初值为0,该算式重复100次,i从1变到100设i为循环变量,则
:指定循环起点的表达式1:i = 1给出循环条件的表达式2:i <= 100设置循环步长的表达式3:i++循环体语句:sum =
sum + i;for(i=1; i<=100; i++)sum =sum+i;2.4.3 指定次数的循环程序设计/ 计算1
+ 2 + 3 + …… + 100 /#include int main(void){ int i,
sum; sum = 0; / 置累加和sum的初值为0 / for
( i = 1; i <= 100; i++ ) / 循环重复100次 / sum = sum + i;
/ 反复累加 / printf( “sum = %d\n”, sum); / 输出累
加和 / return 0;}源程序 求 1+2+……+100for(i=1; i<=100; i++){
sum=0; sum=sum+i;}sum=5050#include int main(void){
int i, sum; sum = 0; for ( i = 1; i <=
100; i++ ) sum = sum + i; printf( “sum = %d\n”, sum);
return 0;}求 1+1/2+1/3+……+ 1/100for(i=1; i<=100; i++) su
m=sum+1.0/i;int i;double sum;printf( “sum = %f\n”, sum);一般包含四个部分:
初始化:指定循环起点给循环变量赋初值,如i = 1;进入循环之前,设置相关变量的初值,如sum = 0。条件控制:只要i <= 1
00,循环就继续工作:指重复执行的语句(循环体)。一条语句,可以是复合语句或空语句。如sum = sum + i。改变循环变量:在
每次循环中改变循环变量的值如 i++,以改变循环条件的真假。一旦i > 100,循环结束。指定次数的循环程序设计输入一个正整数n,
求前n项和,即循环n次#include int main(void){ int i, sum; su
m = 0; for ( i = 1; i <= 100; i++ ) s
um = sum + i; printf( “sum = %d\n”, sum); return 0;}例2-7 求
1+2+3+……+n for(i=1; i<=n; i++) sum=sum+i;printf(“Enter n:"
); scanf("%d", &n); Enter n: 100Sum = 5050#include int
main(void){ int i, sum; printf(“Enter n: "); scanf("%d"
, &n); sum = 0; for ( i = 1; i <= n; i++
) sum = sum + i; printf( “sum = %d\n”, sum); return
0;}求1+1/2+1/3+……+ 1/n #include int main(void){ int i;
double sum; printf(“Enter n: "); scanf("%d", &n); su
m = 0; for ( i = 1; i <= n; i++ ) sum
= sum + 1.0/i; printf( “sum = %f\n”, sum); return 0;}求前n项
和,即循环n次,每次累加1项。for (i = 1; i <= n ; i++) sum = sum + item (第i项
) item = 1.0 / (2 i - 1)求 1+1/3+1/5+… 的前n项和#include i
nt main(void){ 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项的值 / su
m = sum + item ; / 累加第i项的值 / } printf ( "sum = %f\n", sum);
return 0;}源程序 求 1+1/3+1/5+… 求前n项和,即循环n次,每次累加1项。for (i = 1; i
<= n ; i++) sum = sum + item (第i项)item = flag 1.0 / denomin
ator denominator = denominator + 2flag = -flag例2-8 求 1-1/3+1/5-…
的前n项和item = flag1.0/(2 i - 1)#include int main(void){
int denominator, flag, i, n; double item, sum; print
f(“Enter n: "); scanf ("%d", &n); flag=1; denomin
ator =1; sum = 0 ; for ( i = 1; i <= n; i++ ) { item = f
lag 1.0/ denominator; / 计算第i项的值 / sum = sum + item
; / 累加第i项的值 / flag = -flag;
/ 准备下一次循环 / denominator =
denominator +2; } printf ( "sum = %f\n", sum); return 0;}例2
-8 源程序n! = 12…nfor (i = 1; i <= n ; i++) product = product
item (第i项)item=i例2-9 求n!product = ?#include int main(v
oid){ int i, n; double product; printf("input n: \n"
); scanf ("%d", &n) ; product=1; / 置阶乘product的初值
为1 / for ( i = 1; i <= n; i++ ) / 循环重复n次,计算n! / pr
oduct = product i ; printf ( "product = %.0f\n", product );
return 0;}例2-9 源程序输入实数x和正整数n,计算xn = x x … xfor (i = 1;
i <= n ; i++) power = power item (第i项)item=?求 xn #include <
stdio.h>int main(void){ 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++ )
/ 循环重复n次,计算x的n次幂 / power = power x; printf( "%0.
f\n", power);}源程序 求 xn 2.5 生成乘方表和阶乘表例2-10 生成乘方表输入一个正整数n,生成一张2的乘方
表,输出20到2n的值,可以调用幂函数计算2的乘方。for (i = 0; i <= n ; i++){ power = p
ow(2, i); /调用幂函数pow(2,i)计算2的i次方/ 输出power的值;}源程序:生成乘方表#incl
ude #include int main(void){ int i, n;
double power; printf("Enter n:"); scanf("%d", &n); f
or (i = 0; i <= n ; i++){ power = pow(2, i); / 调用幂函数pow
(2,i)计算2的i次方 / printf("pow(2,%d)= %.0f\n", i, power);
} return 0;}Enter n: 4pow(2,0)= 1pow(2,1)= 2pow(2,2)= 4pow(2,3)
= 8pow(2,4)= 16 例2-11 生成阶乘表输入一个正整数n,生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double。 for (i = 0; i <= n ; i++){ power = pow(2, i); /调用幂函数pow(2,i)计算2的i次方/ 输出power的值;}for (i = 0; i <= n ; i++){ product = fact(i); / 调用自定义函数fact(i)计算i! / 输出product的值;}源程序:生成阶乘表#include double fact(int n); / 自定义函数的声明 /int main(void){ 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;}Enter n: 30!=11!=12!=23!=6double fact(int n) / 函数首部 /{ int i; double product; product = 1; for (i = 1; i <= n; i++) product = product i; return product; / 将结果回送主函数 /}函数的概念C语言中有两种类型函数标准库函数自定义函数 函数可以做到一次定义、多次调用使用自定义函数的程序框架double fact(int n); / 声明自定义函数,以分号结束 /int main(void){ …… result = fact(i); / 调用自定义函数fact(i)计算i! / ……}/ 定义求 n! 的函数 /
献花(0)
+1
(本文系小磊老师首藏)