C语言程序设计小结

上传人:M****1 文档编号:586328929 上传时间:2024-09-04 格式:PPT 页数:98 大小:517KB
返回 下载 相关 举报
C语言程序设计小结_第1页
第1页 / 共98页
C语言程序设计小结_第2页
第2页 / 共98页
C语言程序设计小结_第3页
第3页 / 共98页
C语言程序设计小结_第4页
第4页 / 共98页
C语言程序设计小结_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《C语言程序设计小结》由会员分享,可在线阅读,更多相关《C语言程序设计小结(98页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计小结NotWay上传内容内容C语言程序设计基础数据类型、常用库函数运算符、表达式、位运算控制结构与语句 数组函数及其应用编译预处理指针结构体、共用体、枚举文件C语言程序结构源程序文件1C程序源程序文件m源程序文件j内部数据定义语句序列函数n函数1函数i预编译命令外部数据说明函数是C语言程序的基本模块 下一张下一张上一张上一张【例】输入两个整数,判断大小,并输出大数。 #include/编译预处理命令voidmain()/主函数main()inta,b;intmax(int,int);scanf(%d,%d,&a,&b);/输入数据printf(max=%dn,max(a,b);/

2、调用函数max()/输出结果intmax(intx,inty)/函数maxif(x目标程序.obj可执行文件.exe结果下一张下一张上一张上一张整型实型(浮点型)字符型char枚举类型数组类型结构体类型struct共用体类型单精度型float双精度型double基本类型构造类型指针类型*空类型NULL自动类型auto静态类型static寄存器类型register外部类型extern数据类型存储类型数据类型的分类 各种数据类型所表示的数据有一定范围,若将超出其范围的数据放入其中,会产生数据的“溢出”。Wirth程序数据结构算法下一张下一张上一张上一张基本整型int短整型short长整型long基

3、本型无符号型unsigned短整型长整型变量类型第2章基本数据类型与常用库函数n字符集与标识符n基本数据类型n常量、变量n输入输出函数用法n常用函数n字符集基本符号是ASCII字符集n标识符程序设计过程中用到的各种元素的名字u组成:英文字母、数字和下划线“_”,首字符为字母或下划线。建议字符数不超过8个。u定义:见名知义、区分大小写字母、禁用保留字YearYear,dayday,a_1a_1,A_1A_1,_Time_Time %A%A,356B ,abc$356B ,abc$n基本数据类型:u整型数据类型标识符:unsignedshort、int、longsizeof(int)计算所占字节数

4、u实型数据float、doubleu字符型数据char以其ASCII码存放在内存C语言保留字语句保留字数据类型保留字存储类别保留字其他保留字breakforcontinuegotodefaultifdoreturncaseswitchelsewhilecharshortdoublesignedenumstructfloatunionintunsignedlongvoidautoexternstaticregisterconsttypedefsizeofvolatile除上述32个保留字(用小写字母表示)不能另作他用外,象main、printf等库函数名,include、define、undef

5、、indef、infdef、endif等在C语言中具有特定的意义,也不要另作他用。上一张上一张n常量用来表示固定的数值和字符值的量u整型常量:十进制、八进制(0)、十六进制(0x),L|l、U|u0578、234u实型常量(浮点数):十进制小数形式(.)、指数形式E|e,F|fu字符常量:A,可以其ASCII码值参加运算,%c、%d转义字符:n、ddd、xhh、u符号常量代表常量的标识符#define符号常量常量#definePI3.1415926n变量程序执行过程中,其值可以改变的量。u变量定义:类型标识符变量名列表;doublex,y=3.1;/使用前需定义、赋初值常量、变量表2.3常用转

6、义字符及其含义字符形式转义字符的意义b退格,将当前位置移到前一列n回车换行r回车,将当前位置移到本行开头t水平制表(跳到下个tab位置)反斜杠字符“”单引号字符”双引号字符ddd13位8进制数所代表的字符xhh12位16进制数所代表的字符下一张下一张上一张上一张输入输出函数n#include从键盘读入一个字符:c=getchar();输出一个字符:putchar(c);putchar(65);putchar(x41);puts()输出字符串并换行puts(s1);gets()读取字符串直到回车结束gets(s1);n格式输出函数printf(”格式控制字符串”,表达式列表);n格式输入函数sc

7、anf(“格式控制字符串”,地址列表);scanf(“i=%d,j=%f”,&i,&j);i=12,j=34scanf(“%c%c%c”,&c1,&c2,&c3);ABCint*p;scanf(%d,p);intx;doubley;floatz;longm;charc1;scanf(“%d%lf%f%ld%c”,&x,&y,&z,&m,&c1);/对非字符型数据输入,可用空格,Tab,回车键作分隔符printf(“%d,%6.3f,%c,%dn”,x,y,c1,c1);程序执行:23.14151.2a23.142a97常用函数常用函数n#include /数学函数 函数原型:double sq

8、rt(double x) sin cos tan exp pow log log10.n#include /字符函数 tolower(A) isalphaisupperisdigitisalnumn#include /其它常用函数 exit(0);/正常终止程序,值传给调用过程;为1则异常终止程序下一张下一张上一张上一张表.常用的数学函数(math.h) 类别函数名作用函数原型三角函数sin正弦函数doublesin(doublex)cos余弦函数doublecos(doublex)tan正切函数doubletan(doublex)asin反正弦函数doubleasin(doublex)aco

9、s反余弦函数doubleacos(doublex)atan反正切函数doubleatan(doublex)指数函数exp指数函数(e的x次方)doubleexp(doublex)pow指数函数(x的y次方)double pow(double x,double y)pow10指数函数(10的p次方)doublepow10(intp)对数函数log对数函数ln(x)doublelog(doublex)log10对数函数log10xdoublelog10(doublex)求绝对值fabs求绝对值doublefabs(doublex)sqrt计算平方根doublesqrt(doublex)下一张下一张

10、上一张上一张第第3章章 运算符和表达式运算符和表达式运算符优先级、结合性、运算对象表达式形式、求解过程类型转换下一张下一张C语言的表达式语言的表达式n书写规则:写在同一行,只能使用圆括号且匹配1 a+b1.0/2 * ( (a+b) / (3*c) ) 2 3c (x+r)*8-a+b)7、b*b-4ac -b /(2*a) 不能写成不能写成 -b/2*a = 下一张下一张上一张上一张n算术运算符:+、-、*、/、%、+、-(整型变量)n关系运算符:、=、=、=、!=n逻辑运算符:!、&、|n赋值运算符:.简单赋值运算符:=.复合算术赋值运算符:+=、-=、*=、/=、%=具右结合性(自右至左

11、)的运算符:赋值、条件、单目运算符运算符优先级n条件运算符(三目运算符)?:n逗号运算符:,n求字节数运算符:sizeofn强制类型转换(类型)n括号运算符:()n指针运算符:*、&n成员运算符:、.n下标运算符:n位操作运算符:&、|、.复合位运算赋值运算符:&=、|=、=、=、,=,c2;/bc;a=0;0y=0&yb)?a:b;/*if(ab)max=a;elsemax=b;*/fabs(x-y)1e-5/x=y判断实型数据相等否x=y=z=0;m=+x&+y|+z;/*z=0&、|组成的逻辑表达式,只对能确定整个表达式值的最少数目的子表达式进行计算*/sizeof(char)/1siz

12、eof(类型标识符|常量|变量),返回字节长度。下一张下一张上一张上一张算术运算中的类型转换方向n强制类型转换:(类型标识符)表达式i=5;j=2;(double)i/j(double)(i/j)double(i/j)/2.5,2.0,(int)(d*1000)/1000.0/将实数d保留3位小数,不四舍五入k/(int)pow(10,n-1)%10/求整数的右边第n位上的数字/pow返回值为double型,k/10n-1%10char、shortintunsignedlongdoublefloat下一张下一张上一张上一张内容内容 C语言程序设计基础数据类型、常用库函数运算符、表达式分支、循环

13、结构程序设计*数组函数及其应用编译预处理指针结构体、共用体、枚举位运算文件结构化程序设计n顺序结构按语句的先后次序依次执行程序n选择结构根据给定条件,从两条或多条路径选择要执行的操作路径u双分支(单分支,if嵌套)if(表达式)语句1else语句2u多分支switch(表达式)case常量表达式1:语句序列1default:语句序列n+1n循环结构在满足给定的条件下,反复执行某一组操作while(表达式)dofor(表达式1;表达式2;表达式3)语句语句语句while(表达式);先判断,后执行先执行,后判断循环次数确定,先判断,后执行n循环的嵌套1!2!10!、矩阵运算n转向语句break立即

14、结束循环,执行循环语句的后续语句。continue跳过循环体尚未执行的语句,结束本次循环。gotoif语句的双分支形式流程图语句1语句2表达式真(非0)假(0)if语句的单分支形式流程图语句表达式假(0)真(非0)if语句的单分支形式:if(表达式)语句;if语句的双分支形式:if(表达式)语句1;else语句2;if语句嵌套下一张下一张上一张上一张注意:注意:= = 、=nelse-if嵌套的一般形式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式n-1)语句n-1else语句n/*用于处理“非上述情况”、前面各个if都不满足的缺省情况

15、(若无时,可省略)、出错检查*/图4.5else-if嵌套执行流程图语句1语句2 语句3语句n-1语句n真假真真真假假假假表达式1表达式3表达式n-1表达式2下一张下一张上一张上一张【例】已知一分段函数x+lnx当1x2y=x2+ex当2x3log10x当3x41+x+x2当x为其他值当输入x的值时,编程计算出相应的函数值y。#include?voidmain()变量类型定义输入?if、while、for结构?输出?下一张下一张上一张上一张#include #include void main() double x,y; printf(“Enter x=”); scanf(“%lf”,&x);

16、 if (x=1&x=2 & x=3 & x4) y=log10(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);下一张下一张上一张上一张当当1x2当当2x3当当3x=1&x=1&x=1&x2) y= sqrt(x) +log(x); printf(“y =%fn”);else printf(“y =%fn”, sqrt(x) +log(x)”);y=sqrt(x)+double log(double x)#include #include void main() double x,y; printf(“Enter x=”); scanf(“%lf

17、”,&x); if (x=4) y=1+x+x*x ; else if(x=3) y=log10(x); else if(x=2) y =x*x+exp(x); else if(x=1) y =sqrt(x) +log(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);下一张下一张上一张上一张当当1x2当当2x3当当3x=1&x=2 & x=3 & x=1 & x=2 & x=3 & x=4 | x=1 & x=2 & x=3 & x4) y=log10(x); else y=1+x+x*x ; C语言规定:else总是与前面最接近的、不带else的

18、if配对。if(a=b)if(b=c)printf(“a=b=c”);else/else与第2个if配对printf(“a!=c”);if(a=b)if(b=c)printf(“a=b=c”);/加上“”else/else与第1个if配对printf(“a!=c”);上一张上一张#includevoidmain()inti,j,k;scanf(“%d”,&i);j=k=0;if(i/10)0)/*第7行*/j=i;if(i!=0)&(j=0)k=i;elsek=-1;/*第12行*/printf(“j=%d,k=%dn”,j,k);j=0,k=5j=99,k=-1j=9,k=-1j=0,k=0

19、下一张下一张上一张上一张二级题,程序运行:5?99?12行改为:k=-1;j=i/10;99?7行改为:if(i/10)0)12行改为:k=-1;5?switch语句多路分支嵌套的if语句,程序的可读性较低。switch的一般形式:switch(表达式)/表达式值为整型或字符型case常量1:语句组1/语句组可为空或多条语句case常量2:语句组2 case常量n:语句组ndefault:语句组n+1/可省略功能:表达式值为常量i从语句组i执行至break语句均不等default:执行语句n+1下一张下一张例】设考试成绩采用A(90-100分)、B(80-89分)、C(70-79分)、D(60

20、-69分)、E(60分)5级等级计分,编程判别某考试成绩等级是否满60分。#includevoidmain()chargrade;printf(”Pleaseinputthegrade:”);scanf(”%c”,&grade);switch(grade)caseA:/case的语句组为空时将顺序下延至遇到语句再执行的语句组为空时将顺序下延至遇到语句再执行caseB:caseC:caseD:printf(“=60”);break;caseE:printf(“60”);break;default:printf(“inputerror!”);下一张下一张上一张上一张真假表达式语句while语句流程

21、图while()下一张下一张上一张上一张语句假真表达式do-while语句流程图dowhile();语语 句句假假真真表达式表达式2表达式表达式3表达式表达式1forfor语句之下一语句语句之下一语句 for语句流程图for(表达式1;表达式2;表达式3)while语句 一般形式:while(表达式)语句1;语句2; 表达式循环条件,语句循环体。while(表达式)语句s;下一张下一张真假表达式语句1;图4.8while语句流程图【例】统计输入字符的个数,并统计其中有多少个字符a,用【Enter】结束字符输入。 #includevoidmain()intn=0,i=0;charc;while(

22、c=getchar()!=n)i+;if(c=a)n+;printf(“输入字符总数i=%d,字符a数n=%dn,i,n);下一张下一张上一张上一张【例4.13】输入一个整数,统计它有几位数。#includevoidmain()intm,n=0;/n存放位数printf(“Inputm:n);scanf(“%d”,&m);do/while?n+;/位数加1m/=10;/m的位数减少1位 while(m!=0);printf(”n=%dn”,n); 下一张下一张上一张上一张【例】求sum=ai,其中,ai为从键盘输入的整数。 100i=1#includevoidmain()inti,sum=0,

23、a;for(i=1;i=100;i+)printf(Entera%d=,n);scanf(%d,&a);sum=sum+a;printf(”sum=%dn”,sum);下一张下一张上一张上一张inti=1,sum=0,a;while(i=100)printf(Entera%d=,n);scanf(%d,&a);sum=sum+a;i+;【例】用for语句求sum=n。 100n=1#includevoidmain()intn,sum=0;for(n=1;n=100;n+)sum=sum+n;printf(sum=%dn,sum);下一张下一张上一张上一张阅读下列程序说明和程序,在每小题提供的若

24、干可选答案中,挑选一个正确答案。*【程序说明】求1+2/3+3/5+4/7+5/9+的前20项之和。运行示例:sum=11.239837【程序】#includevoidmain()inti,b=1;doubles;(1);for(i=1;i=20;i+)s=s+(2);(3)printf(4),s);【供选择的答案】(1)A、s=0B、s=1C、s=-1D、s=2(2)A、i/bB、double(i)/double(b)C、i/2*i-1D、(double)i/(double)b(3)A、;B、b=2*i1;C、b=1.0*b;D、b=b+2;(4)A、sum=%dnB、s=%cnC、sum=

25、%fnD、s=%sn“ADDC#includevoidmain()inti,m;printf(inputm:);scanf(%d,&m);for(i=2;im/2)printf(%disaprimenumbern,m);elseprintf(%disnotaprimenumbern,m);下一张下一张上一张上一张【例】判断整数m(m2)是否为素数。素数是除了1和他本身外,没有其他的因子的一个大于1的自然数。intflag=1;for(i=2;i=m/2;i+)if(m%i=0)flag=0;if(flag=1)printf(“Yes”);elseprintf(“No”);【例5.13】输出10

26、0以内的所有素数。在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别出的素数直接输出。设置标志以标明某种状态的变化。#includevoidmain()inti,m,flag;for(m=2;m100;m+)flag=1;/设置标志flag,1表示素数for(i=2;i=m/2;i+)if(m%i=0)flag=0;/修改标志flag,0表示非素数break;/m不是素数,不需继续循环if(flag=1)printf(%d,m);/判断标志,素数则输出m下一张下一张上一张上一张【例5.13】输出100以内的所有素数。在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别

27、出的素数直接输出。设置标志以标明某种状态的变化。#includevoidmain()inti,m,flag;for(m=2;m100;m+)flag=1;/设置标志flag,1表示素数for(i=2;i=m/2;i+)if(m%i=0)flag=0;/修改标志flag,0表示非素数break;/m不是素数,不需继续循环if(flag=0)continue;/判断标志,非素数,跳过输出m,进入下一次循环printf(%d,m);下一张下一张上一张上一张【例6.5】判别和输出2100之间的素数,按每行8个素数输出。 #include#includeintisprime(intn)inti;for(

28、i=2;i=sqrt(n);i+)if(n%i=0)return0;/返回0,k非素数return1;/返回1,k为素数;voidmain()intk,count=0;for(k=2;k=100;k+)/k从2100,穷举i是否素数if(isprime(k)=1)/调用函数prime(),将实参k传递给形参n.若返回1,k为素数printf(%5d,k);count+;if(count%8=0)printf(n);/控制每行输出8个数据下一张下一张上一张上一张2357111317192329313741434753596167717379838997【例4.25】计算1!+2!+3!+10!#

29、includevoidmain()inti,n,s=0,y;for(n=1;n=10;n+)/外循环y=1;for(i=1;i=n;i+)/内循环计算n!y*=i;s+=y;/将n!累加到sprintf(“1!+2!+3!+10!=%dn”,s);下一张下一张上一张上一张int i;long s=0, y=1;for (i=1; i=10B、power=100C、t!=0D、number!=0(3)A、power=0B、digit!=0C、number!=0D、power=1(4)A、number/=power; B、number%=10;C、number%=power;D、number/=1

30、0;BADC#includevoidmain()intdigit,number,power,t;printf(Enteraninteger:);scanf(%d,&number);number=number0?-number:number;power=1;(1)while((2))power*=10;t/=10;printf(Thedigitsare:);while((3))digit=number/power;printf(%d,digit);(4);power/=10;阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。*【程序】#includevoidmain()in

31、tk;for(k=5;k0;k-)if(k=3)continue;/*第6行*/printf(%d,k);(13)程序的输出是。A、54321 B、5421C、54D、3(14)将第6行中的continue改为break后,程序的输出是。A、54321 B、5421C、54D、3(15)将第6行中的continue删除(保留分号)后,程序的输出是A、54321 B、5421C、54D、3(16)将第6行全部删除后,程序的输出是。A、54321 B、5421C、54D、3BCAD比较:for写程序较紧凑、清晰,能利用表达式给变量初始化并修改其值;while和do-while语句只能在循环之前进行

32、初始化,在循环体中进行修改。若循环的次数确定,使用for较合适;否则,采用while或dowhile语句较为清晰。dowhile语句是“先执行、后判断”,至少执行一次循环体;而while、for是“先判断、后执行”,若条件一开始就不成立,循环体一次都不执行。下一张下一张上一张上一张while().dowhile();for()dowhile();dowhile()while();(A)正确的嵌套形式(B)不正确的嵌套形式嵌套形式示意图上一张上一张数组一维数组排序、查找算法二维数组 字符数组和字符串数组一批同类型相关数据的有序集合n一维数组由一个下标确定元素的数组u定义形式:数据类型数组名常量表

33、达式intt10;intn=10,an;u通过对单个数组元素的引用来使用数组:数组名下标u初始化:intj,t10;for(j=0;j10;j+)tj=j;for(j=0;j10;j+)scanf(%d,&tj);n二维数组u定义形式:数据类型数组名常量表达式1常量表达式2行数每行元素个数doubleb510;doubleb5,10;inta=1,2;u引用形式:数组名下标1下标2u初始化intj,k,b34;for(j=0;j3;j+)for(k=0;k4;k+)scanf(%d,&bjk);/bjk=0;下一张下一张上一张上一张#define M 4double aM;字符数组u定义、初始

34、化:charc5=L,i,k,e,0;chara3;a0=N;charc5=Like;charc5=Like;charc5;c=Like;charc20;scanf(“%s”,c);printf(“Stringis%s”,c);/回车,Tab,空格结束输入u逐个字符的输入/输出:getchar、putchar,scanf、printf用格式符%ccharc81;inti;for(i=0;(ci=getchar()!=n;i+);/输入字符串u字符串输入/输出函数:gets(str);/回车结束输入puts(str);u常用字符串函数:string.hstrcat(c1,c2);/c1=c1c2

35、strcpy(c1,c2);/c1=c2strcmp(c1,c2)/=返回0;返回1strlen(c1);/注意110n二维字符数组:charstr39=”Hzhou”,”Shai”,”Bjing”;gets(str1);strcpy(str0,”Abc”);puts(str2);下一张下一张上一张上一张#includevoidmain()inti;intf40=1,1;for(i=2;i40;i+)fi=fi-1+fi-2;for(i=0;i40;i+)if(i%5=0)printf(n);/每行输出5个数据printf(%8d,fi);程序执行: 1 1 2 3 5 8 13 21 34

36、55 89 144 233 377 610 .下一张下一张上一张上一张【例6.2】利用数组求Fibonacci数列的前40项。fibonacci数列具有下面的性质:f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n3)分析:利用数组元素fn-1存储数列的第n项fnint f40;for (i=0; i40; i+) if(i=0|i=1) fi=1; else fi=fi-1+fi-2;排序冒泡法排序选择法排序【例】用冒泡法对8个数排序(从小到大)。分析:将相邻两个数进行比较,将大数调换到后面,经过一轮操作将最大数放在最后;7次,j=0;jaj+1?再对前n-1个数进行相同的比较

37、交换操作,将次大数放在倒数第二的位置;7次,i=0;ia1?a0a1a1a2?a1a2a2a3?a2a3a6a7?a6a7for(i=0;iai+1)aiai+1;/第1趟for(i=0;iai+1)aiai+1;for(i=0;iai+1)aiai+1;for(i=0;iai+1)aiai+1;/第7趟for(j=0; j7;j+) for(i=0; iai+1) aiai+1;#include 冒泡法排序(升序冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; printf(Input %d numbers:n“, N); for

38、 (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) /n个数进行个数进行n-1趟排序趟排序 for (j=0; jaj+1) /若相邻两元素不是小到大升序,则互换若相邻两元素不是小到大升序,则互换 t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers are:n); for (i=0; iN; i+) printf(%5.2f, ai);上一张上一张#include 冒泡法排序(升序)冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; pr

39、intf(Input %d numbers:n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) / for (i=1; i ;i+) for (j=0; jN-i-1; j+) / for (j= ; iaj+1) t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers are:n); for (i=0; iak?k=ja0ak第2次选择:在a1至a7中找最小数ak,将a1与ak值交换,第2次排序后将次小的数放在a1处;k=1,j=27,ajak?k=ja1ak每次从未排序数中选

40、最小数与未排序数中位置最前的数交换,直至所有数都按从小到大排列。i=0,iak?k=j下一张下一张上一张上一张#include选择法排序(升序)#defineN8voidmain()inti,j,k;doubleaN,t;printf(Input%dnumbers:n“,N);for(i=0;iN;i+)scanf(%lf,&ai);for(i=0;iN-1;i+)/N个数进行N-1趟排序,每趟将当前最小数置前k=i;/k是本次要找的最小元素的下标for(j=i+1;jN;j+)if(ajak)k=j;/保留最小元素的下标t=ak;ak=ai;ai=t;/将当前最小元素交换到本趟排序数最前面p

41、rintf(Thesortednumbersare:n);for(i=0;iN;i+)printf(%.2f,ai);上一张上一张#include 机考(程序改错):机考(程序改错):#define N 10 用选择法对用选择法对10个整数按升序排序个整数按升序排序void main() int i, j, min, temp; int aN=5, 4, 3, 2, 1, 9, 8, 7, 6, 0; printf(“n The array is: n“); /* 输出数组元素输出数组元素 */ for (i=0; iN; i+) printf(%5d, ai); for (i=0; iN-1

42、; i+) /* 排序操作排序操作 */ min=i; for (j=i+1; jN; j+) /*1*/ if (amin=aj)min=j; /*2*/ temp=amin; amin=aj; aj=temp; /*数据交换数据交换*/ printf(The sorted numbers are: n); for (i=0; iaj)min=j;temp=amin; amin=ai; ai=temp;【例】使用顺序查找法,在n个数中查找某个数。#include#include#defineN10voidmain()intaN,i,x;printf(Input%dnumbers:n“,N);

43、for(i=0;iN;i+)scanf(%d,&ai);printf(“inputxtolookfor:n”);scanf(“%d”,&x);for(i=0;iN;i+)if(ai=x)printf(“find:%ditisa%dn“,x,i);exit(0);printf(%dnotbeenfound.n,x);下一张下一张上一张上一张#includevoidmain()inta33,temp;inti,j;for(i=0;i3;i+)/输入for(j=0;j3;j+)scanf(%d,&aij);for(i=0;i3;i+)/转置for(j=0;j3;j+)if(ij)temp=aij;a

44、ij=aji;aji=temp;printf(“Turnafterplacing:n);for(i=0;i3;i+)/输出for(j=0;jj)【程序说明】输入一个2*3的二维数组,找出最大值以及它的行下标和列下标,并输出该矩阵。运行示例:Enteraarray(2*3):3210-96-1max=a02=103210-96-1【供选择的答案】(9)A、&aijB、&ajiC、aijD、aji(10)A、row=col=2;B、row=col=0;C、arowcol=0;D、arowcol=-1;(11)A、row=j;col=i;B、arowcol=aijC、row=i;col=j;D、ar

45、owcol=aji(12)A、printf(“n”)B、printf(“n”);C、;D、printf(“n”);ABCD【程序】#includemain()intcol,i,j,row;inta23;printf(Enterarray(2*3):);for(i=0;i2;i+)for(j=0;j3;j+)scanf(%d,(9);(10);for(i=0;i2;i+)for(j=0;jarowcol)(11);printf(max=a%d%d=%dn,row,col,arowcol);for(i=0;i2;i+)for(j=0;j3;j+)printf(%4d,aij);(12);【例【例6

46、.14】输入一串字符,将其逆序存放并输出。】输入一串字符,将其逆序存放并输出。 #include void main() char s81, t; int i, j; gets(s); for (j=0; sj!=0; j+) ; / 字符串长度字符串长度 j=strlen(s); for (i=0, j-; ij; i+, j-) t=si; si=sj; sj=t; printf(%s, s);下一张下一张上一张上一张for (j=0; (sj=getchar()!=n; j+) ;第5章函数概述函数的定义与调用函数间参数传递函数的嵌套调用和递归调用变量的作用域和存储类别图6.1C语言程序

47、结构源程序文件1C程序源程序文件m源程序文件j内部数据定义语句序列函数n函数1函数i预编译命令外部数据说明C程序是由一个或多个函数组合而成,函数是C语言程序的基本模块。唯一主函数唯一主函数main是程序开始执行处,可调用其它函数。是程序开始执行处,可调用其它函数。 下一张下一张上一张上一张Review函数是具有独立功能的程序模块,是C语言的基本构件。函数是一个“黑盒子”。在引用一个函数时,用户只需了解被调用函数的功能、是否需要提供数据、函数返回值即可;不必了解其内部的工作细节。由于采用了函数结构,程序的层次结构清晰,便于编写、阅读和调试。分类: 从用户的角度:标准库函数,用户自定义函数 y=s

48、in(x);从函数的结果:无返回值的函数,有返回值的函数void从函数的形式看:有参函数,无参函数下一张下一张函数的定义与调用函数定义的一般形式:数据类型函数名(类型形参,)函数体;函数调用的一般形式为:函数名(实参1,实参2,)用作函数表达式z=max(x,y);作实参使用z=max(max(x1,x2),x3);独立构成表达式语句printf(maxmum=%d,z);函数声明一般形式为:数据类型函数名(类型形参,);或:数据类型函数名(类型,类型,);如被调函数定义的位置在主调函数前,声明可省略。下一张下一张#includevoidmain()intx,y,z;intmax(inta,i

49、ntb);/函数声明printf(inputtwonumbers:);scanf(%d%d,&x,&y);z=max(x,y);/函数调用,作表达式、语句、形参printf(max=%d,z);printf(max=%d,max(3,6);intmax(inta,intb)/函数定义intc;if(ab)c=a;elsec=b;returnc;下一张下一张【例】编写函数,输出10个“*”号,并回车。#includevoidstar()/无参函数inti;for(i=0;i10;i+)printf(“*”);printf(“n);return;/无返回值、返回主调函数voidmain()star

50、();/函数调用下一张下一张上一张上一张函数间参数传递函数间参数传递:传数值(形参,实参,return)传地址(形参是数组或指针变量)一维形参数组定义的一般形式:voidsort(inta,intn)intb10=1,6,7,0,8,4,3,2,9,5;sort(b,10);二维形参数组定义的一般形式:voidchange(intx5,intn,intm)函数的嵌套调用:在一个函数的函数体内调用另一个函数不允许嵌套定义递归调用:被调用的函数是调用函数自身时。递归方法:将要解决的问题分解成比原问题规模小的类似子问题,而解决此子问题时又可用原问题的解决方法,依此原则逐步递推转化,最终将原问题转化为

51、较小且有已知解的子问题。下一张下一张例:数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。(省二级上机填空题)#include1.voidmain()printf(%ldn,f(30);longf(intn)if(2)return1;elsereturnf(n-1)+f(n-2);/longf(intn);n=1|n=2下一张下一张上一张上一张【例】分析函数调用前后的实参值、形参值。#includevoidmain()doublea,z;doublemult(double);a=5.2;printf(“调用mult前:a=%.2lfn,a);z=mult(a);/函数

52、调用,形参值改变不影响实参值aprintf(“调用mult后:a=%.2lfn,a);printf(“z=%.2lfn,z);doublemult(doublea)/形参aa=a*a;printf(“在mult中:a=%.2lfn,a);return(a);下一张下一张上一张上一张程序执行:调用mult前:a=5.20在mult中:a=27.04调用mult后:a=5.20z=27.04形参变量和实参变量是各自独立的变量,占有不同存储空间变量的存储类别变量的作用域:局部变量在函数体或复合语句内定义的变量全局变量在函数外部定义的变量。Extern全局变量和局部变量同名在局部变量的作用域内,全局变

53、量不起作用变量的存储类型说明有种:自动变量、寄存器变量动态存储方式(函数调用或复合语句结束时释放)静态变量、外部变量静态存储方式(整个程序运行结束时释放空间)自动变量auto(缺省)寄存器变量register:存储在CPU中,存放使用频率较高的数据,访问速度快静态变量static:静态局部变量在函数内部定义且只在该函数内使用。值具可继承性静态全局变量只在定义该变量的源文件内有效外部变量extern:外部变量可作用于整个源程序。如一个源程序由若干个源文件组成,在一个源文件中可以使用其他源文件中的外部变量(该全局变量只需在一个文件中定义),但必需要在使用前对该变量作extern外部变量说明。aut

54、ointi,j,k;staticfloatx,y;externfloatx,y;下一张下一张#includeints;floatf2(intx)inty,s;staticinta;main()intm,n;inta,b;m=a+b;n=a-b; 变量的作用域变量的作用域:全局变量、局部变量全局变量、局部变量在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。x x、y y、s s的作用域的作用域下一张下一张上一张上一张a a、b b的作用域的作用域m m、n n的作用域的作用域s s的的作作用用域域全局变量与局部变量同名:在局部变量的作用域内,全局变量不起作用(

55、例6.20) #includedoubleadd,mult;/全局变量voidfunc(doublex,doubley)doubleadd,mult;/局部变量add=x+y;mult=x*y;voidmain()doublea,b;scanf(“%lf%lf”,&a,&b);func(a,b);printf(“%.2lf%.2lfn”,add,mult);/全局变量若未初始化,初值0下一张下一张750.000.00#include(省二级题)intk=1;voidmain() intj;voidFun();for(j=0;j2;j+)Fun();printf(k=%d,k);voidFun(

56、) intk=1;/staticintk=1;k=1;printf(k=%d,k);k+;输出:k=1,k=1,k=1k=1,k=2,k=1k=1,k=1,k=2k=1,k=2,k=3【例】判别和输出2100之间的素数,按每行8个素数输出。 #include#includeintisprime(intn)inti;for(i=2;i=sqrt(n);i+)if(n%i=0)return0;/返回0,k非素数return1;/返回1,k为素数;voidmain()intk,count=0;for(k=2;k=100;k+)/k从2100,穷举i是否素数if(isprime(k)=1)/调用函数p

57、rime(),将实参k传递给形参n.若返回1,k为素数printf(%5d,k);count+;if(count%8=0)printf(n);/控制每行输出8个数据下一张下一张上一张上一张2357111317192329313741434753596167717379838997(08春浙江省二级)下一张下一张上一张上一张#includedoublefact(intn)/求阶乘函数inti;doublet=1;for(i=1;i=n;i+)t*=i;return(t);doublecal(intm,intn)/求累加和的函数intk;doubles=0;for(k=m;k=n;k+)s+=k;

58、return(s);voidmain()intn,i;doubley=0;printf(“Inputn:n);scanf(“%d“,&n);for(i=1;in;i+)y+=cal(1,i)/fact(i);printf(“y=%lfn”,y);下一张下一张上一张上一张上机题定义函数main(),输入正整数n,当精度e分别取值为10-1、10-2、10-3、10-n时,分别计算并输出下列算式的值,直到最后一项的绝对值小于精度e,以比较不同精度下算出的结果。要求调用函数cal(e)计算下列算式的值。#includedoublefact(intn)intk;doublet=1;for(k=1;k=

59、e);returns;void main() int k,n ; double t=1; scanf(“%d”,&n); for(k=1; k=n; k+) t=t/10; printf(“%f”, cal ( t ) ); +.-.+.-.?编译预处理命令C语言在将源程序编译生成目标文件前,对其进行的预处理。宏定义#definePI3.14#defineS(x,y)x*yc=S(a+1,b+2);/c=a+1*b+2;文件包含#include“文件名”/先在当前目录查找该文件#include/在系统设定的标准目录下(include)搜索该文件下一张下一张指针n指针变量定义int*p;/名、类

60、型、值、地址n指针变量初始化inta=10,*p=&a;/inta=10,*p;p=&a;int*px;*px=100;/n指针运算符:&变量*地址表达式n存取变量中数据的方式:直接引用inta=100,b;b=a;间接引用intb=100,*pb;pb=&b;*pb=800;n指针变量的应用和运算b=*p;*p=5;指针变量+n,指针相减,关系运算n指针作函数的参数传地址swap1(&a,&b);voidswap1(int*x,int*y)例 使两个指针变量交换指向。#includevoidmain()inta=10,b=20;int*p1=&a,*p2=&b,*p;printf(“a=%d

61、, b=%d, *p1=%d, *p2=%d n”, a, b, *p1,*p2);p=p1;p1=p2;p2=p;printf(“a=%d,b=%d,*p1=%d,*p2=%dn”,a,b,*p1,*p2);程序执行:a=10,b=20,*p1=10,*p2=20a=10,b=20,*p1=20,*p2=10intp;p=*p1;*p1=*p2;*p2=p;/交换两个指针变量所指向的对象值【程序】函数调用返回、指针作为参数 (06春)#includevoidmain()inta=-1,b=1;voidf1(intx,inty),f2(int*x,int*y);voidf3(int*x,int

62、*y),f4(intx,inty);f1(a,b);printf(%d,%d)n,a,b);a=-1,b=1;f2(&a,&b);printf(%d,%d)n,a,b);a=-1,b=1;f3(&a,&b);printf(%d,%d)n,a,b);a=-1,b=1;f4(a,b);printf(%d,%d)n,a,b);voidf1(intx,inty)intt;t=x;x=y;y=t;voidf2(int*x,int *y)唯一影响唯一影响*x和*y所指单元intt;t=*x;*x=*y;*y=t;voidf3(int*x,int*y)int*t;t=x;x=y;y=t;voidf4(int

63、x,inty)int*t=malloc(sizeof(t);*t=x;x=y;y=*t;(17)程序运行时,第1行输出(17) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(18)程序运行时,第2行输出(18) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(19)程序运行时,第3行输出(19) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(20)程序运行时,第4行输出(20) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)BABB【程序】函数调用返回、指针作为参数 (06春)#includevoidm

64、ain()inta=-1,b=1;voidf1(intx,inty),f2(int*x,int*y);voidf3(int*x,int*y),f4(intx,inty);f1(a,b);printf(%d,%d)n,a,b);a=-1,b=1;f2(&a,&b);printf(%d,%d)n,a,b);a=-1,b=1;f3(&a,&b);printf(%d,%d)n,a,b);a=-1,b=1;f4(a,b);printf(%d,%d)n,a,b);voidf1(intx,inty)intt;t=x;x=y;y=t;voidf2(int*x,int *y)intt;t=*x;*x=*y;*y

65、=t;voidf3(int*x,int*y)int*t;t=x;x=y;y=t;voidf4(intx,inty)int*t=malloc(sizeof(t);*t=x;x=y;y=*t;(17)程序运行时,第1行输出(17) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(18)程序运行时,第2行输出(18) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(19)程序运行时,第3行输出(19) 。A、(1,-1)B、(-1,1) C、(-1,-1)D、(1,1)(20)程序运行时,第4行输出(20) 。A、(1,-1)B、(-1,1) C、(-1,

66、-1)D、(1,1)BABBn指向一维数组元素的指针变量inta10,*p=a;inta10,*p;p=a;存取下标为j的数组元素:aj*(a+j)*(p+j)*p+p+1(*p)+将p指向元素值加1n一维数组元素指针(数组中某个元素的地址)作为函数的参数voidsort(double*a,intn)/doubleasort(b+2,5);/sort(b,10);n二维数组中的两种指针按行存储元素指针二维数组中每个元素的地址&aij、ai+j行指针二维数组中每一行的地址a、a+1aij元素的三种表示法: aij、*(*(a+i)+j)、*(ai+j)定义行指针变量p指向4个int型元素int(

67、*p)4,a34;p=a+1;/p指向a的第2行的地址voidchange(int(*x)5,intn,intm)/intx5change(a+2,3,3)/change(a,5,5);/a是指向数组第一行的指针Reviewn定义字符指针变量指向字符串char*s1=“welcome”;char*s1;s1=“welcome”;通过字符数组名或指向字符串的指针引用字符串printf(“%sn”,s1);/printf(“%cn”,*s1);n字符串指针作函数参数chara81=“Hello!”;mystrlen(a);intmystrlen(char*s)./指针变量s与a指向同一字符串n定义

68、指针数组字符串数组的操作int*p4;/p有4个元素,各元素存储int型对象的地址n指针指向函数double(*q)(double,double);q=pow;/q指向pow函数,求xy,q(5,3)将函数指针作函数参数,利用其不同指向,可调用不同的函数,函数更具通用性n函数返回值为指针char*search(char*sp,charch)n常用字符串函数(对应头文件string.h):字符串拷贝函数strcpy(s1,s2)字符串连接函数strcat(s1,s2)字符串比较函数strcmp(s1,s2)求字符串长度函数strlen(s)n字符串操作:译码、回文串、求字符串长度、连接字符串;多

69、字符串大小比较、复制。8.3.2字符串指针作函数参数例8.12定义计算字符串长度的函数。#includeintmystrlen(char*s)/指针变量s与a指向同一字符串intk=0;while(*s!=0)k+;s+;returnk;voidmain()chara81=“Hello!nWindowsXP”;printf(“thelengthis:%dn”,mystrlen(a);下一张下一张上一张上一张while(sk!=0) /数组方法数组方法 k+;机考填空机考填空例8.13定义两个字符串连接函数。#includevoidmystrcat(char*s,char*t)/指针变量s与a指

70、向同一字符串for(;*s!=0;s+);for(;*t!=0;s+,t+)*s=*t;*s=0;return;voidmain()chara80,b40;gets(a);gets(b);mystrcat(a,b);printf(“Newstring:%sn”,a);下一张下一张上一张上一张机考填空机考填空例6程序填空。如下程序检查一个字符串是否是回文字符串,是回文字符串时输出yes,否则输出no。回文字符串即正向与反向的拼写都一样的字符串,例如:adgda。#include#includechar*match(char*str)char*p,*q;inti,t=0;p=str;q=1;for

71、(i=0;i=strlen(str)/2;i+)if(*p+!=*q-)t=1;break;if(2)return(yes);elsereturn(no);下一张下一张上一张上一张void main()char str50;printf(Input:);scanf(%s,str);printf(%sn, 3 );答案:答案:str+strlen(str)-1t=0或或!tmatch(str)(17) 程序运行时,输入字母程序运行时,输入字母a,输出,输出 (17) 。 A、Happy New Year B、Hppy New Yer C、Hay New Year D、Happy Nw Yar(1

72、8) 程序运行时,输入字母程序运行时,输入字母e,输出,输出(18) 。 A、Happy New Year B、Hppy New Yer C、Hay New Year D、Happy Nw Yar (19) 程序运行时,输入字母程序运行时,输入字母p,输出,输出 (19) 。 A、Happy New Year B、Hppy New Yer C、Hay New Year D、Happy Nw Yar (20) 程序运行时,输入字母程序运行时,输入字母b,输出,输出 (20) 。 A、Happy New Year B、Hppy New Yer C、Hay New Year D、Happy Nw Y

73、ar BDCA# include (06-2)void main() char c, s80= Happy New Year; int i; void f(char *s, char c); c = getchar(); f(s, c); puts(s);void f(char *s, char c) int k = 0, j = 0; while (sk != 0) if (sk != c) sj = sk; j+; k+; sj = 0;结构结构是由若干成员(数据信息)组成的一种构造类型,每一个成员可以是一个基本数据类型或者又是一个构造类型。n结构类型声明:struct结构体名成员表列;s

74、tructstuintnum;charname20;charsex;floatscore;n定义结构变量structstu;structstus1;structstus1;structs1;初始化structstus1=3301,Lihua,M,93;结构变量的使用是通过对其最低级成员的引用s1.num结构数组:structstus3;s1.num=100;n指向结构变量的指针:structstus1,*p;p=&s1;表示结构变量s1的成员num:s1.num(*p).nump-num指向结构数组的指针structstus3,*p;p=s;p-nump+n结构变量、结构指针作函数参数doub

75、lecompare(structcompa,structcompb);voidsort(structcomp*pa,intn);返回结构数据、结构指针的函数structcompmax(structcompp,intn);structcomp*findmax(structcomp*p,intn);(17)程序运行时,第1行输出(17) 。A、321B、21C、123D、12(18)程序运行时,第2行输出(18) 。A、21B、12C、3D、1(19)程序运行时,第3行输出(19) 。A、3B、123C、1D、321(20)程序运行时,第4行输出(20) 。A、123B、1C、3D、321CAAD

76、#include(07-1)structstcharc;chars80;char*f(structstt);voidmain()intk;structsta4=1,123,2,321,3,123,4,321;for(k=0;k4;k+)printf(“a=%sn”,f(ak);char*f(structstt)intk=0;while(t.sk!=0)if(t.sk=t.c)returnt.s+k;k+;returnt.s;文件#includevoidmain()FILE*fp1;/定义fp1为指向文件类型的指针变量charch;if(fp1=fopen(“aa.txt”,“w”)=NULL)

77、/创建或打开文件printf(cantopenaa.txt!);exit(1);/关闭所有文件,终止程序的执行,返回操作系统while(ch=fgetc(fp1)!=EOF)/从fp1指向文件顺序读字符至文件末尾putchar(ch);/while(!feof(fp1)ch=fgetc(fp1);putchar(ch);fclose(fp1);/文件操作结束,关闭文件指针fp指向的文件文件nch=fgetc(fp);从fp指向的文件中读取一个字符并赋给字符变量ch。若遇到文件结束符,返回文件结束标志EOF。fputc(A,fp);将字母A写入到fp所指向的文件中。若写入成功返回写入的字符,若写

78、入失败则返回EOFwhile(ch=fgetc(fp1)!=#)fputc(ch,fp2);nfgets(str,n,fp1)和fputs(str,fp1)非格式化读/写字符串操作fscanf()和fprintf()对文件进行格式化读写操作(可读写多种类型数据)while(fscanf(fp1,”%c”,&ch)!=EOF)fprintf(fp2,”%c”,ch);remove(“aa.txt”);删除指定文件rename(“aa.txt,“bb.txt);文本文件文本文件(ASCII文件文件)二进制二进制文件文件作作 用用rrb以以只只读方式打开一个方式打开一个输入用的入用的已存已存文件文件

79、wwb以以只写只写方式新建文件,若文件已存方式新建文件,若文件已存则刷新刷新aab在文件尾部在文件尾部追加追加数据,若文件不存在数据,若文件不存在则创建建r+rb+以以读/写方式打开已存文件写方式打开已存文件w+wb+以以读/写方式新建文件,若文件存在写方式新建文件,若文件存在则刷新刷新a+ab+以可以可读/可追加方式打开文件,若文件不存在可追加方式打开文件,若文件不存在则创建建表表11.1 C语言中文件的访问方式语言中文件的访问方式 下一张下一张上一张上一张【例】将文本文件”d:datad1.txt”中字符复制到”d:datad2.txt”中,其中空格字符不复制。#includevoid m

80、ain() FILE *fp1,*fp2; char ch; if ( (fp1=fopen(“d:datad1.txt ”,“r”)= =NULL) /以读方式打开已存在文件以读方式打开已存在文件 printf(Cannot open file n); exit(1); if ( (fp2=fopen( d:datad1.txt ,w)=NULL) /以写方式创建文件以写方式创建文件 printf(Cannot open file n); exit(1); while( (ch =fgetc(fp1) )!=EOF) /当读入字符不是文件结束符时,执行循环当读入字符不是文件结束符时,执行循环 if (ch!= ) fputc(ch,fp2); /将非将非 字符写入目标文字符写入目标文件件 fclose(fp1); fclose(fp2);下一张下一张上一张上一张#include?函数类型函数名(数据类型变量名,)变量类型定义输入?if、while、for结构?计算公式?输出?return?voidmain()变量类型定义函数声明?输入?if、while、for结构?计算公式?输出?下一张下一张上一张上一张nEND!谢谢观赏WPS OfficeMake Presentation much more funWPS官方微博kingsoftwps

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号