版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1高级语言程序设计第1页,共235页。第1章 C语言基础知识1.3 数据类型、常量、变量、输入输出与基本运算 1.2 C程序的基本结构和运行过程 1.1 计算机与程序设计语言1.4 标准函数和EasyX库函数 第2页,共235页。1.1 计算机与程序设计语言计算机系统的基本组成包括计算机硬件和计算机软件。硬件指构成计算机系统的元器件、部件和设备,其中包括运算器、控制器、存储器、输入和输出设备,运算器和控制器是计算机的核心部分,人们将它们称为中央处理器(CPU)。软件是用户操纵计算机的接口界面,通常,按照应用层次可以将软件划分成系统软件、支撑软件和应用软件三个层次。 第3页,共235页。程序设计
2、程序设计是指设计、编写和调试程序的方法与过程,大致经历了以下几个阶段。1)面向计算机的程序设计2)面向过程的程序设计3)面向对象的程序设计第4页,共235页。程序设计语言程序设计语言是用于编写计算机程序的语言。按照语言级别可以将它分为两个类别:低级语言和高级语言。低级语言是一种与特定计算机体系结构密切相关的程序设计语言,主要包括机器语言和汇编语言。 高级语言是一类采用接近数学语言,并力求与具体机器无关的程序设计语言形式,它具有描述能力强,便于阅读理解,易于修改维护等特点。C语言支持结构化程序设计,C+语言和Java语言支持面向对象程序设计。第5页,共235页。6CC+Java010010010
3、0110110 1000001110011010 00110001计算机程序员机器语言编译器程序设计语言第6页,共235页。C语言发展过程及特点 C语言是应用最广的一种高级程序设计语言,由美国贝尔实验室的D. Ritchie设计,最早用于书写UNIX操作系统。C语言本身比较简单,具有简明的数据定义和流程控制机制。它提供的函数机制用于描述程序模块,使得开发者可以通过模块的组合来构造结构化的复杂程序,并且允许软件系统不同程序模块的分别开发。同时,C语言支持底层程序设计。利用C语言提供的指针等功能,可以面向计算机硬件,直接描述内存单元的地址运算和二进制运算,从而编制出高性能的计算程序和控制程序。第7
4、页,共235页。1.2 C程序的基本结构和运行过程 C程序是由若干个函数组成的,每个函数用于描述一项操作的具体实现过程。任何一个完整的C程序都必须有且仅有一个名为main的主函数。 当程序运行后,系统将率先自动调用主函数。第8页,共235页。例1:文本行的输出#include main( ) printf(“nThis is a C program.”);主函数(程序入口)标准函数(用于输出)头文件字符串换行符第9页,共235页。例2:计算1100的整数和 #include main() int i, sum; sum = 0; for (i=1; i=100; i+) /*循环*/ sum
5、= sum+i; printf(n1+2+3+.+99+100=%d, sum); 说明变量 i,sum 是整数类型赋值输出格式控制注释第10页,共235页。例3:通过键盘输入两个整数,输出其中较大的整数 # include int maxValue(int x, int y) int max; if (xy) max=x; else max=y; return max; main( ) int x, y, z; printf(Enter 2 integers:); scanf(%d%d, &x, &y); z = maxValue(x,y); printf(The larger value
6、is %d.,z); 第11页,共235页。运行C程序的基本过程第12页,共235页。Visual Studio 2010集成环境1、用户界面 第13页,共235页。2、创建工程 第14页,共235页。 3、创建文件 第15页,共235页。4、编译、连接和运行 第16页,共235页。5、运行界面第17页,共235页。Dev-C+集成环境1、用户界面 第18页,共235页。2、创建一个新文件或打开一个已经存在的C源文件第19页,共235页。3、编译、运行 第20页,共235页。4、运行界面第21页,共235页。1.3 数据类型、常量、变量、输入输出与基本运算 基本数据类型与数据的表示 1、整型:
7、整型指不带小数点的数据类型。例如,123、-89、0。常用的整型是基本整型int。对于32位系统,int类型的数据用4字节(32位二进制位)表示,字节(32位二进制位)表示,包括1位符号,有效位数为31位,取值范围为-21474836482147483647。第22页,共235页。2、实型 实型是指带小数点的数据类型。例如,78.34、0.0、-765.2、76.0。在C语言中,常用的实型是双精度型,用double表示。double类型的数据用8字节(64位二进制位)表示,包括1位符号,11位指数和52位尾数, 取值范围为 -1.79769313486232E3081.797693134862
8、32E308。第23页,共235页。3、字符型字符型是指其值仅含有一个字符的数据类型。在C语言中,字符类型的名称是char,字符值用一对单引号括起来,并且每个字符对应一个ASCII编码,用1个字节(8位二进制位)表示。例如,0、B、#对应的ASCII编码分别为48、66和35。 第24页,共235页。常量 常量是指在程序运行过程中始终不发生变化的量。 1、整型常量 在C语言中,整型常量常用十进制形式。例如,120、3270、-987、2、实型常量 在C语言中提供了两种实型常量的书写形式。一种是十进制小数形式,一种是指数形式。十进制小数形式 :123.45、509.0、-0.98、0.0指数形式
9、:1.87E+10表示1.871010第25页,共235页。3、字符常量 字符常量由一对单引号()括起来,其内部存储表示是相应字符的ASCII编码。普通字符:例如:P、9 转义符是指用一个反斜杠()后跟一个特定字符或一个八进制或十六进制数值表示的字符。例如:n, 101 4、字符串常量 字符串常量用一对双引号()括起来。例如:This is a C program. 、3871 和 K 都是字符串常量 。第26页,共235页。变量变量是指其值可以改变的量,每个变量代表了不同的存储单元。C语言规定:程序中的每一个变量,必须先定义后使用定义变量的语法格式为: ,.;例如:int count;C语言
10、规定:变量名用标识符表示。标识符是由字母、数字和下划线(_)组成的字符序列,其中第1个字符必须是字母,字母需要区分大小写。第27页,共235页。变量的赋值变量定义之后并没有一个确切的初始值,变量赋值就是将变量所属数据类型的某个数值(介于取值范围之中)放入系统为这个变量分配的存储空间中的操作。在定义变量的同时为变量赋予一个初始值。 = ; 例如:int data = 100;通过赋值操作为变量赋值。 = 例如: x = 64;第28页,共235页。例4:根据圆半径,计算圆的面积和周长。 #include main( ) double radius, area, perimeter; radius
11、 = 20; area = radius*radius*3.14159; perimeter = 2*radius*3.14159; printf(The radius of the circle is %lfn, radius); printf(The area of the circle is %lfn, area); printf(The perimeter of the circle is %lfn, perimeter); 第29页,共235页。基本的输入输出 1、字符的非格式化输入 getchar( ) 基本执行过程为:等待用户从标准输入设备键盘输入一个字符。如果输入成功,函数返回
12、这个字符的ASCII编码。 例如: char ch; ch = getchar( );2、字符的非格式化输出 putchar( ) putchar(ch),输出参数ch代表的字符 。第30页,共235页。例5:通过键盘输入两个字符,分别在两行上显示这两个字符,每行显示2次。 #include main( ) char ch; /* 定义变量ch */ ch = getchar(); /* 从键盘读取一个字符 */ putchar(ch); /* 在屏幕上显示2次输入的字符 */ putchar(ch); putchar(n); /* 在屏幕上显示换行 */ ch = getchar();/*
13、从键盘读取下一个字符 */ putchar(ch); /* 继续在屏幕上显示2次输入的字符 */ putchar(ch); putchar(n); /* 在屏幕上显示换行 */第31页,共235页。3、格式化输入 scanf( )scanf(,. );例如:scanf(“%d%d%f%f”, &x, &y, &f1, &f2); 常用的格式控制说明符由“%”后跟一个特定字符或字符序列组成“%d”表示这个位置应该输入一个十进制整型数值;“%c”表示这个位置应该输入一个字符;“%f”表示这个位置应该输入一个实型数值,“%ld”表示这个位置应该输入一个长整型数值是准备用来存放输入数据的变量地址。例如
14、,&a、&value分别表示变量a、value的存储地址第32页,共235页。例6:将输入的角度转换成弧度。 #include main( ) int degree; double radian; printf(Enter degree:); scanf(%d, °ree); radian = 3.14159*degree/180; printf(%d degrees equal to %lf radians., degree, radian);第33页,共235页。4、格式化输出 printf( ) printf(,.);例如: printf(“This value is %dn”,
15、x);的含义与scanf( ) 函数相同。但在这里,还可以包含一些直接显示的字符串。printf( )函数的基本功能是将每个表达式的结果按照格式控制说明符的规则显示到标准输出设备显示器上。格式控制说明符需要与将要输出的表达式一一对应。第34页,共235页。在很多情况下,人们希望能够更加准确地控制每个数值输出时所占据的列数,为此,C语言提供了相应的功能。其格式为:%m 和 %m.n m表示数值输出时在屏幕上占据的列数,又称为场宽,n表示输出实型数值时小数点后的位数例如: int a = 365; char c = Z; double e = 7865.298; printf(%6d%3c%12.
16、6lf, a, c, e);第35页,共235页。算术运算符加(+)、减(-)、乘(*)、除(/)、取余(%)注意:* 不能省略% (求余) 运算对象只能是整型整型整型 相当于取整,一个为实型即为除法C语言允许char类型的变量或常量参与各种算术运算,但在运算时,它将被看成一个整型数值,其值为字符对应的ASCII编码。例如:A+32等于用大写字符A的ASCII编码65与32相加结果为97 第36页,共235页。37/ 两个整数相除,结果仍为整数 5 / 2 的结果为 2 5.0 / 2 的结果为 2.5 % 求余运算 判奇偶时用此运算符5 % 3 的结果为 2 3 % 5 的结果为 3第37页
17、,共235页。#include main( ) int d1, d2, d3, d4, value; printf(Enter 4 characters:); d1 = getchar()-0; /* 输入数字字符,并转换为个位数 */ d2 = getchar()-0; d3 = getchar()-0; d4 = getchar()-0; value = d1*1000 + d2*100 + d3*10 + d4; printf(The value is %dn, value); /* 输出结果 */例7:将连续输入的4个数字字符拼成一个int类型的数值。第38页,共235页。自增、自减运
18、算符 + -+ - 可以实现变量的加1、减1操作。这两个运算符既可以置于变量的前面,也可以置于变量的后面。也就是说,+i、-i、i+、i-、 都是正确的书写形式,它们的区别只有在表达式中才能够显现出来。a = 10; b = +a; 表达式的值取修改后的值 a 为 11 ,b为11a=10; b=a+; 表达式的值取修改前的值 a 为 11 ,b为10第39页,共235页。算术表达式算术表达式是指仅包含算术运算符或自加(+)、自减(-)运算符的表达式。算术表达式的结果一定是数值类型的,即整型或实型 C语言规定,在书写表达式时,应该遵循下列规则:(1)所有内容都必须写在一行上,例如:必须写成7/
19、8(2)在表达式中只允许使用圆括号。为了确保表达式中的每个运算符能够按照所期望的顺序进行计算,应该适当地添加括号。(3)表达式中的乘号(*)不允许省略,例如:(a+1)(a-1) 必须写成 (a+1)*(a-2)第40页,共235页。C语言提供了大量标准函数,包括前面介绍过的getchar、putchar、printf、scanf等输入/输出函数,也包括各种数学计算函数。1.4 标准函数和EasyX库函数第41页,共235页。数学标准函数函数原型功能描述int abs(int x);返回int型x的绝对值double fabs(double x);返回double型x的绝对值double si
20、n(double x);返回x的正弦,x是弧度double cos(double x);返回x的余弦,x是弧度double tan(double x);返回x的正切,x是弧度double exp(double x);返回exdouble pow(double x,double y);返回xydouble sqrt(double x);返回x的开平方double floor(double x);返回小于x的最大整数double ceil(double x);返回大于x的最小整数第42页,共235页。#include #include /*引入数学函数的声明 */main( )int a, b,
21、c;double S, A, B, AB;printf(输入两个角度和一个边长:);scanf(%d%d%d, &a, &b, &c); /* 输入两个角和一条边*/A = 3.14159*a/180;/* 转换为弧度 */B = 3.14159*b/180;AB = 3.14159*(a+b)/180;S = c*c*sin(A)*sin(B)/sin(AB)/2;/* 计算三角形面积 */printf(nS=%lfn, S);例8:三角形面积的计算。第43页,共235页。函 数 原 型功 能 描 述HWND initgraph(int width, int height, int flag
22、=0);初始化一个宽width高height的绘图环境,返回窗口句柄void cleardevice( );用当前背景色清空屏幕void closegraph( );关闭绘图环境void circle(int x, int y, int radius);绘制以(x,y)为圆心,半径为radius的圆void ellipse(int left, int top, int right, int bottom);以(left,top)为左上角,(right,bottom)为右下角形成的矩形为外接矩形,绘制一个空心椭圆void rectangle(int left, int top, int righ
23、t, int bottom);以(left,top)为左上角,(right,bottom)为右下角,绘制一个空心矩形void polygon(const POINT pts , int num);以数组pts中的num个点作为顶点,绘制一个空心的椭圆void moveto(int x, int y);设置绘图当前点为(x,y)void lineto(int x, int y);在当前点和(x,y)之间绘制直线,并设置(x,y)为当前点void line(int x1, int y1, int x2, int y2);从绘图点(x1,y1)到(x2,y2)绘制一条直线void putpixel(
24、int x, int y, COLORREF color);在指定点(x,y)绘制一个颜色为color的像素点void outtextxy(int x, int y, LPCTSTR text);在指定点(x,y)输出text给定的字符串EasyX函数第44页,共235页。第2章 C语言的基本控制结构 2.3 循环结构 2.2 选择结构 2.1 顺序结构第45页,共235页。2.1 顺序结构顺序结构是指按照语句的书写顺序依次执行每条语句的语句结构。第46页,共235页。2.2 选择结构 选择结构是指根据某些数据的取值或计算结果选取不同操作的处理方式。选择结构的描述由两个基本部分组成,一是对选择
25、条件的描述;二是对处理分支的描述。 第47页,共235页。关系运算与逻辑运算 关系运算符 运算符=!=功能大于小于大于等于小于等于等于不等于 逻辑运算符 逻辑运算符&|!功能逻辑与逻辑或逻辑非第48页,共235页。注意:对于数学表示形式 0 a 10,不能直接地采用这种方式书写,而需要将它分解成两个关系运算,即分解成0小于a并且a小于10,并按照下列格式书写: 0 a & a = 0 & y+ ,如果x小于0,将不计算y+。对于逻辑表达式 x=0|y+,如果x大于或等于0,将不计算y+第49页,共235页。if语句 if ( ) 第50页,共235页。if语句 if ( ) else 第51页
26、,共235页。if( num 0 ) value= -num; else value= num;value = num;if( num 0 ) value= -num;第52页,共235页。例1:北京地铁票价的计算。 #include main( )double num;int price;printf(请输入千米数(实数):);scanf(%lf, &num);if (num=0 & num6 & num12 & num22 & num32)price = (num-32)/20 + 7;if( num=0 ) printf(非法输入!n);elseprintf(票价是 %d 元n,pric
27、e);第53页,共235页。多路选择和switch语句 switch ( ) case : case : . case : default :执行的基本过程:首先计算充当开关角色的表达式;然后,根据计算结果进行控制的转移,即用开关值与下面每个case语句中的常量进行比较;如果开关值等于某个常量,则执行该case语句中的语句序列;如果不存在等于开关值的case常量,则执行default语句中的语句序列。第54页,共235页。 在switch语句中,所有的case常量不允许重复。在实际应用中,经常将break语句作为每个case分支的语句序列的最后一条语句,以表示该分支的计算结束,并随后跳出swi
28、tch语句,终止switch语句的继续执行。第55页,共235页。例2:通过键盘读取两个复数和运算符,完成复数运算的操作,并输出计算的结果。#include int main( )double a, b, c, d, x, y, t;char op;/* 保存运算符 */printf( “nEnter the first complex number:” );scanf( “%lf%lf”, &a, &b );getchar(); printf( “nEnter a operator:” );scanf( “%c”, &op );/* 输入运算符 */printf( “nEnter the s
29、econd complex number:” );scanf( “%lf%lf”, &c, &d );switch( op ) /* 检查运算符 */见下页 printf(The result is %lf + %lfin, x, y );第56页,共235页。case + :x = a + c; y = b + d;break;case - :x = a - c; y = b - d;break;case * :x = a*c - b*d; y = b*c + a*d;break;case / :t = c*c - d*d; if( t = 0 ) printf(The denominato
30、r is 0.n );return0;x = ( a*c + b*d) / t; y = ( b*c - a*d ) / t;break;default:printf(Invalidation operator .n );return0;第57页,共235页。2.3 循环结构 while 语句 语法格式:while ( ) 第58页,共235页。例3:从键盘输入10个整数,计算它们的平均值 #include main( )int sum = 0, i = 1; int x; /* 保存当前输入的数据 */printf( “nEnter 10 integers:” );while( i = 10
31、 ) scanf( “%d”, &x ); /* 读入整数x */i+; /* 累加已输入的数据个数 */sum=sum + x; /* 累加输入的数据总和 */printf( “The average value is %lfn”, sum*1.0/(i-1); 第59页,共235页。for 语句 语法格式:for ( ; ; ) 第60页,共235页。例4:从键盘读入5个字符,找出其中ASCII值最大的字符,并将该字符输出10次。#include main( )int i, x, max = 0;for( i=0; i max ) max= x;for( i=0; i10; i+ ) pu
32、tchar( max ); 第61页,共235页。do while 语句 语法格式:do while ( ) ; 第62页,共235页。例int ch, num = 0;do ch= getchar( ); if (ch=0 & ch=9) num+; while( ch != n );第63页,共235页。#include #include #include #include int main( )double A, w, q, k;int x, y;printf(请输入正弦曲线的振幅、角速度、初相和偏距: n);scanf(%lf%lf%lf%lf, &A, &w, &q, &k);ini
33、tgraph(640, 480);setorigin(40, 240);line(-40, 0, 600, 0);line(0, 240, 0, -240);setaspectratio(1.0, -1.0);for (x=0; x640; x+=10) y = A * sin(w*x + q) + k;if (x=0) moveto(x, y);elselineto(x, y);_getch( );closegraph( );return 0;第64页,共235页。第3章 计算机算法初步 3.3 递推与迭代法 3.2 穷举法 3.1 算法的概念 第65页,共235页。3.1 算法的概念利用计
34、算机求解问题的一般过程(1)问题分析阶段 (2)数据结构设计阶段 (3)算法设计阶段 (4)编码与调试阶段 第66页,共235页。 算法描述在计算机科学的发展过程中,人们已经提出了很多种类的算法描述方法。一种是自然语言的描述方法。鉴于自然语言本身过于灵活且又缺乏严谨性,所以容易产生理解上的歧义。还有一种算法的图形描述方式流程图。它采用一些标准的图形符号描述算法的操作过程,从而避免了人们对非形式化语言的理解差异。 第67页,共235页。起止框I/O框处理框判断框调用框连接框有向边 常用流程图符号第68页,共235页。例1:求解一元二次方程问题分析假设一元二次方程可以书写成ax2+bx+c=0。可
35、以看出,任何一个一元二次方程都由三个系数a、b、c惟一确定,所以,首先需要用户输入三个系数,然后再根据一元二次方程的求解规则计算最终的结果,并将结果显示输出。 第69页,共235页。算法描述 第70页,共235页。#include #include main( )int a, b, c, t;printf( “Input a,b,c: ” );scanf( “%d%d%d”, &a, &b, &c );t = b*b 4*a*c;if (t0)printf( “No solutionn” ); else if ( t=0 )printf( “X = %lfn”, -b/(2.0*a) ); e
36、lse double t0;t0 = sqrt( (double)t );printf( “X1 = %lf, X2= %lfn”, (-b+t0)/(2*a), (-b-t0)/(2*a) ); 程序代码 第71页,共235页。3.2 穷举法概述穷举法,又称为枚举法,是人们日常生活中常用的一种求解问题的方法。穷举法的核心在于明确问题的所有可能性,并针对每种可能情况逐个进行判断,最终找出正确问题的答案。 第72页,共235页。穷举法应用实例1:素数的判断 所谓素数是指仅能被1和自身整除,且大于等于2的数值。判断一个给定的数值是否是素数是穷举法的典型实例。 第73页,共235页。例2:判断给定整
37、数是否是素数 。 问题分析为了检查一个整数是不是素数,可以采用穷举法。假设给定的整数用x表示,则判断过程就是确认x不能整除以2x-1之间的任何整数。这就需要一一列举出2x-1之间的每个整数进行排查。 第74页,共235页。NY开始输入x2 tt xt 加1x%t=0结束输出“不是素数”输出“是素数”YNt = xYN算法描述 第75页,共235页。#include main( )int x, t;printf( “Enter an integer: ” );scanf( “%d”, &x );for (t = 2; tx; t+ ) /* 列举小于x大于1的所有整数 */ if ( x%t =
38、 0 ) break;if ( t = x )/* 是否通过循环条件出口 */ printf( “%d is primen”, x );else printf( “%d isnt primen”, x ); 程序代码 第76页,共235页。穷举法应用实例2:百钱买百鸡 “百钱买百鸡”是我国古代数学家张丘建提出的一个著名的数学问题。假设某人有钱百枚,希望买一百只鸡;不同的鸡价格不同,公鸡5枚钱一只,母鸡3枚钱一只,而小鸡3只1枚钱。试问:如果用百枚钱买百只鸡,可以包含几只公鸡、几只母鸡和几只小鸡。 第77页,共235页。例3:百钱买百鸡。 问题分析从题目要求可知:公鸡、母鸡和小鸡的数量是有限的,
39、都不会超过100。通过对不同数量的公鸡、母鸡和小鸡进行组合,可以计算出购买这些鸡所用的花费,但这个题目要求找出那些花费正好100枚且鸡的总数也为100只的情况。因此,可以采用穷举法,将不同的公鸡、母鸡和小鸡的数量枚举一遍,找出那些符合题目要求的解。 第78页,共235页。算法描述 第79页,共235页。#include #include main( ) int x, y, z; for( x=0; x=100/5; x+ ) for( y=0; y=100/3; y+ ) for( z=0; z=100; z+ ) if (x+y+z =100 &15*x+9*y+z=300) printf(
40、 “x=%d, y=%d, z=%dn”, x, y, z ); 程序代码 第80页,共235页。3.3 递推与迭代法 概述递推常用于序列数据的计算。其基本策略是用已知结果和特定关系(递推公式)计算中间值。采用递推法进行问题求解的关键在于找出递推公式和边界条件。迭代也是计算机数值计算的一种基本算法,其基本策略是从初值出发,不断计算问题的近似解。第81页,共235页。递推与迭代法应用实例1:等比数列求和 所谓等比数列是指在一组数据中,后项和前项之前存在着一个固定的比例关系。例如:整数序列3、15、75、375的初值是3,后项与前项是5倍的关系,即前项乘以5得到后项。本题要求给定等比序列的首项和比
41、例,计算这个数列的前10项之和。第82页,共235页。例4:等比数列求和。 问题分析等比数列的递推公式为: itemi= itemi-1 * ratio后项等于前项乘以比例值sumi= sumi-1 + itemi前i项之和等于前i-1项之和加当前项由于在重复上述递推计算之前,需要将第1项的值累加到sum中,所以,需要先将item存入sum中。 第83页,共235页。算法描述 第84页,共235页。#include main( )int item, ratio, sum,i;printf( “nEnter the first item and ratio: ” );scanf( “%d%d”,
42、 &item, &ratio );sum=item;for ( i=1; i10; i+ ) item *= ratio; sum += item; printf( “Sum of 10 items is %dn”, sum );程序代码 第85页,共235页。递推与迭代法应用实例2:求圆周率圆周率的计算公式为: = 4 4/3 + 4/5 4/7 +4/9 4/11 + 第86页,共235页。例5:求圆周率。问题分析圆周率的计算公式为: = 4 4/3 + 4/5 4/7 +4/9 4/11 + 圆周率是通过将数列4、-4/3、4/5求和得到的。在这个数列中,每个数据项的取值与前一项及该项的
43、序号存在着一定的关系。可以通过迭代,逐个计算出每一个数据项,再将它们累加起来。为了满足要求的精度,可以通过检查数据项的大小来控制循环的终止。由于数据项的绝对值是递减的,且相邻项的符号不同,如果第n个数据项的绝对值已经小于精度值,则前n项之和一定已经满足精度要求了。第87页,共235页。算法描述 第88页,共235页。#include #include main( )int i = 1, sign = 1; double PI= 0.0, item;do item= sign * 4.0 / (2 * i+ -1);sign= -sign;PI+= item; while (fabs( item
44、 ) 1e-4 ); /* 数据项精度控制循环 */ printf( “PI = %lfn”, PI ); 程序代码 第89页,共235页。第4章 数据的组织结构(一) 4.3 字符串的组织 4.2 使用一维数组组织数据的应用实例 4.1 数组类型 4.4 字符串处理函数及应用实例 4.5 二维数组 第90页,共235页。4.1 数组类型数组类型的应用背景(1)同时存在若干个用来描述同一性质且不同个体的数据。(2)只有将这些数据组织在一起形成批量数据,共同参与处理,很多操作才具有实际意义。例如:要将表示每个学生考试成绩的所有整型数据组织在一起,以便共同参与诸如统计考试成绩的分布情况、按照考试成
45、绩由高到低排名等一系列的操作。第91页,共235页。一维数组类型的定义 定义格式: ;例如: int vote10; C语言规定:数组的下标从0开始,因此,表示这10个数据的下标为09 在C程序中,系统将会为每个数组型变量分配一片连续的存储空间,所需要分配的存储空间总数将取决于包含的元素个数和每个元素需要的存储空间。 第92页,共235页。 一维数组的初始化基本格式为: =,.,;例如:double score5 = 9.2, 9.1, 8.7, 9.1, 8.5; 第93页,共235页。说明:1)为数组型变量中的每一个元素都提供了一个初始值。此时,可以省略方括号内的数组元素数量。系统将根据花
46、括号中包含的初值数目推测出数组含有的元素数量。 float score = 9.2, 9.1, 8.7, 9.1, 8.5; 2)对数组型变量的前面若干个元素赋予初值。此时可以使用下面这种书写形式: int letter26 = 10, 9, 8, 7; 它的执行结果是:将10、9、8、7分别赋予letter数组中下标为0、1、2、3的元素,后面的所有元素赋予初值0。 3)将数组型变量中的每一个元素赋予初值0。此时,可以使用下面这种简化的书写形式: int vote10 = 0;第94页,共235页。一维数组元素的引用及基本操作数组元素的引用 数组的赋值利用赋值语句为数组赋值 for (i=0
47、; i10; i+) votei = 0; 调用标准输入函数为数组赋值 for (i=0; i13; i+) scanf(“%f”, &scorei); 数组的输出 for (i=0; i10; i+) printf(“%5d”, votei); 第95页,共235页。查找问题 查找是指根据某个给定的条件,在一组数据中搜索是否存在满足该条件的数据的过程。4.2 使用一维数组组织数据的应用实例第96页,共235页。例1:已知某个班级35名学生的某门课程的考试成绩。请编写一个程序,查看在这个班级中是否存在不及格的学生。 问题分析用一维数组记录每位学生的考试成绩,下标表示每个学生的编号,元素内容表示
48、考试成绩。 查找可以通过从前往后依次查看每个元素内容的过程实现。第97页,共235页。算法描述 第98页,共235页。#include #include #include #define NUM 35 /*学生人数*/main( ) int scoreNUM; int i; /* 随机产生35个考试成绩 */ srand(time(0); for (i=0; iNUM; i+) scorei = rand()%100; /*显示35名学生的考试成绩*/ for (i=0; iNUM; i+) printf(nNo.%d: %d, i+1, scorei); 程序代码第99页,共235页。/*顺
49、序查找是否存在不及格的学生*/ for (i=0; iNUM; i+) if (scorei60) break; /*输出查找结果*/ if (iNUM) printf(nNot all pass.); else printf(All pass.); 第100页,共235页。例2:已知一个按非递减有序排列的整型数列(12,23,30,45,48,50,67,82,91,103)。请编写一个程序,查找其中是否存在与给定key相等的数值。 第101页,共235页。算法描述 第102页,共235页。#include #define NUM 10main( ) int valueNUM = 12, 2
50、3, 30, 45, 48, 50, 67, 82, 91, 103; /* 非递减整型数列 */ int low, high, mid, key; printf(nEnter a key:); /* 输入查找的数值 */ scanf(%d, &key); low = 0;high = NUM-1; while (low=high) mid = (low+high)/2; if (valuemid=key)break; if (valuemidkey) low = mid+1; else high = mid-1; if (low=high) printf(n%d is found at %d
51、., key, mid);/* 确认break出口 */ else printf(n%d is not found., key);/* 确认循环正常出口 */程序代码第103页,共235页。 排序问题 将一组无序的数列重新排列成非递减或非递增的顺序是一种经常需要的操作。例如,在管理学生成绩的应用程序中,可以用一个数列表示一个班级的学生成绩,并按照从高到低的顺序重新排列,以便确定获得奖学金的学生。 第104页,共235页。例3:假设用户通过键盘输入一个整型数列。请编写一个程序,将其按照从小到大的顺序重新排列。 问题分析(选择排序)首先从n个数据中选择一个最小的数据,并将它交换到第1个位置;然后再
52、从后面n-1个数据中选择一个最小的数据,并将它交换到第2个位置;以此类推,直至最后从两个数据中选择一个最小的数据,并将它交换到第n-1个位置为止,整个排序操作结束。 第105页,共235页。算法描述 第106页,共235页。#include #define NUM 10 /* 参与排序的数据个数 */main() int dataNUM; /* 存放参与排序的所有整数 */ int i, j, min, temp; /* 通过键盘输入待排序的整型数列 */ printf(nEnter %d integers., NUM); for (i=0; iNUM; i+) scanf(%d, &data
53、i); /* 显示原始整型数列 */ printf(n%d integers are:, NUM); for (i=0; iNUM; i+) printf(%5d, datai); 程序代码第107页,共235页。 for (i=0; iNUM-1; i+) min = i; for (j=i+1; jNUM; j+) if (datajdataminValue) minValue = j; if (min!=i) /* 交换 */ temp = datai; datai = datamin; datamin = temp; /* 输出排序后的结果 */ printf(nOrdering li
54、st is:n); for (i=0; iNUM; i+) printf(%5d, datai); 第108页,共235页。字符串的组织形式 字符串是指一个有限长度的字符序列 ,字符串常量用一对双引号(“”)括起来。 字符串中所包含的字符个数被称为字符串长度。 4.3 字符串的组织 第109页,共235页。字符串的初始化char str = “C program”; char str = C, , p, r, o, g, r, a, m, 0; 对于这种初始化形式,系统将其视为字符操作,而不是字符串操作,因此不会在尾部添加结束符0。 “C program”的存储状态 0123456789Cpr
55、ogram0第110页,共235页。字符串的输入输出 1、gets(str); 2、scanf(“%s”, str);gets 以换行符作为输入结束标记,但不保存换行符。scanf 以空格、换行符或制表符作为结尾。第111页,共235页。字符串的输出 1、puts(str); 2、printf(%s”, str);puts将字符串的内容显示到标准输出设备屏幕上,并换行。 第112页,共235页。字符串标准函数 在C语言的标准函数库中,提供了30余种与字符串处理有关的标准函数,从而大大地提高了字符串处理的能力,降低了字符串处理的复杂程度。 4.4 字符串处理函数及应用实例 第113页,共235页
56、。计算字符串长度 strlen(str);这个函数的功能是返回字符串中所包含的字符个数,即字符串长度。字符串结束标志0不计算在内。 字符串比较 strcmp(str1, str2);两个字符串进行比较时将依据每个字符对应的ASCII编码决定其大小。 例4:用户注册程序。第114页,共235页。#include #include main( )char userid32; char password116, password216;do puts(请输入用户名:);gets(userid);if ( userid0!=0 )break; puts(用户名不能为空); while ( 1 );do
57、 puts(请输入密码(六位以上):); gets(password1); if ( strlen(password1)6 ) puts(密码长度不足);continue;puts(请再次输入同一密码);gets(password2);if ( 0=strcmp(password1, password2) )break;puts(两次输入密码不同,请重新输入); while ( 1 );puts(祝贺您成功注册我们的网站); 程序代码第115页,共235页。字符串拷贝 strcpy(str1, str2);其中str2是将要被拷贝的字符串,str1是用于存放拷贝结果的存储区域。 字符串连接 s
58、trcat(str1, str2);其中str1和str2是两个字符串。这个函数的功能是:将str2连接在str1之后,并在结束处添加一个字符串结束符0第116页,共235页。字符串转换成数值类型 atof(str); atoi(str); atol(str);其中str是一个字符串。atof() 的返回类型是double,它可以将字符串str转换成一个双精度数值;atoi() 的返回类型是int,它可以将字符串str转换成普通整型;atol() 的返回类型是long,它可以将字符串str转换成长整型(long)。 第117页,共235页。#include #include main( ) c
59、har num120, num220; double d1, d2, sum; printf(nEnter the first number:); gets(num1); /* 输入第1个用字符串表示的实型数值 */ printf(Enter ths second number:); gets(num2); /* 输入第2个用字符串表示的实型数值 */ d1 = atof(num1); /* 将第1个字符串转换成double类型 */ d2 = atof(num2); /* 将第2个字符串转换成double类型 */ sum = d1+d2; /* 将2个double类型数值相加 */ pri
60、ntf(n%s+%s=%.3lf, num1, num2, sum); /* 显示结果 */程序代码第118页,共235页。大小写转换 strlwr(str); strupr(str);str是一个字符串。标准函数strlwr( ) 可以将字符串str中出现的所有大写字母转换成小写字母;标准函数strupr( ) 可以将字符串str中出现的所有小写字母转换成大写字母。 第119页,共235页。4.5 二维数组 二维数组的定义 定义格式: ; 例如: int value54; value数组的每个元素类型为int,包含5行4列共20个元素 一旦定义了一个二维数组型变量,系统就会立即为其分配相应的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学手工课程设计
- 安装工程课程设计正文
- 学生做建筑课程设计
- 施工课程设计的价值
- 托班花生生长课程设计
- 城市规划资料员劳动合同要求
- 短视频创作者经纪合同的特点
- 2024年度物流公司三人合伙经营合同2篇
- 2024版企业间短期资金拆借合同3篇
- 2024版智能城市电线采购与管理服务合同规范2篇
- 人教版高一地理必修一期末试卷
- 山东省临沂市2023-2024学年高二上学期1月期末地理试题 附答案
- 2024-2025学年北师大版九年级上册数学期末测试综合练习题(原卷版)-A4
- 2025北京语言大学新编长聘人员招聘21人笔试备考试题及答案解析
- 博鳌机场控制区证件培训专项测试卷
- 《毛概》23版学习通超星期末考试答案章节答案2024年
- 第八单元测试-2024-2025学年统编版语文三年级上册
- TTJSFB 002-2024 绿色融资租赁项目评价指南
- 珠宝鉴赏智慧树知到期末考试答案章节答案2024年同济大学
- 国家开放大学《中文学科论文写作》形考任务1-4参考答案
- 《中国近现代史纲要(2023版)》课后习题答案合集汇编
评论
0/150
提交评论