C语言程序设计第3章课件.ppt
第第3 3章章 顺序结构程序设计与编译预处理顺序结构程序设计与编译预处理网络信息中心教研室网络信息中心教研室主要内容主要内容 3.2 赋值语句 3.3 输入与输出 3.4 常用函数举例 3.5 编译预处理 3.1 C语句概述 3.6 顺序结构程序设计举例 大学计算机基础2网络信息中心教研室 C语言的语句用来向计算机系统发出指令,单独的一条语句或者是复合语句完成特定的操作,这些操作的不同组合,用来实现一系列数据处理功能。C语言程序是一个由main()体内的若干变量的声明、赋值等操作以及若干函数组成的,没有编译过的程序称为源程序。源程序的某些行称为语句,每个语句的最后有一个半角分号“;”,用来表示语句的结束。用“;”隔开的语句,可以写在同一行,也可以写成几行,但这些语句必须包含在函数体中。3.1 C语句概述语句概述大学计算机基础3网络信息中心教研室3.1 C语句概述语句概述C语言的语句 C语言的语句可以分为5类:表达式语句、函数调用语句、控制语句、复合语句和空语句。1.表达式语句表达式语句例如:m=2;score=math+English;i+;x=10,y=12;2.函数调用语句函数调用语句其一般形式为:函数名(实际参数表);大学计算机基础4网络信息中心教研室3.1 C语句概述语句概述3.控制语句控制语句(1)条件判断语句:if().else./*分支语句*/switch(表达式/变量)./*多分支语句*/(2)循环语句:do.while(条件)/*“先执行,后判断”的“当”型循环*/while(条件)./*“先判断,后执行”的“当”型循环*/for(条件)./*for循环,循环次数相对确定下使用*/(3)流程转向语句goto /*强制程序跳转,不推荐使用*/break /*中止执行switch或者循环*/continue /*结束循环体中的其中一趟*/return /*从函数中返回*/大学计算机基础5网络信息中心教研室3.1 C语句概述语句概述4.复合语句复合语句把多个语句用语句1;语句2;.语句n这种形式构成一个比较复杂的语句称为复合语句,又称为语句块。如两个变量之间数据的交换。此时,应把复合语句看成一个单条语句。例如:if(ab)temp=a;a=b;b=temp;大学计算机基础6网络信息中心教研室3.1 C语句概述语句概述5.空语句空语句 只有“;”号的语句称为空语句.如:for(i=0;i32768;i+);/*空语句,注意它的意义*/大学计算机基础7网络信息中心教研室赋值语句的构成形式赋值语句的构成形式赋值语句是由赋值表达式再加上“;”构成,其一般形式为:其一般形式为:变量=表达式;例如:sum=0;x=y+z;a=b=c=10;连续赋值与赋值运算符的右结合性 而赋值语句允许给多个变量连续赋相同的值,例如:int a,b,c;/*必须在变量声明处定义a,b,c三个变量*/a=b=c=3;/*连续赋值*/3.2 赋值语句赋值语句大学计算机基础8网络信息中心教研室 输入与输出是以计算机为主体而言的。信息从计算机的外部输入设备(键盘、鼠标、移动存储设备等)向计算机输入数据称为输入,计算机向外部设备(显示器、打印机、文件设备等)输出数据称为输出。在C语言中,没有输入/输出语句,所有数据的输入和输出功能是通过一组库函数来实现的,在调用这些输入或输出库函数的时候,需要使用预编译命令#include将有关“头文件”包含到源文件中,这些“头文件”的文件名格式为*.h。3.3 输入与输出输入与输出大学计算机基础9网络信息中心教研室3.4 输入与输出输入与输出 使用标准输入/输出库函数时,要在main()函数所在源文件中包含“stdio.h”文件,因此,源文件的开头经常有以下预编译命令:#include 或#include stdio.h“本小节主要介绍单个字符的输入和输出,格式输入和输出,并简单介绍一下文件操作中的输入和输出,这些函数分别是getchar()、putchar()、printf()和fscanf()、fprintf()。大学计算机基础10网络信息中心教研室3.4 输入与输出输入与输出1 1字符数据的输入与输出字符数据的输入与输出 2 2格式输入与输出格式输入与输出 3 3文件操作中的输入与输出简介文件操作中的输入与输出简介 大学计算机基础11网络信息中心教研室3.4.1 字符数据的输入与输出字符数据的输入与输出函数的一般调用形式为:putchar(ch);ch必须是一个整型变量或一个字符型变量,ch还可以是转义字符常量。例如:putchar(A);/*输出大写字母A*/putchar(97);/*输出小写字母a*/putchar(ch);/*输出字符变量ch的值*/putchar(101);/*输出大写字母A*/putchar(n);/*换行,(执行控制功能,*/单个字符输出函数单个字符输出函数putchar1大学计算机基础12网络信息中心教研室3.4.1字符数据的输入与输出字符数据的输入与输出【程序分析与解答程序分析与解答】#includemain()inti_ch;/*定义整型变量定义整型变量i_ch,这个变量用,这个变量用i代表整型,代表整型,*/i_ch=65;/*65是大写字母是大写字母A的的ASCII码码*/putchar(i_ch);putchar(n);i_ch=97;/*97是小写字母是小写字母a的的ASCII码码*/putchar(i_ch);putchar(n);大学计算机基础13网络信息中心教研室3.4.1字符数据的输入与输出字符数据的输入与输出一般调用形式为:charch;ch=getchar();【程序分析与解答程序分析与解答】#includemain()charch;printf(在此输入任意一个字符并回车:在此输入任意一个字符并回车:n);ch=getchar();putchar(ch);/*回显刚才的输入回显刚才的输入*/putchar(n);利用getchar(),手动控制程序暂停执行。单个字符输入函数单个字符输入函数getchar()2大学计算机基础14网络信息中心教研室3.4.2 格式输入与输出格式输入与输出 printf和scanf函数可以一次输出或者输入若干个任意类型数据,有效解决输入复杂数据的问题,使用时,可以不包含头文件stdio.h。输出函数输出函数printf格式:格式:printf(格式控制字符串格式控制字符串,输出表列输出表列)printf()函数参数的第一部分,由格式字符串和普通字符组成,格式字符串是以“%”开头,在输出表列中,必须有一个变量与这个格式字符相对应;普通字符在输出时按原样输出.格式输出函数格式输出函数printf()()1大学计算机基础15网络信息中心教研室3.4.2格式输入与输出格式输入与输出例如:printf(“总和=%d,平均值=%5.2fn,sum,average);格式字符串 输出表列【程序分析与解答程序分析与解答】#includemain()intch1=77,ch2=78;printf(ch1=%d,ch2=%dn,ch1,ch2);printf(ch1=%c,ch2=%cn,ch1,ch2);printf(%c%cn,ch1,ch2);大学计算机基础16网络信息中心教研室3.4.2格式输入与输出格式输入与输出 格式控制是通过格式字符串来实现的,格式字符串的一般形式为:%标志标志输出最小宽度输出最小宽度.精度精度长度修饰符长度修饰符类型类型 其中,方括号内的项可选,也可以省略,下面就介绍以上6项的使用方法:%:格式字符串的起始符号,不可省。标志:标志字符为+、-、#、空格4种,其意义如下所示:大学计算机基础17网络信息中心教研室3.4.2格式输入与输出格式输入与输出 标志 为+时,输出值为正时在值前补“+”号,为负时值前补“-”号 标志为-时,输出结果左对齐,右边补空格;缺省则输出结果右对齐,左边填空格或零 标志为#时,输出8进制数时加前缀0;输出16进制数时加前缀0 x。输出最小宽度:通常用10进制整数来表示输出数据项的最小位数,若实际位数多于指定位数,则按实际位数输出,若实际宽度少于指定位数,则用空格或0填补。大学计算机基础18网络信息中心教研室3.4.2格式输入与输出格式输入与输出 精度:精度格式以“.”开头,后跟10进制整数,用来指示保留几位小数。长度修饰符:常用的长度修改符为h、l两种,英文字母h表示输出项按短整型数据输出,英文字母l表示输出项按长整型数据输出。类型:类型字符用来表示待输出数据的类型,必须用半角英文字符。格式字符d(或i)ox(或X);u;c;s;f;lf;e(或E);g(或G);%(输出一个%符号)。大学计算机基础19网络信息中心教研室3.4.2格式输入与输出格式输入与输出【例例3-1】数据在内存中的存储与8进制输出。【程序分析与解答程序分析与解答】#include main()unsigned short int a=-1;printf(%d,%on,a,a);输出结果为:65535,177777大学计算机基础20网络信息中心教研室3.4.2格式输入与输出格式输入与输出输入函数输入函数scanf格式格式:scanf(格式控制字符串格式控制字符串,地址表列地址表列)地址表列中给出各变量的地址,地址地址表列中给出各变量的地址,地址是由是由地址运算符地址运算符“&”后跟变量后跟变量组成,但组成,但对字符号串的输入例外。对字符号串的输入例外。格式输入函数格式输入函数scanf()()2大学计算机基础21网络信息中心教研室3.4.3 文件操作中的输入与输出文件操作中的输入与输出fprintf(文件指针,格式字符串,输出表列);fscanf(文件指针,格式字符串,输出表列);大学计算机基础22网络信息中心教研室1.求绝对值函数求绝对值函数(1)intabs(intx);(2)doublefabs(doublex);2.求自然对数值函数求自然对数值函数doublelog(doublex);3.幂函数幂函数doublepow(doublex,doubley);4.求平方根函数求平方根函数doublesqrt(doublex);5.产生随机数函数产生随机数函数intrand(void);3.5 常用函数举例常用函数举例大学计算机基础23网络信息中心教研室3.5 常用函数举例常用函数举例【例例3-2】产生产生10100间的随机整数间的随机整数,并输出。并输出。#include#include#includemain()inta,b;srand(time(0);/*时间作为随便数种子,每运行一次,随机时间作为随便数种子,每运行一次,随机值均不同值均不同*/a=rand()%91+10;/*rand()返回随机整数,该数对返回随机整数,该数对91求余,求余,数据范围是数据范围是0-90*/b=rand()%91+10;/*因为因为rand()是随机的,求余结果亦随机是随机的,求余结果亦随机*/printf(a=%d,b=%dn,a,b);大学计算机基础24网络信息中心教研室3.6 编译预处理编译预处理1 1宏宏定定义义 2 2文件包含文件包含 大学计算机基础25网络信息中心教研室 C语言中常用的预处理功能有两种,分别是宏定义和文件包含。合理使用编译预处理功能编写程序,便于程序阅读、修改、移植和调试,也便于开发小组协同开发程序。C语言中编译预处理命令以“#define”开头,且每行末尾不能加分号。v宏定义宏定义 在源程序中允许用一个标识符来表示一个字符串,称为“宏”。在语言中,“宏”分为有参数和无参数两种。下面分别讨论这两种“宏”的定义和调用。3.6.1 宏定义宏定义大学计算机基础26网络信息中心教研室3.6 编译预处理编译预处理不带参数的宏的一般定义方式为:#define标识符标识符字符串字符串说明:(1)“#define”为宏定义的关键字,“标识符”表示定义的宏名,“标识符”用大写字母,以便区分于变量名或函数名,也可以用小写字母;(2)宏定义的末尾不可以;作为结束,如果不小心加了分号,会将分号一起替换;(3)“字符串”是一个字符系列,对于整型,实型常量可直接书写,对于字符型常量,需要添加单引号,对于字符串常量,需要添加双引号。“字符串”还可以是一个表达式。不带参数的宏定义不带参数的宏定义1大学计算机基础27网络信息中心教研室3.6 编译预处理编译预处理【例例3-14】宏定义中的数据格式宏定义中的数据格式#defineCHc#defineSTRINGProgramming#defineR1/*这是数字这是数字1*/#definePI3.14159#defineL2*PI*R#defineSPI*R*R#includemain()printf(%c,%sn,CH,STRING);printf(L=%f,S=%fn,L,S);输出结果:c,ProgrammingL=6.283180,S=3.141590大学计算机基础28网络信息中心教研室3.6 编译预处理编译预处理 带参数的宏定义不是进行简单的字符串替换,还要进行参数替换。其定义的一般形式为#define宏名宏名(参数表参数表)字符串字符串 字符串中包含在括弧中所指定的参数。如:#define S(a,b)a*barea=S(3,2);定义矩形面积S,a和b是边长。在程序中用了S(3,2),把3、2分别代替宏定义中的形式参数a、b,即用3、2代替S(3,2)。因此赋值语句展开为area=3*2;带参数的宏定义带参数的宏定义2大学计算机基础29网络信息中心教研室3.6 编译预处理编译预处理v【例例3-3】使用带参数宏定义求圆周长。#define PI 3.1415926#define S(r)2*PI*rmain()float a,area;a=3.6;area=S(a);printf(半径=%fn圆面积=%fn,a,area);输出结果:半径=3.600000圆面积=22.619466大学计算机基础30网络信息中心教研室3.6.2 文件包含文件包含 所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含到当前的源文件中。其一般形式为#include“文件名文件名”或#include它的作用是用指定的文件的全部内容来代替当前文件中进行文件包含的那一行内容,如当前源文件中,包含文件#include“myfunc.h”,在编译时,myfunc.h文件中的若干行代码,就会自动替换#include“myfunc.h”然后进行编译。大学计算机基础31网络信息中心教研室【例例3-4】从键盘上输入一个4位的整数,要求分离出它的个、十、百和千位,并倒序输出程序代码如下:#includemain()intx,a,b,c,d;/*abcd分别表示千、百、十、个位分别表示千、百、十、个位*/printf(请输入一个请输入一个4位整数,并回车位整数,并回车:);scanf(%d,&x);d=x%10;/*个位个位*/c=(x%100)/10;/*十位十位*/b=(x%1000)/100;/*百位百位*/a=x/1000;/*千位千位*/printf(%d%d%d%dn,d,c,b,a);3.7 顺序结构程序设计举例顺序结构程序设计举例大学计算机基础32网络信息中心教研室3.7 顺序结构程序设计举例顺序结构程序设计举例【例例3-3-】输入三角形的输入三角形的3边,利用海伦公式求三角形面积,边,利用海伦公式求三角形面积,输入的输入的3个数据能构成三角形。海伦公式如下个数据能构成三角形。海伦公式如下:半周长半周长l=(a+b+c)/2,面积面积s=sqrt(l*(l-a)*(l-b)*(l-c)。#include#includemain()doublea,b,c,l,s;/*abcd分别表示千、百、十、个位分别表示千、百、十、个位*/printf(请输入一个三角形的请输入一个三角形的3条边条边,如如:3,4,5,并回车并回车:);scanf(%lf,%lf,%lf,&a,&b,&c);l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c);printf(海伦公式求面积,海伦公式求面积,s=%.2lfn,s);大学计算机基础33网络信息中心教研室3.7 顺序结构程序设计举例顺序结构程序设计举例例例3-3-求一元二次方程的两个实根。求一元二次方程的两个实根。算法分析算法分析:输入方程系数输入方程系数a、b、c。计算判别式计算判别式d。计算两个实根计算两个实根x1、x2。输出两个实根输出两个实根x1、x2。数据分析数据分析:输入量输入量:方程系数方程系数a、b、c,float中间量中间量:判别式判别式d,float输出量输出量:两个实根两个实根x1、x2,float大学计算机基础34网络信息中心教研室3.7 顺序结构程序设计举例顺序结构程序设计举例includestdio.hincludemath.hmain()floata,b,c;floatd;floatx1,x2;printf(请输入方程系数请输入方程系数a、b、c:);scanf(%f,%f,%f,&a,&b,&c);d=b*b-4*a*c;x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(第一个根第一个根=%5.2fn第二个根第二个根=%5.2fn,x1,x2);输入数据输入数据输入数据输入数据:1,3,-4:1,3,-4运行结果运行结果运行结果运行结果:第一个根第一个根第一个根第一个根=-4.00=-4.00第二个根第二个根第二个根第二个根=1.00=1.00 大学计算机基础35网络信息中心教研室内内内内 容容容容 完完完完 结!结!结!结!大学计算机基础36网络信息中心教研室