专插本C语言简便总结复习_第1页
专插本C语言简便总结复习_第2页
专插本C语言简便总结复习_第3页
专插本C语言简便总结复习_第4页
专插本C语言简便总结复习_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

C语言笔记注意:在C语言中,关键字都是小写的。C语言简洁、紧凑,使用方便、灵活。ANSIC一共只有32个关键字:autobreakcasedefaultchar const continuedowhiledoubleelseenum extern floatforgotoifintlongregister return shortsignedstaticsizofstruct switch typedefunionunsignedvoidvolatile9种控制语句,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分。TurboC扩充了11个关键字:asm_cs_ds_es_sscdeclfarhugeinterruptnearpascal#define八进制以0开头,如0123,即(123)8十六进制以Ox开头,如0123,即(123)16整型:一个正数的补码和其原码形式相同,如10得0000000000001010一个负数的补码是取-10的绝对值10,对10的二进制形式取反加1,101+1=110Signedintunsignedintshortlongcharfloat单精度double双精度,longdouble%d,%o,%x, %c,%s, —个整常量后面加一个字母丨或L,则认为是longintmain()个说明或一个语句占一行。用{}括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。空白符:空格符、制表符、换行符等统称为空白符在C语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等1•标识符(在程序中使用的变量名、函数名、标号等统称为标识符)C规定,标识符只能是字母(A〜Z,a〜z)、数字(0〜9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。⑴标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。在标识符中,大小写是有区别的。标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。2•关键字(关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同)(1)类型说明符:如前面例题中用到的int,double等(2)语句定义符:ifelse就是条件语句的语句定义符(3)预处理命令字:include3•运算符:4•分隔符:在C语言中采用的分隔符有逗号和空格两种5•常量:C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。6•注释符:C语言的注释符是以"/*"开头并以"*/"结尾的串#definePRICE30/*#define定义PRICE代表常量30*/ PRICE是符号常量习惯上符号常量用大写,变量用写小写例如:整型变量a和b,可以进行求余运算:a%b(%是求余符号)若指定a和b为实型变量,则不允许进行”求余”运算.整型八进制以0开头的数是八进制.如0123表示八进制123,即(123)8其值为1X82+2X81+3X8。8,十六进制以0x开头的数是十六进制•如0x123表示十六进制123,即(123)16,其值为1X162+2X161+3X160在C编译系统,每一个整型变量在内存中占2个字节.实际上,数值是以补码表示的•一个正数的补码和其原码的形式是相同•而负数的补码是将该值的绝对值的二进制形式,按位取反再加1.例如:求-10的补码,取-10的绝对值为10,然后10的二进制为1010,对1010(0000000000001010)取反,,一共占16个字节,再加1为整数的16位中,最左面的一位是表示符号,该位为0表示数值为正,该位为1则数值为负Signedint有符号-32768-32767unsignedint无符号0-65535shortint短整型longint长整型.不一样的微机,位数是不一样的.整型int%d,%0,%x实型floatdouble%f字符型char一个字符变量在内存中占一个字节%cPrintf(“%f,%d,%c\n”,a,b,c);\ddd:1到3位8进制数所代表的字符如:\101(八进制)为65(二进制)的字符”A”注意:”\0”或”\000”是代表ASCII码为0的控制字符,即”空操作”字符.它将用在字符串中.\xhh:1到2位16进制数所代表的字符\n:换行,将当前位置移到下一行开头,ASCII代码为10(十进制)\t:水平制表(跳到下一个tab位置),制表区占8列,ASCII代码为9(十进制)\b:退格,将当前位置移到前一列,ASCII代码为8(十进制)\r:回车,将当前位置移到本行开头,ASCII代码为13(十进制)\f:换页,将当前位置移到下页开头,ASCII代码为12(十进制)\\:反斜杠字符”\”,ASCII代码为92(十进制)\':单引号(撇号)字符,ASCII代码为39(十进制)\”:双引号字符,ASCII代码为34(十进制)字符串常量‘a'是字符常量(是用一对单引号括起来的),"a"是字符串常量(是用一对双引号括起来的)C规定在每一个字符串的结尾加一个”字符串结束标志”,是以字符'\0'作为字符结束标志,从ASCII代码表中可以看到ASCII码为0的字符是”空操作字符”各类数值型数据间的混合运算如字符数据必定先转换为整数,short型转换为int型float型数据在运算时一律先转换成双精度型即是二个全是float型也要先转换成double型.Charshortlfintfunsignedflongfdoubleafloat运算符优先级和结合性级别类别含义运算符结合方向1强制转换、数组、结构、联合圆括号()自左至右下标运算符[]指向结构成员运算符或结构体成员运算符->或2逻辑逻辑非!自右至左(单目运算符)字位按位取反2增量自增(加一)++减量自减(减一)--指针地址与运算符(取地址)&指针运算符(取内容)*算术负号运算符(单目减)-长度计算长度计算sizeof3算术乘*自左至右(双目运算符)除/求余(取模)%4算术和指针运算加+减-5字位左移<<右移>>6关系大于等于>=大于>小于等于<=小于<7等于(恒等于)==

不等于!=8字位按位与&9按位异或A10按位或|11逻辑逻辑与&&左结合左结口双目运算符12逻辑或||13条件条件运算14赋值赋值=复合赋值+=*=/=%=》=<<=&=A=1=15逗号逗号运算/-右1结合右结口强制类型转换运算符(double)a将a转换成double类型(int)(x+y)将x+y的值转换成整形,如果写成(int)x+y则只将x转换成int型,然后与y相加(float)(5%3)将5%3的值转换成float型说明:在强制转换时,得到一个所需的类型的中间变量,原来变量的类型未发生变化.求余"%”运算符要求其两侧均为整型量,floatx,则x%3是不合法,必须(int)x%3自增自减运算符(只能用于变量,不能用于常理和表达式)++i是在使用之前先使i的值加(减)1若j=++i;i=3;printf("%d\n”,++j)为4i++是在使用之后使i的值加(减)1若j=i++;i=3;printf("%d\n”,j++)为3-i++中,其中-为负号运算和++为同优先级,而结合方向是自右至左,所以相当于-(i++)(1)控制语句C语言9种控制语句:1、 if()~~~~~~else~~~~~~(条件语句)2、for()~~~~~ (循环语句)3、while()~~~~~ (循环语句)4、 do~~~'~~while()~~~~~~(循环语句)5、 continue (结束本次循环语句)6、break (中止执行switch或循环语句)7、 switch (多分支选择语句)8、goto (转向语句)9、 return (从函数返回语句)

上述括号()表示其中是一个条件,~~~~表示内嵌的语句例:if(x>y)z=x;elsez=y;函数调用语句:printf(“ThisisaCstatement.\n”);表达式语句:a=3;(一个赋值表达式)空语句: ; (即只有一个分号语句)复合语句{}: {z=x+y;t=z/100;printf(“%f\n”,t);}输入输出函数#include<>或“”/*头文件*/Scanf()输入函数printf()输出函数是系统提供的标准函数#include(预编译命令)Putchar(Putchar(:输出字符)Printf(:格式输出)getchar(输入字符)scanf(格式输入)Puts(输出字符串) gets(输入字符串)c语言中include后用引号与尖括号的区别使用尖括号的话,编译时会先在系统inelude目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/usr/include/里)有一个叫做的头文件,而你的源代码目录里也有一个你自己写的头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。所以建议:使用系统里提供的头文件时使用尖括号使用自己编写的头文件时使用双引号输出单个字符:#include<>Main(){chara,b,c;a=‘B';b=‘O'c=‘Y';putchar(a);putchar(b);putchar(c);}也可以输出转义字符如:putchar(‘\101');putchar(‘\'');输入单个字符:getchar()函数没有参数,其一般形式为getchar() 字符输入函数#include<>main(){charc;c=getchar();putchar(c);}格式输入输出函数Printf(“%d\n”,x);%d么按整型数据的实际长度输出%md么m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出.Printf("%4d,%4d\n”,a,b)若a=123,b=12345则a输出结果为:空格123则b输出结果为:12345%ld么输出长整型数据若longa=1356739;printf(“%9ld”,a);则a输出结果为:空格空格1356739%o是以八进制形式输出整数.%x是以十六进制形式输出整数.%u用来输出unsigned型数据,即无符号数,以十进制形式输出.%c用来输出一个字符.chara='w';printf("%c”,w);%s用来输出一个字符串.printf("%s”,”CHINA”);%ms输出的字符占m列,如字符串本身长度大于m则突破m的限制,全部输出字符串,若串长小于m,则左补空格.%-ms如果串长小于m则在m列范围内,字符串向左靠,右补空格.%输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的右端,左补空格.%输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的左端,右补空格.n>m,则m自动取n值,即保证n个字符正常输出.%f用来输出实数(单精度和双精度),以小数形式输出.%e以指数形式输出实数,输出数据所占的宽度和数字部分小数位数由系统自动指定给出6位小数,指数部分占5列(如e+002),其中e占一位,指数符号占一位,指数占3位%g用来输出实数,它根据数值大小自动选f格式或e格式.Scanf输入函数scanf(“%d,%d,%d”,&a,&b,&c)#include<>main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);/*输入这三个数的时候丫逗号也要输的•*/printf("%d,%d,%d\n",a,b,c);getch();}若:scanf("%d%d%d",&a,&b,&c);输入a,b,c三个数时,12空格13空格88Scanf(“%3d%3d”,&a,&b);输入:123456,系统自动把123赋给a,456赋给bScanf(“%3c”,&ch);输入:abc,由于ch只能容纳一个字符,系统就把第一个字符'a'赋给ch如果%后面有一个”*”附加说明符,表示跳过它指定的列数.如:scanf("%2d%*3d%2d”,&a,&b);输入:12空格345空格67回车,将12赋给a,%*3d表示读入3位整数但不赋给任何变量.然后再读入2位整数67赋给b.第二组数据345被跳过.在输入数据进,遇以下情况时数据认为结束:1、 遇空格,或按回车或跳格(Tab)键;2、 按指定的宽度结束,如“%3d”,只取3列;

3、遇非法输入;例:输入三角形的三边长,求三角形面积s=1/2(a+b+c) area=®号s(s-a)(s-b)(s-c)Floata,b,c,area,s;scanf(“%f,%f,%f”,&a,&b,&c);s=2*(a+b+c);Area=sqrt(s*(s-a)*(s-b)*(s-c));Printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);printf(“area=%7.2f\n”,area);If语句If与else的配对关系:else总是与它上面的最近的if配对.If与else的数目一样时If与else的数目一样时,采用If()If()语句1Else语句2ElseIf()语句3Else语句4If与else的数目不一样时,釆用加花括号来确定If(){if()语句1}Else语句2判断某一年是否闰年其中一种方法main(){intyear,leap;printf("inputyear:");scanf("%d",&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf("%dyes\n",year);elseprintf("%dnoyear\n",year);getch();}main(){intx,y;scanf(“%d”,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);getch();/*能显示输出*/}/*判断某一年是否闰年另一种方法*/#include<>voidmain(){intyear;printf("inputyear:");scanf("%d",&year);if(((year%4==0)&&(year%100!=0))||(year%400==0))printf("%dyes\n",year);elseprintf("%dnoyear\n",year);getch();}条件运算符(三目运算符,自右至左)main(){intx,y,max;scanf("%d,%d",&x,&y);max=(x>y)x:y;/*如果(a>b)条件为真,则条件表达式取值a,否则取值b*/printf("%d\n",max);getch();/*能显示输出*/}/*输入一个字符,判断大小写,如果是大写,转换成小写,并输出最后得到的字符*/Main(){charch;Scanf(“%c”,&ch);If(ch>=‘A'&&ch<=‘Z'){ch=ch+32;printf(“%c\n”,ch);}/*去掉花括号将编译出错*//* ch=(ch>=‘A'&&ch<=‘Z')(ch+32):ch 也可以用条件运算符*/Elseprintf(“%c\n”,ch);getch();/*能显示输出*/Switch语句是多分支选择语句Switch(表达式)表达式的值与某一个case后面的常量表达式的值相等时就执行case后面的语句{case常量表达式1语句1;break;每一个case常量表达式的值必须互不相同case常量表达式2:语句2 ;break;执行一个分支后可以用一个break语句来终止switch语句的执行case常量表达式3:语句3 ;break;case常量表达式n:语句n;break;default:语句n+1;最后一个分支default可以不加break语句。}Case后面包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句Switch(表达式)表达式的值为A或B或C时都执行同一组语句case‘A':case‘B':case‘C':case‘D':printf(">60\n”);break;/*求方程的解*/#include<> /*输入输出函数要调用,也可以不写*/#include<> /*用到绝对值函数和开根号函数,所以要调用*/main(){floata,b,c,disc,x1,x2,realpart,imagpart; /*定义类型*/scanf("%f,%f,%f",&a,&b,&c); /*输入方程的三个数*/printf("theequation"); /*显示theequation,意思是方程*/讦(fabs(a)<=pow(10,-6))printf("isnotaquadratic");/*对a求绝对值,判断a=0(fabs(a)<=le-6))就不是二次方程*/elsedisc=b*b-4*a*c; /*计算b*b-4*a*c的值是等于还是小于还是大于0*/if(fabs(disc)<=pow(10,-6))printf("hastwoequalroots:%8.4f\n",-b/(2*a));/*hastwoequalroots是有两个相等的根的意思,这个判断是等于0后有两个相等实根*/elseif(disc>pow(10,-6)) /*大于0后有两个不等实根*/{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hastwoequalroots:%8.4fand%8.4f\n",x1,x2);}else{realpart=-b/(2*a);/*小于0后有两个共轭复根的实部*/imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");/*hascomplexroots是有复杂的根源的意思*/printf("%8.4f+%\n",realpart,imagpart);printf("%8.4f-%\n",realpart,imagpart);}getch();}说明:le-6:是科学计数法,表示10的-6次方,用函数是pow(10,-6))不用0来判断,用一个很小的数就认为disc是0,是为了产生误差,因为实数在计算和存储时会有一些微小的误差。/*算运费*/#include<>main(){intc,s;floatf,d,p,w; /*总运费f(freight货物),基本运费p(price价格),货物重w(weight重量),距离s,折扣d(discount)*/printf("inputnumber:\n");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/;printf("freight=%f\n",f);getch();}Goto语句为无条件转向语句,形式:goto语句标号;语句标号用标识符表示,它的定名规则与变量名相同.即字母,下划线,数字.一般来说来两种用途:1、 与讦语句一起构成循环结构;2、从循环体中跳转到循环体外.但在C语言中可以用break语句和continue语句跳出本层循环和结束本次循环.用if语句和goto语句构成循环,求1+2+3+ +99+100#include<>main(){intsum=0,i=1;loop: if(i<=100){sum=sum+i;i++;gotoloop;}printf("sum=%d\n",sum);getch();}While语句用来实现当型循环结构,一般形式:while(表达式)语句当表达式非0值时执行while语句中的内嵌语句,先判断表达式后执行语句/*用while语句构成循环,求1+2+3+ ..+99+100*/#include<>main(){intsum=0,i=1;while(i<=100){sum=sum+i;i++;} /*如果不加花括弧则while语句的范围只到“sum=sum+i”*/printf("sum=%d\n",sum);getch();}Do循环体While(表达式)Do-While是循环语句特点是先执行循环体,然后判断循环条件是否成立/*用do-while语句构成循环,求1+2+3+ ・・+99+100*/#include<>main(){intsum=0,i=1;do{sum=sum+i;i++;}while(i<=100);printf("sum=%d\n",sum);getch();}按esc后一个一个显示输出/*用do-while语句构成循环,求1+2+3+ •・+99+100*/#include<>main(){intsum=0,i=1;do{sum=sum+i;i++;printf("sum=%d\n",sum);getch();}while(i<=100);printf("sum=%d\n",sum);getch();}For语句格式:for(循环变量赋初值;循环条件;循环变量增值;) 语句;表达式1 表达式2表达式3先求解表达式1。再求解表达式2,若值为真,则执行for语句中的内嵌语句,然后就求解表达式3,若为假则结束循环。1、“表达式T可以省略for(;表达式2;表达式3)语句;/*分号不能少*/2、“表达式2”省略即不判断循环条件,循环将无终止地进行下去。3、 “表达式3”也可以省略,如i++不放在“表达式3”,而作为循环体的一部分效果是一样的。4、 全部省略么不赋值,不判断,不增量,无终止地执行循环体。5、 for(i=O;(c=getchar())!=‘\n';i+=c;)终端接收一个字符给C,判断表达式的值是否不等于'\n'(换行符)for(;(c=getchar())!='\n';)则输入Computer输出则也是Computerbreak语句和continue语句break是终止整个循环的执行;continue只是结束本次循环;讦(fabs(a)<=pow(10,-6))的意思是if(a=0)头文件:#include<>_pow(x,y)函数是求X的值,几的几次方。Pow(x,y)函数是计算xy的值函数原型:doublepow(doublex,doubley)Abs(x)函数是求整数x的绝对值函数原型:intabs(intx)Fabs(x)函数是求双精度实数的绝对值函数原型:doublefabs(doublex)Sqrt(x)函数是开根号子 函数原型:doublesqrt(doublex)摄氏温度C=5/9(F华氏温度-32)

数组一维数组类型说明:数组名[常量表达式]如如:inta[10];表示数组名为a,此数组有10个元素。数组必须先定义后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。main(){inti,a[10];for(i=0;i<10;i++) a[i]=i;for(i=9;i>=0;i--) printf(“outnumber%d\n”,a[i]);/*从9到0输出*/getch();}/*输出数字101到110*/#include<>main()/*输出数字101到110*/#include<>main(){inti,t=100,a[10];for(i=0;i<=9;i++){t++;a[i]=t;printf("outnumber%d\n",a[i]);}getch();}#include<>main(){inti,t,a[10];printf("intputnumber:");scanf("%d",&t);for(i=0;i<=9;i++){t++;a[i]=t;printf("outnumber%d\n",a[i]);}getch();}一维数组初始化定义成:inta[10]={0,1,2,3,4,5,6,7,8,9};定义成:inta[10]={0,1,2,3,4,5};表示只给前面5个元素赋初值,后面的5个元素值为0/*后一个数是前二个数之和‘Fibonacci数列*/#include<>main(){inta[20]={1,1};inti;for(i=2;i<20;i++)a[i]=a[i-2]+a[i-1];for(i=0;i<20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,a[i]);}getch();}#include<>main(){longinta[30]={1,1};inti;for(i=2;i<30;i++)a[i]=a[i-2]+a[i-1];for(i=0;i<30;i++){if(i%5==0)printf("\n");printf("%12ld",a[i]);}getch();}起泡法对10个数排序(由小到大):将相邻的两个数比较,将小的调到前头。main(){inta[11];inti,j,t;printf(“inpuf10numers:\n”);for(i=1;i<11;i++)scanf(“%d”,&a[i]);printf(“\n”);for(j=1;j<=9;j++) /*因为10个数,所以要要循环j=10-1次*/for(i=1;i<=10-j;i++)/*第j趟要进行n-j次两两比较*/if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(“thesortednumbers:\n”);for(i=1;i<=10;i++)printf(“%d\n”,a[i]);getch();}二维数组类型说明:数组名[常量表达式][常量表达式]如:floata[3][4];3行4列C语言对二维数组采用这样的定义,可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。可以看作是一个一维数组它有3个元素a[0],a[1],a[2]每个元素又包含有4个元素的一维数组。二维数组初始化inta[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12} };inta[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12 };a[3][4]={{1},{5},{9}};只对各行第1列赋值,其余元素值自动为0/*将二维数组行和列互换,存到另一个二维数组*/#include""main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n"); /*array阵列*/for(i=0;i<=1;i++) /*行*/{for(j=0;j<=2;j++) /*列*/{printf("%6d",a[i][j]);b[j][i]=a[i][j]; /*赋值给b[j][i]值*/}printf("\n");}printf("arrayb:\n"); /*以下是数组b输出*/for(i=0;i<=2;i++) for(j=0;j<=2;j++){for(j=0;j<=1;j++) {for(i=0;i<=1;i++)printf("%6d",b[i][j]); printf("%6d",b[j][i]);printf("\n"); printf("\n");} } /*左右两部分输出结果一样的*/getch();}/*一个3X4矩阵,求出其中最大值的那个元素的值及所在的行号和列号*/#include""main(){inti,j,row=0,colum=0,max;/*row行\排colum列*/inta[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]>max){max=a[i][j];row=i;colum=j;}pritntf(“max=%d,row=%d,colum=%d\n”,max,row,colum);getch();}字符数组:用来存放字符数据的数组,一个元素存放一个字符.初始化charc[10];c[0]=‘I';c[1]=‘';c[2]=‘a';c[3]=‘m';c[4]=‘';c[5]=‘h';c[6]=‘a';c[7]=‘p';c[8]=‘p';c[9]=‘y';字符型与整型是互相通用,所以也可以定义intc[10];初始化:charc[10]={T,‘''a:'m',‘'‘h''a''p''p''y'};如果初值个数小于数组长度,将剩下的元素自动定为空字符“\0”也可以定义二维字符数组chara[5][5]={{''''''''''},{''''''''''},{''''''''''},{''''''''''},{''''''''''}};单引号中间就是想赋的值C语言中将字符串作为字符数组来处理。C语言规定了一个“字符串结束标志”,以字符'\0'代表。系统对字符串常量也自动加一个'\0'作为结束符。说明:'\0'代表ASCII码为0的字符,是一个不可以显示的字符,而是一个“空操作字符”单个字符作初值用单引号,字符串是用双引号。charc[10]={“China”};前面5个元素为'C','h','i','n','a',第6个为'\0',后4个元素为空字符,所以也是‘\0'字符数组的输入输出逐个字符输入输出,用格式符“%C” 输入或输出一个字符。将整个字符串一次输入或输出,用格式符“%s”输入或输出一串字符。输出字符不包括结束符'\0'用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。如写成printf("%s”,c[O]);是不对的。应为:printf("%s”,c);定义:chara[13];Scanf("%s”,a);若输入:Howareyou回车而只将第一个空格前的“How”送到a中。注意:scanf函数中输入项是字符数组名。输入项是字符数组名时,不要再加地址符&,因为在C语言中数组名代表该数组的起始地址,Scanf("%s”,&a);这样的写法是不对的。printf(“%o”,c);可以输出数组C的起始地址。puts(字符数组,输出字符串)charstr[]={“China\nBeijing”};puts(str);gets(字符数组,输入字符串)定义:charstr[];gets(str);若输入:Computer回车,将所输入的字符串送给字符数组str,8个字母加一个自动加上去的'\0'共9个字符送入str。注意:puts和gets函数只能输入或输出一个字符串。不能写成:puts(str1,str2)或gets(str1,str2)Strcat(字符数组1字符数组2)是字符串连接,作用:连接两个字符数组中的字符串,把字符2接到字符1的后面,结果放在字符数组1中。字符数组1必须足够大,以便容纳连接后的新字符串。charstr1[30]={"People'sRepublicof”};charstr2[]={"China”};printf(“%s”,strcat(str1,str2));输出:People'sRepublicofChinastrcpy(字符数组1字符串2)是字符串复制。作用:将字符串2复制到字符数组1中去。字符数组1必须足够大,以便容纳被复制的字符串。字符数组1必须写成数组名形式(如str1),字符串2可以是字符数组名也可以是一个字符串常量,如strcpy(str1,“China”);复制时连同字符串后面的'\0'一起复制到字符数组1中。不能用赋值语句将一个字符串常或字符数组直接给一个字符数组•如:str1={"China”};和str1=str2;都是不合法的。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如:chara[5],cl1,cl2;cl1='A';Cl2='B';a[0]='C';a[1]='h'; 以此类推。可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去。如:strncpy(str1,str2,2);Strcmp(字符串1,字符串2)是字符串比较。作用:比较字符串1和字符串2。对两个字符串自左至右逐个字符相比(按ASCII码大小比较)直到出现不同的字符或遇到'\0'为止比较结果由函数值带回:1、 如果字符串1=字符串2,函数值为02、 如果字符串1>字符串2,函数值为正整数3、 如果字符串1<字符串2,函数值为负整数注意:对两个字符串比较,不能用以下形式:if(str1==str2)printf(“yes”);而只能用if(strcmp(str1,str2)==0)printf("yes”);/*输入slzzOOO正确后显示*/#include""main(){charstr1[]={"slzzOOO"};charstr2[16];printf("inputmima:\n");scanf("%s",str2);if(strcmp(str1,str2)==O)printf("ILOVEYOU");elseprintf("NONONONONONONONONO");getch();}strlen(字符数组)是测字符串长度。作用:用来测试字符串长度的函数。函数的值为字符串的实际长度,不包括‘\0'在内。charstr[1O]={“China”};printf(“%d”,strlen(str));strlwr(字符串)是字符串小写。作用:将字符串中大写字母换成小写字母。/*将字符串中大写字母换成小写字母*/#include""main(){charstr[16]={"ChinaWOaiNI"};printf("%s\n",str);printf("%s",strlwr(str));getch();}strupr(字符串)是字符串大写。作用:将字符串中小写字母换成大写字母。/*将字符串中小写字母换成大写字母*/#include""main(){charstr[16]={"ChinaWOaiNI"};printf("%s\n",str);printf("%s",strupr(str));getch();/*输入一行字符,统计有多少个单词,单词之间用空格分隔开*/思路:单词数目可以由空格出现的次数决定(连续的若干空格作为出现一次空格;一行开头的空格不统计在内)。#include""main(){charstr[81];inti,num=0,word=0;/*num为单词数,word=0则表示前一个字符是空格,word=1意味着前一个字符为非空格*/charc;gets(str); /*输入字符串*/for(i=0;(c=str[i])!='\0';i++) /*如果是空操作就结束循环,‘\0'是空操作*/if(c=='')word=0;/*空格键的ASCII码值是032(space键)。如果C为空格,word为0,没有新单词*/else讦(word==0)/*C不是空格,条件满足前一个字符是空格,新单词开始,word为1前一个为非空格*/{word=1;num++;/*单词个数+1*/}printf("Thereare%dwordsintheline.\n",num);getch();}当前为空格,未出现单词,使word为0,num不累加;当前不为空格,前一字符为空格(word=0),新单词出现,num加1,word=1当前不为空格,前一字符非空格(word=1),未出现新单词,num不加1预处理一》宏定义:1、 不带参数:#define标识符常量表达式/*#define是宏定义命令,宏名(标识符)好习惯用大写*/#defineNIL0x80可以用#undefNIL命令终止宏定义的作用域。宏定义定义时可以引用已定义的宏名,可以层层置换如:#defineR#definePI#defineL2*PI*R#defineSPI*R*R2、 带参数:/*相当于小函数*/#define宏名(参数表)字符串/*不仅要时行字符串替换还要进行参数的替换,在宏定义时,宏名与带参数的括弧之间不应该加空格,否则将空格以后的字符串都作为替代字符串的一部分,这可是很容易出错的*/如:#defineSQ(a,b)a*b使用:x=12;y=10;area=SQ(x,y);/*则area=12*10=120*/define金山词霸2009牛津版翻译为确定宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表。调用函数只可得到一个返回值,而宏可以设法得到几个结果。如#definePI#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=*PI*R*R*Rmain(){floatR,L,S,V;printf("INPUTSUZI:\n");scanf("%f",&R);CIRCLE(R,L,S,V);printf("R=%6.2f,L=%6.2f,S=%6.2f,V=%6.2f\n",R,L,S,V);getch();}宏替换不占运行时间,只上编译时间.二》文件包含:#include<文件名〉或#include"文件名"/*在C中用双引用形式更保险,在C51中常用物是尖括弧形式*/include金山词霸2009牛津版翻译为包括用<>尖括号形式时系统到存放C库函数头文件所在的目录中找,这种称为标准方式一个include命令只能指定一个被包含文件.如果文件1包含文件2,而文件2中要用到文件3的内容,则而文件1中要用到两个include命令.

即在文件即在文件1中定义:#include“”用双引号么先在用户当前目录中寻找,若找不到再按标准方式#include“”如果中有全局静态变量,它也在文件中有效,不必用extern声明。条件编译条件编译几种形式:#ifdef标识符

温馨提示

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

评论

0/150

提交评论