语言程序设计_第1页
语言程序设计_第2页
语言程序设计_第3页
语言程序设计_第4页
语言程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、C 语言程序设计语言程序设计谭小慧谭小 组2022-5-82数组的用处数组的用处 l保存大量同类型的相关数据u如矩阵运算,表格数据等 数 组2022-5-83数组(数组(Array)lint a10;u定义一个有10个元素的数组,每个元素的类型均为intu使用a0、a1、a2、a9这样的形式访问每个元素。它们与普通变量没有任何区别u系统会在内存分配连续的10个int空间给此数组u数组下标可以是整型表达式u直接对a的访问,就是访问此数组的首地址a数组首地址数组首地址a9a8a7a1a0数 组2022-5-84int a10;int b34;char c456;13568

2、9472 10a0 1 2 3 4 5 6 7 8 9一维数组一维数组三维数组三维数组b二维数组二维数组0,0 0,1 0,2 0,31,0 1,1 1,2 1,32,0 2,1 2,2 2,3对应的下标对应的下标数 组2022-5-85数组的初始化数组的初始化数 组2022-5-86数组的初始化数组的初始化l数组定义后的初值仍然是随机数,一般需要我们来初始化lint a5 = 12, 34, 56 ,78 ,9 ;lint a5 = 0 ;lint a = 11, 22, 33, 44, 55 ;l数组大小最好用宏来定义,以适应未来可能的变化u#define SIZE 10int aSIZE

3、;l数组大小定义好后,将永远不变数 组2022-5-87int b34=1,2,3,4,5,6,7,8,9,10,11,12;int a6=0,11,22,33,44,55;01122334455100102104106108110值值地址地址a1231 4567891 101112200202204206208210212214216218220222b数数组组的的内内存存组组织织数 组2022-5-88在长度确定的情况下,最高维可以不指在长度确定的情况下,最高维可以不指定长度定长度 int c =1,2,3,4,5; int f 4=2,3,4,5,6,5;12345c2000f34565

4、00053数 组2022-5-89可以只给一部分分量赋初值可以只给一部分分量赋初值 int a10=0,1,2,3,4; int b10=0; int t34=1,5,9; int h34=1,0,6,0,0,11;1590t0000000001234a0000000000b000001000h060000110数 组2022-5-810数组的使用数组的使用l数组的下标都是从0开始l对数组每个元素的使用与普通变量无异l可以用任意表达式作为下标,动态决定访问哪个元素ufor (i=0; iSIZE; i+) ai = 2 * i;l下标越界是大忌!u使用大于最大下标的下标,将访问数组以外的空间。

5、那里的数据是未知的,可能带来严重后果lsizeof可以用来获得数组大小数 组2022-5-811数组的特点数组的特点l快速地随机访问l一旦定义,不能改变大小数 组2022-5-812只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)int a10,i;scanf( %d ,&ai);for (i=0;i10;i+) scanf( %d ,&ai);printf( %d ,ai);for (i=0;i10;i+) printf( %d ,ai);一维数组的输入和输出一维数组的输入和输出数 组2022-5-813例例1 打印出最高分及其学生序号打印

6、出最高分及其学生序号 l从键盘输入学生人数从键盘输入学生人数n;l从键盘输入所有学生的学号和成绩分别存入数组从键盘输入所有学生的学号和成绩分别存入数组num和和scorel假设其中的一个学生成绩为最高,同时记录其学号,即令假设其中的一个学生成绩为最高,同时记录其学号,即令lmaxScore = score0lmaxNum = num0;l对所有学生成绩进行比较,即对所有学生成绩进行比较,即l for (i=0; i maxScore,l则修改则修改maxScore值为值为scorei,l并记录其学号并记录其学号maxNum = numi;l l打印最高分打印最高分maxScore及其学号及其学

7、号maxNum;数 组2022-5-814#include #define ARR_SIZE 40main() float scoreARR_SIZE, maxScore;int n, i;long maxNum, numARR_SIZE;printf(Please enter total number:);scanf(%d, &n); printf(Please enter the number and score:n);for (i=0; in; i+) scanf(%ld%f, &numi, &scorei); maxScore = score0;maxNum =

8、 num0; for (i=1; i maxScore) maxScore = scorei; maxNum = numi; printf(maxScore = %.0f, maxNum = %ldn, maxScore, maxNum); 数 组2022-5-815常见错误常见错误 int n=15; int datan; 只能定义静态数组只能定义静态数组 int data5; data5=10; /C/C语言对数组不作越界检查,使用时要注意语言对数组不作越界检查,使用时要注意 int a10,i; for(i=1; i=10; i+) scanf(“%d”,&ai); int a1

9、0; float i;ai=10;数 组2022-5-816例例2:按相反的顺序存储数组元素按相反的顺序存储数组元素0123456789 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 数值数值下标下标a0a9a1a8a2a7a3a6a4a59=10 -0 -18=10 -1 -17=10 -2 -16=10 -3 -15=10 -4 -1aia10-i-1数 组2022-5-817void main( )int i , t , a10; for(i=0; i10; i+) scanf(“%d”,&ai); for (i=0; i10/2; i+) t=

10、ai; ai=a10i1; a101i=t ; for(i=0; i10;i+) printf(“%d”,ai); putchar(n);数 组2022-5-818冒泡排序冒泡排序冒泡排序的思想是:冒泡排序的思想是: 每次比较每次比较相邻的两个数相邻的两个数,如果前面的,如果前面的数大就相互交换,这样小的数就会向数大就相互交换,这样小的数就会向气泡一样往前冒。一趟排序完成后最气泡一样往前冒。一趟排序完成后最后一个数最大。共进行后一个数最大。共进行n-1n-1趟排序。趟排序。 数 组2022-5-8190 1 2 3 4 50 1 2 3 4 50 1 2 3 4 5数 组2022-5-8200

11、 1 2 3 4 50 1 2 3 4 50 1 2 3 4 5一一趟趟排排序序结结果果数 组2022-5-821 0 1 2 3 4 5 6 72149 252016081427 0 1 2 3 4 5 6 1 2 3 4 5 6 7 0 1 2 3 4 5 1 2 3 4 5 6第 1趟 第 2趟 0 1 2 3 4 5 6 72125 201608142749for(j=0; j7; j+) aj aj+1for(j=0; j6; j+) aj aj+1数 组2022-5-822 0 1 2 3 4 1 2 3 4 5 第 3趟 0 1 2 3 4 5 6 72120 160814252

12、749for(j=0; j5; j+) aj aj+1 0 1 2 3 4 5 1 2 3 4 5 6第 2趟 0 1 2 3 4 5 6 72125 201608142749for(j=0; j6; j+) aj aj+1数 组2022-5-823 0 1 2 3 1 2 3 4 第 4趟 0 1 2 3 4 5 6 72016 081421252749 0 1 2 3 4 1 2 3 4 5 第 3趟 0 1 2 3 4 5 6 72120 160814252749for(j=0; j4; j+) aj aj+1for(j=0; j5; j+) aj aj+1数 组2022-5-824 0

13、 1 2 1 2 3 第 5趟 0 1 2 3 4 5 6 7168142021252749for(j=0; j3; j+) aj aj+1 0 1 2 3 1 2 3 4 第 4趟 0 1 2 3 4 5 6 7201681421252749for(j=0; j4; j+) aj aj+1数 组2022-5-825 0 1 1 2 第 6趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j2; j+) aj aj+1 0 1 2 1 2 3 第 5趟 0 1 2 3 4 5 6 7168142021252749for(j=0; j3; j+) aj aj+1

14、数 组2022-5-826 0 1 第 7趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j1; j+) aj aj+1 0 1 1 2 第 6趟 0 1 2 3 4 5 6 7814 162021252749for(j=0; j2; j+) aj aj+1数 组2022-5-827#define N 10void main( )int i, j, t, aN; printf(“input 10 number:”); for(i=0; iN; i+) scanf(“%d”,&ai); for(i=1; iN; i+) for(j=0; jaj+1)

15、t=aj; aj=aj+1; aj+1=t; printf(“the sorted number:n”); for(i=0 iN; i+) printf(“%3d”,ai); printf(“n”);数 组2022-5-828选择排序选择排序选择排序的思想选择排序的思想: :每次从剩下的数中每次从剩下的数中选择选择最小的数最小的数( (记住它的下标记住它的下标) )与这组数中最与这组数中最前面的数交换,数的个数依次减少。一前面的数交换,数的个数依次减少。一趟排序完成后最前面的数最小。共进行趟排序完成后最前面的数最小。共进行n-1n-1趟排序。趟排序。 数 组2022-5-829k=0;/假设从

16、假设从a0-a5a0-a5的数中的数中a0a0最小最小for(j=1; j6; j+) if(ajak) k=j;a0 ak第第0 0趟趟数 组2022-5-830第第1 1趟趟k=1 ;/;/假设从假设从a1-a5a1-a5的数中的数中a1a1最小最小for(j=2; j6; j+) if(ajak) k=j;a1 ak数 组2022-5-8310 1 2 3 4 5第第2 2趟趟k=2; /假设从假设从a2-a5a2-a5的数中的数中a2a2最小最小for(j=3; j6; j+) if(ajak) k=j;a2 ak数 组2022-5-8320 1 2 3 4 5第第3 3趟趟k=3;

17、/假设从假设从a2-a5a2-a5的数中的数中a2a2最小最小for(j=4; j6; j+) if(ajak) k=j;a3 ak数 组2022-5-833第第4 4趟趟k=4;for(j=5; j6; j+) if(ajak) k=j;a4 ak数 组2022-5-834#define N 10void main( ) int i, j, t, k, aN; printf(“input 10 number:”); for(i=0; iN; i+) scanf(“%d”,&ai); for(i=0; iN-1; i+) k= i; /假设从假设从ai-aN-1ai-aN-1的数中的数

18、中aiai最小最小 for(j=i+1; jN; j+) if(ajak) k = j; if(k!=i) t=ak; ak=ai; ai= t; printf(“the sorted number:n”); for(i=0 iN; i+) printf(“%3d”,ai); printf(“n”);数 组2022-5-835有一个有一个3*4的矩阵,求的矩阵,求值最大的元素及其所值最大的元素及其所在的行号、列号在的行号、列号#define M 3#define N 4void main( )int max, i , j , row=0, col=0; int aMN; for(i=0; iM

19、; i+) for(j=0; jN; j+) scanf(“%d”,&aij); max=a00; for(i=0; iM; i+) for(j=0; jmax) max=aij; row=i; col=j;printf(“max=%d,row=%d,col=%dn”,max,row,col);数 组2022-5-836字符串(String)与字符数组l字符串u一串以0结尾的字符在C语言中被看作字符串u用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符uC语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理l字符数组u每个元素都是字符类型的数组nchar

20、 string80;数 组2022-5-837字符数组的初始化l用字符型数据对数组进行初始化 uchar str6 = C,h,i,n,a,0; l用字符串常量直接对数组初始化 uchar str6 = China; uchar str6 = China;数 组2022-5-838逐个输入输出lfor (i=0; si!=0; i+)ll putchar(si);llputchar(n);一次性输入输出scanf(%s,s); printf(%s,s);char s10;字符数组的输入输出 gets(%s,s); puts(%s,s);数 组2022-5-839scanf()lint i;sc

21、anf(%d, &i); lchar str10;scanf(%s, str);u不能读入带空格的字符串,gets()可以u这种用法很不安全。当用户的输入多于10个(含10个),str数组将越界数 组2022-5-840必须使用必须使用#include 1puts(字符串字符串)作用:将一个字符串输出到屏幕作用:将一个字符串输出到屏幕 char str = “This is a book!”; puts(str); puts(“Press a key!”);字符串处理函数数 组2022-5-8412gets(字符数组字符数组)作用:从键盘输入一个字符串到字符数组作用:从键盘输入一个字符

22、串到字符数组 char str20; gets(str);数 组2022-5-842Youare0 str1:astudent0str2:Y o ua r eas t u d e n t 0 .str1:注意注意: :字符数组字符数组1 1要足够大要足够大数 组2022-5-843注意注意:这是给字符数组一次性赋值的这是给字符数组一次性赋值的唯一唯一方法方法 字符数组字符数组1要足够大要足够大 不能使用以下赋值运算不能使用以下赋值运算: str1= “China”;只能用只能用: str10= C; str11= h; China0数 组2022-5-844China0Cgina0Ciina0

23、数 组2022-5-845数 组2022-5-846输入一行字符输入一行字符, ,统计其中有多少个单词统计其中有多少个单词. .单词之间用空格隔开单词之间用空格隔开char string81;int num=0,i=0,len;gets(string);len=strlen(string);ilen while(stringi= = & ilen) i+; num+; while(stringi!= & ilen) i+;数 组2022-5-847输入一行字符输入一行字符, ,统计其中有多少个单词统计其中有多少个单词. .单词之间用空格隔开单词之间用空格隔开输入一行字符输入一行

24、字符从第一个字符到最后一个字符从第一个字符到最后一个字符这个字符是空格这个字符是空格? ?本字符是空格本字符是空格前一个字符是否是空格前一个字符是否是空格? ?本字符是非空格本字符是非空格单词个单词个数加数加1 1单词个数初始化为单词个数初始化为0 0是是是是输出单词个数输出单词个数否否否否数 组2022-5-848#include void main( ) int i, num=0, word=0; char string81; gets(string); for(i=0; stringi!=0; i+) if (stringi= = ) word=0; else word=1; if(word= =0) word=1; num+; printf(There are %d word in the linen”,num);数 组2022-5-849对一个字符串进行操作对一个字符串进行操作 char one80; gets(one); for(i=0; onei!=0; i+) 或:或:while(getchar()!=n) 对对多个字符串多个字符串进行操作进

温馨提示

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

评论

0/150

提交评论