C程序设计电子教案_第1页
C程序设计电子教案_第2页
C程序设计电子教案_第3页
C程序设计电子教案_第4页
C程序设计电子教案_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,授课班级:重修(培训)主讲:耿子林,第一次课课程说明一、上课时间第7-14周二的11、12节,地点20308二、上机时间第7-14周三的11、12节,地点基础1三、考试时间第14周,星期六的1、2节,地点待定四、答疑时间:周四的11、12节,地点信息楼主任室五、耿子林老师电话010-61591482六、重修103人,培训25人,年级多,专业多。七、要有信心,学重点,多练习。,六、内容安排第一章:C语言概述(0.2)第二章:算法及算法表示(0.3学时)第三章:数据类型、运算符和表达式(2.5学时)第四五六章:顺序、选择、循环结构程序设计(8学时)第七章:数组(2学时)第八章:函数(2学时)第九章:预处理命令(1学时)第十章:指针(1学时)第十一章:结构体与共用体(1学时)总学时:32学时其中:理论课16学时、上机16学时,第一章C语言概述一、C语言出现的历史背景二、C语言的特点三、简单C语言介绍*1、C程序的构成2、函数的构成3、C源程序的书写格式和特点四、C语言的上机步骤,1、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,c;5、scanf(“%d%d”,8、,9、intmax(intx,inty)10、11、intz;12、if(xy)z=x;13、elsez=y;14、return(z);15、,1、C程序的构成,(1)任何一个C程序都是由一个或若干个函数构成的,用函数来实现特定的功能,函数是C程序的基本单位,C语言是函数式的语言。(2)每个程序中必须有且只能有一个main主函数。并且一个程序总是从main函数开始执行,而不论main函数在程序中的位置如何。(3)C程序中的函数分主函数:系统(库)函数:如printf、scanf,需要include包含头文件自定义函数三种,2、函数的构成,例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,c;5、scanf(“%d%d”,8、,9、intmax(intx,inty)10、11、intz;12、if(xy)z=x;13、elsez=y;14、return(z);15、,2、函数的构成,一个函数由函数首部、函数体两部分组成函数首部:包括函数类型函数名(参数类型参数,参数类型参数)注:参数可以有可以没有,也可以有多个,小括号必须有必须没有分号函数体:由开始、结束,函数体内包括数据声明(定义变量、数组类型)和执行语句(由若干语句组成,每个语句最后必须有一个分号,分号是语句的一部分)两部分,3、源程序的书写格式和程序风格,例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,c;5、scanf(“%d%d”,8、,9、intmax(intx,inty)10、11、intz;12、if(xy)z=x;13、elsez=y;14、return(z);15、,3、原程序的书写格式和程序风格,(1)C程序书写格式自由,一行可以写几个语句,一个语句也可以写在多行上。为清晰起见,一般一行写一个语句。(2)为清晰地表现出程序的结构,建议采用锯齿形程序格式(3)程序中可以用/*/给程序加注释,以增加程序的可读性(4)C语言区分大小写,语句、变量大部分都小写,第二章算法一、程序设计步骤二、算法三、算法表示四、结构化程序设计,一、程序设计步骤(了解)程序设计一般包括以下几个步骤:1、确定数据结构2、确定算法3、编写代码(程序)4、在机器上调试程序5、整理并写出文档资料二、算法算法:是指为解决某一问题而采取的确定、有限的方法和步骤算法选用原则:尽量简单易懂、且步骤少。算法特性:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。,三、算法表示1、自然语言:通俗易懂,但文字冗长,容易出现“歧义性”。2、传统流程图:缺点占篇幅较多,跳转太多,不便于阅读。3、NS流程图:(26页图2.24-2.27)完全去掉了流程线,算法的每一步都用一个矩形框来描述,把一个个矩形框按执行顺序连接起来就是一个完整的算法描述。四、结构化程序设计三种基本结构:顺序结构、选择结构、循环结构经证明任何复杂问题,都可分解用以上三种结构组合实现,小结:第一章C语言概述一、C语言出现的历史背景二、C语言的特点三、简单C语言介绍*1、C程序的构成2、函数的构成3、C源程序的书写格式和特点四、C语言的上机步骤第二章算法一、程序设计步骤二、算法(特点)三、算法表示四、结构化程序设计(三种基本结构),习题一、选择题1.1以下不正确的概念是A、一个C程序由一个或多个函数组成B、一个C程序必须包含一个main函数C、在C程序中,可以只包括一条语句D、main函数体中最后一条语句可以不写分号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.10C语言的主要特点是()。1.11C语言与其他高级语言的主要不同是()。1.12任何C语言程序都是从()开始执行的。,第三章数据类型、运算符与表达式一、C语言数据类型概述二、常量与变量1、常量与变量的基本概念2、整型常量与变量3、实型常量与变量4、字符常量与变量、字符串常量5、变量定义与赋值三、数值间的混合运算四、运算符与表达式,一、C语言数据类型概述,二、常量与变量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”,好处:简化书写、含义清楚、一改全改注:符号常量命名一般大写,以便和变量区别,位置,分号,变量:在程序运行过程中其值可以改变的量,不同时刻可能有不同的值。(变量的两个元素:名、值)变量命名:由用户自由取名,但要遵循以下规则标识符命名规则:1、只能由英文字母、数字和下划线组成,且第一个字符必须为字母或下划线;2、不能使用关键字3、区分大小写4、尽量直观,见名知意,便于记忆和阅读注:a关键字又称为保留字,C语言中预先规定的具有固定含义的一些单词b标识符指用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。,以下四组用户标识符全部合法的一组是:AForsubCaseB4dDOSizeCf2_g3IFabcDWORDvoiddefine,2、整型常量与变量整数常量的表示形式:4种十进制表示:12,-24,36八进制表示:012,036,-027十六进制表示:0 x12,0 xaf长整型:2L整型变量:6种,5个关键字P43页表3.1整型变量的定义与使用,(1)区分:120120 x1212L(2)下列整型常量正确的是0 x68,068,0 xAE,0 xEG,67L,2、整型常量与变量整型变量的定义与使用,#include“stdio.h”voidmain()inta,b,c,d;longl,k;shorts;unsignedu;unsignedshortsu;unsignedlonglu;a=12;b=-024;u=0 x10;c=a+u;d=b+u;/*p54图3-10*/printf(“a+u=%d,b+u=%dn”,c,d);,3、实型常量与变量实型常量的表示形式:实型变量:P46页表3.2实型变量的定义与使用,#include“stdio.h”voidmain()floatx;doubley;x=12.7777;y=1.2e-6;x=x+1;y=y+2;printf(“x=%f,y=%fn”,x,y);,4、字符常量与变量、字符串常量字符常量:单引号括起来的单个字符普通字符:转义字符:(1)n,b,r,t,f(2),”(3)141,x61字符变量charc1,c2字符数据在内存中的存储字串常量,(1)区分a,141,x61(2)区分2和2(3)以下字符常量正确的是,AB,*,”b”,1486e,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语言变量必须先定义后使用,既可以在定义的时候直接赋初值,也可以先定义之后再进行赋值inta,b;a=3;Floatf=3.56;Charc=a;练习Intx,y,z=6;Intx=6,y=6,z=6;Intx=6;y=6;z=6;Intx=y=z=6;,3.7、数值间的混合运算自动从低到高自动进行转换为同一类型;54页图3-103.8、运算符与表达式、运算符简介(+,-,*,/,%,=,!=!,在变量的前、后,练习:1、设:x=2.5,a=7,y=4.7求:x+a%3*(int)(x+y)%2/42、设:a=2,b=3,x=3.5,y=2.5求:(float)(a+b)/2+(int)(x)%(int)y,3.9、赋值运算符和赋值表达式赋值运算符(=)类型转换(以变量类型为准)复合的赋值运算符(+=,-=,*=,/=,%=)a+=3;x*=y+8;x%=3赋值表达式的值a=b=c=5;a=5+(c=6);a=(b=10)/(c=6)上机题目:实验指导书(朱冬梅)实验一,实验二作业教材67页的3.9,3.10,3.12下次上课交来,用单张纸,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.1C语句概述(5类)例1、main()2、3、inta,b,c;4、scanf(“%d%d”,7、,11、intmax(intx,inty)12、13、intz;14、if(xy)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();输出一个字符到屏幕上,一个参数;如:#includestdio.h/*文件包含*/voidmain()charch;ch=getchar();/*输入1个字符并赋给ch*/putchar(ch);putchar(n);,例:从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值。#includestdio.hvoidmain()charc1,c2;printf(Inputalowercaseletter:);c1=getchar();putchar(c1);putchar(n);c2=c1-32;/*将大写字母转换成对应的小写字母*/putchar(c2);,4.5格式化输出printf()函数printf():按指定的格式显示一个或多个任意类型的数据。一般格式为:printf(格式控制、输出列表);如:printf(“%d%dn”,a,b);格式控制:可包括格式说明、普通字符、转义字符组成。1、格式说明:由%和格式字符组成,如%d,%f等,控制数据按指定格式输出。2、普通字符:即需按原样输出的字符。3、转义字符:如n表示回车换行。如:printf(“a=%dnb=%dna+b=%d”,a,b,a+b);格式字符:d以带符号的十进制形式输出输出列表对应的数值(正数不带符号)。s输出字符串。c以字符的形式输出,只输出一个字符。f以小数形式输出单、双精度数,隐含输出6位小数。e以指数形式输出单、双精度数,数字部分小数位数为6位,(e02)。g选用%f或%e格式输出宽度较短的格式输出,不输出无意义的0,o以八进制无符号的形式输出整数(不输出前导符0)。x以十六进制无符号的形式输出整数(不输出前导符0 x)。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”,要输入:12,23,36,4.6顺序结构程序设计例10/11/12,第四章小结一、C语句概述(5个)二、赋值语句(功能,区别)三、输入输出的概念及实现(3)四、字符数据的输入输出(getchar,puchar)五、格式输入输出(printf,scanf)六、顺序结构程序设计(简单问题会自己编程序解决),第五章选择结构程序设计一、关系运算符及其表达式二、逻辑运算符和逻辑表达式三、if语句四、条件运算符五、switch语句六、选择结构程序举例,5.1关系运算符及其表达式1、关系运算符及其优先次序A关系运算符C语言提供6种关系运算符:(大于)=(大于或等于)=(等于)!=(不等于)注意:双等号“=”与单等号“=”的区别;不等于写法B优先级算术运算符、=、!=赋值运算符(92页例题),2、关系表达式A关系表达式的概念所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=b,(ab)=(bc),B关系表达式的值逻辑值(成立/不成立)(非“真”即“假”)由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“逻辑假”例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=0。(2)(num1num2)!=num3的值=1。(3)num121从左至右。(4)(num1=0”、同时“x=0则执行(m=ab)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后表达式可以是关系表达式、逻辑表达式或其他表达式,表达式非时为真,时为假。2、else语句不能单独使用,必须和if配对使用。3、ifelse后的语句既可以是一个语句,也可以是用括起来的复合语句。4、ifelse后的每一个语句后有一个分号;且只能有一个语句(单语句或复合语句);5、if语句中可以嵌套一个或多个if语句。如:if()if()语句;else语句;elseif()语句;else语句;,二、条件运算符(条件表达式)C语言中唯一的一个三目运算符。一般形式为:表达式?表达式:表达式说明:1、条件运算符的执行顺序:先求解表达式,若为非(真)则求解表达式,此时表达式的值作为整个条件表达式的值。若表达式的值为(假),则求解表达式,表达式的值作为整个条件表达式的值。2、条件运算符优先于赋值运算符:如max=(ab)?a:b先求解(ab)?a:b的值再赋给max。3、运算结合方向“自右至左”如ab?a:cd?c:d相当于ab?a:(cd?c:d),练习:假定w、x、y、z、m均为int型变量,有如下程序段w=1;x=2;y=3;z=4;m=(wx)?w:x;m=(my)?m:y;m=(mz)?m:z;求m的值,五、switch多分支语句一般形式:switch(表达式)case常量表达式:语句;case常量表达式:语句;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、在循环体内应有语句使循环趋于结束,否则循环永远执行,二、for循环一般形式:for(表达式1;表达式2;表达式3)循环体;执行过程1、先求解表达式的值。2、求解表达式的值:若为真执行循环体、执行第步;若为假结束循环。3、求解表达式的值。4、跳回第步继续执行。5、执行for语句后面的语句。,For语句也可理解为:for(循环变量赋初值;循环条件;循环变量改变)循环体;即:表达式1:循环变量初始化表达式2:循环条件表达式3:循环变量的改变(+/-)表达式1、表达式2、表达式3共同来控制循环的次数,说明: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)dowhile(1),四、循环的嵌套一个循环内又包含一个完整的循环结构注意:1、在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上的正确性2、内层和外层循环控制变量不应同名,以免造成混乱3、嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性4、循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环,编程输出如下形式的乘法九九表,将上例输出格式改成如下的下三角格式打印,五、break语句和Continue语句1、break语句从循环体内跳出,提前结束循环,接着执行循环下面的语句2、continue语句结束本次循环,即跳过循环体中下面尚未执行的语句,接着执行下一次循环是否执行的判定。说明:A、二者区别:continue只结束本次循环,而不是结束整个循环的执行,break是结束循环,不再进行条件判断B、如果是双层循环,break只能跳出当前层,提前结束本层的循环,不能结束所有循环,六、循环应用,结构化程序设计,顺序结构选择结构循环结构任何程序均可只用这三种结构综合描述只用这三种结构编制的程序,叫结构化程序,一、顺序结构,B,A,B,A,例:根据公式c=5/9(f-32)实现,输入一个华氏温度,输出摄氏温度。main()floatf,c;printf(pleaseinputhuashiwendu:);scanf(%f,二、选择结构,B,N,A,Y,条件P,例:猜数游戏:先由计算机“想”一个数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大还是小。,#include“stdio.h”#includestdlib.h“#include“time.h”voidmain()inti,t;srand(time(NULL)i=rand()%21;printf(pleaseinputthenumber(0-20):);scanf(%d,switch多分支switch(表达式)case常数1:语句序列1;case常数2:语句序列2;default:语句序列3;default可以没有,但最好不省略不要忘记break,三、循环结构,for(表达式1;表达式2;表达式3)语句;while(表达式)语句;do语句;while(表达式);,A,条件P,条件P,A,当型循环,直到循环,例:先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录人猜的次数,以此来反映猜数者“猜”的水平。,算法的描述方法流程图与基本控制结构相应的结构化的控制语句if-elseswitch(casebreakdefault)forwhiledo-whilebreakcontinue常用算法,如累加、累乘、统计、穷举、递推、迭代等,常用算法求累加、累乘:数据类型的定义初始值计数器(统计):(课后题)统计正数、平均分以上、n个成绩中10090、8980、7970、6960、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+.x101+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个整数,并分别按正序、逆序输出。第一节数组的定义和引用一、数组概念:一组同一类型的带有序下标的变量的集合。数组中用一个统一的数组名和下标来唯一地确定数组中的元素。如:inta10定义整型数组a,有10个元素。各元素可分别表示为:a0、a1a9。,二、数组定义:一维数组:类型说明符数组名常量表达式如:inta10定义整型数组a,有10个元素。各元素可分别表示为:a0、a1a9。二维数组:类型说明符数组名常量表达式常量表达式如:floatb43定义单精度型数组b,有4行,每行有3列,共12个元素。各元素可分别表示为:b00、b01、b02b10、b11、b12b20、b21、b22b30、b31、b32,说明:1、数组名命名规则和变量名相同,遵循标识符定名规则。2、数组名后必须使用方括号,不能使用圆括号。3、定义数组的常量表达式可以是常量或符号常量,但不能是变量。如:intn=5;intan;不正确#defineM5intaM;正确4、常量表达式表示元素的个数,即数组长度。如:inta10,b34;表示a数组有10个元素,b数组有3行4列共12个元素,各数组下标均从0开始。5、二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。6、三维数组中定义存放和二维类似。如:inta345;,三、数组的初始化1、一维数组的初始化inta10=0,1,2,3,4,5,6,7,8,9;inta=0,1,2,3,4,5,6,7,8,9;全部赋初值时可省略长度。inta10=0,1,2,3,4;可对数组部分赋初值,其他默认赋0。inta10=0;数组全部元素值均为零。若对不赋初值,则数组元素取随机值。如在定义时加static则所有元素为0。如:inta10;各元素值为随机数。staticinta10;各元素值为零。,三、数组的初始化2、二维数组的初始化inta34=0,1,2,3,4,5,6,7,8,9,10,11;分行给二维数组初始化inta34=0,1,2,3,4,5,6,7,8,9,10,11;把所有数据写在一个括号内,按数组排列的顺序对各元素赋初值。inta34=1,5,9;对数组部分赋初值,其他默认赋0。inta34=1,0,5,0,0,9;inta4=1,2,3,4,5,6,7,8,9,10,11,12;如对全部元素都赋初值可省略第一维的长度,但二维的长度不可省inta4=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,第二节字符数组用来存放字符数据的数组是字符数组,字符数组的每一个元素存放一个字符。一、字符数组定义:charc10;定义字符数组c,包含10个元素,定义后可以分别为每个数组元素赋值。如:c0=c;由于字符型与整型互相通用,因此以上定义也可改为:intc10;,二、字符数组的初始化:1、charc4=a,b,b;2、charc=a,b,b,d;3、charc55=,*,*,*,*,*,*,*,*;4、charc4=“abc”;5、charc=“abcd”;或charc=“abcd”;三、字符串结束标志字符串存储在字符数组中。存储时系统会在其末尾自动加一个字串结束标志0。0是ASCII码为0的字符,称为“空字符”,表示字串到此结束。,四、字符数组的输入输出1、逐个字符输入输出。用格式符“c”输入或输出一个字符。2、将整个字符串一次输入或输出。用格式符“s”输入或输出整个字串。如:printf(“%c”,c0);scanf(“%c”,说明:1、输出字符不包括结束符0,如一字串有多个0则,遇第一个就结束;2、可以一次输入多个字符或字串。如:scanf(“%c%c%c”,运行输入:howaryyou?时只输入了how。,五、字串处理函数调用字串处理函数时需用#include包含头文件。常用函数: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;i10;i+)scanf(“%d”,/*从数组中查找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”或如使用自定义的函数,一般还应在文件开头或主调函数中对被调函数类型进行声明。声明形式为:函数类型函数名();函数类型函数名(参数类型1,参数类型2,参数类型n);函数类型函数名(参数类型1参数1,参数类型2参数2,);,以下两种情况可以不必声明:一是函数类型为整形或字符型,系统自动按整型声明;二是被调用函数定义在主调函数之前;函数定义互相平行、独立,即在定义函数时,一个函数中不能包含另一个函数;但调用时可以嵌套调用,一个函数可以调用另一个函数。,六、函数应用举例1、求1!+2!+3!+4!+5!+6!2、编程实现打印如下图形*3、编程函数实现判素数,七、习题作业1、实验指导书22页第4题;2、编程实现:求100以内所有素数的和;3、编程实现:将100以内所有素数依次放置到数组AN中,并输出数组中的各素数。,(嵌套调用)一、函数的递归调用定义:在调用一个函数的过程中有出现直接或间接地调用函数本身,称为函数的递归调用。intfac(intn)intc;if(n=0|n=1)c=1;elsec=n*fac(n-1);returnc;,二、局部变量和全局变量、局部变量:在一个函数或复合语句内部定义的变量是内部变量,他只在本函数或复合语句范围内有效或使用。说明:主函数main中定义的变量也只在主函数中有效,不能因为在主函数中定义而在整个文件或程序中有效。不同函数中可使用相同名字的变量,他们代表不同对象、占用不同单元、互不干扰。形参也是局部变量,只在本函数中使用。复合语句中的变量,只能在本复合语句中使用,离开复合语句,变量释放内存单元。,、全局变量:在函数外部定义的变量称为外部变量或全局变量,全局变量可以为本文件中的其他函数所共用,有效范围为:从定义变量的位置开始到本源文件结束。全局变量增加了函数间数据联系的渠道,由于同一文件中的所有函数都能引用全局变量的值,因此,若一个函数中改变了全局变量的值,就能影响到其他函数,相当于各个函数间有直接的传递通道。由于函数调用只能返回一个值,有时可利用全局变量增加与函数的联系,从函数得到多个返回值。若全局变量定义在文件开头,则在整个文件范围内都可以使用该变量,如果不在文件开头定义,作用范围只限于定义点到文件结束。如果在定义之前的函数想引用该变量,则应在函数中用关键字extern作“外部变量声明”,表示这些变量是后面定义的外部变量。(externa,b;)同一文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。建议编程是尽量不要使用全局变量。,三、动态存储变量与静态存储变量从变量的作用域角度分,可分为全局变量和局部变量。从变量值的存在时间来分,可分为静态存储变量和动态存储变量。静态存储变量:是指在程序运行期间分配固定的存储空间的方式。全局变量是静态存储变量。动态存储变量:是指在程序运行期间进行动态分配存储空间的方式。函数形参、局部变量、函数调用时的现场保护和返回地址等。,C语言中每一个变量均有两个属性:即数据类型和存储类别。数据类型指整型、字符型等;存储类别指数据在内存中的存储方式,分为静态存储和动态存储。具体又包括自动的:auto:动态局部变量静态的:static:内部静态变量或外部静态变量寄存器的:register:寄存器变量外部的:extern:声明变量是已定义的外部变量所以完整的变量定义形式为:存储类型数据类型变量名如:staticinta;,局部变量:、函数中、动态分配存储空间,称为局部动态变量或自动变量。用auto声明,auto可省略,不写默认为自动存储变量。(以前使用)、有时为使函数中局部变量在函数调用后不消失而保留原值,可定义为局部静态变量。用static加以声明。,说明:局部静态变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放,而自动变量属于动态存储类别,占动态存储区空间,函数调用后释放。对局部静态变量赋初值是在编译时赋初值的,只赋初值一次,以后每次调用函数时不再重新赋初值,而只是保留上次函数调用结束时的值;而对自动变量赋初值,是在函数调用时进行的,每调用一次函数重新给一次初值。如自动变量不赋初值,取随机值,局部静态变量不赋初值取0或空字符。虽局部静态变量在函数调用后仍占存储单元,但由于该变量是局部变量,其他函数不能引用他。,、有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论