《chap02_用c语言编写程序》由会员分享,可在线阅读,更多相关《chap02_用c语言编写程序(34页珍藏版)》请在金锄头文库上搜索。
1、Chap 2 用C语言编写程序 简单程序的一般形式指令int main(void) /函数 语句 2指令n在编译C程序之前,预处理器先行对其编辑n预处理器执行的命令称为指令nExample:#include n /Cs standard I/O library.n指令以#为开头,默认只有一行,结尾无;3函数n数学:函数是根据一个或多个给定参数进 行数值计算的规则nC:函数是一系列组合在一起并且整体命名 的语句集合程序员自行编写的函数编译器提供的库函数n通常需要返回值return x + 1;4main 函数nmain 函数是必须的.nmain函数是特别的,在程序执行时自动被 调用nmain函数
2、 要求返回一个状态码,用0表示 正常退出5语句n语句是程序运行时执行的命令.nC语言规定每条语句都要以分号结尾,复合 语句除外6注释n单行用/ C99/ This is a commentn多行用/* */* This is a comment */ /* Name: pun.cPurpose: Prints a bad pun.Author: K. N. King */7变量与赋值n变量:在程序执行过程中临时存储数据的 单元n类型:用来说明变量存储的数据种类n声明:变量使用之前为编译器所做的描述int height;int height, length, width, volume;n赋值:
3、变量通过赋值方式获得值n初始化:在声明时赋值,未初始化的变量 不可控8变量的声明与使用变量必须先声明,后使用。#include int main(void) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf(“fahr = %d, celsius = %dn“, fahr, celsius); return 0; 一个变量名只能声明一次 变量一般都定义在程序的头上 不能定义在程序的中间或后面应该先赋值,后引用常量n常量:在程序运行过程中,其值不能被改 变 字面值 : 89 A const 类型 常量名=值;
4、 宏定义:#define INCHES_PER_POUND 166 / 名称默认全大写(规范不强制)10标识符n标识符:变量、常量、函数、宏定义、结 构名等实体的命名.n标识符可以含有字母、数字、下划线,但 必须以字母或下划线开头nC语言区分大小写n一般要求变量用小写,多个单词时: current_page currentPagen理论上标识符长度没有限制11关键字n如下不能用于标识符:auto enum restrict* unsigned break extern return void case float short volatile char for signed while con
5、st goto sizeof _Bool* continue if static _Complex* default inline* struct _Imaginary* do int switch double long typedef else register union*C99 onlyn标准库函数名称也要回避12代码书写规范n单个语句可以分开放在多行里.n关键字、标识符、运算符、逗号等后面最 好加一下空格n通过缩进来帮助识别程序嵌套结构n通过空行来划分程序逻辑单元n乱加空格和分行会导致错误n字符串太长怎么办? printf(“To C, or not to C: that is th
6、e question.n“);13printf 函数nprintf 函数用来显示格式串printf(格式串, 表达式1,表达式2, );n格式串包含普通字符和转换说明(以 % 字符开头).n普通字符直接显示,转换说明被变量替代14nExample:int i, j; float x, y;i = 10; j = 20; x = 43.2892f; y = 5527.0f;printf(“i = %d, j = %d, x = %f, y = %fn“, i, j, x, y);nOutput:i = 10, j = 20, x = 43.289200, y = 5527.000000print
7、f 函数n编译器不检查转换说明和字符串是否匹配.太多转换说明: printf(“%d %dn“, i); /* WRONG */太少转换说明: printf(“%dn“, i, j); /* WRONG */顺序不一致:printf(“%f %dn“, i, x); /* WRONG */15转换说明格式n转换说转换说 明标标准格式 %m.pX m (数字,可选,最小字段宽度,当数值所需字符少于m时, m为正右对齐,m为负左对齐) p (数字, 可选,精度,取决于具体说明符) X (说明符,必须).n%10.2f, m is 10, p is 2, and X is f.n数值常用说明符d 十
8、进制e 科学计数法,p指明小数点后的数字个数f 浮点数,p指明小数点后的数字个数g 可以自动转换,可以显示为十进制、浮点数或科学计数法 ,不能用于整数tprintf.c/* Prints int and float values in various formats */#include int main(void) int i;float x;i = 40;x = 839.21f;printf(“|%d|%5d|%-5d|%5.3d|n“, i, i, i, i);printf(“|%10.3f|%10.3e|%-10g|n“, x, x, x);return 0; nOutput:|40|
9、 40|40 | 040| | 839.210| 8.392e+02|839.21 |17转义序列n非打印的(控制)字符 响铃符a 回退符b 换行符n 水平制表符t 显显示nExample printf(“ItemtUnittPurchasentPricetDaten“ ); Item Unit PurchasePrice Date18scanf 函数nscanf 根据特定格式读取输入.scanf(格式串, n格式串包含普通字符(通常没有)和转换 说明(以 % 字符开头).n转换说明被变量替代n转换说明、转义序列与printf用法相同n编译器不检查转换说明和字符串是否匹配19scanf 的匹配
10、过程nscanf 函数调用:scanf(“%d%d%f%f“, n用户录入:1 -20 .3-4.0e3nscanf 把用户输入当作一个连续字符流( 表示换行符 表示空格):1-20.3-4.0e3 ssrsrrrsssrrssssrrrrrr (s = skipped; r = read)n最后一个换行符被忽略.20格式串中的普通字符n空白字符(空格、制表符、换行符等)可 以与输入中任意数量的空白字符匹配,包 括0个n其他字符匹配时, scanf 放弃输入字符继续处理不匹配时,异常退出21addfrac.c/* Adds two fractions */#include int main(v
11、oid) int num1, denom1, num2, denom2, result_num, result_denom;printf(“Enter first fraction: “);scanf(“%d/%d“, printf(“Enter second fraction: “);scanf(“%d/%d“, result_num = num1 * denom2 + num2 *denom1;result_denom = denom1 * denom2;printf(“The sum is %d/%dn“,result_num, result_denom)return 0; 22程序解析
12、分段计算水费要解决的问题:输入计算分段函数输出,并保留2位小数 求ex程序解析求分段函数 #include int main(void) double x, y; printf(“Enter x (x=0):n“); /* 输入提示 */scanf(“%lf“, /* 调用scanf函数输入数据 */if(x =0):9.5f(9.500000)=12.67Enter x (x=0):15f(15.000000)=20.00Enter x (x=0):21.3f(21.300000)=42.75软件测试的基本思想 软件测试 精心设计一批测试用例 输入数据,预期输出结果 ,然后分 别用这些测试用
13、例运行程序,看程序的实际运行结果与预 期输出结果是否一致。input x:2.5f(2.50)=0.4input x:0f(0.00)=0.0if(x != 0)y = 1/x; else y = 0;if(x =0):9.5f(9.500000)=12.67Enter x (x=0):15f(15.000000)=20.00Enter x (x=0):21.3f(21.300000)=42.75常用数学库函数 n库函数C语言处理系统提供事先编好的函数,供用户在 编程时调用。scanf(), printf(), exp()在相应的系统文件(头文件)中定义一些必需的 信息。n#include命令
14、用户调用库函数时,将相应的头文件包含到源程 序中。 例如调用scanf, printf,需要 #include 调用sqrt,需要 #include 常用数学库函数n平方根函数 sqrt(x) n绝对值函数 fabs(x) fabs(-3.56) 的值为3.56n幂函数 pow(x, n) :xn pow(1.1, 2) 的值为1.21(即1.12)n指数函数 exp(x):ex exp(2.3) 的值为e2.3n以e为底的对数函数 log(x):ln x log(123.45) 的值为4.815836n以10为底的对数函数 log10(x):log10x log10(123.45) 的值为2
15、.091491。 计算存款的本息输入存款金额 money、存期 year 和年利率 rate,根据公式计算存款到期时的本息合计 sum(税前),输出时保留2位小数。 sum = money ( 1 + rate)yearsum = money * pow(1 + rate), year)# include # include int main(void) int money, year;double rate, sum; printf(“Enter money:“); scanf(“%d“, printf(“Enter year: “); scanf(“%d“, printf(“Enter rate:“); scanf(“%lf“, sum = money * pow(1 + rate), year); printf(“sum = %.2f“, sum);return 0; Enter money: 1000Enter year: 3Enter rate: 0.025sum = 1076.89scanf(“%d%d%lf“, 结构化程序设计思想n结构化程序设计(Structured Programming)程序设计技术C语言是结构化程序设计语言n强调程序设计的风格和程序结构的规范化,提 倡清晰的结构,其基本思路是将一个复杂问题 的求解过程划分为若干阶段,每个阶段要处理 的问题