版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C语言程序设计》授课班级:计算机B13-123主讲:鞠宏军计算机语言:人和计算机进行交流的一种语言工具。通过计算机语言程序,可以向计算机下达任务,完成特定功能。和英语日语俄语类似:相同:交流的工具不同:单向、计算机之间不能、以程序方式计算机语言经历了从低级到高级的几个发展阶段
机器语言机器指令:以16个二进制组成一条指令,计算机可以直接识别和接收执行。机器语言:这种机器指令的集合。
符号语言(汇编语言):机器语言的助记符高级语言:接近人的自然语言(英语)
程序:是一组计算机能识别和执行的指令序列。每一条指令使计算机执行特定的操作。计算机可以按事先编写好的程序执行各条指令,完成特定任务。第一次课课程简介一、什么是C语言二、为什么要学好C语言三、如何学好C语言四、教材内容简介、课程及实验安排一、C语言简介
C语言是一门近年来,国内外广泛流行的计算机语言工具,她不仅为专业计算机人员所使用,而且为广大非计算机专业人员所喜爱和使用。二、必须要学好C语言我们学习C语言,是为了以后在自己的专业领域或其他方面,能更好地使用计算机,使计算机为自己工作的必然需求;同时也为学习其他更高级的语言或更深入地学习计算机打下良好的基础;三、如何学习好C语言四、教材内容简介、课程及实验安排第一章:C语言概述第二章:算法及算法表示第三章:数据类型、运算符和表达式第四五六章:顺序、选择、循环结构程序设计第七章:数组第八章:函数第九章:预处理命令第十章:指针第十一章:结构体与共用体
第十二章:文件总学时:72学时其中:理论课40学时、上机32学时上机安排:2周四7-8节,3-10,12,14-19周二7-8节基础六第一章C语言概述一、C语言出现的历史背景二、C语言的特点三、简单C语言介绍*
1、C程序的构成
2、函数的构成
3、C源程序的书写格式和特点四、C语言的上机步骤
1、C程序的构成一、简单C语言举例例1.1:输出串“Thisisacprogram.”
1、#include“stdio.h”
2、voidmain()
3、{
4、printf(“Thisisacprogram.”);
5、}
例1.2:求两整数之和
1、#include“stdio.h”
2、voidmain()
3、{
4、inta,b,sum;
5、a=123;
6、b=456;
7、sum=a+b;
8、printf(“sumis%d\n”,sum);
9、}
a,b,sum为变量,必须先定义后使用例1.3:输入两个整数,求出最大数,并输出1、#include“stdio.h”2、voidmain()3、{4、intmax(intx,inty);5、inta,b,c;6、scanf(“%d,%d”,&a,&b);7、c=max(a,b);8、printf(“max=%d”,c);9、}10、intmax(intx,inty)11、{12、intz;13、if(x>y)z=x;14、elsez=y;15、return(z);16、}1、C程序的构成
(1)任何一个C程序都是由一个或若干个函数构成的,用函数来实现特定的功能,函数是C程序的基本单位,C语言是函数式的语言。
(2)每个程序中必须有且只能有一个main主函数。并且一个程序总是从main函数开始执行,而不论main函数在程序中的位置如何。
(3)C程序中的函数分主函数:系统(库)函数:如printf、scanf,需要include包含头文件自定义函数三种2、函数的构成一个函数由函数首部、函数体两部分组成函数首部:包括函数类型函数名(参数类型参数,参数类型参数)注:①参数可以有可以没有,也可以有多个,
②小括号必须有③必须没有分号函数体:由{开始、}结束,函数体内包括数据声明(定义变量、数组类型)和执行语句(由若干语句组成,每个语句最后必须有一个分号,分号是语句的一部分)两部分3、原程序的书写格式和程序风格
(1)C程序书写格式自由,一行可以写几个语句,一个语句也可以写在多行上。为清晰起见,一般一行写一个语句。
(2)为清晰地表现出程序的结构,建议采用锯齿形程序格式
(3)程序中可以用/**/给程序加注释,以增加程序的可读性
(4)C语言区分大小写,语句、变量大部分都小写
第二章算法
一、程序设计步骤二、算法三、算法表示四、结构化程序设计一、程序设计步骤(了解)程序设计一般包括以下几个步骤:1、确定数据结构2、确定算法3、编写代码(程序)4、在机器上调试程序5、整理并写出文档资料
二、算法算法:是指为解决某一问题而采取的确定、有限的方法和步骤算法选用原则:尽量简单易懂、且步骤少。算法特性:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。三、算法表示1、自然语言:2、传统流程图:3、NS流程图:4、伪代码:5、计算机语言:例1:求5!改进S1:设两变量jc=1,i=1S2:当i<=5时,顺序执行s3,否则跳到s5S3:jc*i=>jcS4:i+1=>i,跳转到s2S5:输出jc此处i用于控制循环次数,称为循环变量例1:求5!自然语言表示S1:设一变量jc=1S2:jc*2=>jcS3:jc*3=>jcS4:jc*4=>jcS5:jc*5=>jcS6:输出jc缺点:当求20!时不适用例1:求5!S1:设两变量jc=1,i=1S2:当i<=5时,顺序执行s3,否则跳到s5S3:jc*i=>jcS4:i+1=>i,跳转到s2S5:输出jc扩展求:20!i称为循环变量用于控制循环次数缺点:通俗易懂,但文字冗长,容易出现“歧义性”例1:求5!S1:设两变量jc=1,i=1S2:当i<=5时,顺序执行s3,否则跳到s5S3:jc*i=>jcS4:i+1=>i,跳转到s2S5:输出jc扩展求:20!sum=1+2+…+100传统流程图的缺点:占篇幅较多,跳转太多,不便于阅读例1:求5!扩展求:20!sum=1+2+…+100sum=1+3+5+…99sum=1/1+1/2+1/3+…+1/100sum=1-1/2+1/3-1/4+…+1/99-1/100输入50个成绩,将大于80分的输出三、算法表示1、自然语言:通俗易懂,但文字冗长,容易出现“歧义性”。2、传统流程图:缺点占篇幅较多,跳转太多,不便于阅读。3、NS流程图:(26页图2.24-2.27)完全去掉了流程线,算法的每一步都用一个矩形框来描述,把一个个矩形框按执行顺序连接起来就是一个完整的算法描述。四、结构化程序设计三种基本结构:顺序结构、选择结构、循环结构经证明任何复杂问题,都可分解用以上三种结构组合实现习题一、选择题1.1以下不正确的概念是
A、一个C程序由一个或多个函数组成
B、一个C程序必须包含一个main函数
C、一个在C程序中,只能包含一个源程序文件
D、C程序的每行上可写多条语句1.2下述源程序的书写格式不正确的是
A、一条语句可以写在几行上
B、一行上可以写几条语句
C、分号是语句的一部分
D、函数的首部,其后必须加分号1.3在C语言程序中
A、main函数必须放在程序的开始位置
B、main函数可以放在程序的任何位置
C、main函数必须放置在程序的最后
D、main函数只能出现在库函数之后1.4以下能正确构成C语言程序的是
A、一个或若干个函数,其中main函数是可选的
B、一个或若干个函数,其中必须有一个main函数
C、一个或若干个子程序,其中包括一个主程序
D、由若干个过程组成二、填空题1.5一个C程序是由若干个函数构成的,其中必须有一个()。1.6一个函数由两部分组成:()和()。1.7一个函数体的范围是以()开始,以()结束。1.8一个C语句最少应包含()。1.9块注释部分以()开始,以()结束;行注释已()开始。1.10任何C语言程序都是从()开始执行的。
1:求两整数之和
#include“stdio.h”
voidmain()
{
inta,b,sum;
a=123;
b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
}三、画出以下3题的传统流程图和NS改进流程图2、输入两个整数,求出最大数,并输出#include“stdio.h”voidmain(){
inta,b,c;
scanf(“%d,%d”,&a,&b);
if(a>b)c=a;
elsec=b;
printf(“max=%d”,c);}3、求1+3+5+7+…+99的和第三章数据类型、运算符与表达式
一、C语言数据类型概述二、常量与变量
1、常量与变量的基本概念
2、整型常量与变量
3、实型常量与变量
4、字符常量与变量、字符串常量
5、变量定义与赋值三、数值间的混合运算四、运算符与表达式一、C语言数据类型概述数据类型基本类型构造类型指针类型空类型(void-定义函数时使用)整型实型(浮点型)字符型枚举类型(了解)数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型二、常量与变量1、常量与变量的基本概念常量:在程序运行中其值不能改变的量(常数)分类:普通常量:
整型常量:12、0、-5
实型常量:4.5、-1.23、3.16
字符常量:‘a’、‘A’、‘0’
字串常量:“wangping”、“beijing”符号常量:用一符号代表一个常量(带名字的常量)
例:#definePI3.1415926
#include“stdio.h”#definePI3.1415926/*注意位置*/voidmain(){intr;floats,l,v;scanf(“%d”,&r);s=PI*r*r;l=2*PI*r;v=4.0/3*PI*r*r*r;
printf(“%f,%f,%f”,s,l,v);}好处:简化书写、含义清楚、一改全改注:符号常量命名一般大写,以便和变量区别,位置,分号变量:在程序运行过程中其值可以改变的量,不同时刻可能有不同的值。(变量的两个元素:名、值)变量命名:由用户自由取名,但要遵循以下规则标识符命名规则:
1、只能由英文字母、数字和下划线组成,且第一个字符必须为字母或下划线;
2、不能使用关键字
3、区分大小写
4、尽量直观,见名知意,便于记忆和阅读注:a关键字又称为保留字,C语言中预先规定的具有固定含义的一些单词
b标识符指用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。以下四组用户标识符全部合法的一组是:
AFor
–sub
Case
B
4d
DO
Size
C
f2_g3
IF
abc
D
WORD
void
define2、整型常量与变量整数常量的表示形式:4种
十进制表示:12,-24,36
八进制表示:012,036,-027
十六进制表示:0x12,0xaf
长整型:2L
整型变量:6种,5个关键字
P43页表3.1
整型变量的定义与使用(1)区分:12
012
0x12
12L(2)下列整型常量正确的是0x68,068,0xAE,0xEG,67L2、整型常量与变量整型变量的定义与使用#include“stdio.h”voidmain(){
inta,b,c,d;
longl,k;
shorts;
unsignedintu;
unsignedshortsu;
unsignedlonglu;
a=12;b=-024;u=0x10;
c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);}
3、实型常量与变量实型常量的表示形式:实型变量:P46页表3.2实型变量的定义与使用实型常量默认为double型
#include“stdio.h”voidmain(){
floatx;
doubley;
x=12.7777;
y=1.2e-6;
x=x+1;
y=y+2;
printf(“x=%f,y=%f\n”,x,y);}
4、字符常量与变量、字符串常量字符常量:单引号括起来的单个字符普通字符:转义字符:
(1)’\n’,’\b’,’\r’,’\t’,’\f’
(2)’\\’,’\’’,’\”’
(3)’\141’,’\x61’
字符变量字符数据在内存中的存储字串常量(1)区分
’a’,’\141’,’\x61’(2)区分2和’2’(3)以下字符常量正确的是
’\’,’AB’,’*’,”b”,’\148’
’\6e’,’\x1e’,’\t’,a字符变量的定义与使用#include“stdio.h”voidmain(){
charc1,c2,c3,c4,c5;
c1=‘a’;
c2=‘\n’;
c3=‘\141’;c4=‘\x61’;c5=‘\\’;
printf(“%c%c%c%c%c”,c1,c2,c3,c4,c5);}
3.6、变量定义与赋值
C语言变量必须先定义后使用,既可以在定义的时候直接赋初值,也可以先定义之后再进行赋值。3.7、运算符与表达式1、运算符简介2、算术运算符和算术表达式基本算术运算符、优先级结合性、强制类型转换、自增自减运算符3.8、数值间的混合运算自动从低到高自动进行转换为同一类型强制类型转换练习:
1、设:x=2.5,a=7,y=4.7求:x+a%3*(int)(x+y)%2/4
2、设:a=2,b=3,x=3.5,y=2.5求:(float)(a+b)/2+(int)(x)%(int)y3.9、赋值运算符和赋值表达式赋值运算符、类型转换、复合的赋值运算符、赋值表达式的值3.10、逗号运算符和逗号表达式逗号表达式
1.一般形式表达式1,表达式2,……,表达式n
2.求解过程自左至右,依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。例如:3+6,6+8?
a=3+6,6+8?a?
a=3*5,a*4?
a?
(a=3*5,a*4),a+5?
a?VC++6.0上机步骤上机准备:在D盘创建自己的子目录D:\jhj启动:开始->程序->MicrosoftVisualStudio->VisualC++6.0新建编辑:
在编辑环境中选择,File->New->Files->C++sourceFile并在Location中选择自己新建的D:\jhj在File中输入,创建的程序文件名,如c1.c编译连接:在编辑环境中选择,Build->BuildAll,根据底部窗口信息提示进行调试,直到错误和警告全部为0运行:在编辑环境中选择,Build->Execute…打开、保存、另存为:和Word类似注意:位置,名字,一个文件调完必须关闭之后新建另一个文件第四章顺序程序设计
一、C语句概述二、赋值语句三、输入输出的概念及实现四、字符数据的输入输出五、格式输入输出六、顺序结构程序设计4.1
C语句概述(5类)例1、main()2、{3、inta,b,c;4、scanf(“%d%d”,&a,&b);5、c=max(a,b);6、printf(“%d”,c);7、}11、intmax(intx,inty)12、{13、intz;14、if(x>y)z=x;15、elsez=y;16、return(z);17、}4.2赋值语句4.3输入输出的概念及实现
没有专门的输入输出语句,输入输出功能由函数来实现:
putchar()getchar()
printf()scanf()
puts()gets()
使用以上函数时必须使用include包含stdio.h头文件4.4单个字符的输入输出──getchar()函数putchar()getchar():从键盘输入一个字符,无参数。putchar();输出一个字符到屏幕上,一个参数;如:#include"stdio.h" /*文件包含*/voidmain(){charch;ch=getchar(); /*输入1个字符并赋给ch*/putchar(ch);putchar('\n');}例:从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值。#include"stdio.h"voidmain(){charc1,c2;printf("Inputalowercaseletter:");c1=getchar();putchar(c1);putchar(‘\n’);c2=c1-32; /*将大写字母转换成对应的小写字母*/putchar(c2);}
4.5
格式化输出——printf()函数
printf():按指定的格式显示一个或多个任意类型的数据。一般格式为:printf(格式控制、输出列表);如:printf(“%d%d\n”,a,b);格式控制:可包括格式说明、普通字符、转义字符组成。
1、格式说明:由%和格式字符组成,如%d,%f等,控制数据按指定格式输出。
2、普通字符:即需按原样输出的字符。
3、转义字符:如\n表示回车换行。如:printf(“a=%d\nb=%d\na+b=%d”,a,b,a+b);格式字符:d——以带符号的十进制形式输出输出列表对应的数值(正数不带符号)。
s——输出字符串。
c——以字符的形式输出,只输出一个字符。
f——以小数形式输出单、双精度数,隐含输出6位小数。
e——以指数形式输出单、双精度数,数字部分小数位数为6位,(e02)。
g——选用%f或%e格式输出宽度较短的格式输出,不输出无意义的0
o——以八进制无符号的形式输出整数(不输出前导符0)。
x——以十六进制无符号的形式输出整数(不输出前导符0x)。
u——以无符号十进制形式输出整数。
l——可加在格式符d、o、x、u前面,用于输出长整型数据。
m——数据最小宽度。
.n——对实数,表示输出n位小数(四舍五入);对字符串,表示截取的字符个数;-——输出的数字在域内向左对齐。如:a=1234;b=‘c’;d=123.456;
printf(“%8d”,a);
printf(“%-8d”,a);printf(“%c”,b);
printf(“%d”,a);
printf(“%o”,a);printf(“%d”,b);
printf(“%x”,a);
printf(“%8d”,-a);
printf(“%f”,d);
printf(“%e”,d);
printf(“%8.2f”,d);
printf(“%g”,d);说明:对长整形变量应在doxu前加字母l,即%ld,否则可能出错;一个负整数以%o%x格式输出,不会输出带符号的八进制或十六进制,而将内存单元中的符号位一起按数字输出;输出字串时也可以省略格式符,直接输出字串。格式化输入——scanf()函数
scanf()输入数据。一般格式:scanf(格式控制,地址表列)如scanf(“%d”,&a);
%d表示按十进制整数形式输入数据。用%d%d%d格式输入三个数据时,在两数据间可以空格、回车分隔,不能用逗号分隔。格式字符:
d、c、s、f如:scanf(“%c”,&a);说明:
1、如在格式控制字串中除格式说明还有其他字符,则在输入数据时应输入与这些字符相同的字符。如:scanf(“%d:%d:%d”,&h,&b,&c);要输入:12:23:36scanf(“%d,%d,%d”,&h,&b,&c);要输入:12,23,364.6顺序结构程序设计例10/11/12第四章小结
一、C语句概述(5个)二、赋值语句(功能,区别)三、输入输出的概念及实现(3)四、字符数据的输入输出(getchar,puchar)五、格式输入输出(printf,scanf)六、顺序结构程序设计(简单问题会自己编程序解决)第五章选择结构程序设计一、关系运算符及其表达式二、逻辑运算符和逻辑表达式三、if语句四、条件运算符五、switch语句六、选择结构程序举例5.1
关系运算符及其表达式
1、关系运算符及其优先次序
A.关系运算符
C语言提供6种关系运算符:
<(小于),
<=(小于或等于)
>(大于)
>=(大于或等于)
==(等于)
!=(不等于)注意:双等号“==”与单等号“=”的区别;不等于写法
B.优先级算术运算符<、<=、>、>===、!=赋值运算符
(92页例题)
2、关系表达式
A.关系表达式的概念所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:
a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)
B.关系表达式的值—逻辑值(成立/不成立)(非“真”即“假”)
由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”例如,假设num1=3,num2=4,num3=5,则:
(1)num1>num2的值=0。(2)(num1>num2)!=num3的值=1。(3)num1<num2<num3的值=1。1>2<1从左至右。(4)(num1<num2)+num3的值=6,因为num1<num2的值=1,1+5=6。注:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。5.2逻辑运算及其表达式关系表达式只能描述单一条件,例如“x>=0”。如果需要描述“x>=0”、同时“x<10”,就要借助于逻辑表达式了。如:X>=0&&x<10
1、逻辑运算符
(1)C语言提供三种逻辑运算符:
&& 逻辑与(相当于“同时”)
|| 逻辑或(相当于“或者”)
! 逻辑非(相当于“否定”)例如,下面的表达式都是逻辑表达式:
(x>=0)&&(x<10),(x<1)||(x>5),!(a>b)
2、逻辑运算符运算规则
1)&&:当且仅当两个运算量的值都为“真”时,结果为“真”,否则为“假”。
2)||:只要有一个为真,则结果为真。
3)!:当运算量的值为“真”时,结果为“假”;当运算量的值为“假”时,结果为“真”。例如,假定x=5,则(x>=0)&&(x<10)的值为“真”
(x<-1)||(x>5)的值为“假”。
3、逻辑运算符的运算优先级
(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)→&&(与)→||(或)
(2)与其它种类运算符的优先关系!→算术运算→关系运算→&&→||→赋值运算
4、逻辑表达式
(1)逻辑表达式的概念所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。例如,((year%4==0)&&(year%100!=0))||(year%400==0)就是一个判断一个年份是否是闰年的逻辑表达式。逻辑表达式的值也是一个逻辑值(非“真”即“假”/1或0)。
(2)逻辑量的真假判定──0和非0C语言关系表达式和逻辑表达式的返回值,用整数“1”表示“逻辑真”、用“0”表示“逻辑假”。但在判断一个量“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。
例如,假设num=12,则:!num的值=0
num>=1&&num<=31的值=1
num||num>31的值=1
5、关于逻辑表达式的说明
(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。
(2)在计算逻辑表达式时。对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1>n2)&&(y=n3>n4)”后,x的值变为0,而y的值不变,仍等于1!练习:
inta=5,b=6,c=7,d=8,m=2,n=2;则执行(m=a>b)&&(n=c>d)运算后,m,n的值为:执行(m=a>b)||(n=c>d)运算后,m,n的值为:5.3
if语句和条件运算符
if语句用来判断给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。
if(a>b)printf(“TheMaxis:%d”,a);elseprintf(“TheMaxis:%d”,b);一、if语句的三种形式
1、if(表达式)语句;2、if(表达式)语句1;
else语句2;3、if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;……elseif(表达式n)语句n;else语句n+1;说明:
1、if后表达式可以是关系表达式、逻辑表达式或其他表达式,表达式非0时为真,0时为假。
2、else语句不能单独使用,必须和if配对使用。
3、ifelse后的语句既可以是一个语句,也可以是用{}括起来的复合语句。
4、ifelse后的每一个语句后有一个分号;且只能有一个语句(单语句或复合语句);
5、if语句中可以嵌套一个或多个if语句。如:if()if()语句1;
else语句2;
else
if()语句3;
else语句4;二、条件运算符(条件表达式)
C语言中唯一的一个三目运算符。一般形式为:表达式1?表达式2:表达式3说明:
1、条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值作为整个条件表达式的值。
2、条件运算符优先于赋值运算符:如
max=(a>b)?a:b先求解(a>b)?a:b的值再赋给max。
3、运算结合方向“自右至左”
如a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)练习:假定w、x、y、z、m均为int型变量,有如下程序段
w=1;
x=2;
y=3;
z=4;
m=(w<x)?w:x;
m=(m<y)?m:y;
m=(m<z)?m:z;求m的值五、switch多分支语句一般形式:switch(表达式){case常量表达式1:语句1;
case常量表达式2:语句2;
……
case常量表达式n:语句n;
default:语句n+1;}如:switch(temp)
{case1:printf(“1”);break;
case2:printf(“2”);break;
case3:printf(“3”);break;
default:printf(“error”);
}说明:
1、switch后表达式可以是任何表达式,case后必须是常量;
2、当表达式与某一个case后面的常量表达式相等时,就执行此case后面的语句,若所有case中的常量表达式的值都没有与表达式值匹配的,就执行default后面的语句;
3、每一个case的常量表达式的值必须不相同,否则会出现矛盾;
4、各个case的出现次序不影响执行结果;
5、case后面的常量表达式仅起标号作用。系统一旦找到入口标号,就从此标号开始执行,不在进行标号判断,所以跳出需要加break语句,否则执行后面所有语句;
6、多个case语句可以共用一组执行语句;第六章循环控制控制程序中的一条或一组语句反复执行多次。一、while和dowhile循环二、for循环三、几种循环的比较四、循环的嵌套五、break语句和Continue语句六、程序举例一、while和dowhile循环语句While循环一般形式:
while(表达式)
循环体执行过程:先判断表达式,当表达式为真(非零)时执行循环体,执行完循环体后再判断表达式,直到表达式为假时结束。说明:
1、循环体如果包含一个以上的语句,应该用括号括起来,构成一个复合语句,否则只循环第一个分号语句。
2、在循环体内应有语句使循环趋于结束,否则循环永远执行
3、while循环的基本元素:循环变量初始化、条件表达式、循环体、使循环趋于结束的语句dowhile一般形式:
do
循环体
while(表达式);执行过程:先执行一遍循环体,再判断表达式是否成立,如成立则继续循环,否则结束循环。说明:
1、循环体如果包含一个以上的语句,应该用括号括起来,构成一个复合语句,否则语法错误(只循环第一个分号语句)。
2、在循环体内应有语句使循环趋于结束,否则循环永远执行inti=1,sum=0;do{sum=sum+i;i=i+1;}while(i<=10);printf(“%d,%d”,sum,i);inti,sum=0;scanf(“%d”,&i);while(i<=10){sum=sum+i;i=i+1;}printf(“%d,%d”,sum,i);inti,sum=0;scanf(“%d”,&i);do{sum=sum+i;i=i+1;}while(i<=10);printf(“%d,%d”,sum,i);二、for循环一般形式:
for(表达式1;表达式2;表达式3)循环体;执行过程
1、先求解表达式1的值。
2、求解表达式2的值:若为真执行循环体、执行第3步;若为假结束循环。
3、求解表达式3的值。
4、跳回第2步继续执行。
5、执行for语句后面的语句。inti,sum=0;for(i=1;i<=10;i++){sum=sum+i;}printf(“%d,%d”,sum,i);For语句也可理解为:
for(循环变量赋初值;循环条件;循环变量改变)循环体;即:表达式1:循环变量初始化表达式2:循环条件表达式3:循环变量的改变(+/-)表达式1、表达式2、表达式3共同来控制循环的次数inti=1,sum=0;while(i<=10){sum=sum+i;i=i+1;}printf(“%d,%d”,sum,i);inti,sum=0;for(i=1;i<=10;i++){sum=sum+i;}printf(“%d,%d”,sum,i);说明:
1、表达式1、表达式2、表达式3都可以省略,但分隔表达式的符号不可省略。表达式1省略,则不进行初始化,此时应在for前给循环变量赋初值表达式2省略,则不判断循环条件,循环无终止地进行下去,此时可以在循环体中加break结束循环表达式3省略,则应另外设法使循环趋于结束,可把循环变量变化放在循环体中
表达式1、表达式2、表达式3可以省略其中一个,也可以省略其中两个,或全部同时省略。
2、表达式1和表达式3也可以是和循环变量无关的其他表达式,或逗号表达式。
3、表达式2可以是任意数值和非数值的关系表达式、逻辑表达式或其他表达式。
4、循环体可以是一个语句也可以是几条语句构成的复合语句;循环体可以是和循环变量有关也可以和循环变量无关三、while/dowhile和for循环的区别
循环变量初始化:while和do-while循环,循环变量初始化应该在while和do-while语句之前完成;而for循环,循环变量的初始化可以在表达式1中完成。循环条件:while和do-while循环只在while后面指定循环条件;而for循环可以在表达式2中指定。循环变量修改使循环趋向结束:while和do-while循环要在循环体内包含使循环趋于结束的操作;for循环可以在表达式3中完成。
while和for循环先测试表达式,后执行循环体,而do-while是先执行循环体,再判断表达式。三种基本循环结构一般可以相互替代
for一般用于已知循环次数或循环次数固定的循环,whiledowhile一般用于不知道循环次数,用特定条件控制循环的循环,dowhile循环体至少要执行一次。死循环永远不会退出的循环为死循环for(;;){}while(1){}do{}while(1)四、循环的嵌套一个循环内又包含一个完整的循环结构注意:
1、在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上的正确性
2、内层和外层循环控制变量不应同名,以免造成混乱
3、嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性
4、循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环编程输出如下形式的乘法九九表
将上例输出格式改成如下的下三角格式打印
五、break语句和Continue语句
1、break语句从循环体内跳出,提前结束循环,接着执行循环下面的语句
inti;
for(i=1;i<=10;i++)
{
if(i==5)break;
printf(“%d”,i);
}
printf(“%d”,i);
2、continue语句结束本次循环,即跳过循环体中下面尚未执行的语句,接着执行下一次循环是否执行的判定。
inti;
for(i=1;i<=10;i++)
{
if(i==5)continue;
printf(“%d”,i);
}
printf(“%d”,i);说明:
A、二者区别:continue只结束本次循环,而不是结束整个循环的执行,break是结束循环,不再进行条件判断
B、如果是双层循环,break只能跳出当前层,提前结束本层的循环,不能结束所有循环inti;for(i=1;i<=10;i++){
if(i==5)break;
printf(“%d”,i);}printf(“%d”,i);inti;for(i=1;i<=10;i++){
if(i==5)continue;
printf(“%d”,i);}printf(“%d”,i);voidmain(){
inta,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=5)break;
if(b%3==1){b+=3;continue;}
}
printf(“%d”,a);}六、循环应用结构化程序设计顺序结构选择结构循环结构任何程序均可只用这三种结构综合描述只用这三种结构编制的程序,叫结构化程序一、顺序结构BABA例:根据公式c=5/9(f-32)实现,输入一个华氏温度,输出摄氏温度。main(){floatf,c;printf("pleaseinputhuashiwendu:");scanf("%f",&f);c=5.0/9*(f-32);printf("\nsheshiwendu:%d",c);}二、选择结构BNAY条件PABNY条件P例:猜数游戏:先由计算机“想”一个数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大还是小。#include“stdio.h”#include"stdlib.h“#include“time.h”voidmain(){inti,t;srand(time(NULL))i=rand()%21;printf("pleaseinputthenumber(0-20):");scanf("%d",&t);if(t==i)
printf("right!");else
{
printf("wrong!");
if(t>i)
printf("taidale!");
else
printf("taixiaole!");
}}switch多分支switch(表达式){
case常数1:语句序列1;
case常数2:语句序列2;
…………
default:语句序列3;
}default可以没有,但最好不省略不要忘记break三、循环结构for(表达式1;表达式2;表达式3)
{
语句;}while(表达式)
{
语句;}do
{
语句;
}while(表达式);A条件P条件PA当型循环直到循环例:先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录人猜的次数,以此来反映猜数者“猜”的水平。算法的描述方法流程图与基本控制结构相应的结构化的控制语句if-elseswitch(casebreakdefault)forwhiledo-whilebreakcontinue常用算法,如累加、累乘、统计、穷举、递推、迭代等常用算法求累加、累乘:数据类型的定义初始值计数器(统计):(课后题)统计正数、平均分以上、n个成绩中100~90、89~80、79~70、69~60、<60的人数;输入字符串中字母d的个数设置一个计数变量k:初始化为0,每遇到一次将其加1:k++;前后项之间无关
1m+3m+5m+7m+.…11m
π/4=1-1/3+1/5-1/7+...直到最后一项的绝对值小于10-6为止前后项之间有关
1!+2!+...+20!
x0+x1+x2+x3+.…x10
1+1+2+3+5+8+13+21+...
2/1+3/2+5/3+8/5+13/8+21/13+...
a+aa+aaa+aaaa+aaaaa+....a是一个数字实验指导书第10题穷举法:水仙花数最大公约最小公倍数、例6.9习题6.7递推法:菲泊那数列公约公倍数(辗转相除法)、素数判断循环嵌套:九九表、星塔第七章数组
引入:顺序输入10个整数,并分别按正序、逆序输出。第一节数组的定义和引用一、数组概念:一组同一类型的带有序下标的变量的集合。数组中用一个统一的数组名和下标来唯一地确定数组中的元素。如:inta[10]定义整型数组a,有10个元素。各元素可分别表示为:a[0]、a[1]…a[9]。二、数组定义:一维数组:类型说明符数组名[常量表达式]如:inta[10]定义整型数组a,有10个元素。各元素可分别表示为:a[0]、a[1]…a[9]。二维数组:类型说明符数组名[常量表达式][常量表达式]
如:floatb[4][3]定义单精度型数组b,有4行,每行有3列,共12个元素。各元素可分别表示为:
b[0][0]、b[0][1]、b[0][2]
b[1][0]、b[1][1]、b[1][2]
b[2][0]、b[2][1]、b[2][2]
b[3][0]、b[3][1]、b[3][2]
说明:
1、数组名命名规则和变量名相同,遵循标识符定名规则。
2、数组名后必须使用方括号,不能使用圆括号。
3、定义数组的常量表达式可以是常量或符号常量,但不能是变量。如:intn=5;
inta[n];不正确
#defineM5
inta[M];正确
4、常量表达式表示元素的个数,即数组长度。如:inta[10],b[3][4];表示a数组有10个元素,b数组有3行4列共12个元素,各数组下标均从0开始。
5、二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。
6、三维数组中定义存放和二维类似。如:inta[3][4][5];三、数组的初始化
1、一维数组的初始化①inta[10]={0,1,2,3,4,5,6,7,8,9};②inta[]={0,1,2,3,4,5,6,7,8,9};全部赋初值时可省略长度。③inta[10]={0,1,2,3,4};可对数组部分赋初值,其他默认赋0。④inta[10]={0};数组全部元素值均为零。⑤若对不赋初值,则数组元素取随机值。如在定义时加static则所有元素为0。如:inta[10];各元素值为随机数。
staticinta[10];各元素值为零。三、数组的初始化
2、二维数组的初始化①inta[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};分行给二维数组初始化②inta[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};把所有数据写在一个括号内,按数组排列的顺序对各元素赋初值。③inta[3][4]={{1},{5},{9}};对数组部分赋初值,其他默认赋0。
inta[3][4]={{1},{0,5},{0,0,9}};④inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};如对全部元素都赋初值可省略第一维的长度,但二维的长度不可省
inta[][4]={{0,0,3},{},{0,5}};如分行时也可省略一维长度四、数组元素的引用
C语言规定只能逐个引用数组元素,而不能一次引用整个数组(字符串除外)。一维数组元素的引用形式为数组名[下标表达式]二维数组元素的引用形式为数组名[下标表达式][下标表达式]说明:①数组元素可以出现在任何表达式中,也可被赋值。②下标表达式可以是任何表达式,但表达式的值必须是非负整数。③下标表达式的值应在已定义的数组大小范围内。五、数组应用举例
1、输入10个整数,并分别按输入顺序的正序、倒序显示这10个数。
2、求输入10个整数的平均数,并分别求出高于平均数和低于平均数的个数。
3、用数组处理菲泊那数列
4、查找数组中指定值的下标。
5、求输入数组的最大值、最小值。
6、排序(冒泡法)。
7、杨辉三角。
8、138页,例7.5、7.4。第七章数组第一节数组的定义与引用一、数组的概念二、数组的定义三、数组的初始化四、数组元素的引用五、数组的应用实验作业:程序举例1、2、3、7
第二节字符数组用来存放字符数据的数组是字符数组,字符数组的每一个元素存放一个字符。一、字符数组定义:
charc[10];定义字符数组c,包含10个元素,定义后可以分别为每个数组元素赋值。如:c[0]=‘c’;由于字符型与整型互相通用,因此以上定义也可改为:intc[10];二、字符数组的初始化:
1、charc[4]={‘a’,’b’,’b’};
2、charc[]={‘a’,’b’,’b’,’d’};
3、charc[5][5]={{‘’,’’,’*’},{‘’,’*’,’’,’*’},{’*’,’’,’’,’’,’*’},
{‘’,’*’,’’,’*’},{‘’,’’,’*’}};
4、charc[4]=“abc”;
5、charc[]=“abcd”;或charc[]={“abcd”};三、字符串结束标志字符串存储在字符数组中。存储时系统会在其末尾自动加一个字串结束标志‘\0’。‘\0’是ASCII码为0的字符,称为“空字符”,表示字串到此结束。四、字符数组的输入输出
1、逐个字符输入输出。用格式符“%c”输入或输出一个字符。
2、将整个字符串一次输入或输出。用格式符“%s”输入或输出整个字串。如:printf(“%c”,c[0]);scanf(“%c”,&c[0]);
printf(“%s”,c);scanf(“%s”,c);说明:
1、输出字符不包括结束符‘\0’,如一字串有多个‘\0’则,遇第一个就结束;
2、可以一次输入多个字符或字串。如:scanf(“%c%c%c”,&a[0],&a[1],&a[2]);scanf(“%s%s%s”,a,a1,a2);但后者输入时需以空格分隔。输入项是数组名时,不用加取地址符“&”。
3、字符数组元素赋值时,未赋值元素自动取‘\0’;
4、字符数组中可以包含空格字符,但输入时遇到第一个空格字符时结束.如charc[8]=“abcda”;chara[13];scanf(“%s”,a);运行输入:howaryyou?时只输入了how。五、字串处理函数调用字串处理函数时需用#include<string.h>包含头文件。常用函数:
puts(str)输出字串
gets(str)输入字串
stract(str1,str2)字串连接
strcpy(str1,str2)字串拷贝
strcmp(str1,str2)字串比较
strlen(str)求字串长度
strlwr(str)字串中大写改为小写
strupr(str)字串中小写改为大写六、字符数组程序举例
1、计算输入字符串长度。
2、求输入三个字符串中的最大串,并输出。
3、统计一行字符中的单词个数。
4、两字串连接。
5、两字串比较。复习:第七章数组第一节数组的定义与引用一、数组的概念二、数组的定义与初始化三、数组元素的引用四、数组的应用第二节字符数组for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*使用循环,输入数组元素值*/for(i=0;i<10;i++)
printf(“%d”,a[i]);
/*显示数组元素值*/for(i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
/*求Fibonacci数列*/for(i=0;i<20;i++)
if(a[i]==k)break;
/*从数组中查找k*/第八章函数
C语言是函数式的语言,函数是C语言的基本单位。函数分类:主函数main系统函数,如:printf,scanf,gets,sqrt等自定义函数引入:例1:求4!例2:求3!+4!+7!main(){longi,jc=1;for(i=1;i<=4;i++)
jc=jc*i;printf(“%ld”,jc);}main(){longi,jc,jch=0;jc=1for(i=1;i<=3;i++)
jc=jc*i;jch=jch+jc;jc=1for(i=1;i<=4;i++)
jc=jc*i;jch=jch+jc;jc=1for(i=1;i<=7;i++)
jc=jc*i;jch=jch+jc;printf(“%ld”,jch);}问题:同一程序段重复书写多次,烦琐且容易出错。需求:是否可以把这样的程序段只编写一次,多次调用?解决:把重复书写的程序段独立为函数,在主函数中多次调用!main(){inth=0;h=h+qjc(3);h=h+qjc(4);h=h+qjc(7);printf(“%d”,h);}intqjc(intn){inti,s=1;for(i=1;i<=n;i++)
s=s*i;returns;}一、函数概述
1、函数:是指程序中用来实现一定功能,可以反复调用的、独立的程序段。
2、使用函数的好处:
A、一次编写,反复调用,简化程序的书写、理解。
B、可以控制变量的作用范围,控制任务的规模(一般函数控制在60行以内),模块化,便于多人协作,并且可以使代码段重复利用。
3、函数分类:有参函数和无参函数调用函数时传递参数,函数根据参数动态执行;调用函数时不传递参数,函数执行固定的内容;有返回值和无返回值函数调用执行后,将函数中数据带回给主调函数使用调用执行后,不返回数据,只执行一定的功能
4、函数的执行过程main(){inth=0;h=h+qjc(3);h=h+qjc(4);h=h+qjc(7);printf(“%d”,h);}intqjc(intn){inti,m=1;for(i=1;i<=n;i++)
m=m*i;returnm;}二、函数定义:
1、无参函数定义:类型标识符函数名()voidp(){声明部分;{printf(“Hello!”);}语句部分;}
2、有参函数定义:类型标识符函数名(类型名形参1,类型名形参2,…)
{声明部分;语句部分;}
3、空函数定义:类型标识符函数名()如:voiddummy(){}三、函数参数和函数的值
1、形式参数和实际参数有参函数中,定义函数时函数名后括弧中的变量名为“形式参数”,在调用函数时,函数名后面括弧中的表达式为“实际参数”。①定义函数时指定的形参变量,在未出现函数调用时,不占内存中的存储单元。只有函数被调用时,函数的形参才被分配内存单元。调用结束后,形参所占的内存单元也被释放。②形参只能是变量,而实参可以是任何具有确定值常量、变量或表达式。调用时将实参的值赋给形参,(如实参是数组名,则传递的是数组首地址而不是变量的值)。③定义函数时,必须指定形参类型。调用函数时,实参与形参的个数应一样、类型应一致。字符型和整型可以互相通用。④函数调用中,实参对形参的数据传递是单向传递,只由实参传给形参,在内存中实参与形参占用不同的单元,调用后实参单元维持原值。四、函数的返回值有些函数调用后可返回一确定值,即函数的返回值。①函数返回值通过函数中的return获得。一般形式为:return(表达式)或return表达式返回表达式的值。②一个函数中可有多个return,但执行到其中一个,就结束该函数的调用。如不需从被调函数带回函数值,可以不要return,函数执行到最后一条语句退出调用函数。③定义函数时需指定返回函数值的类型,如不声明类型则按整型处理。若返回值类型和函数类型不一致,则自动转换以函数类型为准。④为明确函数不带回值,可以用void定义为“无类型”或“空类型”。五、函数的调用
1、调用一般形式:函数名(实参列表);如调用无参函数,则实参列表可以没有,但括弧不能省略。若函数有多参数,则各实参用逗号分隔。实参和形参个数、类型、顺序一一对应传递数据。
2、函数的调用方式:①函数语句printstar();②函数表达式c=2*max(a,b);③函数参数m=max(max(b,c),76);
六、函数声明一个函数调用另一个函数,需要具备如下条件:①被调用函数必须是已经存在的函数(库函数或自定义函数);②如库函数,一般应在文件开头用#include命令包含头文件。格式为:include“stdio.h”或<stdio.h>③如使用自定义的函数,一般还应在文件开头或主调函数中对被调函数类型进行声明。声明形式为:函数类型函数名();函数类型函数名(参数类型1,参数类型2,…,参数类型n);函数类型函数名(参数类型1参数1,参数类型2参数2,…);④以下两种情况可以不必声明:一是函数类型为整形或字符型,系统自动按整型声明;二是被调用函数定义在主调函数之前;⑤函数定义互相平行、独立,即在定义函数时,一个函数中不能包含另一个函数;但调用时可以嵌套调用,一个函数可以调用另一个函数。六、函数应用举例
1、求1!+2!+3!+4!+5!+6!
2、编程实现打印如下图形*******************************
3、编程函数实现判素数七、习题作业
1、实验指导书22页第4题;
2、编程实现:求100以内所有素数的和;
3、编程实现:将100以内所有素数依次放置到数组A[N]中,并输出数组中的各素数。(嵌套调用)一、函数的递归调用定义:在调用一个函数的过程中有出现直接或间接地调用函数本身,称为函数的递归调用。
intfac(intn)
{
intc;
if(n==0||n==1)c=1;
elsec=n*fac(n-1);
returnc;}二、局部变量和全局变量1、局部变量:在一个函数或复合语句内部定义的变量是内部变量,他只在本函数或复合语句范围内有效或使用。说明:①主函数main中定义的变量也只在主函数中有效,不能因为在主函数中定义而在整个文件或程序中有效。②不同函数中可使用相同名字的变量,他们代表不同对象、占用不同单元、互不干扰。③
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2.1塑造地表形态的力量 第二课时 教案-2022-2023学年高中地理人教版(2019)选择性必修1
- 2026山西临汾市浮山县产业集聚区发展服务中心聘请1人考试备考题库及答案详解
- 学习魏书生教育思想报告心得体会(3篇)
- 第二季度职工思想动态分析报告2026(3篇)
- 机械设备维修保养合同3
- 2026年曲靖市麒麟区工会人员招聘考试参考题库及答案详解
- 2026年大同市矿区医疗系统事业编人员招聘笔试参考题库及答案详解
- 2026年阜新市清河门区工会人员招聘考试备考题库及答案详解
- 2026年铜仁地区铜仁市政务服务中心(窗口人员)招聘考试模拟试题及答案详解
- 2026年南宁市西乡塘区工会人员招聘考试参考题库及答案详解
- 2025年广西地区教师事业招聘考试《教育学与教学法基础知识》真题(附答案)
- 2025年北京市事业单位招聘考试教师招聘体育学科专业知识试题
- 2024年湖北省就业援疆专项招聘事业单位工作人员考试真题
- 无陪护病房护理汇报
- 毕业班纪念册 -两篇21
- T/CIQA 26-2021易流态化固体散装货物控制水分含量操作规范
- 超市食品加工管理制度
- 万南片区供水管网更新改造工程(青年水厂片区)施工图设计说明
- 化工厂新员工三级安全培训
- 烟煤胶质层指数测定仪不确定度评定报告
- 高性能沥青路面(Superpave)施工技术规范
评论
0/150
提交评论