C语言要点解析_第1页
C语言要点解析_第2页
C语言要点解析_第3页
C语言要点解析_第4页
C语言要点解析_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第1章C语言程序的基本形 标识 保留字(即关键字 基本数据类 算术表达 第2章流程控 控制表达 Do-while语 if语 条件表达式运算 第3章数组与字符 一维数 多维数 数组元素初始 字符 字符串函 字符函数和字符转换及运 第4章函数与变 函 函数返回 函数的调 递归函数与递归调 外部函数和内部函数(了解 变量的存储类 第5章指 指针和地 指针变量和指针运算 指针与函数参 指针、数组和字符串指 指针数 多级指 返回指针的函 函数指 第6章结构 结构的定 结构数 结构与函 结构的初始 第7章预处理程 什么是预处理程 宏定义和宏替 文件包 条件编 格式化输入/输 第8章枚举、位操 枚 位操作运算 第9章文 二进制文件的存 第1 C语言程序的基本形Cvoid{}C语言程序都是由一个或多个函数(Function)C程序至少必须存在一个函数“main()void{}许多常用的函数做成标准函数与C编译器一起提供给用户,这就是标准库函数。1.1:C Thisprogramissumoftwointegerandtheresultsvoid{inta,b,sum;/*a,bsum为整型变量*/printf(“Thesumof%dand%dis%d\n,a,b,sum);}C语言中所使用的每个函数和变量都应有唯一的名称,这样才能被识别和使用。通常,这种函数和变量名称用一串字符表达,称为标识符。C语言使用的标识符有严格限制:必须以字母或下划线开头,例:正确的函数或变量名 错误的函数或变量名称的实例:3HC2832个,如 ·整数类型单精度浮点型float双精度浮点型double·字符类型·枚举类型enum ·结构类型·联合类型(3)指针类型 0打头0~70x打头0~9A~F0x2C2即shortint 可简化为short unsigned 浮点类型(float型0.012等同于科学计数法中,则用“尾数+e+指数”表示浮点数值,e即exponent(指数)6.3e5其中,6.3就是尾数,含有整数部分(integerpart)6和小数部分(fractionalpart)3,5就是指数(exponent)部分。尾数和指数也都有可能为负值,例如:字符类型(char型ASCII码表中的代码 1byteASCII码表中的某些控制字符不可显示,则通过加反斜线“\‘\0’表示NULL(空 即 即 表示newline(新行或换行) 表示return(回车) 即13 表示反斜线 即1.2:ASCIIvoidmain(){charc1,c2; c1=97;c2=98; #%,}1.3:voidmain(voidmain({charc1,c2;c1='a';c2='b';; %c",c1,}C -、*、/、 、--、 1031 1385++nn1,然后进到具体的式子中运算;nn本身先进入式中运算,n1。n=6,则n--与--n同样类似。2.5。浮点数的除法得到的仍是浮点数,例如:CC类型说明符变量1[,2,…;例如:intnumber;chara,b,c;floatt1;intnumber;1.4:voidvoid{intn1,n2,n3;inttotal;total=n1+n2+n3;/*赋值操作}printf()scanf()C语言的基本输入输出函数,都放在标准函数库中,为了使用它们, [ 104 57·L或 %—d左对齐显示十进制整数intprintf(“Thenumberisd\n”,number);Thenumberisprintf(“Theaverageof%ofand%fand%fis%f\n”,value1,value2,value3,Theaverageof2.3and4.5and6.7is%d和%f表示在相应的位置显示的数据类型,且一一对应。%d表示要显示整型数,%fintnumber;其中,%d表示应以整型格式输入,&numbernumber的地址。%20s20%s

floataverage;其中,%f表示应以浮点型格式输入,&average表示指向average2章逻辑与 逻辑或 逻辑非 0,值为假(false)x=’c’,则表表达式a=b+cb+c单操作数的运算操作符++(1),++(1),-(负号)的结合性也都从右向左。a<b+cforfor void{int}for void{{ }#include<stdio.h>main(){intfori=32;i<127; /*ASCII#include<stdio.h>main(){intfori=32;i<127; /*ASCII32{ /*ASCIIifi+4)%5 printf /*5}}forforforfor语句。2.4:计算五个给定数的阶乘 void{{result*=j; }whilewhile2.51~100 void{intn;}}while#include#includevoid{intnumber,rdigit;}}…}Dowhile-dowhile2.7:倒排数字输出voidmain(){intprintf(“Pleaseinputanumber:”); number= }ififif2.8:比较两个数voidmain(){intprintf(“Pleaseinputtwonumbers\n”);scanf(“%d%d”,&m,&n);printf(“Thefirstnumberis}ifif#include<stdio.h>{intprintf(“Pleaseinputtwonumbers\n”);scanf(“%d%d”,&m,&n);printf(“Thefirstnumberisbigger\n”); /*m<n*/printf(“Thefirstnumberis}/*Thisprogramdeterminesifayearisaleapyaer*/ {intprintf(“Pleaseinputtwoprintf(“%disaleapyear\n”,x); /*printf(“%disnotaleap}语句块1 ifififif

例2.11:有一个函 voidmain({intscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0; /*else包括(x>0)和(x=0)*/ /*else只包括(x>0)*/printf}elseelseif语句对应匹配,if语句用“{”和“}”括起来,即:else-if语

}elseif_else,形成如下格式:if(1)…01 voidmain(){intprintf(“Pleasetypeinanumberx=”);elseif(number==0) /*else包括=0和>0两者*/}?12的值作为整个条件表达式的运算结果。2.13:求最大值.#include<stdio.h>{int 取a和b中大者赋给c printf(“Themaxumis%d”,c);}breakbreakfor,while,doswitch语句中。当执行一个循环体时,在某一特定break语句时,立即退出循环体,且只退出本级循环。2.14: {inti,j; 被乘数大于乘数时跳出内循环*/printf(“%d“,i*j);}}}1 …918273645546372continuecontinue语句执行后,在本次循环中其他语句均不执行,转而继续执行循环体的下一次while﹑dofor#include<stdio.h>{inta,i,n,sum;}printf(“The}switch{case1:1case2:2…casen:n}…3章 grade[n类型说明符数组名C0size-1intx[0,x[1,…,x[43.1:产生斐波那契(Fibonacci)16项#include#include<stdio.h>voidmain(){ibonacci[6,i;1} [size1[xize2]…[sizen其中,size1,size2,…,sizensize1×intd[10[2010×20二维数组,即:[0][[]…09][0][[]…19]…d[9[0]d[9[1]…d[9[19]3.2将一个二维数组行和列元素互换,#includevoid#includevoidmain{staticintstaticintb[3][2],i,j;printf("arraya:\n");for{for{ }}printf("arrayb:\n");for(i=0;i<=2;i++){for}}Cvoid{staticintcounters[5]={0,1,2,3,4}; M[5={0,3-72},{9,0,0,8,-7}{32,staticintx[5]={0,1,2}; /*0*/…}staticinta[]={1,2,3,4,5};ststicfloatf[]={1.2,2.5,3.8,4.0};staticcharword[]={‘H’,’e’,’1’,’1’,’o’,’ staticcharerror[]={“readerror\n”};,空字符就是NULL,即’\0’。一个字符串可看成结尾为’\0’的不定长的一维字符数组。例等同于\ staticcharstaticchar 可用%s的格式显示一个以’\0’结尾的字符串。系统显示字符串遇到空格符’\0’时,就结staticcharx[]={“Hello!”};chars1[20];·&用scanf()输入字符或字符串时,遇到空格或回车结束。这不便于文字处理,一般用#include<stdio.h>voidmain{}

charch;3.3main{staticchardiamond {{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};intfor /*{

for(j=0;j<5;j++) }}* *例 /*“L6-8*/#include"stdio.h"main(){charinti,num=0,word=0;charc; /*string*/for(i=0;(c=string[i])!='\0';i++)if(c=='') /*c为空格,没出现单词*/elseif /*cc为空格,{ }printf("Thereare%dwordsintheline\n",}Cstring.h中,要使用字符串函数必须string.h,即写成:#includeC语言编译器的字符函数放在文件ctype.hctype.h, 若ch为字母或数字,则返回非零值;否则,返回零。 3.5利用二维数组,找出三个字符串的最大者(ASCII)main(){charcharstr[3][20]; inti;forgets(str[i]); /*分别读入三个字符串*/ /*字符串比较 /*字符串str[0]复制到string*/ }4章C1C{ }{} {}#includeintfa(int /*fa{if(n>0) return(1); /*函数体,返回不同的值*/elsereturn(0);}{int /*an} converteastringinlowercaes charuptolow(); /*uptolow()*/voidmain(){charch;printf(“Pleasetypeinaletter\n”);printf(“%c”,uptolow(ch));/**/ 遇到空格字符则结束*/}charuptolow(char /*{}Cvoid{intnumber1,number2,result;intfactorial();printf(“Pleasetypenumber1andscanf(“%d%d”,&number1,&number2);printf(“number1!+number2!=%d”,result);} /*{intresult1=1;{result1*}return /*result1}(形参定义{}floatsum(floata,float{}4.4power()xn,n#includedoublepower(doublexint /*{doublep;if(n>0)for(p=1.0;n>0;n--)elsereturn /*返回函数值}voidmain{doublem=power(12.0,2); /**/printf(“\n计算结果为:%e\n”,m);}类型说明符函数名void 或表示程序结束,从函数返回调用点,return语句。{printf(“programmingisfun\n”);}2)从函数返回调用点,并返回函数的值。{intresult=1;while(n!}}returnretult是被返回的变量,(形参表)(3)a1,a2,…,值,a1,4.5:调用函数求两数之和。floatsum(floata,float /*{}void{ /*}4.6:调用函数求两数之和。void{floatfirst,second,sum();/*sum*/}floatsum(floata,float /*sum(a,b{}例:n的阶乘

n=0 n>0n的阶乘{intresult;result=n*foctorial4(n-1);/**/returnresult;}存储类是extern,则该函数就是外部函数。当函数类型省略时,该函数为外部函数。static(extern)类型标识符函数名(形参表如static fun(inta,intb)/*定义fun为内部函数,函数类型为int*/ f1(inta,intb) /*定义f1为外部函数*/ f2(inta,int 4.7外部函数#includeextern //void{ ifprintf(“\n%d是素数.”,number);printf(“\nd不是素数}intprime(int {intfor(n=2;n<number/2&&flag==1;n++)if(number%n==0) flag=0;} {int printf(“x=%d\n”,x);/*1}{intx; }floatx; }x在三个函数中彼此无关。4.9:x#include<stdio.h>{int{int{intprintf(“x1=%d\n”,x); 3 释放x值3*/printf(“x2=%d\n”,x);/* 输出值为2*/ x2

printf(“x3=%d\n”,x); 1}例4.10:静态局部变量 Programtoillustratelocalandstaticvariables {inti;}{}

intstaticintsv=0;/*静态局部变量每次调用的保留上次调用的值*/4.11:#includeintnumber; /*定义number全程变量*/{printf(“Pleasetypeinthenumber\n”);}{intresult=1; /*定义result局部变量*/ /*直接使用全局变量number*/{}}factorial2()number进行处理,函数调用时也不需要4.12(1)#includemain{int /*main定义变量fori=0;i<3;i*maini{int /*i*/printf("%d,",i);/*i*/}printf("%dd\n",i,j);/*maini} #include<stdio.h>intfunc();int /*voidmain{inti,x; /*自动变量*/fori=0;i<3;i*maini{int /*x*/}}int{printf("%d,",i);}#include#include<stdio.h>voidinner();voidst_pr();charc='A';voidmain(){intfor(i=0;i<3;{}}voidinner{charc='a';} {staticcharc='Z';} 类型说明符…{registerinti;…}…}4.13#include#include<stdio.h>intfac(intn){registerinti,f=1;for(i=1;i<=n;i++)}{inti;}5章 说明指针变量P是指向int类型变量的指针. 说明指针变量s是指向char类型变量的指针。 *f; 说明指针变量f是指向float类型变量的指针。Double staticintpa;说明指针变量paintpa本身的存储 (*pfi)();说明pfiint00值,即为NULLNULL在C语言中又一特殊用处。指针变量虽是正的整数值,但不是整数类型变量。指针变量最基本的运算符是&和*int*p;intm;m的地址赋给整数类型的指针变量pint*p;intm;intn;p所指向的整数类型变量(m)n。其结果与赋m=np。注意,x与*pxx=*px或*px=x。px与&xpx=&x,但决不可写成&x=pxpx=x。

5.1:指针变量的引用。void{ /*p1指向x*/ /*p2指向x*/}void{char /*c的初始值为 /*ccharp的初始值*/ /*c赋值为’B’*/ /*将指针变量charp所指向地址的内容改为’a’*/}sizeofsizeof运算符可以准确地得到在当前所使用的系统中某一数据类型所占字节数。sizeof运11inti,*p;变为原指向的地址+sizeof(类型说明符)*n。指针变量减(-)nn00(NULL)pp==0p!=0p是否为空指针。{ …}*pvoidmain(){floatx,y;shortint*p;p=&x;/*数据类型不符*/…}x,y与*pvoid{intx,*p;…} { staticint staticint*1p=&1oc1; …}5.3:x和yswap1(intx,intswap1(intx,inty){inttemp;}void{inta,b;} 虽然,swap1()函数中,xyx,y是局部变量,主函数对该函数ab之值并未交换。5.4:x和yswap2(intswap2(int*px,int*py){}void{swap2(&a,&b);/*传地址*/} ab的地址,即&a与&binta[0],a[1]…,a[9]。基地址(或称为首地址)a[0]存放的地址。其他依下标顺序排列。 pa[0]p+1a[1]p+2…p+i指向 p为指针,ap=ap+ia[i],a+ia[i]。ap=aa=p,p++a++。Cchar型数组来处理字符串,而数组又可用相应数据类型的指针来处strlen(char*s)strlen(char*s){}void{staticcharstr[]={“Hello! }6e①char或②char*message; void{

chars=“Hello!”;/*s数组*/char*p;p=“Good-bye!”;/*指针指向字符串*/}或strcomp(char*s,char*t){return(*s-*t);/*}void{staticcharchar*s2=“Hello!”;}stfor语句的第一个表达式为空语句。{} s[],char{inti;}strcpy(char*s,char*{{}}

p[2]p[0]p[1]两个指针的指针数组,指向int voidmain(){ staticint *pb[]={b[0],b[1]};**/inti,j;}} b[2][3]b[0]和b[1]pb[0]pb[1]。5.9voidsort(char*name[],intn);voidprint(char*name[],intn);voidmain(){ voidsort(char*name[],int{char*temp;inti,j,k;({forintifif}{voidprint(char*name[],int{intfor}}}}ComputerdesignFollowmeGreat类型说明符**

char5.10:二级指针{ }5.11:#include<stdio.h>{ ; /*ppdi*/}例 staticint*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]**/int**p,i; } 5.13:有若干学生,4门课,要求输入学生序号后,能输出该学生的全部成绩。{staticfloat intprintf("enterthenumberofstuednt:");scanf("%d",&m);printf("ThescoresofNo.%d /**/}{float* /**/}enterthenumberofstudent:1↙ThescoreofNo.1are:

int6C语言中一种强有力的数据类型,是很重要的概念intyear;intmonth;intday;struct{intmonth;intday;intyear;{name[30floatsalary;上面定义了两个结构数据类型,datewage。可用这些已定义的结构类型来说明一组structdatetoday,tomorraw;/*today,tomorraw*/structwageworker1,worker2,worker3;/*定义了三个结构类型变量*/{ … struct{intmonth;intday;intyear;或{intmonth;intday;intyear;或struct {intmonth;intday;intyear;structdate 说明了一个具体的结构变量6.1:显示输入的年、月、日 voidmain(){ {intmonth;intday;intyear;structdatetoday; printf(“Entertoday’sdate(年,月,日)\n”);printf(“Today’sdateis%d/%d%/d\n”,today.year,today.month,}6.2:对外部存储类型的结构体变量的初始化。struct {longintnum;charname[20];charsex;char}a={89031,”LiLin”,’M’,”123BeijingRoad”}; main()}Main{ {longintnum;charname[20];charsex;char}a={89031,”LiLin”,’M’,”123BeijingRoad”}; }struct{name[30floatsalary;staticwagepersons[100例6.4:输入后选人名,对后选人投票计数,统计输出每个人的得票结果。Structperson /*全局结构类型*/{charname[20];intcount; main(){intcharleader_name[20];for(I=1;I<=10;I++) for(j=0;j<3;j++)ifstrcmp(leader_name,leader[j].name)==0) }for}struct{charx;inty;floatz;chars[10 struct {inta,b;charch;{structstarg;} {}struct

温馨提示

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

评论

0/150

提交评论