1、C语言笔记注意:在C语言中,关键字都是小写的。C语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字:auto break case default char const continue do while double else enum extern float for goto if int long register return short signed static sizof struct switch typedef union unsigned void volatile 9种控制语句,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分。Turbo C扩充了
2、11个关键字:asm _cs _ds _es _ss cdecl far huge interrupt near pascal#define 八进制以0开头,如0123,即(123)8十六进制以0x开头,如0123,即(123)16整型: 一个正数的补码和其原码形式相同,如10得0000000000001010一个负数的补码是取-10的绝对值10,对10的二进制形式取反加1,1111111111110101+1=1111111111110110Signed int unsigned int short long char float 单精度double 双精度 ,long double%d,
3、%o,%x, %c,%s, 一个整常量后面加一个字母l或L,则认为是long int main() / main是主函数的函数名,表示这是一个主函数。printf(世界,您好!n); / printf函数的功能是把要输出的内容送到显示器去显示#include / include称为文件包含命令#includemain()double x,s; /定义两个实数变量,以被后面程序使用printf(input number:n); /显示提示信息scanf(%lf,&x); /从键盘获得一个实数xs=sin(x); /求x的正弦,并把它赋给变量sprintf(sine of %lf is %lfn,
4、x,s); /显示程序运算结果在本例中,使用了三个库函数:输入函数scanf,正弦函数sin,输出函数printf。sin函数是数学函数,其头文件为math.h文件scanf和printf是标准输入输出函数,其头文件为stdio.h语言规定,源程序中所有用到的变量都必须先说明,后使用C语言规定对scanf和printf这两个函数可以省去对其头文件的包含命令由于sin函数要求这两个量必须是双精度浮点型,故用类型说明符double来说明这两个变量scanf和 printf这两个函数都由以下两部分组成:“格式控制串”,参数表格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型pr
5、intf(sine of %lf is %lfn,x,s);其中%lf为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了x和s两个变量。其余字符为非格式字符则照原样输出在屏幕上。在程序的每行后用/*和*/括起来的内容为注释部分,程序不执行注释部分。int max(int a,int b); /*函数说明*/main() /*主函数*/int x,y,z; /*变量说明*/int max(int a,int b); /*函数说明*/printf(input two numbers:n);scanf(%d%d,&x,&y); /*输入x,y值*/z=max(x,y); /*调用max函
6、数*/printf(maxmum=%d,z); /*输出*/int max(int a,int b) /*定义max函数*/if(ab) return a;else return b; /*把结果返回主调函数*/从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则:1.一个说明或一个语句占一行。 2.用 括起来的部分,通常表示了程序的某一层次结构。一般与该结构语句的第一个字母对齐,并单独占一行。 3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。空白符: 空格符、制表符、换行符等统称为空白符在语言中使用的词汇分为六类:标识
7、符,关键字,运算符,分隔符,常量,注释符等。1.标识符(在程序中使用的变量名、函数名、标号等统称为标识符)C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。(1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。(2)在标识符中,大小写是有区别的。(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。2.关键字(关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同) (1
8、)类型说明符: 如前面例题中用到的int,double等 (2)语句定义符: if else就是条件语句的语句定义符(3)预处理命令字: include3.运算符:4.分隔符: 在语言中采用的分隔符有逗号和空格两种5.常量: C 语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。6.注释符: C 语言的注释符是以“/*”开头并以“*/”结尾的串#define PRICE 30 /*#define 定义PRICE代表常量30*/ PRICE是符号常量习惯上符号常量用大写,变量用写小写例如:整型变量a和b,可以进行求余运算: a%b (%是求余符号) 若指定a和b为实
9、型变量,则不允许进行”求余”运算. 整型八进制以0开头的数是八进制.如0123表示八进制123,即(123)8, 其值为1X82+2X81+3X80十六进制以0x开头的数是十六进制.如0x123表示十六进制123,即(123)16, 其值为1X162+2X161+3X160在C编译系统,每一个整型变量在内存中占2个字节.实际上,数值是以补码表示的.一个正数的补码和其原码的形式是相同.而负数的补码是将该值的绝对值的二进制形式,按位取反再加1.例如:求-10的补码,取-10的绝对值为10,然后10的二进制为1010,对1010(00000000 00001010)取反,11111111 11110
10、101,一共占16个字节,再加1为11111111 11110110整数的16位中,最左面的一位是表示符号,该位为0表示数值为正,该位为1则数值为负Signed int 有符号 -32768-32767 unsigned int 无符号 0-65535short int 短整型 long int 长整型. 不一样的微机,位数是不一样的.整型 int%d ,%0, %x实型float double%f字符型 char 一个字符变量在内存中占一个字节%cPrintf(“%f, %d, %cn”,a,b,c);ddd : 1到3位8进制数所代表的字符如:101(八进制)为65(二进制)的字符”A”注
11、意:”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(十进制)” :双
12、引号字符, ASCII代码为34(十进制)字符串常量a是字符常量(是用一对单引号括起来的), ”a”是字符串常量(是用一对双引号括起来的)C规定在每一个字符串的结尾加一个”字符串结束标志”,是以字符0作为字符结束标志,从ASCII代码表中可以看到ASCII码为0的字符是”空操作字符”各类数值型数据间的混合运算如字符数据必定先转换为整数,short型转换为int型,float型数据在运算时一律先转换成双精度型,即是二个全是float型也要先转换成double型.Char shortlint unsignedlongdoublefloat运算符优先级和结合性级别类别含义运算符结合方向1强制转换、数
13、组、结构、联合圆括号( )自左至右下标运算符 指向结构成员运算符或结构体成员运算符-或.2逻辑逻辑非!自右至左(单目运算符)字位按位取反增量自增(加一)+减量自减(减一)-指针地址与运算符(取地址)&指针运算符(取内容)*算术负号运算符(单目减)-长度计算长度计算sizeof3算术乘*自左至右(双目运算符)除/求余(取模)%4算术和指针运算加+减-5字位左移6关系大于等于=大于小于等于=小于y) z=x; else z=y;(2)函数调用语句: printf(“This is a C statement.n”);(3)表达式语句: a=3;(一个赋值表达式)(4)空语句: ; (即只有一个分号
14、语句)(5)复合语句: z=x+y; t=z/100; printf(“%fn”,t);输入输出函数#include 或“stdio.h”/*头文件stdio.h*/Scanf()输入函数 printf()输出函数 是系统提供的标准函数#include(预编译命令)Putchar(输出字符)getchar(输入字符)Printf(格式输出)scanf(格式输入)Puts(输出字符串)gets(输入字符串)c语言中include后用引号与尖括号的区别使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,
15、当系统里(如/usr/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。 所以建议: 使用系统里提供的头文件时使用尖括号使用自己编写的头文件时使用双引号输出单个字符:include Main() char a,b,c; a=B; b=Oc=Y; putchar(a); putchar(b); putchar(c); 也可以输出转义字符如: putchar(101); putchar();输入单个字符:getchar()函数没有参数,其一般形式为getchar()
16、字符输入函数#include main() char c; c=getchar(); putchar(c);格式输入输出函数Printf(“%dn”,x);%d么按整型数据的实际长度输出%md么m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出. Printf(“%4d,%4dn”,a,b);若a=123,b=12345则a输出结果为:空格123 则b输出结果为:12345 %ld么输出长整型数据 若long a=1356739;printf(“%9ld”,a); 则a输出结果为: 空格空格1356739%o是以八进制形式输出整数.%x是以十六进制形式输
17、出整数.%u 用来输出unsigned型数据,即无符号数,以十进制形式输出.%c用来输出一个字符.char a=w;printf(“%c”,w);%s用来输出一个字符串.printf(“%s”,”CHINA”);%ms输出的字符占m列,如字符串本身长度大于m则突破m的限制,全部输出字符串,若串长小于m,则左补空格.%-ms如果串长小于m则在m列范围内,字符串向左靠,右补空格.%m.ns输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的右端,左补空格.%-m.ns输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的左端,右补空格.nm,则m自动取n值,即保证n个字符正常输出.%
18、f用来输出实数(单精度和双精度),以小数形式输出.%e以指数形式输出实数,输出数据所占的宽度和数字部分小数位数由系统自动指定给出6位小数,指数部分占5列(如e+002),其中e占一位,指数符号占一位,指数占3位%g用来输出实数,它根据数值大小自动选f格式或e格式.Scanf输入函数scanf(“%d,%d,%d”,&a,&b,&c)#include main() int a,b,c; scanf(%d,%d,%d,&a,&b,&c);/*输入这三个数的时候”,”逗号也要输的.*/ printf(%d,%d,%dn,a,b,c); getch();若: scanf(%d%d%d,&a,&b,&c
19、);输入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、 遇空格,或按回车或跳格(ab)键;2、 按
20、指定的宽度结束,如“d”,只取列;3、 遇非法输入;例:输入三角形的三边长,求三角形面积 s=1/2(a+b+c) area=根号s(s-a) (s-b) (s-c)Float a,b,c,area,s; scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/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.2fn”,a,b,c,s);printf(“area=%7.2fn”,area);If语句If与else的配对关系:else总是与它上面的最近的if配对.If与else
21、的数目一样时,采用 If() main() If() 语句1 int x,y; Else 语句2 scanf(“%d”,&x); Else if(x0) y=-1; If() 语句3 else if(x=0) y=0; else y=1; Else 语句4 printf(“x=%d,y=%dn”,x,y);If与else的数目不一样时,采用加花括号来确定 getch();/*能显示输出*/If() if() 语句1 Else 语句2 判断某一年是否闰年其中一种方法main() int year,leap;printf(input year:);scanf(%d,&year); if(year%
22、4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0;if(leap) printf(%d yesn,year);else printf(%d no yearn,year);getch();/*判断某一年是否闰年另一种方法*/#include void main() int year; printf(input year:);scanf(%d,&year); if(year%4=0)&(year%100!=0)|(year%400=0) printf(%d yesn,year);else
23、 printf(%d no yearn,year);getch();条件运算符(三目运算符,自右至左)main() int x,y,max;scanf(%d,%d,&x,&y);max=(xy) ? x:y; /*如果(ab)条件为真,则条件表达式取值a,否则取值b*/printf(%dn,max);getch();/*能显示输出*/*输入一个字符,判断大小写,如果是大写,转换成小写,并输出最后得到的字符*/Main() char ch; Scanf(“%c”,&ch); If(ch=A& ch=A& ch60n”);break;/*求方程的解*/#include /*输入输出函数要调用,也可
24、以不写*/#include /*用到绝对值函数和开根号函数,所以要调用*/main() float a,b,c,disc,x1,x2,realpart,imagpart; /*定义类型*/scanf(%f,%f,%f,&a,&b,&c); /*输入方程的三个数*/printf(the equation); /*显示the equation,意思是方程*/ if(fabs(a)=pow(10,-6) printf(is not a quadratic); /*对a求绝对值,判断a=0(fabs(a)=le-6)就不是二次方程*/ else disc=b*b-4*a*c; /*计算b*b-4*a*
25、c的值是等于还是小于还是大于0*/ if(fabs(disc)pow(10,-6) /*大于0后有两个不等实根*/ x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(has two equal roots:%8.4f and %8.4fn,x1,x2); else realpart=-b/(2*a); /*小于0后有两个共轭复根的实部*/ imagpart=sqrt(-disc)/(2*a); printf(has complex roots:n); /*has complex roots是有复杂的根源的意思*/ printf(%
26、8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); getch();说明:le-6 :是科学计数法,表示10的-6次方, 用函数是pow(10,-6) 不用0来判断,用一个很小的数就认为disc是0,是为了产生误差,因为实数在计算和存储时会有一些微小的误差。 /* 算运费 */#include main() int c,s; float f,d,p,w; /*总运费f(freight货物),基本运费p(price价格),货物重w(weight重量),距离s,折扣d(discount)*/ print
27、f(input number:n); scanf(%f,%f,%d,&p,&w,&s); if(s=3000) c=12; else c=s/250; switch(c) case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4: case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15;break; f=p*w*s*(1-d/100.0); printf(freight=%fn,f); g
28、etch();Goto语句为无条件转向语句,形式: goto 语句标号; 语句标号用标识符表示,它的定名规则与变量名相同.即字母,下划线,数字.一般来说来两种用途:1、 与if语句一起构成循环结构;2、 从循环体中跳转到循环体外.但在C语言中可以用break语句和continue语句跳出本层循环和结束本次循环.用if语句和goto语句构成循环,求1+2+3+.+99+100#include main() int sum=0,i=1;loop: if(i=100) sum=sum+i; i+; goto loop; printf(sum=%dn,sum); getch();While语句用来实现
29、当型循环结构,一般形式:while(表达式) 语句当表达式非0值时执行while语句中的内嵌语句,先判断表达式后执行语句/* 用while语句构成循环,求1+2+3+.+99+100 */#include main() int sum=0,i=1; while(i=100) sum=sum+i; i+; /*如果不加花括弧则while语句的范围只到“sum=sum+i”*/ printf(sum=%dn,sum); getch();Do 循环体While(表达式) Do-While是循环语句特点是先执行循环体,然后判断循环条件是否成立/* 用do-while语句构成循环,求1+2+3+.+99
30、+100 */#include main() int sum=0,i=1; do sum=sum+i; i+; while(i=100); printf(sum=%dn,sum); getch();按esc后一个一个显示输出/* 用do-while语句构成循环,求1+2+3+.+99+100 */#include main() int sum=0,i=1; do sum=sum+i; i+; printf(sum=%dn,sum); getch(); while(i=100); printf(sum=%dn,sum); getch();For语句格式: for(循环变量赋初值;循环条件;循环变
31、量增值;) 语句; 表达式1 表达式2 表达式3先求解表达式1。再求解表达式2,若值为真,则执行for语句中的内嵌语句,然后就求解表达式3,若为假则结束循环。1、“表达式1”可以省略 for(;表达式2;表达式3) 语句; /*分号不能少*/2、“表达式2”省略即不判断循环条件,循环将无终止地进行下去。3、“表达式3”也可以省略,如i+不放在“表达式3”,而作为循环体的一部分效果是一样的。4、全部省略么不赋值,不判断,不增量,无终止地执行循环体。5、for (i=0;(c=getchar()!=n; i+=c;) 终端接收一个字符给C,判断表达式的值是否不等于n(换行符) for (;(c=g
32、etchar()!=n;) 则输入Computer 输出则也是Computerbreak语句和continue语句break是终止整个循环的执行;continue只是结束本次循环;if(fabs(a)=pow(10,-6)的意思是if(a=0)头文件:#include pow(x,y)函数是求Xy的值,几的几次方。Pow(x,y)函数是计算Xy的值 函数原型:double pow(double x,double y)Abs(x)函数是求整数x的绝对值 函数原型:int abs(int x)Fabs(x)函数是求双精度实数的绝对值 函数原型:double fabs(double x)Sqrt(x
33、) 函数是开根号子 函数原型:double sqrt(double x)摄氏温度C=5/9(F华氏温度-32)数 组一维数组 类型说明:数组名常量表达式 如:int a10; 表示数组名为a,此数组有10个元素。数组必须先定义后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。main() int i,a10;for(i=0;i=0;i-) printf(“out number %dn”,ai); /*从9到0输出*/getch();/*输出数字101到110*/ /*输入数字,从此数字后输出10个数*/#include #include main() main() int i,t=100,a10; int i,t,a10; for(i=0;i=9;i+) printf(intput number:); scanf(%d,&t); t+ ; for(i=0;i=9;i+) ai=t; t
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100