【文档说明】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[30];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[imax];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,m
ax;inti,k,imax,num;//----------inputdata--------------for(i=0;i<100;i++){scanf("%f",&data[i]);if(data[i]==-9999.0)b
reak;}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;inti,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>main(){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]);}}思路:1234567891011121314151617181920
2122232425262728293031323334…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>voidmain(){i
nta1,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.二维数组的赋值#i
nclude<stdio.h>main(){inti,j,array[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)array[i][j]=i*3+j;}01234567891011二维数组的应用◼矩阵运算1
23456789147258369ab147258369a′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"};.......................BUAA0123
19\04´\0´是字符串区别于字符数组的标志,如果没有´\0´,专用于字符串的一些操作则不能使用,但它也是合法的,只是普通的字符数组而已。◼字符串的定义:charclass[20];字符串的定义与初始
化注意:如果只定义而未初始化,则字符串和字符数组形式上是一样的。◼字符串初始化:charclass[20]={"BUAA"};charclass[20]="BUAA";charclass[]="BUAA";◼字符串长度计算函数——strlencharclass[]="391401";i=s
trlen(class);i=strlen("BeijingUniversityofAeronauticsandAstronautics");注意:'\0'是字符串的结束标志,它占用空间,但不是串的一部分。字符串专用函数◼字符串拷
贝函数——strcpycharuniversity[30]="Buaa",class[]="391401";strcpy(university,class);注意:1.函数自动处理'\0';2.第一个字符串必须有足够的空间;3.不能采用university=c
lass的方式拷贝字符串。字符串专用函数◼字符串比较函数——strcmp比较两个字符串,根据结果的不同返回不同的值。返回值:当S1>S2时,返回正数;当S1<S2时,返回负数;当S1=S2时,返回0。字符串比较依据:ASCII码表。chars
tring1[]="BUAA";charstring2[]="Buaa391401";比较的方法:从左至右,逐字符比较,直至发现不同。注意:字符串的长度不作为比较依据。字符串专用函数◼字符串拼接函数——strcatchar
university[30]="Buaa",class[]="391401";strcat(university,class);结果:Buaa391401注意:1.函数自动处理'\0';2.第一个字符串必须有足够的空间;3.不能采用universi
ty=university+class;◼其它常用函数(string.h)➢大写变为小写函数——strlwr➢小写变为大写函数——strupr➢字符串查找函数——strstrstring.h不是C语言标准库,在不同的系统中可以不一样。字符串的输入输出◼字符
串专用输入函数——gets(str)1.输入的一切内容均按字符串处理;2.与scanf的主要区别是:可以输入空格。例:chara[10];get(a);◼字符串专用输出函数——puts(str)1.相当于printf(“%s”,......);2.不推荐使用;3.常用格式:printf
(“%s”,a);★字符串的应用◼例:实现strstr功能假设有一个著名高校的列表,希望能够实现查找某高校是否在该列表中。list[]="peking,tsinghua,fudan,beihang";name[]="buaa";length1=strlen(list);le
ngth2=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",name);elseprintf(“No,%sisn'tfamous!\n",name);}#include<stdio.h>#i
nclude<string.h>voidmain(){charlist[]="peking,tsinghua,beihang";charname[]="beihang";intlength1,length
2,i,j,found;作业:改正程序错误,补充该程序的功能,name由用户键盘输入。