1、 机电学院计算机培训中心 二级C语言教程 第105页目 录第一章:进制转换问题4第二章 C语言初步41:标识符42:标识符的分类43:类型关键字的分类:54:常量55:变量 (什么类型的存储空间中只能存放相应类型的常量值,注:字符类型除外)66:赋值语句67:算术运算符88:复合的赋值表达式89:强制类型转换810: + 自加 -自减911: 逗号表达式9第三章 顺序结构101:输出函数的格式:102:格式: 由 % 加 格式字母 组成103:格式字母 分类10 4:输出形式:105:输入函数的格式:126: 复合语句137: 空语句13第四章 选择结构151:C语言中的逻辑值只有两个:真 假
2、152:真值用1表示,假值用0表示,在使用时要注意所有的非0形式的值都可以理解为真值,0就是假值153:关系运算154:关系运算、算术运算、赋值运算之间的优先级问题155:有关系运算符参与的混合运算156:逻辑运算符和逻辑表达式157: 判断结构 :178: 三目运算符 条件表达式219:switch( ) 多分支选择结构2110:goto 语句和语句标号24第五章 循环结构251:循环的基本要求:252:while( ) 循环253:do . while( 条件表达式 ) ;284:for () 循环296:循环结构作为循环结构的子语句(循环结构的嵌套)337:break 和continue
3、语句的用法36第六章 字符型数据381:字符常量:382:在有命令行 stdio.h 的前提下,讲两个函数383: 解释394:多个不同格式之间不加任何符号输入395:多条输入语句同时执行396:在有命令行stdio.h的情况下,C语言中0、0、NULL意思是等价的39第七章 函数411:注意几点412:函数的分类:413:用户自定义函数的定义形式:424:例425:程序的流程中的问题426:在程序执行过程中有三个问题43第九章:数组563:指针变量77第十章:字符串811:定义:813:字符型数组:814: 在边定义边赋值时,没有使用完的存储空间中默认 存放 0 这个字符常量825:字符串在
4、内存中要 占据一维字符型 数组的存储区域826:字符串 和 整型数组、字符型数组、实型数组的最大区别是:827: %s 的意思:828:几种常见的字符串赋值方法829: 通过程序来形成 字符串8310:几种常见的对字符串处理的 函数 的使用方法。8511:二维字符型数组86第十一章 对函数的进一步讨论901: 主函数中的参数902:指向函数的指针913:递归算法:92第十二章:全局变量、局部变量、存储分类921:在函数体外部定义的变量叫 全局变量922:全局变量的作用域 从定义语句下面到本程序完为至。92局部变量的作用域 从定义语句下面到本函数完为至。923:当全局变量与局部变量同名时,在局部
5、范围内,以局部变量的值为准924:静态局部变量 static93第十三章 宏定义、宏代换、动态存储941: 宏定义:942:宏代换:953:动态存储分配:95第十四章:结构体、共用体971:定义形式:972: 结构体的使用方法:973:结构体变量的定义方法:974:结构体数组的使用985:结构体指针的使用方法:986:类型声明符的使用 typedef997:结构体变量所占据的存储空间是它的各个成员所占据存储空间之和1008: 简单的单向链表1009:共用体101第十五章: 位运算103第十六章 文件1031: 文件指针 的定义1032: 开打文件1033:关闭文件1044:fgetc( ) f
6、putc( ) 函数的使用1045:fscanf( ) 和 fprintf( ) 函数的用法1056:fgets( ) 和 fputs( ) 函数的用法1057: fread( ) 和 fwrite( ) 函数的使用方法1058:文件定位函数10510: rewind 函数 称为“反饶”函数,调用格式如下:106附录1108一: C语言常用关键字108二:运算符的优先级和结合性108附录2 库函数110一、数学函数110二、字符函数和字符串函数112三、输入输出函数113四、动态分配函数和随机函数114第一章:进制转换问题1:二进制 每位数值上面的数的范围是 0 或 12:十进制 每位数值上面
7、的数的范围是 0 1 2 3 4 5 6 7 8 93:八进制 每位数值上面的数的范围是 0 1 2 3 4 5 6 74:十六进制 每位数值上面的数的范围是 0 1 2 3 4 5 6 7 8 9 A B C D E F5:十进制转换为二进制的方法: 除二倒序取余6:二进制转换为十进制的方法: 按权展开7:二进制转换为八进制的方法: 从右边往左边按三位二进制位来分段,每一个段都对应一位八进制值,前后段之间没有联系。8:二进制转换为十六进制的方法: 从右边往左边按四位二进制位来分段,每一个段都对应一位十六进制值,前后段之间没有联系。学C语言应该注意的两点:1:编写程序过程中所用到的数值一定要先
8、用类型关键字在内存中开辟能存放该数值的空间。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,area=%lf n”, a,b,area); 输出函数 1:标识符用途:可用做 变量名、符号名、函数名、等等。定义:a:只能含有3类字符:字母,数字,下划线
9、。 _124 b:只能以 字母 或 下划线开头。 注意:一个合法的标识符必须同时满足上面两个条件。2:标识符的分类 1)关键字:由C语言规定的一批标识符,它们在程序中只能代表着固定的含义,不能另做其它用途。一般情况下分为 : 类型关键字:int double ,操作关键字: if for 。 2)预定义标识符:由C语言规定的一些标识符,它们在程序中也代表着固定的含义,但C语言语法允许用户可以把它们另做其它用意。 注意:在编写程序过程中尽量不要把关键字和预定义关键字的用法改动、用做其它意思。 3)用户自定义标识符:由用户根据需要、通过类型关键字定义的标识符,一般常用做变量名、函数名、数组名等等,
10、长度不能超过8个字符。3:类型关键字的分类: 1)字符型 关键字为 char 空间大小:所开辟的存储空间在内存中占据一个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放字符常量值。 2)整型 分为:a:短整型 关键字为 short 空间大小:所开辟的存储空间在内存中占据两个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放短整型常量值。 b:整型 关键字为 int 空间大小:所开辟的存储空间在内存中占据四个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放整型常量值。
11、 c:长整型 关键字为 long 空间大小:所开辟的存储空间在内存中占据四个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放长整型常量值。 3)实型 分为: a:单精度实型 关键字为 float 空间大小:所开辟的存储空间在内存中占据四个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放单精度实型常量值。 b:双精度实型 关键字为 double 空间大小:所开辟的存储空间在内存中占据八个字节 作用:用此类型关键字在内存中为合法的用户自定义标识符开辟存储空间,此存储空间中只能存放双精度型常量值。 注意:VC+6
12、.0环境中默认实型数值的小数部分有六位小数。4:常量 分为:1)字符型常量: 定义:用单引号引起来、中间有且只有一个字符 例: a 1 A # ? 2)字符串常量: 定义:只要用双引号引起来的都是。 例: “123ab” “ACSW#$” “” 3)整型常量: 定义:就是数学里的整数 例:100 , -451 , 0 4)实型常量: 分为: a:实数形式: 定义:由数字和小数点组成,就是数学里的实数 例:3.14 ,-0.0145 , -5896. , .1402 b:指数形式标准形式: 定义:就像数学中的科学记数法一样,规定小数点前面只能有一位有效数字,小数点后面可跟六位小数,指数有正、负之
13、分,指数的位数为三位,指数的格式总共占五位,10要用小写e或大写E来表示。 例:321.45 可些成:3.214500e+002 手写形式:定义:字母e 或E之前必须要有数字,且之后的指数必须是整数,且中间不能加入空格。 例:错的:e3 , .5E3.6 , e 5)八进制常量: 定义:必须以数字0(零)开头的 例: 0451 ,0241 , 0778(错的) 6)十六进制常量: 定义:必须以0x 或 0X 开头的 例: 0Xaa , 0x14f , 0x1475:变量 (什么类型的存储空间中只能存放相应类型的常量值,注:字符类型除外) 1)作用:一般情况用做存储空间的名称 2)定义形式: 存
14、储类别 存储类型关键字 变量名; 3)存储类别一般情况下可以省略,省略时默认为 auto 类别 4)常用定义形式: 存储类型关键字 变量名; 5)例: int a ; 意义:a:给自定义标识符a 在内存中开辟合法的存储空间 b:变量名就代表了它在内存中所表示的存储空间中的值 c:存储类别省略的,auto 类别变量只定义过,没有赋初值,此存储空间中默认存放着不可遇见的值,称为 随机值 。6)定义的多种形式:( 一定要遵守:先定义,后使用原则 ) 例1: int a ; 定义a int b; 定义b int c; 定义c a=b=c=10; 把10分别写入a,b,c三个名字所代表的不同存储空间中
15、例2: int a,b,c; 定义a , b c a=b=c=10; 把10分别写入a,b,c三个名字所代表的不同存储空间中 例3: int a=10 , b=10 , c=10 ; 先从左往右为各个变量名在内存开不同的辟存储空间 再把10分别写入三个名字所代表的不同存储空间中 7)定义字符类型值 例1:char ch ; ch=65 ; 意义:是把整型常量65当成ASCCII码,把此ASCII码所对应的字符常量值存放到ch所表示的存储空间中 例2:char ch ; ch=4 ; 意义:把字符常量4存放到ch所表示的存储空间中6:赋值语句1) 运算符 = 在C语言中它称为赋值符,意思是 写入
16、 或 存入、存放到 。2) 运算规则:把运算符右侧的最终结果存放到运算符左边的存储空间中3) 要求: 赋值运算符的左侧只能为 变量 (只有变量才能在内存中代表存储空间) 右侧的表达式不能是任意表达式。 例: int a=10 , b=20 , c=30 , d=40 ; a=b+7=c+d ; 就是个错的表达式 4) 赋值号两侧类型统一问题 例1: 大类型存储空间 = 小数值 float a ; a=10 ; /*计算机系统内部先把10这个整型常量转变为相应的实型常量,再给a所表示的存储空间中存 */ 例2: 小类型存储空间 = 大数值 int a ; a=3.145 ; /* 计算机系统内部
17、把实数分为三部分,整数部分数字、小数部分数字、小数点,只把相应的整数部分数字存放到a所表示的空间中 */7:算术运算符 1) 单目运算符: + 表示正值 - 表示负值 2) 双目运算符: * 乘 / 除 % 求余 + 加 - 减 3)运算符的运算优先级: 单目 高于 双目 4) % 符的运算规则 a: 运算符两侧只能是整数值 b: 例如: m%n 时 ,当m; int a , b ; a=( b=3 , b+ , +b , b+=10 ); 最后a 为15第三章 顺序结构1:输出函数的格式: 1: printf( “ 输出控制格式 “ , 输出列表 ) ; 2: printf(“输出控制格式“
18、);2:格式: 由 % 加 格式字母 组成3:格式字母 分类 char c short int d long ld float f double lf 指数 e E 八进制 o 16进制 x X %d :十进制整型 %o :八进制整型 %x :十六进制整型 %ld :十进制长整型 4:输出形式:1 : 输出字符类型值a : char ch=A ;printf( “ %cn” , ch ); b : char ch =5; printf( “ %c n”, ch ) ; 2) 输出整型值 int a=10 ; printf( “ %d n”, a ); 3) 输出长整型值 long b=100
19、; printf( “ %ld n ”, b ) ; 4) 输出实型值 double c=3.145; printf( “ %lf n ”, c ) ; 5) 在 % 和 格式字母之间可以加输出的总宽度 对字符值 和 对整型值 char ch=D ; printf( “ %4c n”, ch ) ; int a=1540 ; printf( “ %7d n”, a ) ; 注意:a:当所设的总宽度比数值的实际总宽度大时,数据默认右对齐显示,左侧没有占用完的空间上会显示空格。 b:当所设的总宽度小或等于数值的实际总宽度时,所设的总宽度失效,数据按原样显示。 对实型值 double a=3.52
20、; printf(“ %10lf n”,a) ;注意:所设的总宽度是整数部分数字、小数部分数字、小数点三部分之和的总宽度,输出时先输出标准的6位小数部分,再输出一位小数点,此时要是所剩的总宽度比实际数值的整数部分列宽大,左侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽小或相等,都按原数值的整数部分列宽显示 6) 对指数 double a=325.14 ; printf( “ %15e n”, a ) ; 注意:所设的总宽度是整数部分数字、小数部分数字、小数点、指数格式四部分之和的总宽度,输出时先输出标准的5位指数部分,再输出6位小数部分和一位小数点,此时要是所剩的总宽度比实际数值
21、的整数部分列宽大,左侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽小或相等,都按原数值的整数部分列宽显示 7) 改变输出时的对齐方式 int a=2124 ; printf( “%-6dn”,a); 在%和格式字母之间加 会使的数值从左往右显示,有多余的空间会在数值的后面显示 8) 加 0 格式int a=1452 ;printf(“ %010dn”, a ) ;注意:当所设的总列宽比数值的实际列宽大时,会在前面没有占用完的空间上全部显示0,当没有多余的空间时0格式就失效了 9) 注意:当0格式遇到 左对齐时,0格式就失效 10) 加 m.n 格式 只对实型 double a=3
22、541.125 ; printf(“ %12.4lf n”,a); 注意:所设的总宽度是整数部分数字、小数部分数字、小数点三部分之和为12列,输出时先输出标准的4位小数部分(要是小数部分的实际列宽大于所设置的列宽时,对多出来的小数部分进行四舍五入,要是比实际的小数部分列宽小,不够的位用0填补,要是两者相同就按原样输出),再输出一位小数点,此时要是所剩的总宽度比实际数值的整数部分列宽大,左侧没有占用完的空间上会显示空格,要是比实际数值的整数部分列宽小或相等,都按原数值的整数部分列宽显示 11) 当输出格式的个数比输出列表中值的个数多时,多出的格式会显示随机值 int a=1,b=2; print
23、f( “ %d,%d,%d”,a,b); 12) 当输出格式的个数比输出列表中值的个数少时,多出的数值不处理 int a=1,b=2,c=3; printf(“ %d ,%d n”,a,b,c); 13) 当%后面所跟的不是一个合法的格式字母时,就把这个错的格式字母原样输出 例1: int a=1,b=2,c=3; printf(“ %D,%D,%Dn”,a,b,c);结果是: D,D,D 例2: int a=1,b=2,c=3; printf(“ %d , %d , %d n”,a,b,c);结果是: %d,%d,%d5:输入函数的格式: 1)scanf(“格式控制”,地址列表) ; 2)取
24、地址符 & 3)给多个字符型空间中赋值char a,b,c; scanf(“%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(“%d,%d:%d”,&a,&b,&c); 要求:输入时,除了用数值换相应的格式以外
25、,其它符号必须原样输入 5)给多个实型空间中赋值 原理和第4条一致 6)多个不同格式之间不加任何符号输入a: int a;char b;double c;scanf(“%d%c%lf”,&a,&b,&c); 要求:在非字符型格式和字符型格式之间不能加任何符号、连续输入,在字符型格式和非字符型格式之间可以加 空格符 或 回车符 或 什么都不加b: int a;char b;double c;scanf(“a=%d , b=%c , c=%lf”,&a,&b,&c); 注意:输入时,除了用数值换相应的格式以外,其它符号必须原样输入 7)在%和格式字母之间加输入总宽度例1:int a,b,c; sc
26、anf(“%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中存放100,给b中存放200,给c中存放300,在运行输入时多个数值
27、之间必须、只能以 空格符 或 回车符 来隔开例2:char a,b,c; scanf(“%c”,&a); scanf(“%c”,&b); scanf(“%c%c%c”,&a,&b,&c); scanf(“%c”,&c); 想给变量a中存放A,给b中存放B,给c中存放C,在运行输入时多 个字符值之间必须、只能挨个、连续输入 9)在%和格式字母之间加*int a=0,b=0,c=0;scanf(“%d%*d%d”,&a,&b,&c);输入的数值为:10 20 30 结果:a中是10,b中是30,c中是0* :的意思:跳过和本身格式相应的数值,把下一个数值输入到自己的存储空间中6: 复合语句用一对
28、括起来的语句集合就称为一个复合语句7: 空语句 只有分号而没有表达式的语句 例: ;例1: 用海伦公式求三角型面积 #include #include main( ) double a,b,c,h,s ;printf(“请输入三个边长:n”);scanf(“%lf,%lf,%lf”,&a,&b,&c) ;h=1.0/2*(a+b+c) ;s=sqrt(h*(h-a)*(h-b)*(h-c) ;printf(“s=%lf n”, s ) ; 例2:用求根公式计算一元二次方程的两个根 #include #include main( ) double a , b , c , h , x1 , x2
29、, p , q ; printf(“请输入三个常量:n”);scanf(“%lf,%lf,%lf”,&a,&b,&c) ; h=sqrt( b*b-4*a*c ) ;p=-b/( 2*a ) ;q=h/( 2*a ) ;x1=p+q ;x2=p-q ;printf(“x1=%lf,x2=%lfn”,x1,x2 ) ; 例3:分离和组合, 把用户任意输入的一个六位数的各个位上的数字输出,并把它的十万位、千位、十位上的数字重新组合成一个三位数,新三位数的百位数字是原六位数的十位数字、十位数字是原六位数字的千位数字、新三位数的个位数字是原六位数的十万位数字,组成后输出。#include main(
30、) long a;int a1 , a2 , a3 , a4 , a5 , a6 , a7 ;printf(“ Please Input a number :n”);scanf(“%ld”,&a);a1=a/100000;a2=a%100000/10000;a3=a%10000/1000;a4=a%1000/100;a5=a%100/10;a6=a%10;a7=a5*100+a3*10+a1;printf(“这个新数是:%dn”,a7);例4:交换算法请用户任意输入两个整数,交换它们的数值后再输出#include main( ) int a , b , t ; printf(“ Please
31、Input two numbers :n”); scanf(“%d,%d”,&a,&b); printf(“原始数据为:n”); printf(“a=%d,b=%dn”,a,b); printf(“ n 交换算法过程 :n”); t=a; a=b; /* a=a+b ; b=a-b ; a=a-b ; */ b=t; printf(“n交换后的结果为:n”); printf(“a=%d,b=%dn”,a,b);例5:四舍五入的使用用户任意输入一个实数,要求保留3位小数,对第四位小数进行四舍五入后再输出。#include main( ) double x ; printf(“ Please Input a number :n”); x=3.141592; x=x*1000; x=x+0.5; x=(int)x; /* x=( int )(x*1000+0.5)/1000.0 ; */ x=x/1000; printf