下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
谭谭浩强《语言程序设计》考点精讲及复习思考情分析及复习介绍第一 C语言概
(1(14第二 算法 (19第三 数据类型、运算符与表达 (33第四章 单的C程序设计第五 择结构程序设
(49(60第六 循环控制 (69第七 数第八 函
(80(99第九 预处理命令 (第十 指针 (第十一 结构体与 (第十二 位运算 (第十三 文件 (考情分析及章节介绍考情分析、复习方课程特知识点众多,不利于,难于掌算法的概念及其表示数据类型、运算符与表达式;程序设计结构;数组函数指针预处理命令结构体、、枚举类型;位运算、位段;文件书写形式类似、功能相近,容易给定以下几组定义,说明其含义:intp;intp;2.intp[n];intp[n];int(p)[n]3.intp();intp();int(p)();关于typedef与#define的相似之处typedefint#defineCOUNT作用:都是用COUNT代表int。但事实上,二者是不同的。#define是在预编译时处理的,只能作简单的字符串替换,而typedef是在编译时处理的,并不是作简单的字符串替换,而是 一个类型。知识点综合运用,难于理#include<stdio.hstructstu{intx;inty;}p;intdt[4]={10,20,30,40};structstua[4]={50,dt0],60,dt1],70,dt2],80,dt3]}11main({p=printf("%d,",++p->x)printf("%d,",(++p)->x)printf("%d\n",++(p->y))}运行情况输出51,60,出题思路:按内容分布、按题型分布探讨按内容分布按知识点的基础内容出例如:针对数据类型、运算符与表达式在C语言中,int、char和short种类型数据在内存中所占用的字节数(D)A.由用户自己定 B.均为2个字C.是任意的 D.由所用机器的机器字长所决定例如:针对函数;在语言程序中,在一个源程序中,main函数的位置(C)语言程序总是从第一个定义的函数开始执在语言程序中,要调用的函数必须在main函数中定语言程序总是从main函数开始执语言程序中的main函数必须放在程序的开始部分例如:针对循环结构;写出下面程序的输出结果(A) {Intn[2]={0},i,j,k=2;(i=0;i<k;i++for(j=0;j<k;j++)n[j]=n[i]+1;Printf(“%d\n”,n[k]);}不确定的B.22C.2D.例如:综合选择结构、自增运算符#include<stdio.h>({intx,scanf(“%d”, &x);if(x++<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“%d”,y)}如果从键盘上输入,则程序的输出是(A)A. B.0 C.1 不确定的值例如:综合选择分支结构、自增运算符;#include<stdio.h>({intx=1,y=0,a=0,b=0;switch(x){caseswitch({case0:a++;case1:b++;}casea++;b++;}printf(“a=%d,b=%d\n” a,b)}33A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=出题思按题型角度:填空题、选择题、程序补充、程序阅读、程序改错、程序设计填空题:描述“一个整数n能被3或7整除”的C语言逻辑表达式 )(n==)||(n==)以下程序的运行结果是(11)。#defineADD(x,y)x+yvoidmain(){printf(“%d\n”,ADD(1,2)ADD(3,4))}按题型角度:知识点的基本内容及综合选择题:单项下列标识符中,(B)是合法的用户定义的标识符A. B.getchC.voidD.以下程序的运行结果是(B)voidmain(){inti=0,j=0,k=if((++i)||(++j>0))k++;printf(“%d,%d,%d\n”,i,j,k);A.0,0,6B.1,0,7C.1,1,7D.0,1,选择题:多下面关于枚举类型的说法正确的是(B、C、D)可以为枚举元素赋枚举元素可以进行比枚举元素的值可以在类型定义时指枚举元素可以作为常量使4程序补充从键盘上输入10个数,求其平均值main({for(i=1,sum=0.0;i<11;i++ scanf("%f",f sum=sum+;;}Printf(“average=%f\n”,sum/10)}scanf("%f",f{sum=sum+以下函数的功能是:把字符串str2接在字符串str1的后面voidfun(charstr1,char{(p1+i)!=‘(p2++)inti=p1=p2=for(;p2;i++)i++(p1+i)=\‘(p2++(p1+i)(p1+i)=‘\0’;}(p1+i)=\‘(p2++程序阅读写出程序的输出结果main({4inta=a+=(a<1)?a:1;printf(“%d”,a); 程序阅读写出程序的输出结果voidmain({inti,b,k=for(i=1;i<=5;i++{b=i%while(b-->=0)k++}printf("%d,%d\n",k,b) 8,-程序改错下面程序用以计算整数阶乘voidmain({inti,n;longnpp;scanf("%d",nnpp=1;i=while(i++<= while(i<=npp=npp npp=npp(i-1)printf("n=%d, =%d\n",n,npp)while(i<=}npp(i-1)程序改错输入一个三位数,分别求这个数的个、十、百位输出void {intt,x,y,scanf("%d",t) scanf(“%d”,tx=t/y=(t-x100)/10;y=(t-x100)%10;z=t%10;printf("x=%d,y=%d,z=%d\n",x,y,z)scanf(“%d”,t}y=(t-x100)%按题型角度:算法及知识点的综合程序设计:课后习题、综合性弱编程输出10至100之间的所有素数编程输出100至999之间的所有水仙花数(水仙花数定义,如:153=,则153为水仙花数设任意含有10个元素的一维数组A和指针变量p,请用指针与数组关系编程输出该数组元素内容。程序设计:综合性假设一个文本文件中保存着100个整数,请将这100个整数从大到小的顺序写到另一个文件中去,并且在新文件中每10个整数占一行。源文件名和目标文件名通过命令行参数获取。#include<stdio.hvoidanintargc,charargv[]{FILEfin,fout;inta[100],i,j,t;If(argc!=3){printf(“Youforgottoenterafilename.\n”)}fin=fopen(argv[1],”r”);fout=fopen(argv[2],”w”);for(i=0;i<100;i++)for(j=0;j<99-i;i++)(a[j]>a[j+{t=a[j];a[j]=a[j+1];a[j+1]=t;复习思从的角度(按章节顺序,较全面)(第一阶段)从考题的角度(抓重点,找遗漏)(第二阶段)从的角度(按章节顺序,较全面)(第一阶段)认真复习每个知识点,掌握C语言规则。例如:针对字符数组和字符指针变字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值charstr[14]str=″IloveChina!而对字符指针变量,可以采用下面方法赋值 a=″IloveChina!″对于容易的知识点,归纳和总有关整型的数据类定含int定义整型变量 p为指向整型数据的指针变intp[n]定义整型数组p,它有n个元intp[n]定指针数组p,它由n个指向整型数据的指针元组成int(p)[n]p为指向含n个元素的一维数组的指针变intp()p为带回整型函数值的函 p()p为带回一个指针的函数,该指针指向整型数int(p)()p为指向函数的指针,该函数返回一个整型 p—个指针变量,它指向一个指向整型数据的指变量培养认真分析的,建立地址分配模型#include<stdio.hstructstu{intx;inty;}p;intdt[4]={10,20,30,40};structstua[4]={50,dt0],60,dt1],70,dt2],80,dt3]}main({p=printf("%d,",++p->x);printf("%d,",(++p)->x);printf("%d\n",++(p->y));}运行情况输出51,60,从考题的角度(抓重点,有遗漏)(第二阶段)主要是出题几率小的知识点。例如:下面符合要求的位段定义是(B)要求:1)a有两位;2)b有两位;3)c有两位;4)d有四位A.struct{unsigneda,b,c:2;unsignedd:4;}B.struct{unsigneda:2,b:2;unsignedc:2,d:4;}C.struct{unsigneda,b,c:6;unsignedd:4;}D.struct{unsigneda,b:4;unsignedc,d:6;}按章节介绍知识点分布重点内容必考;数据类型、运算符与表达式、结构化程序设计、数组、函数、结构体、指针、文件;主要内容算算法的概念、算法的特性、算法的表示用自然语言表示算法用流程图表示算法:基本程序设计结构用流程图表示算法用伪代码表示算数据类型、运算符与表达整型数据:整型常量的表示方法、整型变量、整型常浮点型数据:浮点型常量的表示方法、浮点型变量、浮点型常量字符型数据:字符常量、字符变量、字符串常量各类数值型数据间的混合运算算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达语言程序设计赋值语句数据输入输字符数据输入输出格式输入与输出选择结关系运算符和关系表达式逻辑运算符和逻辑表达if语句:If语句的基本形式、If语句的嵌套、条件运算switch语循环控goto语句以及用goto语句构成循环用while语句实现循环用dowhile语句实现循环用for语句实现循环循环的嵌break语句continue和语数—维数组的定、、初始二维数组的定义、、初始化字符数组的定义、、初始化字符串和字符串结束标志字符数组的输入输出字符串处理函数函函数定义的一般形式、函数参数和函数的返回值函数的调用、函数原型、嵌套调用、递归调用数组作为函数参局部变量和全局变变量的类别:动态方式与静态方式auto变量、用static局部变量、register变量用extern外部变量、用static外部变预处理命宏定义:不带参数的宏定义、带参数的宏定义、带参数的宏和函数的区别“文件包含”处理条件编指地址和指变量的指针和指向变量的指针变量数组与指针字符串与指指向函数的指针、返回指针值的函数指针数组和指向指针的指针void指针类结构体与结构体变量的定义、、初始化结构体数组指向结构体类型数据的指针用指针处理链表共用枚举类用typedef定义类位运位运算符和位运算位段文文件类型指文件的打开与关闭文件的读写文件的定位出错的检文件输入输出复习思路知识点较多、知识点之间可以综合应用,复习难度大按章节顺序、全面掌握知识点,培养综合分析考题的能力;从考题的角度、有重点地针对性地复习。第一 C语言概本章考考点1语言出现的历史背语言是国际上广泛流行的高级语言,语言是在语言的基础上发展起来的B(BCPL)语言是1970年由贝尔设计的,并用于编写了第一个UNIX操作系统,优点:精练,接近硬件;缺点:过于简单,数据无类型。1973年贝尔的D.MRitchie在B语言的基础上设计出C语言,对B取长补短,并用之改写原来用汇编编写的UNIX,但仅在贝尔使用。1975年第6版发布,优点突出引起关注1977年出现《可移植语言编译程序》,推动在各种机器上实现,语言得到推广,其发展相辅相成。1978年影响深远的名著《TheCProgrammingLanguage》由BrianW.Kernighan和DennisM合著,被称为标准C1983年,化(ANSI)根据C语言各种版本对C的发展和扩充,制定了新的标ANSIC,比标准C有了很大的发展1988年,K&R按照ANSIC修改了他们的《TheCProgrammingLanguage》1987年,ANSI新标 87ANSIC1990年,国际标准化组织接受了87ANSIC为ISOC的标准(ISO98991990)1994年,ISO又修订了C语言标准目前,流行的语言编译系统大多是以ANSI为基础进行开发的说明:不同版本的C编译系统所实现的语言功能和语则略有差别,因此了解所用的C语言编译系统的特点。考点2语言的特(1)语言简洁、紧凑,使用方便、灵活。32个关键字、9种控制语句,程序形式(2)运算符丰富。34种运算符(3)数据类型丰富,具有现代语言的各种数据结构(4)具有结构化的控制语句,是完全模块化和结构化的语言(5)语法限制不太严格,程序设计度大(6)允许直接物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。(7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%(8)程序可移植性好。基本上不做修改就能用于各种型号的计算机和系统。考点3简单的C语言程序介绍#include<stdio.h /文件包 voidmain( /主函 函数体开printf("ThisisaCprogram.\n")}
输出语/ 函数体结/说明:main主函数名,void函数类型每个程序必须有一个主函数main{}是函数开始和结束的标志,不可省每个语句以分号结束使用标准库函数时应在程序开头添加:#includestdio.h#include<stdio.hvoidmain( 主函 {intaxintx,inty) 对被调用函数max的*inta,b,scanf(″d,%d″,&a,bc=ax(a,b)printf(″max=%d\\n″,c)intaxintx,int}
义变量a、b、c定入变量a和b的 /用max函数,将得到的输 出c的 调/输
赋给/{intif(x>y)z=x;elsez=y;return(z)}例:求两数之求#include<stdio.h求voidmain( {
数之 inta,b, ,定义变量为整 下 3行为语下a=123;b=sum=a+printf(″sumis%d\n″,sum)}说明:/ …… /表示注释。注释对编译和运行不起作用,可以用汉字或英文字符表示,可以现在一行中的最右侧,也可以单独成为一行。程序(1)C程序是由函数构成的,使程序容易实现模块化(2)一个函数由两部分组成函数的首部:例3中的max函数首intaxintx,inty函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。函数体包括两部分:部分:inta,b,c;可缺省执行部分:由若干个语句组成,可缺省注意:函数的部分和执行部分都可缺省,例如voiddump({}这是一个空函数,什么也不做,但是合法的函数。总结:(1)程序总是从main函数开始执行的,与main函数的位置无关(2)C程序书写格式,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。(3)每个语句和数据的最后必须有一个分号(4)语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。对输入输出实行“函数化”。考点4运行程序的步—、运行程序的步(1)上机输入与编辑源程(2)对源程序进行编(3)与库函数连(4)运行可执行目标程二、上机运行程序的方(1)目前使用的大多数C编译系统都是集成环境(IDE)的。可用不同的编译系统对C程序进操作(2)常用的有TurboC2.0、TurboC++3.0、VisualC+等(3)TurboC++3.0:是一个集成环境,具有方便、直观和易用的界面,虽然是DOS环境下的集成环境,但是可以把启动TurboC++3.0集成环境的DOS执行文件tc.exe生成快捷方式,也可以用鼠标操作。(4)VisualC+:可以用VisualC+对C程序进行编译本章小主要知识点C语言的特点:运算符丰富、模块化和结构化、允许直接物理地址、进行位操作、可移植性好等简单的语言程序:函数、函数的首部、函数体运行程序的步骤:输入与编辑源程序、编译、连接、运行第二 算本章考考点1算法的概—个程序应包括两个方面的内容对数据的描述:数据结构(datastructure)对操作的描述:算法(alithm著名计算机科学家沃思提出一个公式数据结 +算 =程完整的程序设计应该是数据结构算法程序设计方法语言工广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。对同一个问题,可有不同的解题方法和步骤。例如求:n方法1:1,,,一直加到100,加99方法2:100(1)(2)…(49)=+49 加51为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。计算机算法可分为两大类别数值运算算法:求数值解,例如求方程的根、求函数的定积分等非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如检索、人事管理、行调度管理等例1求1步骤1:先求1,得到结果步骤2:将步骤1得到的乘积2再乘以3,得到结果步骤3:将6再乘以4,得步骤4:将24再乘以5,得如果要求1…,则要写999个步可以设两个变量:一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果,算法可改写:S1:使p=2:使i=S3:使pi,乘积仍放在变量p中,可表示为:pipS4:使i的值加1,即ii。S5:如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到的值就是5!的值用这种方法表示的算法具有通用性、灵活性。S3到S5组成一个循环,在实现算法时,要反复多次执行S3,S4,S5等步骤,直到某一时刻,执行S5步骤时经过判断,乘数i已超过规定的数值而不返回S3步骤为止。此时算法结束,变量p的值就是所求结果。例例2有50个学生,要求将成绩在80分以上者打印出来。设n表示学号,n1代表第一个学生学号,ni代表第i个学生学号。用g代表学生成绩,gi代表第i个学生成绩,算法表示如下:S1:1->S2:如果g80则打印ni和gi,否则不打印S3:i+1->S4:如果i50,返回S2,继续执行。否则算法结束变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示已对50个学生的成绩处理完毕,算法结束。例3判定2000~年中的每一年是否闰年,将结果输出分析:闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年;(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。设y为被检测的年份,算法可表示如下S1:2000->S2:若y不能被4整除,则输出y“不是闰年”。然后转到S6S3:若y能被4整除,不能被100整除,则输出y“是闰年”。然后转到S6S4:若y能被100整除,又能被400整除,输出y“是闰年”,否则输出“不是闰年”。然后转到S6。S5:输出y“不是闰年”。S6:y+1->S7:当2500时,转S2继续执行,如y,算法停止例4求1-2
+1-1
+……-
+110算法如下:S1:sign=1S2:sum=1S3:deno=S4:sign=(-1)×signS5:term=sign×(1/deno)S6:sum=sum+termS7:deno=deno+S8:若eo100返回S4,否则算法结束反复执行S4到S8步骤,直到分母大于100为止。一共执行了99次循环,向sum累加入了99个分数。sum最后的值就是多项式的值。例5对一个大于或等于3的正整数,判断它是不是一个素数概念:所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。例如,13是素数。因为它不能被2,3,4,…,12整除。分析:判断一个数n(3是否素数的方法:将n作为被除数,将2到(n)各个整数轮流作为除数,如果都不能被整除,则n为素数。算法如下S1:输入n的S2:i=(i作为除数S3:n被i除,得余数S4:如果r=,表示n能被i整除,则打印n“不是素数”,算法结束。否则执行S5S5:iiS6:如果i≤n,返回S3。否则打印n“是素数”,然后结束实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除,甚至只需被2到 之间的整数除即可。考点2算法的特—个算法应该具有以下特点:有穷性:包含有限的操作步骤。确定性:算法中的每一个步骤都应当是确定的有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息。有一个或多个输出:算法的目的是为了求解,“解”就是输出。有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。考点3算法的表示可以用不同的方法表示算法,常用的有:自然语言传统流程结构化流程图伪代码PAD—、用自然语言表示算自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。二、用流程图表示算化ANSI规定了一些常用的流程图符号:例6将求5!的算法用流程图表例7将例2的算法用流程图表示。打印50名学生中成绩在80分以上者的学号和成绩。例6例8将例3判定闰年的算法用流程图表例9将例4的算法用流程图表例10将例5判断素数的算法用流程图表(图见用流程图表示算总结:流程图是表示算法的较好的工具。一个流程图包括以下几部分(1)表示相应操作的框(2)带箭头的流程线(3)框内外必要的文字说明优点:用流程图表示算法要比用文字描述算法逻辑清晰、易于理解三、三种基本结构和改进的流程传统流程图的弊传统流程图用流程线各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。如图:缺点:难以阅读、修改,使算法的可靠性和可性难以保证解决办法:必须限制箭头的,即不允许无规律地使流程随意转向,只能顺序地进行下去这种如同乱麻一样的算法称为BS型算法,意为一碗面条(ABowlofSpaghetti),乱无头绪三种基本结Bohra和Jacopini提出了以下三种基本结构:顺序结构、选择结构、循环结构用这三种基本结构作为表示一个良好算法的基本单元循环结三种基本结构的共同特点(1)只有一个(2)只有一个出口;(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口。)(3)结构内的每一部分都有机会被执行到(4)结构内不存在“死循环”(无终止的循环)。不正确的流程表示:总结由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。只要具有上述四个特点的都可以作为基本结构。可以自己定义基本结构,并由这些基本结构组成结构化程序。下图符合基本结构的特点:如下是一个多分支选择结构。虚线框内的结构是一个一个出口,并且有上述全部的四个特点。由此构成的算法结构也是结构化的算法。可以认为这是由三种基本结构所派生出来的。(图见四、用流程图表示算1973年,学者I.Nassi和B.Shneiderman提出一种新的流程图形式,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框。这种流程图又称-结构化流程图用三种N-S流程图中的基本框,可以组成复杂的N-S流程图。图中的A框或B框,可以是一个简单的操作,也可以是三个基本结构之一。如下图:A框可以是一个选择结构,B框可以是一个循环结构。例11将例1的求5!算法用图表例12将例2的算法用图表示。(打印50名学生中成绩高于80分的学号和成绩例13将例3判定闰年的算法用图表例14将例4的算法用图表例15将例5判别素数的算法用流程图表流程图不符合基本结构特点!不能分解为三种基本结构,无法直接用N-S流程图的三种基本结构的符号来表示。因此,应当先作必要的变换。(图见用流程图表示算总结:一个结构化的算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转);一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。优点:比文字描述直观、形象、易于理解;比传统流程图紧凑易画。尤其是它了流程线,整个算法结构是由各个基本结构按顺序组成的,流程图中的上下顺序就是执行时的顺序。用N-图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行五、用伪代码表示算概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法特点:如同一篇文章一样,自上而下地写下来。每一行(或几行)表示一个基本操作。不用图形符号,书写方便、格式紧凑,比较好懂,便于向计算机语言算法(即程序)过渡。用处:适用于设计过程中需要反复修改时的流程描述。例:“打印x的绝对值”的算法可以用伪代码表示为:IFxispositiveTHENprint-可以用汉字伪代码表示:若x为正打印否打 -也可以中英文混用例16求5!。用伪代码表示算法开始置t的初值为置i的初值为当i<=,执行下面操作:使t=ti使i=i{循环体到此结束}输出t的值结例 输出50个学生中成绩高于80分者的学号和成绩。用伪代码表示算法BEGIN{算法开始1->iwhilei50{inputandi+1->whilei{ifprintandi->i}END{算法结束}六、用计算机语言表示算概念:用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序特点:用计算机语言表示算法必须严格遵循所用的语言的语则,这是和伪代码不同的用处:要完成一件工作,包括设计算法算法两个部分。设计算法的目的是为了实现算法。例20将例16表示的算法(求5!)用语言表示。#include<stdio.h>voidmain(){inti,i=while(i<=i=i+1;}printf(“%d\n”,t)}应当强调说明写出了程序,仍然只是描述了算法,并未实现算法。只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。考点4结构化程序设计方—个结构化程序:就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和。结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。采取以下方法来保证得到结构化的程序自顶向下;逐步细化模块化设计;结构化编码两种不同的方法自顶向下,逐步细化;自下而上,逐步积累(图见用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。这种方法就叫做“自顶向下,逐步细化”。自顶向下,逐步细化方法的优点考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分无关。模块设计的方法(1)模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单。(2)在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。(3)子模块一般不超过50行(4)划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好本章小主要知识点程序、算法的概念:运算掌握简单的算法举例算法的特性:有穷性、确定性、有效性等算法的表示:用自然语言表示、流程图、流程图、伪代码、三种基本结构的流程图及N-S流程图等结构化程序设计方法:自顶向下、模块化设计第三 数据类型、运算符与表达本章考考点1的数据类语言提供的数据类型:指针类型考点2常量与变—、常量和符号常在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型:例1符号常量的使RICE30#include<stdio.h>voidmain(){第七 数本章考考点1一维数组的定义和数组:是一组具有相同数据类型的数据的有序集合—、一维数组的定定义格式为类型说明符 数组名[常量表达式];例如:inta[10];表示定义了一个整形数组,数组名为a,此数组有10个元素2.说明(1)数组名定名规则和变量名相同,遵循标识符定名规则(2)在定义数组时,要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。例:a[10],表示a数组有10个元素,注意下标是从0开始的,这10个元素是a[0],a[1],a[2],[3],a[4],a[5],a[6],a[7],a[8],a[9]。注意:按上面的定义,不存在数组元素a[10](3)常量表达式中可以包括常量和符号常量,但不能包含变量。即,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:intscanf(“%d″,&n); 在程序中临时输入数组的大int数组说明中其他常见的错①floata[0]; 数组大小为0没有意 ②intb(2)(3) 不能使用圆括 ③intk,a[k]; 不能用变量说明数组大3.一维数组在内存中的存维数组:floatak100]每个数据元素占用的字节数,就是基类型的字节数个元素占4个字节二、一维数组元素的1.数组元素的方式:数组名[下标]下标可以是整型常量或整型表达式。例如:a[0]=a[5]a[7]a[2注意:定义数组时用到的“数组名[常量表达式]”和数组元素时用到的“数组名[下标]”有区别的例如∶inta[10] 定义数组长度为 t=a[6] a数组中序号为6的元素。此时6不代表数组长2.一维数组元素的程序实#include<stdio.h>voidmain(){inti,a[10]for(i=0;i<=9;i++)[i]=for(i=9;i>=0;i--printf("%d″,a[i])printf("\n″)}运行结果如下987654321三、一维数组的初始对数组元素初始化的实现方法(1)在定义数组时对数组元素赋以初值。例如inta[10]={0,1,2,3,4,5,6,7,8,9}将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=(2)可以只给一部分元素赋值。例如inta[10]={0,1,2,3,4}定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。(3)如果想使一个数组中全部元素值为0,可以写inta[10]={0,0,0,0,0,0,0,0,0,0};inta[10]={0}不能写成:inta[10]={010}这是与FORTRAN语言不同的,不能给数组整体赋初值(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如inta[5]={1,2,3,4,5}或inta[]={1,2,3,4,5}在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。但若数组长度与提供初值的个数不相同,则数组长度不能省略。例如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成inta[10]={1,2,3,4,5}只初始化前5个元素,后5个元素为0四、一维数组程序举举例1:用数组来处理,求解Fibonacci数列。Fibonacci数列公式:a1=a2=1,an=an-1+an-2程序实例:#include<stdio.h>voidmain(){int intf[20]={1,1}for(i=2;i<20;i++f[i]=f[i-2]+f[i-1]for(i=0;i<20;i++{if(i%5==0)printf(″\n″)printf(″12d″,f[i]}/For循环结 程序结 举例2:用起泡法对10个数排序(由小到大)起泡法的思路是:将相邻两个数比较,将小的调到前注意:经过第一趟(共5次比较与交换)后,最大的数9已“沉底”。然后进行对余下的前面5个数第二趟比较。注意:经过第二趟(共4次比较与交换)后,得到次大的数8如果有n个数,则要进行n趟比较。在第1趟比较中要进行n次两两比较,在第j趟比较中要进行nj次两两比较。程序流程图如下#include<stdio.h>voidmain(){inta[10]inti,j,printf(″input10numbers:\n″)for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++for(i=0;i<9-j;i++if(a[i]>a[i+1]{t=a[i];a[i]=a[i+1]a[i+1]=}printf(″thesortednumbers:\n″)for(i=0;i<10;i++printf(″d″,a[i])printf(″\n″)}程序运行结果如下input10brs10481265-76100-45123thesortedbrs–76-4501481265100考点2二维数组的定义和—、二维数组的定二维数组定义的一般形式类型说明符数组名[常量表达式][常量表达式]例:定义a为3(3行4列)的数组,b为5(5行10列)的数组。如下floata[3][4],b[5][10];不能写成floata[3,4],b[5,10]注意:可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组例如:可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含个元素的一维数组二维数组在内存中的存二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第行的元素下图表示对a[3][4]数组存放的顺例:整型数组b[3][3]={{1,2,3},{4,5,6},{7,8,9}}问题:有了二维数组的基础,那么数组如何定义呢?定义三维数组: floata[2][3][4];数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。二、二维数组的二维数组元素的表示形式为:数组名[下标][下标]例如:a[2][下标可以是整型表达式,如a[2-1][2-注意:不要写成a[2,3],a[2-1,22-1]形数组元素可以出现在表达式中,也可以被赋值,例如:b[1][2]=a[2][3]在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。常出现的错误有:inta[3][4] 定义a为3×4的数 ┆a[3][4]=三、二维数组的初始数据类型数组名[常量表达式1][常量表达式2]={初始化数据};可以用下面4种方法对二维数组初始化(1)分行给二维数组赋初值。如inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}(2)可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}(3)可以对部分元素赋初值。如inta[3][4]={{1},{5},{9}};10005000900也可以对各行中的某一元素赋初值,inta[3][4]={{1},{0,6},{0,0,0,11}}10000600000也可以只对某几行元素赋初值。inta[3][4]={{1},{5,6}}100056000000(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等价于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12}在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如inta[][4]={{0,0,3},{},{0,10}} 3 00 0四、二维数组程序举例4将一个二维数组行和列元素互换,存到另一个二维数组中#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}}intb[3][2],i,j;printf(″arraya:\n″);for(i=0;i<=1;i++{for(j=0;j<=2;j++ printf(″5d″,a[i][j])b[j][i]=a[i][j]}printf(″\n″)}printf(″arrayb:\n″)for(i=0;i<=2;i++{for(j=0;j<=1;j++)printf("%5d″,b[i][j]);printf(″\n″)}} 程序结 运行结果如下array arrayb: 例5有一个3的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。用流程图表示算法,如下程序如下#include<stdio.h>voidmain(){inti,j,row=0,colum=0,xinta[3][4]={{1,2,3,4},{9,8,7,6}{-10,10,-5,2}}max=a[0][0]for(i=0;i<=2;i++for(j=0;j<=3;j++if(a[i][j]>x{max=a[i][j]row=i;colum=}printf(″max=%d,row=%d,colum=%d\n″,ax,row,colum);} 程序结 考点3字符数—、字符数组的定定义方法与前面介绍的类似。例如charc[10]c[0]=′I′;c[1]=′′;c[2]=c[3]=mc[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符二、字符数组的初始对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如charc[10]={’I′,’′,’a′,’m′,’’,′h′,′a′,′p′,′p′,′y′}如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的如果花括弧中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即\0′)。例如charc[10]={′c′,′′,′p′,′r′,′o′,′g′,′r′,′a′,m′(图见如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。例如charc[]={′I′,′′,′a′,m′′′,′h′,′a′,′p′,′p′,′y′};数组c的长度自动定为10也可以定义和初始化一个二维字符数组。例如:二、函数调用的方按函数在程序中出现的位置来分,可以有以下三种函数调用方式函数语把函数调用作为一个语句。如例1中的printstar(),这时不要求函数带回值,只要求函数完成一定的操作。函数表达函数出现在一个表达式中,这种表达式称为函数表达式。这时要求函数带回一个确定的值以参加表达式的运算。例如:c=max(a,b);函数参函数调用作为一个函数的实参。例如m=max(a,max(b,c))其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国片式圆网行业投资前景及策略咨询研究报告
- 2024至2030年中国球形封头反应釜行业投资前景及策略咨询研究报告
- 2024至2030年中国喷漆展柜行业投资前景及策略咨询研究报告
- 2024年中国铆接桥架市场调查研究报告
- 2024至2030年中国透水单壁波纹管行业投资前景及策略咨询研究报告
- 2024至2030年中国电镀塑胶壳行业投资前景及策略咨询研究报告
- 《开门红启动大会》课件
- 2024至2030年无线数字可视门铃项目投资价值分析报告
- 2024至2030年工业用电风扇电机项目投资价值分析报告
- 2024至2030年中国不锈钢风机盘管行业投资前景及策略咨询研究报告
- 期末测试卷(一)2024-2025学年 人教版PEP英语五年级上册(含答案含听力原文无听力音频)
- 生产车间统计员培训
- 期末 (试题) -2024-2025学年人教PEP版(2024)英语三年级上册
- 2024中国慢性阻塞性肺疾病基层诊疗与管理指南解读
- 学习课件教程教学课件
- 电商培训机构学员培训合同(2篇)
- 高素质农民培训合同
- 2024年港股通知识测评试题
- 贵州省2024年中考化学真题(含答案)
- 结构化面试的试题及答案
- 2024年高等教育公共课自考-00005马克思主义政治经济学考试近5年真题集锦(频考类试题)带答案
评论
0/150
提交评论