第2章基本结构及常用函数_第1页
第2章基本结构及常用函数_第2页
第2章基本结构及常用函数_第3页
第2章基本结构及常用函数_第4页
第2章基本结构及常用函数_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、教学任务:各种数据类型及存储方式常量:概念,分类转义字符大端小端基本输入输出函数实验2的题目3和题目4初步接触效率C语言基本数据结构与常用函数2.1 字符集与标识符2.2 基本数据类型2.3 常量与变量2.4 大端小端2.5 输入/输出函数用法2.6 常用函数 小结 学习目标掌握标识符的命名规则掌握各种基本类型常量的使用学会变量的定义和初始化理解整型数据的内存存储形式学会使用基本数据的输入、输出函数学会常用库函数的使用方式2.1 字符集与标识符C语言的字符集 大写英文字母小写英文字母数字:0 1 2 3 4 5 6 7 8 9其他符号:+ - + - * * / % = | & ! / % =

2、 | & ! # # “ , . : ; ( ) _ ? 空格空格 标识符 给程序中的实体变量、函数、数组、结构体及文件起的名字。空格空格非字母或下非字母或下划线开头划线开头关键字关键字非字母、数字、非字母、数字、下划线下划线2.2 基本数据类型例2-1 输入一个非负整数n,求n!。 #include void main() int i=1,n;short jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%dn”,n,jc); 例2-1 输入一个非负整数n,求n!。 #include void main()

3、 int i=1,n; int jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%.0fn”,n,jc); 例2-1 输入一个非负整数n,求n!。 #include void main() int i=1,n; double jc=1; scanf(“%d”,&n); if(n0) while(i=n) jc=jc*i; i=i+1; printf(“%d!=%.0fn”,n,jc); 2.2.1 整型数据整型数据在内存中的存放形式根据是否表示负数分为:有符号数和无符号数。有符号整数有符号数以补码形式存储在

4、计算机中,最高位为符号位。对于负数需先转换成原码才知道它的数值是多少。例:int a= -1, b=2; b无符号数只表示大于等于0的整数,没有符号位,它的每一位都是数值位。使得无符号数比有符号数多一个数值位,从而能表示更大的正数。无符号数直接以数值的二进制形式存储在计算机中。 例:unsigned int c=0 x1234, d=0 xFFFFFFFF;以变量a和d为例,他们在计算机里的表示一样,但是由于类型不同,系统把一个解读为-1的补码,一个解读为很大的正数。d数值的表示方法原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1,其余

5、位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1原码原码反码反码补码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围数的范围0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字节表示数)(用一字节表示数)例例 补码:补码:11111001 取反:取反:10000110

6、加加1: 10000111=-7考虑:整数溢出如果整形太大或太小,超出了整数类型的范围会怎么样?下面分别对有符号和无符号进行测试。#includeint main() signed int i = 2147483647;/有符号整形最大正数unsigned int j=4294967295;/无符号整形最大正数printf(“%d %d %dn”, i, i+1, i+2);printf(“%u %u %un”, j, j+1, j+2);return 0;这种溢出的情况对于char型和short型同样适用。结果是:2147483647 -2147483648 -214748364742949

7、67295 0 1注意:当变量溢出时,系统没有给出提示,所以编程时需要自己处理这个问题。2.2.2 实型数据实型数据在内存中的存放形式 占4或8个字节,在内存中以指数形式存放实型变量的分类 float 32 bit, 数范围 10-38-1038 6位有效位 double 64 bit, 数范围 10-308-10308 16位有效位 float a,b,x; a=11111111.1111; b=11111111.1; x=123.456789E10; double y; y=123.456789E10;实型数据的舍入误差有效位数:在浮点数类型可表示的数的范围里,从第一个非零数字开始的十进制

8、精确位的位数。和printf的%f默认输出6位意义不同。浮点数的比较float m=3.1;if(m=3.1) printf(“m=3.1n”);计算机一般都是用一种浮点的格式来近似地模拟实数算术运算。无论是 float 还是double类型的变量,都有精度限制。不要假设浮点运算结果是精确的,尤其不能直接比较两个浮点数是否相等。这并不是C语言特有的问题,其他程序设计语言有同样的问题,它依赖于cpu的处理能力。在没有“正确”浮点模型的处理器上,编译器要被迫进行代价非凡的仿真。那么如何检查浮点数在“足够接近”情况下的相等?浮点数的定义决定他的绝对精度会随着其量级而变化。所以比较两个浮点数最好的方法

9、就是用一个浮点数的量级相关的阀值。参考14章14.5节P172double a;. .if(a = 0.0) /不可以 do_something();2.2.3 字符型数据字符类型的数据存储单元中存放的是对应字符的存放的是对应字符的ASCII代码代码。一个字节存储一个字符。char a,b,c;2.2.4 枚举类型在程序中,可能需要为某些整数定义一个别名,可以利用预处理指令#define来完成这项工作:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7但是从上面的

10、定义来看六个常量虽然在表达了同一类型的信息,但是在语法上是彼此孤立的个体,不是一个完整的逻辑整体。2.2.4 枚举类型1. 定义一种新的数据类型定义一种新的数据类型 - 枚举型枚举型enum DAYMON=1, TUE, WED, THU=99, FRI, SAT=0, SUN;(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。(2) DAY是一个标识符,可以看成这个集合的名字,是一个是一个可选项可选项,即是可有可无的项。(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。(4) 可以人为设定枚举成员的值,从而自定义某个范围

11、内的整数。(5) 枚举型是预处理指令#define的替代。(6) 类型定义以分号;结束。2.2.4 枚举类型方法一:方法一:枚举类型的定义和变量的声明分开enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;enum DAY yesterday;enum DAY today;enum DAY tomorrow; /变量tomorrow的类型为枚举型enum DAY good_day, bad_day; /变量good_day和bad_day的类型均为枚举型enum DAY2.2.4 枚举类型方法二:方法二:类型定义与变量声明同时进行:enum saturda

12、y, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /变量workday的类型为枚举型enum DAYenum week Mon=1, Tue, Wed, Thu, Fri Sat, Sun days; enum BOOLEAN false, true end_flag, match_flag;2.3 常量与变量2.3.1 常量与符号常量 常量:在C程序文本中出现的任何明确的数值都称为常量在程序执行过程中,其值不能被改变的量。常量的类型由其书写格式决定。整型常量(三种形式)1.十进制整数。 123, -56,

13、 0, -19 02.八进制整数。 0123 即十进制的 83 -011 -9 020 163.十六进制整数。 0 x123 即十进制的 291 -0 x56 即十进制的 -86 0 x1a 即十进制的 26整型常量的类型1. int 2. long3. int short4. unsigned short a,b;unsigned int x,y;a=50000; x=50000;b=70000; 溢出 y=70000;注意: 非负整型常数可视为无符号型常量,也可加后缀字符u或U,注意数的范围。5000U unsigned int 5000 int5. 整型数后加 L,l 表示long in

14、t 型 12l, 89L, 02L bit Byte实型常量的表示方法 1.十进制小数形式。 0.123, 98.78 , 123.0 0.0 2. 指数形式。 注意 : E 或e 前必须有数字,后为整数。 1e3, (1*103=1000) 142e-3 (142*10-3=0.142) 2.3E2 (2.3*102=230) 3. float类型实常量类型实常量 实型常量均为实型常量均为double类型,即以类型,即以8个字节存放个字节存放,有效位数为16位,加f后缀则为float型实常量,有效位数为6。转义字符转义字符含义含义nvradddtbf“xhh转义字符转义字符含义含义换行换行垂

15、直制表垂直制表回车回车响铃响铃单引号单引号3位位8进制数代表的字符进制数代表的字符水平制表水平制表退格退格换页换页反斜线反斜线双引号双引号2位位16进制数代表的字符进制数代表的字符如如 101 -A 012 -n x61 -a 60 -0 483 -( )例例:A-101-x41-65如如 A A6565, a a9797, 0 048 , 48 , nn1010如如 a A ? n 101 例例 转义字符举例转义字符举例l2-2#include void main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Prog

16、ramn); printf(“Turbo 1234567 9);运行结果:运行结果:(屏幕显示屏幕显示)A B CI say:”How are you?”C ProgramTurbo S457 9例例 #include void main() printf(“Yb=n”); printf(“Ybn”); 运行结果:运行结果:屏幕显示:屏幕显示:=Y【例 2-1】 输入一个字符,输出该字符的字形及其ASCII码。#include void main() char ch; scanf(“%c”,&ch); / 输入一个字符 printf(“%c ASCII:%dn”,ch,ch); / 输出该字符

17、的字形及其ASCII码 运行结果:运行结果:A A ASCII:65h e l l o 0例例 字符串字符串“hellohello”在内存中在内存中 a 0例例 a“a”例例 空串空串 “”“”0例例: char ch; ch=“A”; 例例: char ch; ch=A; 符号常量在程序中指定用符号名代表一个常量,程序中可以使用符号名代替常量。 定义方法:#define 符号名 常量值将来可以在需要用到该常量值的地方用符号名即可。运行结果:运行结果:1 circle:6.28 area:3.14编译程序根据变量定义为其编译程序根据变量定义为其分配指定字节的内存单元分配指定字节的内存单元.地址

18、地址int a=1, b=-3,c;abc4字节字节4字节字节4字节字节地址地址地址地址.内存内存1-3随机数随机数例1 int student; stadent=19; /Undefined symbol statent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main 例例: int a,b,c; float data; a=100;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符例例: int a=2,b,c=4; float data

19、=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1; main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量定义变量定义可执行语句可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);2.3.2 变量例例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.1

20、11*/例例 a=a=D D; /; /* * a=68; a=68; * */ / x= x=A A+5; /+5; /* * x=65+5; x=65+5; * */ / s= s=! !+ +G G / /* * s=33+71; s=33+71; * */ /例例 l2-2d1 #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); 宏定义宏定义变量定义变量定义输出结果输出结果

21、运行结果:运行结果:total=37.500000, ch1=d2.4 大端小端地址:对系统内存以字节为单位从0号开始编址。32位系统:机器字是32位。并且地址用32位的二进制来表示的系统。它的寻址范围在。一个变量的地址是指变量的最低字节的地址。&变量名对于整形short 、int、long类型数据在内存上占用不止一个字节。那么数据是怎样存放在多个字节的呢?例如:int a = 0 x12345678; 高地址 高地址由于硬件平台的不同,有右边两种方式小端模式:低位上的数存放在低地址。 如左表所示。arm和intel架构。大端模式:低位上的数存储在高地址。 低地址 低地址如右表所示。一些网络服

22、务器平台。7856341212345678思考:如何判断当前系统是大端还是小端?(根据字节序的特点)2.5 输入/输出函数用法2.5.1单个字符的输入/输出函数用法C语言无I/O语句,I/O操作由函数实现 如:scanf()、printf()、putchar()、getchar()、puts()、gets()等函数使用时应在源文件中包含头文件stdio.h #include 1.字符输出函数putchar【例例 2-3】 putchar函数的使用。函数的使用。#include void main() char c=A; putchar(c); putchar(A); / 输出输出A putch

23、ar(n); / 输出一个回车换行符输出一个回车换行符 putchar(101); / 输出输出ASCII码为码为101(八进制八进制)对应的字母对应的字母A putchar(65); / 输出输出ASCII码为码为65(十进制十进制)对应的字母对应的字母A 运行结果:运行结果:AAAA2.字符输入函数(getchar) 【例例 2-4】 getchar函数的使用。函数的使用。#include void main() char c1,c2,c3; c1=getchar(); / 输入一个字符赋值给变量输入一个字符赋值给变量c1 c2=getchar(); c3=getchar(); putch

24、ar(c1); putchar(c2); putchar(c3);运行结果:运行结果:abc abc 运行结果:运行结果:a b c a b例例l2-3d3#include main() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2);输入:输入:A 输出:输出:A,65 a,972.5.2 printf函数用法运行结果:运行结果:a=1,b=2运行结果:运行结果:2.1 1.2 d=2.10 h=1.20 area=1.26 【例 2-5】 输入三角形的底和高,求三角形的面积。#in

25、clude void main() double d,h,area; printf(Input d h:n); / 输入提示 scanf(%lf%lf,&d,&h); / 输入数据 area=d*h/2; / 计算面积 printf(d=%.2f h=%.2f area=%.2fn,d,h,area); / 数据保留2位小数 说明说明 格式字符要用小写格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应格式字符与输出项个数应相同,按先后顺序一一对应 输出转换输出转换:格式字符与输出项类型不一致格式字符与输出项类型不一致,自动按指定格式输出自动按指定格式输出格式字符:格式字符:十六进

26、制无符号整数十六进制无符号整数不带符号十进制整数不带符号十进制整数十进制整数十进制整数指数形式浮点小数指数形式浮点小数单一字符单一字符字符串字符串八进制无符号整数八进制无符号整数小数形式浮点小数小数形式浮点小数e和和f中较短一种中较短一种百分号本身百分号本身int a=567;printf ( “%d”,a);int a=255;printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e

27、”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.677890e+02567.789000567.789%d,ix,Xoucse,Efg%例例 main() unsigned short int u=65535; printf(”u=%hdn,u); 输出结果:输出结果:u=-1例例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b); 例例 int a=3,b=4; printf(

28、“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b);输出结果输出结果: 3 4 a=3, b=411 11 11 11 11 11 11 1165535int main()char str12=C program;char *ptr = 123 456;printf(hello worldn);printf(%s,ABC);printf(%s,str);printf(%s,ptr);/%s要求提供一个地址, /printf把该地址开始的一连串字符输出到屏幕上, /直到遇到0字符为止printf(n%c,*ptr);/该用法是提供一个字符char s5=m,s,n

29、,o,k;printf(%s,s);/问题:数组s里没有0字符,printf会到数组外面/寻找0字符,将导致数组把外面的字符也打印出来,/造成输出乱码return 0;字符串的输出方法字符串的输出方法红色字体为溢出打印的结果,红色字体为溢出打印的结果,且在不同的系统上,溢出效果不一样。且在不同的系统上,溢出效果不一样。运行结果:运行结果:hello worldABCC program123 4561msnokC program运行结果:运行结果:27331b2727,33,1ba= 27,a= 33,a= 1b 【例 2-6】 分别用十、八、十六进制形式输出整型数据。#include void

30、 main() int a=27; printf(%d%o%x%un,a,a,a,a); / 输出各数间无分隔符 printf(%d,%o,%xn,a,a,a); / 以十、八、十六形式输出a printf(a=%5d,a=%5o,a=%5xn,a,a,a,a); / %5d指定a的输出宽度占5列 【例 2-7】 字符的输出。#include void main() char c=A; int b=65; printf(%c,%dn,c,c); printf(%c,%dn,b,b); printf(%c,%dn,c+1,c+1); / 计算c+1的值为66,即B printf(%c,%dn,c

31、+32,c+32);/ 将大写字母转换为小写字母 运行结果:运行结果:A,65A,65B,66a,97 【例 2-8】 单、双精度实型数据的输出。#include void main() float f=314.15; double d=3.1415926; printf(f=%f, f=%en,f,f); printf(d=%f, d=%en,d,d); printf(d=%6.3f, d=%6.2f, d=%.3fn,d,d,d); 运行结果:运行结果:f=314.149994, f=3.141500e+002d=3.141593, d=3.141593e+000d= 3.142, d=

32、3.14, d=3.142 Printf的返回值的返回值#includeint main() int a=123; int ret = printf(a=%dn,a); printf(上一个printf输出的字符的个数为%dn,ret); return 0;运行结果:运行结果:a=123上一个上一个printf输出的字符的个数为输出的字符的个数为62.5.2 scanf函数用法地址表:变量的地址,常用取地址运算符&例如:scanf(“%d%d”,&a,&b); 其中“%d%d”表示以十进制形式输入两个整数,&a、&b表示变量a、b存储空间地址。 运行结果:运行结果:27 27 scanf成功赋

33、值了成功赋值了2个个a=27,b=39 注意:注意:若scanf期望得到整形数或浮点数,它可以跳过接下来的tab键,空格键 回车键,直到遇到其他字符为止. 若其他字符对于整形数或浮点数的表示来说为非法字符,scanf将匹配失败,并返回.scanfscanf的返回值为之前成功匹配的个数的返回值为之前成功匹配的个数 【例 2-9】 整型数据的输入。#include void main() int a,b; scanf(“%d%x”,&a,&b);/ 分别以10进制16进制形式输入a、b int ret = scanf(%d%d,&a,&b); printf(scanf成功赋值了%d个n , ret

34、); printf(a=%d,b=%dn,a,b); 运行结果:运行结果:27,27 scanf成功赋值了成功赋值了1个个a=27,b=-858993460 运行结果:运行结果:abc a,b,c【例 2-10】 字符型数据的输入。 若用getchar或scanf的%c接收字符,空格、tab键和回车键都会当做一个字符接收。#include void main() char c1,c2,c3; scanf(“%c%c%c”,&c1,&c2,&c3); printf(%c,%c,%cn,c1,c2,c3); 运行结果:运行结果:a b c a, ,b 运行结果:运行结果:1.23 4.567 ar

35、ea=5.617【例 2-11】 输入矩形的边长,求矩形面积。#include void main() double x,y,area; printf(“Input x y:n”); / 输入提示 scanf(“%lf%le”,&x,&y); / 输入double类型数据要用格式符%lf或%le area=x*y; printf(area=%.3fn,area); 2.5.4 格式控制串使用规则 运行结果:运行结果:a= 3,b= 12.35,c=s.n对实数对实数,指定小数点后位数指定小数点后位数(四舍五入四舍五入)对字符串对字符串,指定实际输出位数指定实际输出位数修饰符修饰符功功 能能m输

36、出数据域宽输出数据域宽,数据长度数据长度m,左补空格左补空格;否则按实际输出否则按实际输出输出数据在域内左对齐(缺省右对齐输出数据在域内左对齐(缺省右对齐) )-指定在有符号数的正数前显示正号指定在有符号数的正数前显示正号(+)(+)+输出数值时指定左面不使用的空位置自动填输出数值时指定左面不使用的空位置自动填0 00在八进制和十六进制数前显示前导在八进制和十六进制数前显示前导0 0,0 0 x x#在在d,o,x,ud,o,x,u前,指定输出精度为前,指定输出精度为longlong型型在在e,f,ge,f,g前,指定输出精度为前,指定输出精度为doubledouble型型l【例 2-13】

37、长度修正符l(L)的使用。#include void main() int a;long b;float x;double y; scanf(“%d%ld%f%lf”,&a,&b,&x,&y);printf(a=%d,b=%ldn,a,b);printf(x=%f,y=%lfn,x,y);运行结果:运行结果:1 2 1.234 1234.56789 a=1,b=2x=1.234000,y=1234.567890 【例 2-14】指定宽度输出。#include void main() int a=12345; printf(a=%d#n, a); printf(a=%4d#n, a); prin

38、tf(a= %8d#n, a); printf(a=%-8d#n, a);运行结果:运行结果:a=12345#a=12345#a= 12345#a=12345 # 【例 2-15】 指定输出小数位数。#include void main() float x=123.45; double y=1234.567898765; printf(x=%f y=%fn, x,y); printf(x=%8.2f y=%8.2fn, x,y); printf(x=%4.2f y=%.2fn, x,y); 运行结果:运行结果:x=123.450000 y=1234.567899x= 123.45 y= 123

39、4.57x=123.45 y=1234.57 scanf函数格式控制字符串使用 scan formattedscanf(“格式控制字符串”,地址列表) scanf函数从格式控制字符串的首字符开始输入,到格式控制字符串尾部结束输入。遇非格式说明符则必须原样输入与之抵消。遇非格式说明符则必须原样输入与之抵消。 遇格式说明符则以此格式输入数据存放到地址列表中对遇格式说明符则以此格式输入数据存放到地址列表中对应的变量内存单元中应的变量内存单元中例例 scanf(“%2d %*3d %2d”,&a,&b); 输入输入 12 345 67 则则12a, 67bl修饰符修饰符功功 能能hm*用于用于d,o,

40、xd,o,x前,指定输入为前,指定输入为shortshort型整数型整数用于用于d,o,xd,o,x前,指定输入为前,指定输入为longlong型整数型整数用于用于e,fe,f前,指定输入为前,指定输入为doubledouble型实数型实数指定输入数据宽度,遇空格或不可转换字符则结束指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量抑制符,指定输入项读入后不赋给变量例例 scanf(“%3d%*4d%f”,&k,&f); 输入输入 12345678765.43 则则123k, 8765.43f说明:用“%c”格式符时,空格,tab键,回车键和转义字符作为有效字符输入

41、输入的数据项先存放在内存输入缓冲区中,在按回车键后,才按输入格式从缓冲区依次读数据,多出数据留在缓冲区内,可被下一个输入语句使用 如如 scanf(“%d%c%f”,&a,&b,&c); 若输入若输入1234a123o.26 则则 1234 a, a b, 123 c例例 int x; char ch; scanf(“%d”,&x); ch=getchar(); printf(“x=%d,ch=%dn”,x,ch);执行:执行:123 输出:输出:x=123,ch=10例例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%

42、d,ch=%dn”,x,ch);执行:执行:123 输出:输出:x=123,ch=10解决方法:解决方法:(1 1)用)用getchar()getchar()清除清除(2 2)用函数)用函数fflush(stdin)fflush(stdin)清除全部剩余内容清除全部剩余内容 (3) (3) 用格式串中空格或用格式串中空格或“% %* *c c”来来“吃掉吃掉”注意:后两项并非总是有效果注意:后两项并非总是有效果例例 int x; char ch; scanf(“%d”,&x); scanf(“ %c”,&ch);或或 scanf(“%*c%c”,&ch);); 比如输入:123ab c*dem

43、a int num ; char ch; scanf(%d,&num); while(getchar()!=n) ;/空语句 ch = getchar(); printf(%d ch=%cn,num,ch);【例 2-17】 输入整型数据时规定域宽。 #include void main() int a; double x; scanf(%3d%lf ,&a,&x);printf(a=%d,x=%fn ,a,x);运行结果:运行结果:1234 56.78 a=-12,x=34.000000【例 2-18】 输入实型数据时规定域宽。#include void main() int a; doub

44、le x; scanf(%d%4lf ,&a,&x);printf(a=%d,x=%fn ,a,x);运行结果:运行结果:1234 56.78 a=-1234,x=56.700000【例 2-19】 已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。(输入缓冲区)#include void main() int a,d,n,sum; printf(“input a n:n”); / 提示输入 scanf(%d%d,&a,&n); / 输入 printf(“input d:n”); scanf(%d,&d); sum=a*n+n*(n-1)*d/2; printf(sum=

45、%dn,sum); 运行结果:运行结果:input a n: 1 100 input d:2 sum=10000运行结果:运行结果:input a n: 1 100 2 input d:sum=10000 【例 2-20】 输入项之间的分隔符。 #include void main() int a,b,c; printf(“input a b cn”); / 输入提示 scanf(%d%d%d,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); printf(“input a,b,cn”); / 输入提示 scanf(%d,%d,%d,&a,&b,&c);

46、printf(“a=%d,b=%d,c=%dn”,a,b,c); printf(“input a= b= c=n”); / 输入提示 scanf( a=%d b=%d c=%d,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); 运行结果:运行结果:input a b c1 2 3 a=1,b=2,c=3input a,b,c4,5,6 a=4,b=5,c=6input a= b= c=a=7 b=8 c=9 a=7,b=8,c=9 【例 2-21】 格式符“%*c”的使用。#include void main() char x,y; printf(“one

47、:”); scanf(%c%*c%c%*c,&x,&y); printf(x=%c,y=%cn,x,y); printf(“two:”); scanf(%c%c,&x,&y); printf(x=%c,y=%cn,x,y);运行结果:运行结果:one:A B x=A,y=Btwo:A B x=A,y=2.6 常用函数C语言处理程序提供的函数称为库函数。由系统提供,在iso c标准中规定的函数,库函数。用户使用库函数时,需将包含库函数声明的头文件,include到程序中。#include 例:#include 库函数名(实参数表列)例:sin(0.5);函数原型 (头文件有库函数的原型。)确定函

48、数的实参类型及返回值类型例:cos的函数原型是 double cos(double x);【例例 2-22】 输入一个正数,求它的平方根值。输入一个正数,求它的平方根值。#include #include void main() double x,y; scanf(“%lf”,&x); x=x0?x:-x; / 求求x的绝对值的绝对值 y=sqrt(x); / 调用函数求调用函数求 printf(“%.4fn”,y); 文件包含预处理命令文件包含预处理命令变量定义变量定义输入数据输入数据输出数据输出数据调用函数调用函数运行结果:运行结果:3 1.7321x2.6.1 常用数学函数使用时,应在源

49、文件中包含头文件math.h,并且并且在用gcc编译时,结尾加上-lm1.平方根函数sqrt 函数原型:double sqrt(double x) 功能:计算 。例:sqrt(1.234);2.绝对值函数fabs 函数原型:double fabs(double x) 功能:计算|x|。例:fabs(-1.76);返回值为1.76。3.指数函数pow 函数原型:double pow(double x,double y) 功能:计算x y 。例:pow(2.34,4); 返回值为2.344。4. e的指数函数exp 函数原型:double exp(double x) 功能:计算e x 。例:exp

50、(2.3); 返回值为e2.3。x5.以e为底的对数函数log 函数原型:double log(double x) 功能:计算ln x 。例:log(123.4);返回值为ln(123.4)。6.以10为底的对数函数log10 函数原型:double log10(double x) 功能:计算log10 x .例:log10(123.4);返回值为log10(123.4)。7.正弦函数sin 函数原型:double sin(double x) 例:sin(45*3.14159/180); 返回值为45正弦值。8.反正弦函数acos 函数原型:double asin(double x) 例:as

51、in(0.176); 返回sin值为0.176所对应的弧度值。9.正切函数tan 函数原型:double tan(double x) 例:cos(45*3.14159/180); 返回值为45正切值1.0。2.6.2 常用字符函数 使用时,应在源文件中包含头文件ctype.h1.大写字母转换为小写字母函数tolower 函数原型:char tolower(char x) 返回值:x是大写字母时返回对应的小写字母,否则返回x。 例:tolower(A)为a, tolower(#)为# 。2.检查字母函数isalpha 函数原型:int isalpha(char x) 返回值:x是字母时,返回非0

52、,否则返回0。 例:isalpha(1)为0, isalpha(x)为非0 。 3.检查大写字母函数isupper 函数原型:int isupper(char x) 返回值:x是大写字母时,返回非0,否则返回0。 例:isupper(a)为0, isupper(A)为非0 。4.检查数字字符函数isdigit 函数原型:int isdigit(char x) 返回值:x是数字字符时,返回非0,否则返回0。 例:isdigit(7)为非0, isdigit(007)为0 。5.检查字母、数字字符函数isalnum 函数原型:int isalnum(char x) 返回值:x是字母、数字时,返回非

53、0,否则返回0。 例:isalnum(X20)为0, isalnum(A)为非0 。6.检查可打印字符函数isgraph 函数原型:int isgraph(char x) 返回值:x是可打印字符时,返回非0,否则返回0。 例:isgraph(001)为0, isgraph(#)为非0 。2.6.3 其他常用函数使用时,应在源文件中包含头文件stdlib.h1. 随机数发生器函数 rand 函数原型: int rand(void) 返回值:产生一个0(int的最大值)之间的随机整数。 例:rand()返回产生的随机数。 2.初始化随机数发生器函数 srand 函数原型: void srand(unsigned a) 功能:以给定数初始化随机数发生器。 例:srand(10);rand(); 以给定数10初始化随机数发生器,再产生一个随机数。例如:srand(time(NULL);rand();以当前系统时间初始化随机数发生器,再产生一个随机数。其中time为系统库函数,对应头文件为time.h,它能得到当前的系统

温馨提示

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

评论

0/150

提交评论