二级C语言第9章指针课件

PPT
  • 阅读 38 次
  • 下载 0 次
  • 页数 31 页
  • 大小 273.501 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
二级C语言第9章指针课件
可在后台配置第一页与第二页中间广告代码
二级C语言第9章指针课件
可在后台配置第二页与第三页中间广告代码
二级C语言第9章指针课件
可在后台配置第三页与第四页中间广告代码
二级C语言第9章指针课件
二级C语言第9章指针课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 31
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】二级C语言第9章指针课件.ppt,共(31)页,273.501 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44660.html

以下为本文档部分文字说明:

1第9章数组第1部分:•一维数组的定义•一维数组在内存中的存放•一维数组元素的引用•一维数组的应用第2部分•二维数组的定义•二维数组的数组名•二维数组表达式•一维数组的应用•字符数组2排序问题1.两个数排序?a,bif(a<b){t=a;a=b;b=t;}2.三个数

排序?a,b,cif(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}问题导入3.100个数排序?a1,a2,a3,….a100讨论:如何用简单的方法表示变量集合:a1,a2,a3,….

a100,不能用省略号!引入一维数组概念。3数组基本概念:1.数组:一组具有相同数据的有序集合。2.数组元素:构成数组的成员称为数组单元,即数组元素3.数组维数数组下标的个数数组:有序数据的表示4§9.1.1一维数组的定义1、定义一维数组例如:inta[100];包含变量:a[0],a[1],a[

2],….a[99]charc[8];floatx[20];y[4*M+1];(M是符号常量)floats1[75];类型说明数组名[exp],数组名[exp],…其中:exp为常量表达式注意:1.inta[10];不能表示为:inta(10);2.数组名定名规则和简单

变量名相同;数组名后是用方括弧括起来的常量表达式,决定了数组元素个数;3数组元素的下标从0开始,最大下标值为数组元素个数减1;59.2.2、一维数组元素的引用•数组必须先定义,后引用,C规定只能引用数组

元素,不能一次引用整个数组•数组元素的表示形式为:数组名[下标]例:inta[8];//先声明a[0]=a[5]+a[7]-a[3*2];//后引用下标可以是•整型常量或•整型表达式,61.在定义数组时对数组元素赋初值例如:inta[5]={1,2,3,4,5};cha

rc[5]={„@‟,‟\n‟,‟a‟,‟b‟,‟\0‟};2.可以只给部分元素赋初值例如:intb[5]={1,2,3};9.1.3、一维数组的初始化3.在对全部数组元素赋初值时,可省略数组长度例如:intc[]=

{1,2,3,4,5};4.静态数组元素具有自动初始值0例如:staticintd[5];7例9.1定义30个元素的整型数组,顺序存放1,3,5…奇数,先顺序输出,再逆序输出.#include<stdio.h>#

defineM30main(){ints[M],i,k=1;for(i=0;i<M;i++){s[i]=k;k+=2;}for(i=9;i<M;i++){printf("%4d",s[i]);if((i+1)%10==0)printf(“\n”);}}8

9.2一维数组和指针例:floata[10],*p,x;a表示数组的首地址:&a[0]a[0]表示第一个元素for(k=0;k<10;k++)p=a+k;p=&a[0];p=a;a=&x;a++;P109:数组名相当于地址常量,不可重新赋

值!数组名+整数首地址for(p=a,k=0;k<10;k++){scanf(“%d”,p);p++;}for(p=a,k=0;k<10;k++)scanf(“%d”,p++);for(p=a;p-a<10;p++

)scanf(“%d”,p);99.2首地址的引用,指针引用一维数组2)数组名表示首地址,a(即a+0)等价于&a[0]类似:a+1:&a[1]a+i:&a[i]for(k=0;k<10;k++)printf(“%4d”,*(a+k));等价于:for(k=0;k<10;k+

+)printf(“%4d”,a[k]);3)floata[10],*p,k;p=a;for(k=0;k<10;k++)printf(“%4d”,*(p+k));10for(p=a,k=0;k<10;k++)printf(“%4d”,*p);p++);for(p=a,k=0

;k<10;k++)printf(“%4d”,*p++);for(p=a,p-a<10;p++)printf(“%4d”,*p);4)用带下标的指针变量引用一维数组例:int*p,s[10],i;p=

s;等价的表达式:(1)s[i](2)*(s+i)(3)*(p+i)(4)p[i]非法:s++;s=p;p=&ss不可变,p可变!11§9-3函数与一维数组及元素的引用1.数组元素作实参2.数组名作实参例9-2编程,通过一个函数为主函数输入若干大于或等于0的整数,用负数作结束标志;调用另外一个函

数输出数组中数据.#include<stdio.h>#defineM100intarrin(int*);voidarrout(int*,int);main(){ints[M],k;k=arrin(s);arrout(s,k);}voidarrout(int*a,i

ntn){inti;for(i=0;i<n;i++)printf(((i+1)%5==0)?”%4d”:”%4d”,*(a+i));printf(“\n”);}intarrin(int*a){inti,x;i=0;scanf(“%d”,&x);whil

e(x>=0){*(a+i)=x;i++;scanf(“%d”,&x);}returni;}12例9-3编写函数,把具有10个元素的char类型数组元素中的除前4个外的其他元素变成*.#include<stdio.h>#defineM10#def

ineB4main(){charc[M]={„A‟,‟B‟,‟C‟,‟D‟,‟E‟,‟F‟,‟G‟,‟H‟,‟I‟,‟J‟;setstar(&c[4],M-B);arrout(c,M);}voidarrout(char*a,in

tn){inti;for(i=0;i<n;i++)printf(“%c”,a[i]);printf(“\n”);}voidsetstar(char*a,intn){inti;for(i=0;i<n;i++)*(a+i)=„*‟;}voidsetst

ar(char*,int);voidarrout(char*a,intn);139.4一维数组的应用举例p115例9-4编写函数,定义15个元素的数组,完成以下功能:1)调用C库函数的随机函数给所有元素赋以0~49的随机数2)输出数组元素值3)

按顺序对每隔3个数求一个和数,传回主函数4)最后输出所有求出的和值#include<stdio.h>#include“stdlib.h”#defineSIZE15#defineN3voidgetrand(int*,int);voidgetave(int*,int*,int

);voidpriarr(int*,int);main(){intx[SIZE],w[SIZE/N]={0};getrand(x,SIZE);printf(“Output%drandomnumbers:\n”,S

IZE);priarr(x,SIZE);getave(x,w,SIZE);priarr(w,SIZE/N);}14voidgetrand(int*a,intn){inti;for(i=0;i<n;i++)a[i

]=rand()%50;}voidgetave(int*a,int*b,intn){inti,j,sum;for(sum=0,i=0,j=0;i<=n;i++){sum+=a[i];if(i+1)%3==0){b[j]=sum;sum=0;j++;}}

}voidpriarr(int*a,intn){inti;for(i=0;i<n;i++){printf(“%5d”,a[i]);if((i+1)%5==0)printf(“\n”);}printf(“\n”);}1

5例9.5将数组中的数重新按颠倒的顺序存放p116自学例9.6已知整型数组中的值在0~9的范围内,统计每个整数的个数p117自学例9.7P118自学例9.8p119自学16985420985420895949290999854209584828088842058

9552045894402458922结果㈠㈡㈢㈣序列㈤0245899-9用选择法或冒泡法对6个数排序(由小到大)冒泡法的思路是:将相邻两个数比较,将小的调到前头共循环多少次?每次循环进行了多少次比较?什么时候结束?如果序列为5

、8、9、4、2、0,先排在最后的还是9吗?如果要求先将最大的数排在最前面,该如何操作?17输入n个数给a[1]到a[n]forj=1ton-1fori=1ton-ja[i]>a[i+1]真假a[i]a[i+1]输出a[1]到a[n]18#include<stdio.h>#d

efineN6voidmain(){inta[7];inti,j,t;printf("input%dnumbers:\n",N);for(i=1;i<N;i++)scanf("%d",&a[i]);for(j=1;j<=N-1;j++)for(i=1;i<=N-j;i+

+)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("thesortednumbers:\n");for(i=1;i<=N;i++)printf("%d",a[i]);printf("\n");}注:数组a的第一个元素a[0]没有被

使用,请修改程序以便节省内存空间19#include<stdio.h>#defineN6voidmain(){inta[N+1];inti,j,t;printf("input%dnumbers:\n",N);for(i=1;i<=N;i++)scanf("%d",&a[i]);for(j=1;j<

N;j++)for(i=j+1;i<=N;i++)if(a[j]<a[i]){t=a[j];a[j]=a[i];a[i]=t;}printf("thesortednumbers:\n");for(i=1;i<=N;i++)printf("%d",a[i]);prin

tf("\n");}20§9-5二维数组1、定义二维数组类型名数组名[exp1][exp2]其中,exp1为行数,exp2为列数如:inta[3][4],b[4][M];注:不能写成inta[3,4],b[4,M];或inta(3,4),b(4,M);21可把二维数组看作是

一种特殊的一维数组:它的元素又是一个一维数组例如,可把a[3][4]看作是一个一维数组,有3个组元素:a[0]、a[1]、a[2],每个组元素中又包含4个元素的一维数组。见下图:二维数组的存储二维数组中元素排列的顺序是按行存放试写出b[2][3]中元素?

a[0]a[1]a[2]a[0][0]a[0][1]a[0][2]a[0][3]aa[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3][4][4][4]229.5.2、二维数组的引用二维数组的元素的表示为:数组名[下标][下标]如:a[

2][3]a[2-1][2*2-1]b[1][2]=a[2][3]/2注意:1.数组定义和数组元素引用的区别例如inta[3][4];第一个元素是a[0][0],最后一个元素是下标可以是整型表达式2.下标的最

大取值a[2][3]239.5.3、二维数组的初始化2)按存放顺序例:intb[2][3]={1,2,3,4,5,6};3)只给部分元素赋初值例:intc[2][3]={{1,2},{4}};intx[2][3]={{0,0,9},{

0,6}};2行3列1)按行存放例:inta[2][3]={{1,2,3},{4,5,6}};4)省略第一维长度;例:inte[][3]={1,2,3,4,5,6};注意:不能省略第二维的长度。为什么?123456009

060结果为:x[0][0]=0,x[0][1]=0,x[0][2]=9x[1][0]=0,x[1][1]=6,x[1][2]=012040024/*例9-6输出如下形式的二维数组*/100002300045600789100#include<stdio.h>main()

{inta[5][5]={0};inti,j,k=1;for(i=0;i<5;i++)for(j=0;j<=i;j++){a[i][j]=k;k++;}for(i=0;j<5;j++){for(j=0;j<=5;j++)printf("%3d”,a[i][j]);printf(“\n”);

}getch();}9.8二维数组举例25/*例9-7输出二维数组中每行的最小值及其行、列号*/#include<stdio.h>main(){inta[5][5]={{22,11,32,42,53},{51,41,31

,21,11},{44,54,24,34,74},{93,59,17,64,74},{96,45,39,65,58}};inti,j,col;for(i=0;i<5;i++){col=0;for(j=0;j<5;j++){if(a[i]

[j]<a[i][col])col=j;}printf("row:%d,min:%d,col:%d\n",i+1,a[i][col],col+1);}getch();}26/*例9-7b有一个3行4列矩阵,求出其中最

大值及所在的行号和列号*/#include<stdio.h>main(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};ma

x=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf("max=%d,row=%d,colum=%d\n",max,

row,colum);}27多维数组,参考二维数组inta[2][3][4];a为整型三维数组,元素个数为2×3×4=24内存中的排列顺序为:a[0][0][0]a[0][0][1]a[0][0][2]a[0][0][3]a[0][1][0]

a[0][1][1]a[0][1][2]a[0][1][3]a[0][2][0]a[0][2][1]a[0][2][2]a[0][2][3]a[1][0][0]a[1][0][1]a[1][0][2]a

[1][0][3]a[1][1][0]a[1][1][1]a[1][1][2]a[1][1][3]a[1][2][0]a[1][2][1]a[1][2][2]a[1][2][3]最右边的下标变化最快初始化方法:1、按存储顺序:inta[2][2]

[2]={1,2,3,4,5};2、按下标顺序:inta[2][2][2]={{{1,2},{3,4}},{{5,0},{0,0}}};28补充例2:任输入一行字符,统计其中有多少个单词(以空格分隔)。算法:①

输入字符串;②找第一个非空字符;③计数;④跳过本单词,即寻找空格或‘\0‟;⑤未结束则转②;⑥否则打印个数。输入:---We-are----students.29/*9-8输入一行字,统计其中有多少个单词,单词间是空格分开*/#include

<stdio.h>voidmain(){charc;inti=0,num=0,word=0;charstr[81];gets(str);for(i=0;(c=str[i])!='\0';i++)if(c=='')word=0;elseif(word==0){wo

rd=1;num++;}printf("共%d个单词\n",num);}书例P139算法1:1.空格决定单词数目,空格不是单词word=02.如果字符为非空格,前面是空格,则一个单词出现word=1,num++3.如果word=1,c!=„„,说明还是

刚才单词的字符,num不累加30012345678/*9-8算法2:输入一行字,统计其中有多少个单词,单词间是空格分开*/#include<stdio.h>voidmain(){charc;inti=0,num=0;charstr[100]

;gets(str);do{while((c=str[i])=='')i++;if(c!='\0'){num++;i++;}while((c=str[i])!=''&&c!='\0')i++;}while(c!='

\0');printf("共%d个单词\n",num);}输入:---We-are----students.--回车-表示空格Weare31补充:找出1000以内的完数例如:6=1+2+3#include<stdio.h>main(){in

ta[100];inti,j,n,m;for(j=2;j<1000;j++){n=0;m=j;for(i=1;i<j;i++){if((j%i)==0){m=m-i;a[n]=i;n++;}}}if(m==0){printf(“%disawanshu\n”,j);for(i=0;i<n-1

;i++)printf(“%d,”,a[i]);printf(“%d\n”,a[n-1]);}}getch();}

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?