C语言程序设计课件word版.docx
- 文档编号:29056946
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:45
- 大小:489.68KB
C语言程序设计课件word版.docx
《C语言程序设计课件word版.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课件word版.docx(45页珍藏版)》请在冰豆网上搜索。
C语言程序设计课件word版
程序设计语言一般分为机器语言、汇编语言和高级语言三大类。
1.机器语言
对于计算机来说,一组机器指令就是程序,称为机器语言程序。
2.汇编语言
为了便于理解与记忆,人们采用能帮助记忆的英文缩写符号(称为指令助记符)来代替机器语言指令代码中的操作码,用地址符号来代替地址码。
3.高级语言
机器语言和汇编语言都是面向机器的语言,一般称为低级语言。
例2.1编写一个C程序,其功能是显示字符串“Howdoyoudo!
”。
其C程序如下:
#include"stdio.h"
main()
{
printf("Howdoyoudo!
\n");
}
下面针对一般的C程序作几点说明:
(1)一个完整的C语言程序可以由多个函数组成,但必须包含一个且只能包含一个名为main的函数(主函数)。
程序总是从main函数开始执行。
(2)在一个C函数模块中,由左右花括号{}括起来的部分是函数体,其中的语句系列实现函数的预定功能。
(3)C程序中的每一个语句必须以“;”结束,但书写格式是自由的。
(4)#include是编译预处理命令,其作用是将双引号或尖括号括起来的文件内容读到该命令的位置处。
(5)在C程序的任何位置处都可以用/*......*/作注释,以提高程序的可读性。
2.2.1整型常量及其变量的定义
1.整型常量
在C语言中,有3种类型的整型常量:
基本整型常量、长整型常量、无符号整型常量。
在C语言中,不管是哪种类型的整型常量,都可以用3种数制表示。
(1)十进制整型常量。
(2)十六进制整型常量。
(3)八进制整型常量。
2.整型变量的定义
在C程序中,用于存放整型数据的变量称为整型变量。
在C语言中,可以定义基本整型、长整型、短整型和无符号整型等4种类型的整型变量。
它们的定义方式如下。
(1)基本整型变量
定义基本整型变量的形式如下:
int变量表列;
(2)长整型
定义长整型变量的形式如下:
long[int]变量表列;
(3)短整型
定义短整型变量的形式如下:
short[int]变量表列;
(4)无符号整型
定义无符号基本整型变量的形式如下:
unsigned[int]变量表列;
①一个类型说明语句可以同时定义多个同类型的变量,各变量之间用逗号“,”分隔。
②用类型说明语句定义的变量只是说明了为这些变量分配了存储空间,以便用于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中(即存储空间中)的值是随机的。
③C语言允许在定义变量的同时为变量赋初值。
④在为整型变量初始化或赋值时,C编译系统自动将被赋数据转换成与相应变量的类型一致。
⑤由于各种整型变量所占的字节数有限,因此,它们所能存放的整数有一定的范围。
实型常量及其变量的定义
1.实型(浮点型)常量
(1)十进制数形式
(2)指数形式(科学记数法)
2.实型变量的定义
在C程序中,用于存放实型数据的变量称为实型变量。
在C语言中,实型变量有单精度与双精度两种。
单精度float双精度double
字符型常量及其变量的定义
1.字符型常量
'\n'换行
'\r'回车
'\b'退格
'\t'制表(横向跳格)
'\''单引号(单撇号)
'\"'双引号(双撇号)
'\ddd'1~3位八进制数所代表的ASCII码字符
'\xhh'1~2位十六进制数所代表的ASCII码字符
'\f'走纸换页
‘\\’反斜杠字符
2.字符型变量的定义
字符型变量的定义方式如下:
char变量表列;
数据的输入与输出应包括以下几项:
①输入(出)的设备
②输入(出)的格式
③输入(出)的内容
格式输出函数
格式输出函数的一般形式如下:
printf(*“格式控制”,输出表);
其中格式控制部分要用一对双撇号括起来,它用于说明输出项目所采用的格式。
1.整型格式说明符
(1)十进制形式
(2)八进制形式
(3)十六进制形式
2.实型格式说明符
如果以十进制数形式输出实型数据,其格式说明符为
%f或%m.nf
如果以指数形式输出实型数据,其格式说明符为
%e或%m.ne
3.字符型格式说明符
字符型数据的格式说明符为
%c或%mc
(1)输出表中各输出项目之间要用“,”分隔。
(2)格式控制中的各格式说明符与输出表中的各输出项目在个数、次序、类型等方面必须一一对应。
(3)格式控制中除格式说明符外的其他字符将按原样输出。
(4)在输出格式说明符中,如果带有宽度说明,则在左边没有数字的位置上用空格填满(即输出的数字是右对齐)。
但如果在宽度说明前加一个负号(-),则输出为左对齐,即在右边补空格。
格式输入函数
格式输入函数的一般形式如下:
scanf(“格式控制”,内存地址表);
1.整型格式说明符
(1)十进制形式
用于输入十进制形式的整型数据。
(2)八进制形式
用于输入八进制形式的整型数据。
(3)十六进制形式
用于输入十六进制形式的整型数据。
2.实型格式说明符
用于输入的单精度实型格式说明符为
%f或%e
用于输入的双精度实型格式说明符为
%lf
3.字符型格式说明符
用于输入的字符型格式说明符为
%c或%mc
赋值运算
赋值运算符为“=”。
赋值表达式为
变量名=表达式
(1)在C语言中,“=”为赋值运算符,而不是等号;
(2)赋值运算符“=”左边必须是变量名,不能是表达式;
(3)赋值运算符“=”两端的类型不一致时,系统将自动进行类型转换。
算术运算
在C语言中,基本的算术运算符有以下几个:
+加法运算符(双目运算符),或正值运算符(单目运算符)。
如x+y,+x。
-减法运算符(双目运算符),或负值运算符(单目运算符)。
如a-3,-x。
*乘法运算符(双目运算符)。
如3*x。
/除法运算符(双目运算符)。
如x/y。
%模余运算符(双目运算符)。
只适用于整型数据,如9%4的值为1,11%3的值为2等。
关系运算
在C语言中,基本的关系运算符有以下6个:
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!
=不等于
结果只有两个:
true或者false
执行intx=2,y=3;后表达式x=(y==3)的值是
(1)
逻辑运算
在C语言中,逻辑常量只有两种:
值非零表示“真”,值为零表示“假”。
其基本的逻辑运算符有以下3个:
&&(逻辑与)两个量都为真时为真
(1),否则为假(0)
||(逻辑或)两个量中只要有一个为真时为真
(1),只有都为假时为假(0)
!
(逻辑非)一个量为真时为假(0),假时为真
(1)
自增++与自减--运算符
增1运算符“++”和减1运算符“--”是两个单目(只有一个运算对象)运算符,它们的运算对象只能是整型或字符型变量。
增1运算符是将运算对象的值增1;减1运算符是将运算对象的值减1。
假设定义变量inta=5;intb;
前缀自增b=++a;//a=6b=6
后缀自增b=a++;//a=6b=5
sizeof运算符
sizeof运算符有以下两种用法:
(1)用于求得表达式计算结果所占内存的字节数。
其一般形式为
sizeof表达式
(2)用于求得某种数据类型的量所占内存的字节数。
其一般形式为
sizeof(类型名)
逗号运算符
逗号“,”是C程序中常见的符号。
在C语言中,逗号除作为分隔符使用外,还可以作为运算符来使用,称为逗号运算符。
逗号表达式的一般形式为
子表达式1,子表达式2,…,子表达式n
在使用逗号运算符(逗号表达式)时,要注意以下几点:
(1)逗号运算符是所有运算符中级别最低的一种运算符。
(2)一个逗号表达式又可以与另一个表达式(可以是逗号表达式,也可以不是逗号表达式)连接成新的逗号表达式。
(3)在许多情况下,使用逗号表达式的目的仅仅是为了得到各个子表达式的值,而并不一定要得到或使用整个逗号表达式的值。
C语言中的宏定义有两种形式:
符号常量定义与带参数的宏定义。
符号常量定义
在C语言中,允许将程序中多处用到的“字符串”定义成一个符号常量。
在C语言中定义符号常量的一般形式如下:
#define符号常量名字符串
①由于C语言中的所有变量名、函数名等都使用小写字母,因此,符号常量名一般用大写字母表示,以便与C语言中的保留关键字相区别。
②C编译系统对定义的符号常量的处理只是进行简单的替换,不作任何语法检查。
③#define是一个命令,而不是语句,因此在行末不能加“;”,并且应独立占一行。
④#define命令一般应出现在程序中函数的外面,其作用域范围是从
#define符号常量名字符串
到
#undef符号常量名(或文件末)
带参数的宏定义
带参数的宏定义的一般形式为
#define宏名(参数表)字符串
其中字符串中应包含在参数表中所指定的参数,并且,当参数表中的参数多于一个时,各参数之间要用逗号分隔。
在使用带参数的宏定义时,应注意以下两个问题。
(1)在使用带参数的宏定义时,一般应将宏定义字符串中的参数都要用括号括起来,否则经过宏展开后,可能会出现意想不到的错误。
(2)在使用带参数的宏定义时,除了应将宏定义字符串中的参数都要用括号括起来,还需要将整个字符串部分也要用括号括起来,否则经过宏展开后,还会可能出现意想不到的错误。
书写一个求最大值的宏定义
#defineMAX(a,b)((a>b)?
(a),(b))
3.1语句与复合语句
在C语言中,一个表达式后面跟随一个分号就构成了一个语句,这种语句称为表达式语句。
在C语言中,分号(;)是表达式语句的终结符,而不是语句之间的分隔符,也就是说,分号是表达式语句的一个组成部分,只不过它位于表达式的后面。
在一个函数体内部,由左、右花括号括起来的语句称为复合语句,它的一般形式为
{说明部分;语句部分;}
3.2if语句
If语句的形式为
if(表达式)语句
这种选择结构的流程图如图3.1所示。
下面对if语句作几点说明:
(1)if语句中的逻辑表达式(即条件)必须要用一对圆括号括起来。
(2)if语句后的语句可以是复合语句。
(3)一个if语句
最后需要强调的是,在使用if语句时,一定要注意逻辑表达式的正确写法,特别是在连续使用多个if语句时更要注意。
3.3if…else结构
在C语言中,if…else结构的语句形式为
if(表达式)语句1
else语句2
下面对if…else结构作以下几点说明:
(1)if…else结构中的语句1与语句2都可以是复合语句。
(2)在if…else结构中,语句1与语句2都可以是空语句。
(3)在if…else结构中,如果在else前面有多个if语句,则else与最近的if配对。
(4)如果有多个if……else结构嵌套如下:
if(表达式1)语句1
else
if(表达式2)语句2
else
…
else
if(表达式n)语句n
else语句n+1
则可简写成
if(表达式1)语句1
elseif(表达式2)语句2
…
elseif(表达式n)语句n
else语句n+1
在if…else结构中,如果语句1与语句2都是单一的赋值语句,并且都是给同一个变量赋值,则可以用条件运算符来进行处理。
下面对条件表达式作几点说明:
(1)条件运算符优先级要比赋值运算符高。
(2)条件运算符的优先级比关系运算符与算术运算符都要低,因此,条件表达式中的“表达式1”、“表达式2”与“表达式3”都不必用括号括起来。
(3)条件运算符的结合方向为“从右到左”。
在C语言中提供了一个直接实现多路分支选择的结构,称为switch结构,其一般形式如下:
switch(表达式)
{case常量表达式1:
语句1
case常量表达式2:
语句2
…
case常量表达式n:
语句n
default:
语句n+1
}
下面对switch结构作几点说明:
(1)switch结构中的表达式、常量表达式1、…、常量表达式n必须是整型或字符型。
这是因为,在switch结构中,其分支数一般是有限的,并且是离散的,因此,其表达式的值也应是有限的,且是离散的。
(2)同一个switch结构中的常量表达式值必须互不相同,否则就会出现矛盾的现象,即对于“表达式”的同一个值对应多种执行方案,这是错误的。
(3)在switch结构中,case与default的顺序可以任意,各case之间的顺序也可以任意。
(4)在执行switch结构时,当执行完某case后的语句后,将顺序执行后面case后的语句,直到遇break语句才退出整个switch结构的执行。
(5)在switch结构中,如果没有default且“表达式”值不等于任何case后常量表达式的值,则直接退出switch结构而转到其后的语句执行。
例3.12计算奖金。
当企业利润P等于或低于0.5万元时,奖金为利润的1%;当0.5<P≤1万元时,超过0.5万元部分的奖金为利润的1.5%,0.5万元以下仍按1%计算;当1<P≤2万元时,1万元以下部分仍按前面的方法计算,超过1万元的部分其奖金按利润的2%计算;当2<P≤5万元时,2万元以下部分仍按前面的方法计算,超过2万元部分的奖金按利润的2.5%计算;当5<P≤10万元时,5万元以下部分仍按前面的方法计算,超过5万元部分的奖金按利润的3%计算;当P>10万元时,10万元以下部分仍按前面的方法计算,超过10万元部分按3.5%计算。
其中P由键盘输入,计算并输出相应的奖金数W。
根据图3.5所示的流程图,用if…elseif结构写出C程序如下:
#include"stdio.h"
main()
{floatp,w;
printf("inputp:
");
scanf("%f",&p);
if(p<=0.0)w=0.0;
elseif(p<=0.5)w=0.01*p;
elseif(p<=1.0)w=0.005+0.015*(p-0.5);
elseif(p<=2.0)w=0.0125+0.02*(p-1.0);
elseif(p<=5.0)w=0.0325+0.025*(p-2.0);
elseif(p<=10.0)w=0.1075+0.03*(p-5.0);
elsew=0.2575+0.035*(p-10.0);
printf("w=%f\n",w);
}
例3.14求解一元二次方程Ax2+Bx+C=0。
相应的C程序如下:
#include"stdio.h"
#include"math.h"
main()
{doublea,b,c,d,x1,x2,p;
printf("inputa,b,c:
");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0.0)
{if(b==0.0)printf("ERR\n");
elseprintf("X=%f\n",-c/b);
}
elseif(b==0.0)
{d=c/a;
if(d<=0.0)
{printf("X1=%f\n",sqrt(-d));
printf("X2=%f\n",-sqrt(-d));
}
else
{printf("X1=+j%f\n",sqrt(d));
printf("X2=-j%f\n",sqrt(d));
}
elseif(c==0.0)
{printf("X1=0.0\n");
printf("X2=%f\n",-b/a);
}
else
{d=b*b-4*a*c;
if(d>=0.0)
{d=sqrt(d);
if(b>0.0)x1=(-b-d)/(2*a);
elsex1=(-b+d)/(2*a);
x2=c/(a*x1);
printf("X1=%f\n",x1);
printf("X2=%f\n",x2);
}
else
{d=sqrt(-d)/(2*a);
p=-b/(2*a);
printf("X1=%f+j%f\n",p,d);
printf("X2=%f-j%f\n",p,d);
}
}
}
4.1.1当型循环结构
当型循环结构的流程图如图4.1所示。
while循环
实现当型循环结构的C语句形式为
while(表达式)循环体语句
功能:
当表达式值≠0时,执行循环体,执行完后继续判断表达式值,只有当表达式值=0时才退出循环。
例4.2从键盘输入各学生成绩,并对90分以上(包括90分)的学生人数进行计数,直到输入的成绩为负为止,最后输出成绩在90分以上的学生人数。
其流程图如图4.3所示。
其中变量count为整型,用于对90分以上的学生人数进行计数。
相应的C程序如下:
#include"stdio.h"
main()
{intcount;
floatgrade;
count=0;
scanf("%f",&grade);
while(grade>=0.0)
{if(grade>=90.0)count=count+1;
scanf("%f",&grade);
}
printf("count=%d\n",count);
}
直到型循环结构
直到型循环结构的流程图如图4.4所示。
do__while循环
do_while循环的执行过程是,首先执行循环体,然后判断条件(即计算逻辑表达式),如果条件满足(即逻辑表达式值为真),则退出循环结构;如果条件不满足(即逻辑表达式值为假),则继续执行循环体。
实现直到型循环结构的C语句形式为
do循环体语句while(表达式);
功能:
先执行循环体,然后判断表达式值,若表达式值≠0,则再次执行循环体,如此循环,直到表达式值=0为止。
例4.3计算并输出下列级数和:
直到某项的绝对值小于为止
相应的流程图如图4.5所示。
其中f用于改变每一项的符号,因为这是一个各项符号相间的级数。
相应的C程序如下:
#include"stdio.h"
main()
{intk;
doublesum,d,f;
sum=1.0;k=1;f=1.0;
do
{k=k+1;f=-f;d=1.0/(k*(k+1));sum=sum+f*d;}
while(d>=1.0e-4);
printf("sum=%lf\n",sum);
}
当型循环结构与直到型循环结构的区别与联系
当型循环结构与直到型循环结构既有共同之处,又有区别。
主要体现在以下几个方面。
(1)在while循环中,其循环体可以一次也不执行(即执行while循环结构的一开始,其条件就不满足)。
(2)不管是while循环结构还是do—while循环结构,在循环体内部必须要有能改变条件(即逻辑表达式值)的语句,否则将造成死循环。
(3)对于有些问题既可以用while循环结构来处理,也可以用do—while循环结构来处理。
(4)不管是while循环结构还是do—while循环结构,其循环体如果包含一个以上的语句,应以复合语句形式出现。
C语言提供的for循环属于当型循环结构,其一般形式为
for(表达式1;表达式2;表达式3)循环体语句(组)
它等价于下列的当型循环结构:
表达式1;
while(表达式2)
{循环体语句
表达式3;
}
下面对for循环语句作几点说明:
(1)在for语句中,三个表达式中的任何一个表达式均可省略,但其中的两个“;”不能省略。
(2)下列两个循环都是死循环:
for(表达式1;;表达式3)循环体
与
for(;;)循环体
因为它们都没有用于判断循环是否结束的条件(即表达式2)。
(3)for循环本质上也是当型循环结构,只不过它对于事先可以确定循环次数的问题特别方便。
(4)在for循环中,循环体也可以是复合语句(即用一对花括号{}括起来的语句组)。
循环的嵌套
所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。
C语言允许循环结构嵌套多层。
循环的嵌套结构又称为多重循环。
例4.6计算并输出10以内(包括10)所有自然数的阶乘值。
即计算1!
,2!
,3!
,4!
,5!
,6!
,7!
,8!
,9!
,10!
。
采用的方法是,对于10以内的每一个自然数分别求它们的阶乘值。
其流程图如图4.7所示。
显然,这是一个二重循环结构。
相应的C程序如下:
#include"stdio.h"
main()
{intn,k;
doubles;
for(n=1;n<=10;n=n+1)
{s=1.0;
for(k=1;k<=n;k=k+1)s=s*k;
printf("%2d!
=%16.7f\n",n,s);
}
}
break语句
C语言中的break语句有以下两个功能:
(1)跳出switch结构;
(2)退出当前循环结构,包括while结构、do…while结构和for循环结构。
continue语句
continue语句的功能是结束本次循环的执行,但不退出循环结构。
下面举两个例子来说明continue语句的使用。
例4.10输出100~200之间所有能被7或9整除的自然数。
相应的C程序如下:
#include"stdio.h"
main()
{intn;
for(n=100;n<=200;n=n+1)
{if(n%7!
=0)&&(n%9!
=0))continue;/*结束本次循环,继续进行下次循环*/
printf("%d\n",n);
}
实际上,上述程序等价于
#include"stdio.h"
main()
{intn;
for(n=100;n<=200;n=n+1)
{if(n%7==0)||(n%9==0))printf("%d\n",n);
}
}
5.1.1函数的概念
在C语言中,函数分为以下两种。
(1)标准库函数
这种函数用户不必定义,但可直接使用。
例如scanf(),printf(),fabs(),sqrt(),exp(),sin(),cos()等都是C语言中常用的库函数。
(2)用户自己定义的函数
这种函数用以解决用户的专门问题,一般由用户自己编写。
例5.1从键盘输入两个正整数m与n(m≥n),求的值(即求)。
其C程序如下:
#incl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 word