【文档说明】C语言程序设计-数-组.ppt,共(28)页,288.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2244.html
以下为本文档部分文字说明:
C语言程序设计数组数组是程序处理大量数据的重要手段数据类型◼基本数据类型:整型:int,unsignedint,long实型:float,double,longdouble字符型:char◼构造数据类型:数组:无关键字结构:
struct共用体:union数组的定义……W[0]W[1]W[8]W[9]W定义:数据类型数组名[数组长度]例:intw[10];floatdata[100];longclass[34];charname[3
0];doublenumber,a[5],i,b[4];数组的本质:一组相同类型的变量的顺序集合。注意事项◼命名规则与基本类型变量相同;➢floatMs.Smth[15];➢int341401[34];◼必须指明长度;➢intnumber[10
];➢doublex[3*4+5];➢charname[];◼方括号是数组的标志;➢inta(10);➢longb{4};◼只有一个名字;◼同类型变量的集合.1.只能由字母、数字、下划线组成;2.第一个字符不能是数字;3.不能使用保留字。可以是常量
或常量表达式数组的初始化◼例:inta[4]={1,2,3,4};1234a[0]a[1]a[2]a[3]a数组的初始化◼完整初始化:floatx[3]={1.5,2,3.5};inta[4]={0,1,2,3};◼部分初始化:floatx[5]={1.5,2,3.
5};charname[30]={‘N’,’o’,’’,’N’,’a’,’m’,’e’};部分初始化只能在前部◼完整初始化的简略方式:floatx[]={1.5,2,3.5,4};inta[]={1,2,3,4,5,6,7,8,9,10};◼无初始化:floatx[4];inta[3]
;常见错误:inta[4]={1,2,3,4,5};int@sohu[3]={1,2,3};floatdata[10]={};intb[6]={1,2,3,,5,6};inti;floatdata[i]={
3,2,1};floatx;floatdata[x]={3,2,1};数组的使用◼与基本变量相同的用法:intnum[4]={0,0,0,0};num[0]=1;num[1]=5;num[2]=2;◼数组中的变量必须是相同类型的:num[1]
=1;num[2]=3.14;→num[2]=3;num[3]=‘a’;→num[3]=97;◼使用与定义的区别:inta[3];→定义语句a[3]=3;→赋值语句◼数组的边界:下标的变化范围从0开始。num[0]=1;num[1]=5;num[2]=2;num
[3]=0;数组的存贮方式a[0]a[1]a[2]a[3]a[4]a[5]b[0]b[1]b[2]b[3]b[4]c[0]c[1]abc注意:C语言中,数组的越界使用是最常见的隐形错误,是程序调试的难点。计算机内存是线性空间inta[6];intb[5];intc[2];
数组的使用◼例1.数组基本操作#include<stdio.h>main(){inta[10],i;a[0]=1;a[1]=2;a[2]=a[0]+a[1];a[3]=a[2]*a[1];printf(“%d,%d,%d,%d”,a[0],a[1],a[2],a[3]);}◼例2.数组基本
操作#include<stdio.h>main(){inta[100],i;for(i=0;i<100;i++){a[i]=i;}}◼例3:输入一个大数,计算其位数并逆向打印#include<stdio.h>main(){charc;intdata[100],k,n=0;while((
c=getchar())!=‘\n’){data[n]=c-48;n++;}printf(“%d\n”,n);for(k=n-1;k>=0,k--)printf(“%d”,data[k]);}数组的应用if(c>‘0’&&c<’9’){data[n]=c-48
;n++;}if(n>=100)break;较高的程序容错性是一个优秀程序区别于普通程序的重要标志之一。//--------------sort------------------for(i=0;i<num;i
++){max=data[i];imax=i;for(k=i;k<num;k++){if(data[k]>max){max=data[k];imax=k;}}temp=data[i];data[i]=data[ima
x];data[imax]=temp;}for(i=0;i<num;i++)printf("%f\n",data[i]);}数组的应用例4:选择法排序1.确定搜索范围;2.遍历数据,选出其中的最大值;3.将最大的
数据和最前面的数据交换;4.搜索范围减小一个;5.重复步骤2和3,直至排序完毕。选出一个最大的交换#include<stdio.h>voidmain(){floatdata[100],temp,max;inti,k,imax,num;//----------inputdat
a--------------for(i=0;i<100;i++){scanf("%f",&data[i]);if(data[i]==-9999.0)break;}num=i;//-----datanumber读入数据for(;;){change=0;for(k=
0;k<num-1;k++){if(data[k]<data[k+1]){temp=data[k];data[k]=data[k+1];data[k+1]=temp;change=1;}}if(change==0)break;}for(
i=0;i<num;i++)printf("%f\n",data[i]);}数组的应用◼例5.冒泡法排序1.扫描数组,相邻元素相比较,将较大的调换到前面。2.重复扫描,直至没有需要交换的元素。#include<stdio.h>voidmain(){floatdata[100],temp;in
ti,k,change,num;for(i=0;i<100;i++){scanf("%f",&data[i]);if(data[i]==-9999.0)break;}num=i;相邻两数比较交换变动标志变动标志数组的应用◼例6.用筛选法求质数#include<stdio.h>ma
in(){intdata[100],i,j,step;for(i=0;i<100;i++)data[i]=i+1;for(i=1;i<100;i++){if(data[i]!=0){step=data[i];for(
j=i+step;j<100;j+=step)data[j]=0;}}for(i=0;i<100;i++){if(data[i]!=0)printf("%d,",data[i]);}}思路:1234567891011121
3141516171819202122232425262728293031323334…100删除操作注意:数组的下标从零开始数组的应用◼例7.计算循环小数for(k=0;;k++){q=a1/a2;r=a1%a2;q_array[k]=q;finish=0;
for(i=0;i<k;i++){if(r==r_array[i]){finish=1;start=i+1;break;}}if(finish==1)break;r_array[k]=r;a1=r*10;}for(i=0;i<k+1;i++){if(i==1
)printf(".");if(i==start)printf("[");printf("%1d",q_array[i]);}printf("]\n");}思路:1.记录每次除法的余数;2.和以前的记录比较,直至发现重复为止。#include<stdio.h>voidma
in(){inta1,a2,q,r,q_array[1000],r_array[1000];inti,k,start,finish=0;scanf("%d",&a1);scanf("%d",&a2);将新得到的余数与记录的所有余数比较将余数记录下来并作为
新的被除数二维数组的定义定义:数据类型数组名[长度1][长度2]W[0][0]W[0][1]W[0][2]W[1][0]W[1][1]W[1][2]intw[2][3];计算机的内存是线性空间。右边的下标变化较快。W[0][0]W[0][1]W[0][2]W[1][0]
W[1][1]W[1][2]二维数组的初始化◼完全初始化:inta[2][3]={{1,2,3},{4,5,6}};(分行初始化)inta[2][3]={1,2,3,4,5,6};(顺序初始化)◼完全初始化的简略形式:inta[][3]={{1,2,3},{4,5,6}};inta
[][3]={1,2,3,4,5,6};◼部分初始化:inta[3][3]={{2},{},{3,1}};200000310二维数组的应用◼例1.二维数组的赋值#include<stdio.h>main(){i
nti,j,array[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)array[i][j]=i*3+j;}01234567891011二维数组的应用◼矩阵运算123456789147258369ab14
7258369a′182182548214881143250327712250122194a•ba×b#include<stdio.h>voidmain(){inta[][3]={{1,2,3},{4,5,6},{7,8,9}};intb[][
3]={{1,4,7},{2,5,8},{3,6,9}};intc[3][3];inti,j;for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][j]*b[i][j];printf("%d",c[i][j]);}printf("\n");}}矩阵运算与计算
机绘图是二维数组的典型应用图形处理、数学计算、数据库等。二维数组的应用!_|*~=-.,|_,-'`||/^\!_/\|*`~-.,/,\|.-~^`/#"\|_/##__\___|___[]_[]_[]_[][]_[]_[
]_[]_[]|_=_-=_-=_|!_|_=_=-_-_==_|!_|=_=-||*`--,_-_||*`~-.,=[]||.-'|=[]|!_|_.-"`_-|||_=--||*`~-.,||=_-|/^\|=_=-||_,-~`/^\|_-=
[]|_/\_|_=-___|_|_/\|=_-|[]/,\[]_[]_[]_[]_[]_[]_/,\[]=-||/#"\_=-___=__=__-=-_-=_/#"\|_[]|_/##__\_-_=______/##__\_-|\[]_[]_[]_[]
=_0~{___}~0[]_[]_[]_[]=-|\|_=__-_=-_=_|-=_|,||_=-___-_=-__|_|\|_-=-|-_|((*||=_=|-|___\|=-_=|=_|`||_-=_|=_|/+\||=_-|_=_`-.-`|=_==|=_-||+|||-_=
-_|=_=|=_=-_|=||+|||=_-/+\|-=|_=-/+\|=_|^^^||=_|+|+||=--_,--,_|_=|+|+||-_|=||-|+|+||-_=/||\|=_|+|+||-=_|_-/|=_=|+|+||=_=|||
||_-|+|+||_=|=/|_^^^^^|=-||<&>|=_=^^^^^|_=-|/|=_=|=_-_|||||=_|-_|((`'-"``""-'`)))--(/(o_o)\\(0)/_'-.._'='_..-'_/`;#'#'#.
-.#'#'#;`\\_))'#'((_/#..#'#..#'/'#..#'\_\\'#..#'//_(((___)'#'(___)总结◼数组的各元素必须类型相同;◼数组的长度定义必须是常量或常量表达式;
◼数组在内存中是线性存贮;◼数组元素具有简单变量的一切性质;◼不允许整体操作;◼数组的下标从0开始;◼系统不对数组操作进行越界检查。数组的本质:一组相同类型的变量的顺序集合。上机作业◼1.通过键盘输入一组数据,对该组数据进行排序
。排序完成后,通过键盘输入一个数,请按排序的规律将它插入到数组中。◼2.通过键盘输入两个方阵,计算各个方阵的转置阵和所有元素之和,以及两矩阵的点积、叉积。字符数组与字符串◼字符数组charuniversity[20]={'B','U','A','A'};....
...................BUAA012319◼字符串charuniversity[20]={"BUAA"};.......................BUAA012319\04´\0´是字符串区别于字符数组的标志,如果没有´\0´,专用于字符串的
一些操作则不能使用,但它也是合法的,只是普通的字符数组而已。◼字符串的定义:charclass[20];字符串的定义与初始化注意:如果只定义而未初始化,则字符串和字符数组形式上是一样的。◼字符串初始化:charclass[20]={"BUAA"};charclass[2
0]="BUAA";charclass[]="BUAA";◼字符串长度计算函数——strlencharclass[]="391401";i=strlen(class);i=strlen("BeijingUniversityofAeronauticsandAstronautics
");注意:'\0'是字符串的结束标志,它占用空间,但不是串的一部分。字符串专用函数◼字符串拷贝函数——strcpycharuniversity[30]="Buaa",class[]="391401";strcpy(university,class);注意:1.函数自动处理
'\0';2.第一个字符串必须有足够的空间;3.不能采用university=class的方式拷贝字符串。字符串专用函数◼字符串比较函数——strcmp比较两个字符串,根据结果的不同返回不同的值。返回值:当S1>S2时,返回正数
;当S1<S2时,返回负数;当S1=S2时,返回0。字符串比较依据:ASCII码表。charstring1[]="BUAA";charstring2[]="Buaa391401";比较的方法:从左至右,逐字符比较,直至发现
不同。注意:字符串的长度不作为比较依据。字符串专用函数◼字符串拼接函数——strcatcharuniversity[30]="Buaa",class[]="391401";strcat(university,class);结果:Buaa391401注意:1.函数自动处
理'\0';2.第一个字符串必须有足够的空间;3.不能采用university=university+class;◼其它常用函数(string.h)➢大写变为小写函数——strlwr➢小写变为大写函数——strupr➢字符串查找函数——strstrstring.h不是C语言标准库,在不同
的系统中可以不一样。字符串的输入输出◼字符串专用输入函数——gets(str)1.输入的一切内容均按字符串处理;2.与scanf的主要区别是:可以输入空格。例:chara[10];get(a);◼字符串专用输出函数——puts(str)1.相当于pri
ntf(“%s”,......);2.不推荐使用;3.常用格式:printf(“%s”,a);★字符串的应用◼例:实现strstr功能假设有一个著名高校的列表,希望能够实现查找某高校是否在该列表中。list[]="peking,tsinghua,fu
dan,beihang";name[]="buaa";length1=strlen(list);length2=strlen(name);found=1;for(j=0;j<=length1-length2;j++){if(name[0]==list[
j]){for(i=0;i<length2;i++)if(name[i]!=list[j+i])found=0;}}if(found==1)printf("Yes,%sisfamous!\n",nam
e);elseprintf(“No,%sisn'tfamous!\n",name);}#include<stdio.h>#include<string.h>voidmain(){charlist[]="pek
ing,tsinghua,beihang";charname[]="beihang";intlength1,length2,i,j,found;作业:改正程序错误,补充该程序的功能,name由用户键盘输入。