已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 用C语言编写程序,2.1 在屏幕上显示 Hello World!2.2 求华氏温度 100F 对应的摄氏温度2.3 计算分段函数2.4 输出华氏摄氏温度转换表2.5 生成乘方表与阶乘表,本章要点,怎样编写程序,在屏幕上显示一些信息?怎样编写程序,实现简单的数据处理,例如将华氏温度转换为摄氏温度?怎样使用 if 语句计算分段函数?怎样用 for 语句求 1+2+100?如何定义和调用函数生成一张乘方表?,2.1 在屏幕上显示Hello World!,例: 在屏幕上显示一个短句:(Ex2-1) Hello World!,/* 显示“Hello World!” */# include void main( ) printf(Hello World! n); ,1. 任何程序都有主函数2. 程序由若干语句组成3. 语句由“ ;”结束,# include void main( ) printf(Programming is fun! n); printf(And Programming in C is even more fun! n);,例: 在屏幕上显示:(Ex2-2) Programming is fun! And Programming in C is even more fun!,2.2 求华氏温度 100F 对应的摄氏温度,摄氏温度C与华氏温度F 的 对应关系: C=(5/9)(F-32),例:求华氏温度 100F 对应的摄氏温度。(Ex2-3) 摄氏温度 C=(5/9)(F-32),#include void main( ) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf(fahr = %d, celsius = %dn, fahr, celsius); ,输出:fahr = 100, celsius = 37,一. 程序解析,变量定义,变量使用,输出结果,二. 常量、变量和数据类型,int celsius, fahr; celsius = 5 * (fahr - 32) / 9;,数据,常量:在程序运行过程中,其值不能被改变,变量:在程序运行过程中,其值可以被改变,数据类型,常量:5 和 9是整型常量(整数),变量:在定义时指定,注意:变量名通常用小写字母;取名一般见名知义,1. 变量的定义,变量定义的一般形式:,类型名 变量名表;,例如:int celsius, fahr; 定义整型变量char c; 定义字符型变量float x; 定义单精度浮点型变量double area, length; 定义双精度浮点型变量 ( double 型数据比 float 精度高,取值范围大 ),说明:,1. 定义变量时要指定变量名和数据类型,类型名 变量名表; int celsius, fahr; float x;double area, length;,2. 变量名代表内存中的一个存储单元 单元中存放该变量的值 该存储单元的大小由变量的数据类型决定,3. C语言中的变量代表保存数据的存储单元 而数学中的变量代表未知数 如:x = x+1,#include void main( ) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf(fahr = %d, celsius = %dn, fahr, celsius); ,注意:一个变量名只能定义一次。 变量一般都定义在程序的头上, 不能定义在程序的中间或后面。,应该先赋值,后引用,2. 变量的引用,变量必须先定义,后使用。,三. 算术运算和赋值运算,fahr = 100; celsius = 5 * (fahr - 32) / 9;,1. 算术运算,双目算术运算符:+ - * / %,算术表达式:用算术运算符将运算对象连接起来的符合C语言语法规则的式子,数学式:(5/9)(F-32),C表达式:5 * (fahr - 32) / 9,数学式:s(s-a)(s-b)(s-c),C表达式: s*(s-a)*(s-b)*(s-c),例如:,注意:,(1) / 整数除整数,得整数,如:1/2 0,9/4 2,5 * (fahr - 32) / 9 ? 5 / 9 * (fahr - 32) ?,(2) % 只能用于整型数据,如: 565,941,10040,(3) 双目运算符两侧操作数的类型要相同,注意:“=” 的左边必须是一个变量,2. 赋值运算,赋值运算符: =赋值表达式:用 = 将一个变量和一个表达式连接起来的式子 变量 = 表达式,例如:fahr = 100; celsius = 5 * (fahr - 32) / 9;,计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量,赋值表达式的值就是左侧被赋值的变量的值,printf(格式控制字符串, 输出参数1, , 输出参数n);,用双引号括起来,表示输出的格式,要输出的数据,四. 格式化输出函数printf(),数据输出可以用格式化输出函数 printf(),#include printf(Hello World! n); printf(fahr = %d, celsius = %dn, fahr, celsius);,printf()函数格式:,输出:fahr = 100, celsius = 37,printf(Hello World! n); printf(fahr = %d, celsius = %dn, fahr, celsius);printf(Hin, fahr);,格式控制字符串:,普通字符:原样输出格式控制说明:按指定的格式输出数据,%,%与数据类型有关,int型 :%dchar型 :%cfloat型、 double型:%f,printf(fahr = %d, celsius = %dn, fahr, celsius);,a=3;b=4;printf(%d%d, a,b);,输出:,可见,双引号中的字符除了格式说明的字符外,其它非格式说明的普通字符按原样输出。,例如:,printf(a=%d,b=%d,a,b);,输出:,3,4,a=,3,b=,4,例如:,int a=5;char c=A; float x=123.456;,printf (%d,%4d,%-4d,a,a,a);,5 , 5 , 5 ,printf (%c,c);,A,printf (%f,x);,1 2 3 . 4 5 6 0 0 0,printf (%8.2f,x);,1 2 3 . 4 6,printf (%s,%4.2s,abcd,abcd);,a b c d , a b,1. printf 函数的格式控制字符串中可以包含转义字符,注意:,2. 用在 % 后面的格式字符才是格式控制符,3. 两个连续的 % 用来输出字符 “ % ”,a=5;printf (result:n%d,a);,5,r e s u l t :,b=10;printf (b=%d%,b);,b = 1 0 %,执行语句 printf (“ _”, 2); 将得到出错信息A%d B%o C%x D%f,printf(“%d” %d%s”, 123, “123”); 输出是 : A)%123”%d123 B )%d”123123 C)%d”123123 D ) 上述语句语法有错,2.3 计算分段函数,一. 程序解析,例1:输入x,求分段函数 f(x) 的值,保留2位小数。 ex x1f(x) = x2-1 x1,要解决的问题:输入计算分段函数求ex输出,并保留2位小数,#include # include void main( ) float x, y; printf(input x: n); /* 输入提示 */ scanf(%f, ,input x:0.5f(0.500000)=1.65,input x:2.4f(2.400000)=4.76,源程序:,数据必须输入吗?,注意区分 = 和=,二. 关系运算,x = 1比较 x 和 1 的大小比较的结果:真 假,当 x 取值0.5时, x = 1的结果是:?当 x 取值1.5时, x = y x != y,关系表达式:用关系运算符将2个表达式连接起来的式子。 如:x =!=,- 小于- 小于或等于- 大于- 大于或等于- 等于- 不等于,优先级,结合方向,优先级相同,优先级相同,从左向右,关系运算符与其它运算符的优先次序:低于算术运算符、高于赋值运算符,如: c a+b - c (a+b) c = a b - c = (ab),关系运算符的优先级和结合方向,表示比较的数学式 C关系表达式x10x10x10x = 10,x = 10x != 10x = 10,判断 x 是否为负数 x 0判断 x 是否不为零 x != 0,运用关系表达式:,用关系表达式描述条件,关系表达式的值是一个逻辑值, 即“真”或“假”,C语言中以 1 代表“真”, 以 0 代表“假”,例如: int i,j,k; i=1; j=2; k=-7;,关系表达式 值,k=j-9=i,1,因此, C语言中关系表达式的结果是 int 类型的 1 或 0,ij,3j5,1,1,注意:关系表达式只能比较两个量之间的关系, 若要表达三个量之间的关系必须使用逻辑表达式,因为 0x 的值不是0就是1,总是10所以 不管x的值是什么,0x10的值总是 1,表达式 00且x10时 表达式为 1 D) 当 x0 或 x0 时 表达式为 0,if (表达式) 语句1else 语句2,if(x =b ) k=0; else k=1; 上述 if 语句等价于 A)k=(a=b)?1:0 B ) k=a=b C ) k=ab D ) 以上均不是,例2:输入x,求分段函数 f(x) 的值,保留1位小数。 1/x x 0f(x) = 0 x = 0,要解决的问题:输入计算分段函数 输出,并保留1位小数,if(x != 0) y = 1/x;else y = 0;,if (表达式) 语句1else 语句2,#include /* 例2*/void main( ) float x, y; printf(input x: n); scanf(%f, ,#include /* 例1*/# include void main( ) float x, y; printf(input x: n); scanf(%f, ,程序(参考例1编写):,#include /* 例2*/void main( ) float x, y; printf(input x: n); scanf(%f, ,input x:2.5f(2.50)=0.4,input x:0f(0.00)=0.0,例2的运行结果:,软件测试时, 精心设计一批测试用例输入数据,预期输出结果 ,然后分别用这些测试用例运行程序,看程序的实际运行结果与预期输出结果是否一致。,input x:2.5f(2.50)=0.4,input x:0f(0.00)=0.0,if(x != 0) y = 1/x;else y = 0;,if(x = 1) y = exp(x);else y = x * x -1;,input x:0.5f(0.500000)=1.65,input x:2.4f(2.400000)=4.76,软件测试的基本思想:,用双引号括起来,表示输入的格式,变量地址,四. 格式化输入函数scanf(),数据输入可以用格式化输入函数 scanf(),#include scanf(%f, ,scanf(格式控制字符串, 输入参数1, , 输入参数n);,scanf()函数格式:,格式控制字符串包括两部分内容:格式控制说明:按指定的格式输入数据,%与数据类型有关,如:int型 :%dfloat型:%fdouble型:%lfchar型: %c普通字符:原样输入,输入: 2.5,scanf(x=%f, ,输入: x=2.5,尽量不要出现普通字符,scanf()函数的格式控制字符串:,例如:scanf(%f, ,注意:,1. scanf函数中使用的是变量的地址,而不是变量名,2. 如果在“格式控制”中包含了其它字符, 输入时必须在相应位置输入这些字符。 如果包含了附加格式说明符“*”, 表示该读入项不赋给相应的变量。,scanf(%d,%d%d%*d%d,输入:1,2 3 4 5,以一个或多个空格分隔或者以回车键或 tab 键分隔,结果:,a=1 b=2 c=3 d=,?,5,3. 用 %c 输入字符时,所有字符(包括空格和转义字符) 都是有效输入,scanf(%c%c%c,输入:a b c,结果:,输入:abc,结果:,c1=a c2=(空格) c3=b,c1=a c2=b c3=c,4. 可以用域宽来指定输入数据的所占的列数,由系统自动按 域宽来截取所需的数据,但是输入数据时不能规定精度。,scanf(%3d%3c,a=123 c=4,输入:12345A,?,scanf(%5.2f,以下叙述中正确的是 A) 输入项可以是一个实型常量,如 scanf(“%f”, 3.5); B) 只有格式控制,没有输入项,也能正确输入数据到内存, 例如 scanf(“a=%d, b=%d” ); C) 当输入一个实型数据时,格式控制部分可以规定小数点的位数。 例如 scanf(“%4.2f ”, ,对于 int i, j; char c; 当输入序列为1dc2 3 4时,执行语句 scanf(“%dd%c%*d%*d%d”, 后 i, j, c 的值分别为:A)1 2 d B)1 2 c C)1 4 d D)1 4 c,int a, b;scanf ( a=%d, b=%d, &a, &b );a,b 输入都是10,则正确的输入是 。A、10 10 B、10, 10 C、a=10 b=10 D、a=10, b=10,int a;float c;则下列哪个输入语句是错误的 A、scanf (”%d, %f”, ,若变量已正确定义,执行语句scanf ( “%d%d%d ”, &k1, &k2, &k3 );_ 是正确的输入。 A203040 B20 30 40 C20, 30 40 D20, 30,40,例:“求华氏温度 100F 对应的摄氏温度”程序的改进。 摄氏温度 C=(5/9)(F-32),#include void main( ) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf(fahr = %d, celsius = %dn, fahr, celsius); ,scanf(%d, ,printf(input fahr: n);,input fahr:100fahr = 100, celsius = 37,五. 常用数学库函数,库函数:,C语言处理系统提供事先编好的函数,供用户在编程时调用。如:scanf(), printf(), exp(),在相应的系统文件(头文件)中定义一些必需的信息,用户调用库函数时,用#include命令将相应的头文件包含到源程序中。,例如调用scanf(), printf(),需要 #include 调用exp(),需要 #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.815836以10为底的对数函数 log10(x):log10xlog10(123.45) 的值为2.091491。,常用数学库函数:,输入存款金额 money、存期 year 和年利率 rate,根据公式计算存款到期时的本息合计sum(税前),输出时保留2位小数。 sum = money ( 1 + rate)year,sum = money * pow(1 + rate), year),例:计算存款的本息,C表达式:,# include # include void main( ) int money, year; double rate, sum; printf(input money, year and rate: n); scanf(%d%d%lf, ,input money, year and rate: 1000 3 0.025sum = 1076.89,程序:,scanf(%d%lf%d , 如何输入?,调用scanf函数输入多个数据:,scanf(%d%d%lf, 输入:1000 3 0.025,用scanf函数输入多个数据时需要多个输入参数和多个格式控制说明输入参数的类型、个数和位置要与格式控制说明一一对应,? scanf(%d%lf%d , ,程序运行时,输入的多个数据之间必须有间隔。,例:输出一张华氏摄氏温度转换表,将华氏温度从 3040F 之间的每一度,分别转换成相应的摄氏温度并输出。,一. 程序解析,fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7 36 2.2 37 2.8 38 3.3 39 3.9 40 4.4,2.4 输出华氏摄氏温度转换表,#include void main( ) int fahr, lower, upper; double celsius; lower = 30; upper = 40; printf(fahr celsiusn);/*温度转换规则:华氏温度从lower到upper,每次增加1F*/ for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7 36 2.2 37 2.8 38 3.3 39 3.9 40 4.4,程序:,例题中for语句的流程:,for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7 36 2.2 37 2.8 38 3.3 39 3.9 40 4.4,for (表达式1;表达式2;表达式3) 循环体语句,特征:3个表达式1条循环体语句,二. for语句 循环语句,作用:实现C语句的重复执行,for语句的下一条语句,真,假,执行过程:,1. 求解表达式1,2. 求解表达式2,如果值为真(非0), 则执行语句部分 如果值为假( 0 ),则结束循环,3. 当表达式2为真时, 在执行了“语句”部分后, 求解表达式3,4. 转到第2步继续执行,for ( 表达式1;表达式2;表达式3 ) 循环体语句,for 语句最常用的形式: for (循环变量赋初值; 循环结束条件; 循环变量增值) 循环体语句,for ( fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,for语句中的循环变量,循环(控制)变量:for语句中,通过改变或判断某个变量的值来控制循环的执行,for ( fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,表达式1:给循环变量赋初值,指定循环的起点。fahr = lower表达式2:给出循环的条件,决定循环的继续或结束。fahr = upper表达式3:设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。fahr+循环体语句:被反复执行的语句,一条语句。,for语句的说明,注意:,1. 当循环变量在 for 语句之前已经赋初值, 那么for 语句 中的“表达式1 ”,可以省略,但是;不能省略,2. 如果“表达式2 ”省略,那么循环无法终止(死循环),3. 如果“表达式3”省略,那么程序中必须要有保证 循环能正常结束的措施,4. 如果三个表达式都省略,那么循环无法终止(死循环),5. “表达式1 ”既可以是设置循环变量初值,也可以是其它表达式 “表达式1”和“表达式3”可以是一个简单的表达式, 也可以是逗号表达式,例如: for ( i=0, j=100 ; i=j; i+, j- ) k=i+j;,6. “表达式2”一般是关系表达式或逻辑表达式,但也可以 是数值表达式或字符表达式,只要其值为非0,就执行循环体,for ( 表达式1 ; 表达式2 ; 表达式3 ) 语句,for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); ,for (fahr = lower ; fahr = upper; fahr = fahr + 1) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius);,for (fahr = lower ; fahr = upper; fahr = fahr + 1) ; celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius);,注意:不要在 for 语句中随意加分号,复合语句 和空语句 ;,?,?,分析:抽取具有共性的算式: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;,例:求 1+2+100,/* 计算1 + 2 + 3 + + 100 */#include void main( ) int i, sum; sum = 0; /* 置累加和sum的初值为0 */ for ( i = 1; i = 100; i+ ) /* 循环重复100次 */ sum = sum + i; /* 反复累加 */ printf( “sum = %dn”, sum); /* 输出累加和 */,for(i=1; i=100; i+) sum=0; sum=sum+i;,sum=5050,sum= ?,源程序:,#include void main( ) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); ,for(i=1; i=100; i+) sum=sum+1.0/i;,int i;double sum;,printf( “sum = %fn”, sum);,例:求 1+1/2+1/3+ 1/100,在1 + 2 + 3 + + 100的基础上编写,初始化:指定循环起点给循环变量赋初值,如i = 1;进入循环之前,设置相关变量的初值,如 sum = 0;条件控制:只要i 100,循环结束,三. 指定次数的循环程序设计,指定次数的循环程序设计应该包含四个部分:(以 1+2+100为例),for ( i=0, j=5; i != j; ) printf ( “%d %d”, i, j ); i=i+1; j=j-1; 循环执行次数 A) 6次 B)3次 C)0次 D)无限次,用 for 循环打印 0 1 2 0 1 2 0 1 2 for ( i=1; i=9 ; i+ ) printf (“ % 2d ” , );,1. ( i+2 ) % 3,或 2. ( i-1 ) % 3,#include void main( ) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum);,for(i=1; i=n; i+) sum=sum+i;,printf(input n: n); scanf(%d, ,例:求 1+2+3+n,分析:输入一个正整数n,求前n项和,即循环n次,/* 1+2+3+n 程序*/#include void main( ) int i, sum; printf(input n: n); scanf(%d, ,/*1+1/2+1/3+ 1/n 程序*/#include void main( ) int i; double sum; printf(input n: n); scanf(%d, ,例:求1+1/2+1/3+ 1/n,注意:1.0 / i,求前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 void main( ) int i, n; double item, sum; printf(input n: n); scanf (%d, ,求前n项和,即循环n次,每次累加1项。for (i = 1; i = n ; i+) sum = sum + item (第i项)item = flag * 1.0 / tt = t + 2flag = -flag,item = flag*1.0/(2 * i - 1)flag = -flag,例:求 1-1/3+1/5- 的前n项和,#include void main( ) int i, n; double item, sum; printf(input n: ); scanf (%d, ,for (i = 1; i = n ; i+) product = product * item (第i项) item=i,product初值 = ?,例:求n! n! = 1*2*n,#include void main( ) int i, n; double product; printf(input n: n); scanf (%d, ,输入实数x和正整数n,计算xn = x * x * * xfor (i = 1; i = n ; i+) power = power * item (第i项)item=?,例:求 xn,#include void main( ) int i, n; double x, power ; printf(input x, n: n); scanf (%lf%d, ,for (i = 0; i = n ; i+) power = pow(2, i); /*调用幂函数pow(2,i)计算2的i次方*/ 输出power的值;,一. 程序解析,2.5 生成乘方表和阶乘表,例1:输入一个正整数n,生成一张2的乘方表,输出20到2n的值,可以调用幂函数计算2的乘方。,#include #include void main( ) int i, n; double power; printf(Enter n:); scanf(%d, ,Enter n: 4pow(2,0)= 1pow(2,1)= 2pow(2,2)= 4pow(2,3)= 8pow(2,4)= 16,程序:,for (i = 0; i = n ; i+) product = fact(i); /* 调用自定义函数fact
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46372-2025飞轮储能电站调试导则
- 蛋白质过敏病的护理
- 2025年黄山市徽城投资集团有限公司招聘11人模拟试卷附答案解析
- 2025下半年广东深圳市坪山区教育局面向2026应届毕业生招聘教师76人备考题库带答案解析
- 2026年网络预约出租汽车驾驶员从业资格考试题库及完整答案1套
- 2026“梦想靠岸”招商银行南宁分行冬季校园招聘备考题库带答案解析
- 2025北京丰台教委第二批人才引进(含博士后出站人员)招聘工作人员23人模拟试卷附答案解析
- 2025国家电投集团水电产业平台公司筹备组人员选聘笔试模拟试卷附答案解析
- 2025广东佛山市技师学院招聘事业编制工作人员18人历年真题汇编带答案解析
- 2026秋季中国电信集团有限公司正式校园招聘历年真题汇编带答案解析
- 企业申请参展书
- 足踝外科运动医学知识讲座
- 2023广西基本医疗保险门诊特殊慢性病药品目录(完整版)
- 2021年QC080000-2017内审检查表【HSPM内部审核查检表】
- 腹膜透析外接短管更换(格式修订版)
- 钢结构桁架吊装安装专项施工方案
- 23S519 小型排水构筑物(带书签)
- 雅思阅读真题Colorblindness
- SL631-637-2012-水利水电工程单元工程施工质量验收评定标准
- 数字媒体技术基础(项目式微课版)PPT全套完整教学课件
- 涉诈风险账户审查表
评论
0/150
提交评论