《c语言教程-浓缩版.docx》由会员分享,可在线阅读,更多相关《c语言教程-浓缩版.docx(106页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章:进制转换问题4第二章C语言初步42S(识符的分类43:类型关键字的分类:54:常量55:变量 (什么类型的存储空间中只能存放相应类型的常量值,注:字符类型除外)67j算术运展符79S强制类型转换710: +自加一自减7第三、顺序结构.83:格式字母 分类84:输出形式:96: 更合语句12第四章选择结构141: C语言中的逻辑值只有两个:真假142S真值用1表示,假值用表示,在使用时要注意所有的非O形式的值都可以理解为真值,就是假值144:关系运算、算术运算、赋值运算之间的优先级问题145Z有关系运算符参与的混合运算146:逻辑运算符和逻辑表达式148:三目ii算符条件表达式19第五章
2、循环结构221:循环的基本要求:226X循环结构作为循环结构的子语句(循环结构的嵌套)307: BREAK 和 CONTINUE语句的用法32第六章 字符型数据341:字符常量:342:在有命令行STDIO.H的前提下,讲两个函数343:解释354S多个不同格式之间不加任何符号输入356:在有命令行STDIO.H的情况下,C语言中、,、NULL意思是等价的35第七章函数371:注意几点372S函数的分类:374:例385: 程序的流程中的问题386S 在程序执行过程中有三个问题39第九章:数组50第十章:字符串743:字符型数组:744:在边定义边赋值时,没有使用完的存储空间中默认存放、。,这
3、个字符常量755t字符串在内存中要占据维字符型数组的存储区域756:字符串和整型数组、字符型数组、实型数组的最大区别是:757: %S的意思:759: 通过程序不形成符甲7610:儿种常见的对字符串处理的函数的使用方法。7711 : 维字符型数组79第十一章对函数的进步讨论821: 主函数中的参数822:指向函数的指针83第十二章:全局变量、局部变量、存储分类851:在函数体外部定义的变量叫 全局变量852:全局变量的作用域从定义语句下面到本程序完为至。85局部变量的作用域从定义语句下面到本函数完为至。853:当全局变量与局部变量同名时,在局部范围内,以局部变量的值为准85第十三章 宏定义、宏
4、代换、动态存储871i 宏定义:87第十四章:结构体、共用体891t定义形式:892:结构体的使用方法:893:结构体变量的定义方法:904:结构体数组的使用907:结构体变量所占据的存储空间是它的各个成员所占据存储空间之和928: 简单的单向链表939:共用体94第十五章: 位运算95第十六章 文件961:文件指针的定义963:关闭文件964: FGETC( ) FPUTC() 函数的使用 965: FSCANF() 和 FPRINTF() 函数的用法976: FGETS() 和 FPUTS()函数的用法977: FREAD() 和 FWRITE()函数的使用方法988:文件定位函数9810
5、: REWIND函数 称为反饶”函数,调用格式如下:99附录1100一:C语言常用关键字100附录2库函数.101、数学函数101二、字符函数和字符串函数103三、输入输出函数105第一章:进制转换问题1:二进制每位数值上面的数的范围是0或12:十进制 每位数值上面的数的范围是0 12345 67 893:进制 每位数值上面的数的范围是0 1 2345674:十六进制每位数值上面的数的范围是0 1 23456789ABCDEF5:十进制转换为二进制的方法:除二倒序取余6:二进制转换为十进制的方法:按权展开7:二进制转换为进制的方法:从右边往左边按三位二进制位来分段,每个段都对应一位 进制值,前
6、后段之间没有联系。8:二进制转换为十六进制的方法:从右边往左边按四位二进制位来分段,每个段都对 应一位十六进制值,前后段之间没有联系。学C语言应该注意的两点:1:编写程序过程中所用到的数值一定要先用类型关键字在内存中开辟能存放该数值的空间。2:不同的数值所需要的存储空间大小是不样,由类型关键字来区分。第二章C语言初步例题2.1:计算矩形面积。#include 命令行stdio.h是标准的输入、输出文件main()主函数 double a,b,area ;定义语句语句是由表达式加:组成a =2.1;赋值语句b=3.6;赋值语句area=a*b;计算语句printf(*a =%lf,b=%lf,a
7、rea=%lf n a,b,area);输出函数)1:标识符用途:可用做变量名、符号名、函数名、等等。定义:a:只能含有3类字符:字母,数字,下划线。24 b:只能以字母或下划线开头。注意:个合法的标识符必须同时满足上面两个条件。2:标识符的分类1)关键字:由C语言规定的一批标识符,它们在程序中只能代表着固定的含义,不能另做其它 用途。一般情况下分为:类型关键字:int double ,操作关键字:if for 2)预定义标识符:由C语言规定的一些标识符,它们在程序中也代表着固定的含义,但C语言 语法允许用户可以把它们另做其它用意。注意:在编写程序过程中尽量不要把关键字和预定义关键字的用法改动
8、、用做其它意思。3)用户自定义标识符:由用户根据需要、通过类型关犍字定义的标识符,一般常用做变量名、 函数名、数组名等等。3:类型关键字的分类:1)字符型关键字为char空间大小:所开辟的存储空间在内存中占据个字节作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中 只能存放字符常量值。2)整型分为:a:整型关键字为 int空间大小:所开辟的存储空间在内存中占据四个字节作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储 空间,此存储空间中只能存放整型常量值。b:长整型关键字为!ong空间大小:所开辟的存储空间在内存中占据四个字节作用:用此类型关键字在内存中为
9、合法的用户自定义标识符开辟存储 空间,此存储空冋中只能存放长整型常量值。3)实型 分为:a:单精度实型关键字为 float空间大小:所开辟的存储空间在内存中占据四个字节作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存 储空间,此存储空间中只能存放单精度实型常量值。b:双精度实型关键字为 double空间大小:所开辟的存储空间在内存中占据个字节作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存 储空间,此存储空间中只能存放双精度型常量值。注意:VC+6.0环境中默认实型数值的小数部分有六位小数。4Z常量分为:1)字符型常量:定义:用单引号引起来、中间有且只有一个字符例:T N4
10、2)字符串常量:定义:只要用双引号引起来的都是。例:“123ab” “ACSW#$”3)整型常量:定义:就是数学里的整数例:100 , -451 , 04)实型常量:分为:a:实数形式:定义:由数字和小数点组成,就是数学里的实数例:3.14 , -0.0145 , -5896. , .1402b:指数形式标准形式:定义:就像数学中的科学记数法一样,规定小数点前面只能有 一位有效数字,小数点后面可跟六位小数,指数有正、 负之分,指数的位数为三位,指数的格式总共占五位, 10要用小写e或大写E来表示。例:321.45 可些成:3.214500e+002手写形式:定义:字母e或E之前必须要有数字,且
11、之后的指数必须是整 数,且中间不能加入空格。例:错的:e3 , .5E3.65)八进制常量:定义:必须以数字 (零)开头的 例:0451 , 0241 ,0778(错的)6)十六进制常量:定义:必须以Ox或0X开头的 例:0Xaa,0xl4f, 0x1475:变量(什么类型的存储空间中只能存放相应类型的常量值,注:字符类型除外)1)作用:一般情况用做存储空间的名称 2)定义形式:存储类别存储类型关键字变量名;3)存储类别一般情况下可以省略,省略时默认为auto类别4)常用定义形式:存储类型关键字变量名;5)例:int a ; 意义:a:给自定义标识符a在内存中开辟合法的存储空间 b:变量名就代
12、表了它在内存中所表示的存储空间中的值 c:存储类别省略的,auto类别变量只定义过,没有赋初值,此存储空间中默认存 放着不可遇见的值,称为随机值.6)定义的多种形式:(一定要遵守:先定义,使用原则) 例1:inta ;定义aintb;定义bintc;定义ca=b=c=10;把!0分别写入a,b,c三个名字所代表的不同存储空间中 例 2: int a,b,c: 定义 a, b ca=b=c=10;把10分别写入a,b,c三个名字所代表的不同存储空间中 例 3: int a=10, b=10 , c=10 ;先从左往右为各个变量名在内存开不同的辟存储空间 再把10分别写入三个名字所代表的不同存储空
13、间中 7)定义字符类型值 例 1 : char ch ; ch=65 ; 意义:是把整型常量65当成ASCCH码,把此ASCII码所对应的字符 常量值存放到ch所表示的存储空间中 例 2: char ch ; ch=4I 意义:把字符常量4存放到ch所表示的存储空间中6Z赋值语句1)运算符 =在C语言中它称为赋值符,意思是写入或存入、存放到。2)运算规则:把运算符右侧的最终结果存放到运算符左边的存储空间中 3)要求:赋值运算符的左侧只能为变量(只有变量才能在内存中代表存储空间) 右侧的表达式不能是任意表达式。例: int a=10, b=20 , c=30 , d=40 ; a=b+7=c+d
14、 ;就是个错的表达式4)赋值号两侧类型统问题 例1:大类型存储空间=小数值float a;a=10 ; /计算机系统内部先把10这个整型常量转变为相应的实型常量,再给a所表示的存储空间中存*/例2:小类型存储空间=大数值int a;a=3.145; /计算机系统内部把实数分为三部分,整数部分数字、小 数部分数字、小数点,只把相应的整数部分数字存放到a 所表示的空间中*/7:算术运算符1)单目运算符:+表示正值-表示负值2)双目运算符:乘/除 求余 +加一减3)运算符的运算优先级:单目高于双目4)%符的运算规则 a:运算符两侧只能是整数值b:例如: m%n时,当m :输出字符类型值a: char
15、 ch=,A,;printf( * %cn , ch );b: char ch =5;printf(44 %c n”, ch );2)输出整型值int a=10;printf(44 %d n”,a);3)输出长整型值 long b=l(X); printf(44 %ldn”,b);4)输出实型值double c=3.145;printf(44 %lfn”,c);5)在和格式字母之间可以加输出的总宽度对字符值 和对整型值char ch=D;printf(44 %4c n”, ch );int a=1540;printf(44 %7dn”, a);注意:a:当所设的总宽度比数值的实际总宽度大时,数
16、据默认右对齐显示,左侧没有占用完 的空间上会显示空格。b:当所设的总宽度小或等于数值的实际总宽度时,所设的总宽度失效,数据按原样显示。 对实型值double a=3.52;printff %10lf nM,a);注意:所设的总宽度是整数部分数字、小数部分数字、小数点三部分之和的总宽度,输出时先 输出标准的6位小数部分,再输出一位小数点,此时要是所剩的总宽度比实际数值的整 数部分列宽大,左侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽 小或相等,都按原数值的整数部分列宽显示6)对指数double a=325.14;printf(15en,a);注意:所设的总宽度是整数部分数字、小数
17、部分数字、小数点、指数格式四部 分之和的总宽度,输出时先输出标准的5位指数部分,再输出6位小数部 分和一位小数点,此时要是所剩的总宽度比实际数值的整数部分列宽大, 左侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽小或相等,都按原数值的整数部分列宽显示7)改变输出时的对齐方式int a=2124 ;printf( M%-6dn*a);在和格式字母之间加一会使的数值从左往右显示,有多余的空间会在数值的后 面显示8)加0格式int a=1452;printf(44 %010dn, a );注意:当所设的总列宽比数值的实际列宽大时,会在前面没有占用完的空间上 全部显示,当没有多余的空间时
18、格式就失效了9)注意:当格式遇到左对齐时,格式就失效10)加m.n格式只对实型double a=3541.125 ;printf(“ 12.41fn,a);注意:所设的总宽度是整数部分数字、小数部分数字、小数点三部分之和为12 列,输出时先输出标准的4位小数部分(要是小数部分的实际列宽大于所 设置的列宽时,对多出来的小数部分进行四舍五入,要是比实际的小数 部分列宽小,不够的位用填补,要是两者相同就按原样输出),再输出 一位小数点,此时要是所剩的总宽度比实际数值的整数部分列宽大,左 侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽小 或相等,都按原数值的整数部分列宽显示11)当输出格
19、式的个数比输出列表屮值的个数多时,多出的格式会显示随机值int a= 1 ,b=2;printf( %d,%d,%d”,a,b);12)当输出格式的个数比输出列表屮值的个数少时,多出的数值不处理int a=l,b=2,c=3;printff4 %d ,%d n”,a,b,c);13)当后面所跟的不是个合法的格式字母时,就把这个错的格式字母原样输出例 1: int a=l,b=2,c=3;printfC4 %D,%D,%Dn”,a,b,c);结果是:D,D,D例 2: int a=l,b=2,c=3;printf( %d , %d , %d n”,a,b,c);结果是: d,%d,%d5:输入函
20、数的格式:l)scanf(“格式控制”,地址列表);2)取地址符 &3)给多个字符型空间中赋值char a,b,c;scanf(t4%c%c%c,&a,&b,&c);要求:输入字符值时,必须挨个、连续的输入,各个字符值之间不能加任何符号4)给多个整型空间中赋值a:多个格式之间不加任何符号int a,b,c;scanf(d%d%d”,&a,&b,&c);/* %ld %f %lf */要求:输入时各个数值之间必须以 空格符 或 回车符 隔开输入b:多个格式之间以某中符号隔开(适合字符型c、整型d %ld、实型f %lf ) int a,b,c;scanf(44%d,%d:%d,&a,&b,&c)
21、;要求:输入时,除了用数值换相应的格式以外,其它符号必须原样输入5)给多个实型空间中赋值 原理和第4条一致6)多个不同格式之间不加任何符号输入a: int a;char b;double c;scanfC4%d%c%lf;&a,&b,&c);要求:在非字符型格式和字符型格式之间不能加任何符号、连续输入,在 字符型格式和生字符型格式之冋可以加 空格符或 冋车符 或 什 么都不加b: int a;char b;double c;scanf(t4a=%d , b=%c , c=%l,&a,&b,&c);注意:输入时,除了用数值换相应的格式以外,其它符号必须原样输入7)在和格式字母之间加输入总宽度例
22、1: int a,b,c;scanf(%3d%3d%3d,&a,&b,&c);运行时:输入的数值为123456789,结果是:a中存放了 123, b中存放了 456, c中存放了 789例 2: char ch;scanf(4c”,&ch);想给变量ch中存放个大写字母D,就必须这样写:D空格空格空格 因为c只能从屏幕的右侧取一列字符值8)多条输入语句同时执行例 1: int a,b,c;scanf(d”,&a);scanf(d”,&b);scanf(*,%d%d%d,&a.&b,&c);scanf(%d,&c);,想给变量a中存放10,给b中存放20,给c中存放300,在运行输入 时多个数
23、值之间必须、只能以空格符或回车符来隔开例 2: char a,b,c;scanf(c”,&a);scanf(%c”,&b); scanf(tt%c%c%c,;&a,&b,&c);scanf(c”,&c); J想给变量a中存放A,给b中存放B,给c中存放C,在运行输入时多个字符值之间必须、只能挨个、连续输入9)在和格式字母之间加int a=O,b=O,c=O;scanf(4i%d%*d%d,&a,&b,&c);输入的数值为:10 20 30结果:a中是10, b中是30, c中是。* :的意思:跳过和本身格式相应的数值,把下个数值输入到自己的存储空间中6:复合语句用对括起来的语句集合就称为一个复
24、合语句7:空语句只有分号而没有表达式的语句例:;例1:用海伦公式求三角型面积#include #include main() double a,b,c,h,s;printf(“请输入三个边长n);/提示语句/scanf(tt%lf,%lf,%lf,&a,&b,&c);h=1.0/2*(a+b+c);s=sqrt(h*(h-a)*(h-b)*(h-c);printfCs=%lfnM,s);例2:用求根公式计算一元二次方程的两个根#include #include main() double a , b , c , h , xl , x2 , p , q ;printf(“请输入三个常量:n);s
25、canfC%lf,%lf,%lf;&a,&b,&c);h=sqrt( b*b-4*a*c);p=-b/( 2*a);q=h/( 2*a);xl=p+q ;x2=p-q ;printf(ltx 1 =%lf,x2=%lfnM,x 1 ,x2 );例3:分离和组合,把用户任意输入的个六位数的各个位上的数字输出,并把它的十万位、 千位、十位上的数字重新组合成一个三位数,新三位数的百位数字是原六位数的十位数字、十位 数字是原六位数字的千位数字、新三位数的个位数字是原六位数的十万位数字,组成后输出。#include main() long a;int al , a2 , a3 , a4 , a5 , a
26、6 , a7 ;printf(44 Please Input a number :n,?);scanf(*4%ld,&a);a l=a/100000;a2=a%100000/10000;a3=a% 10000/1000;a4=a%1000/100;a5=a%l(X)/10;a6=a%10;a7=a5 * 100+a3 * 10+a 1;printf(“这个新数是:%dn,a7);例4:交换算法请用户任意输入两个整数,交换它们的数值后再输出#include main() int a, b , t;printf( Please Input two numbers :n);scanf(%d,%d,&
27、a,&b);printf(原始数据为:n);printf(a=%d,b=%dn”,a,b);printf(n交换算法过程:nM);t=a;a=b;I /* a=a+b; b=a-b; a=a-b; */b=t;丿printf(n交换后的结果为:n);printf(lla=%d,b=%dn,a,b);)例5:四舍五入的使用用户任意输入个实数,要求保留3位小数,对第四位小数进行四舍五入后再输出。#include main() double x;printf( Please Input a number :nM);x=3.141592;x=x*1000;】x=x+0.5;x=(int)x;/* x=
28、( int )(x*l(XX)+().5)/l000.0 ; */x=x/1000;printf(Mx=%lfn,x);第四章选择结构1: C语言中的逻辑值只有两个:真 假2: C语言中的逻辑值的表示(都是整形常量)真值用1表示,假值用。表示,在使用时要注意所有的非。形式的值都可以理解为 真值,就是假值3:关系运算1)运算符为:= v 关系运算 赋值运算5:有关系运算符参与的混合运算ab+c 9 a(b+c) ab= =c W (ab)= =c a= =bc W a= =(bbc ;像这样的语句是正确的,优先级相同的结合方向是自左向右6:逻辑运算符和逻辑表达式1)C语言中有三种逻辑运算符:&与
29、 II或 !非2)它们之间的优先级是:!& II3)逻辑、算术、关系、赋值、逗号表达式之间的运算优先级! 算术 关系&赋值 逗号表达式4)例:a b & x ya = = b II x != y !a II a b4 & 0 II25 3 & 8 4 - !05) & 与运算可以看成是乘法运算&数值运算符数值结果 1 & ! 1 10& 6)ii 或运算可以看成是加法运算数值运算符数值结果III111II010II110II007)两条原则:与任何位都为01或任何值都为1所以当逻辑 与、或 左右两边的有运算时先计算左边, 对 与 而言,当左边值能为,右边的表达式就必须不能计算、处理 对 或 而
30、言,当左边值能为1,右边的表达式就必须不能计算、处理 例:#include main() int a= -1 ,b=10 ,c=5, d ;d = ( +a ) & (b+=c ); printf( d=%d , a= %d , b=%d ,c=%d n”,d,a,b,c); )例:#include main() int a= 0 ,b=10 ,c=5, d ;d = ( +a) II (b+=c );printf( d=%d , a= %d , b=%d ,c=%d n”,d,a,b,c); )7: 判断结构:1)形式:if(条件表达式) 子语句;2)判断结构要完整必须包含两部分 a:判断的
31、条件部分 b:判断的条件所控制的命令部分、动作部分、语句部分3)解释:if理解为:如果条件表达式的形式有4种:a:常量例:if( 100)b:变量例:if( a )C: 表达式例:if ( ab)d:函数例:if(sqrt( a+b) 100.24子语句:是当条件表达式的逻辑位为真时(判断成立时、比较的结果 为真时),应该执行的语句形式有两种:a:个命令或个动作或一条语句b: 个用 括起来的复合语句,里面包含了好多个命令或好多个动作或好多条语句4)例1:请用户任意输入两个不同的数值,把大值存放到t所表示的存储空间中#include main() int a,b,t;scanf(d,%d”,&a
32、,&b);if(ab)t=a;if( b a )t=b;printf(44t=%dn,t);例2:请用户任意输入两个不同的数值,找出大值并马上输出。#include main() int a,b,t;scanf(“d,%d,&a,&b);if(ab) if( b a ) t=b;printfC4t=%dnM,t);5) if.else 结构if (条件表达式)子语句1 ;else 子语句2;6) if 和else在结构上都必须包含两部分才能完整a:判断的条件部分b:判断的条件所控制的命令部分、动作部分、语句部分7)解释:if :称为如果else :称为否则条件表达式的形式有4种:a:常量例:i
33、f ( 100)b!变量例:if( a )c:表达式例: if ( ab )d: 函数 例: if ( sqrt( a+b ) 100.24 )子语句:是当条件表达式的逻辑值为真时(判断成立时、比较的结果为真时),应该执行的语句或否则的条件成立时,应该执行的语句。形式有两种:a: 个命令或个动作或一条语句 b: 个用 括起来的复合语句,里面包含了好多 个命令或好多个动作或好多条语句8)例1:请用户任意输入两个不同的值,把大值存放到t所表示的存储空间中#include main() int a, b , t ;scanf(d,%d”, &a,&b);if(ab)t=a;else t=b;prin
34、tfC4 t=%dn,t);)例2:请用户任意输入两个不同的值,把大值存放到t所表示的存储空间中并马上 输出#include main() int a , b , t;scanf(d,%d”, &a.&b);if(ab) t=a;printff* t=%dn,t);else t=b;printf(Mt=%dn,t);1注意:else总是和它上面最近的if进行组合,形成一条“如果条件成立,则 执行if的子语句,否则,则执行else的子语句”选择结构的语句。例 3: #include main() int a=2,b=-l,c=2;if(ab)/*前提 */if(b0)c=0;/*ab&b()当前
35、条件/else c+=l ;/*a=0当前条件printf(dn”,c);例4:用假设法求解方程”.1 (x0)#include main() double x , y ;scanf(t4%lf;&x);y=0;/* x= =0 */if(x!=0)if( x0)y=l ;/* x!=0 & x0 */else y= -1 ;/* x!=0 & x0 */printfC4 y=%lfn”,y);9)多个if.else嵌套结构,if和else必须成对出现(或搭配)。if(条件表达式1) 子语句1 ;else il (条件表达式2)子语句2 ;else if(表达式3)子语句3 ; else 子语
36、句4 ; 注意:当else仅表示一种条件的时候就不在继续嵌套ifelse结构了 例1:把学生的考试成绩划分档次# include main() int a;scanf(d”,&a);if( a=90 & a=80 & a=70 & a=60 & a70 ) printf( D n”); else printf( E n); 例2:判断用户所输入的数值是不是闰年#include main() int a;scanf(d”, &a);if( (a%4 = = 0& a% 100 !=0) II (a%400 = =0 ) printfC4 YES n);else printfC4 NO n);8:
37、三目运算符条件表达式a :形式:表达式1 ?表达式2 :表达式3 ;b:处理原则:当表达式1的逻辑结果为真 时,只把表达式2的最终结果作为整个三目运 算符的最终结果进行处理,当表达式1的逻辑结果为假时,只把表达式3的最 终结果作为整个三目运算符的最终结果进行处理。例 1: #include main() char t;int x;scanf( d”,&x);t=(x=l)?A:B;printfC4t=%cn,t);1例2:请用户任意输入一个字母,最后要求按大写字母输出#include main() char ch;scanf(c”,&ch);ch=(ch=97 & ch= 122)?ch-32:ch;printf(ch二cn”,ch);9: switch()多分支选择结构1) switch (表达式) case常量:子语句1:子语句2;子语句n ;case常量:子