二级教材《C语言程序设计》第9章.docx
- 文档编号:26547406
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:14
- 大小:19.16KB
二级教材《C语言程序设计》第9章.docx
《二级教材《C语言程序设计》第9章.docx》由会员分享,可在线阅读,更多相关《二级教材《C语言程序设计》第9章.docx(14页珍藏版)》请在冰豆网上搜索。
二级教材《C语言程序设计》第9章
第九章数组
本章的内容比起别的章节来是最多的,不用说也是重点,其实我认为程序设计没有非重点。
任何地方不懂都是不行的。
习题答案
一、选择题:
题号答案解题思路
9.1DD选项中,*(a+i)相当于a[i],已经是元素的值,外面再加一个*号,则出错。
9.2A首先,这四个选项的形式都是合法的。
表示的也都是地址。
但是B和C两项不能使i增值变化,因此会陷入死循环。
而D在输入数据时,第一次就赋给a[1],因此达不到目的。
只有A是对的。
9.3Ap等于数组a的首地址&a[0],p+2就是把指针向高地址位移动两个整型存储单元。
此时指向a[2]。
9.4A内循环使n数组的两个元素分别加1,循环两次后,两个元素的值都为2。
但是,要求输出的是n[2],超出数组定义的上界,所以结果是不确定的值。
9.5C。
9.6A主要是看*p++是怎么算的,由于++符和*运算符是同级并且是右结合的,所以先得p++这个表达式的值,为p再与*结合,等于*p,执行本句后,p自增1,结果a[i]中的值没有变化。
9.7Bf函数功能是一个求数组元素连乘的积并返回。
主函数把数组a的首地址和需要连乘到的元素下标号传给形参。
因此要注意的就是循环进行了4次。
9.8D这其实是求地址值(十六进制),整型数占用两个字节,因此指针每移动一个存储单元,地址就增加2,所以p+9时,地址值增加了18,十六进制为12,加上194等于1a6。
9.9Cfun函数的功能是将一数组按给定的起始和终止下标范围内的元素反向排序。
主函数中三次调用,第一次排a[0]到a[3]四个元素,第二次排a[4]到a[9],第三次再全部反向排列。
9.10C定义行中的**k表示k是一个指向指针变量的指针,很简单的,k=&p,则**k=**(&p),"约"去一个&和一个*,**k就等于*p.前一行的*(p++)相当于*p,执行后p自增1。
9.11C输入时,getchar()函数将回车符也作为一个字符读入,超出数组长度的字符在缓冲区中没有输入数组。
所以putchar()输出时只能输入前6个字符包括回车符。
9.12D此题中,cp是一个行指针,后面与[5]结合说明cp的基类型是一个包含有5个元素的数组。
cp指向c数组的开头,它的值是一个行地址,等于c数组的第一行的首地址。
在这里二维数组就相当于两层指针变量,第一层是行地址,第二层是列地址。
c和cp是指向行地址的指针。
A表示的是一个地址:
&c[1][0]。
B表示的是一个地址:
&c[3][0]。
C表示的是一个地址:
&c[1][3]。
D表示的是元素c[0][2]的值。
9.13DA相当于这样:
*(a[1][2])显然是错的。
B相当于这样:
p[5],下标越界且是个指针,自然也错。
C则是a[1]+2,是个地址值。
9.14A明白人会一看就知道是A,下标越界。
我是糊涂人,先以为A是对的,再看后面三个,发现都是对的,结果回头发现是A,
9.15A程序进行两次循环,第一次a[0][1]等于a[0][0]的值加1,得3,然后打印a[0][0]的值2,第二次跳过if子句,++p,打印a[0][1]的值3。
9.16A这里主要是注意内循环只进行两次,也就是把每一行数的前两列相加。
`
9.17C把循环的i值代入可得x[0][2],x[1][1],x[2][0]三个值,即3,5,7。
9.18D一对圆括号使*首先与p结合,(*p)表示是p是指针变量,然后与说明符[M]结合,说明指针变量p的基类型是一个包含M个int元素的数组。
也就是说,p指针每移动1,指向数组元素的指针就移动M。
二、填空题:
9.19上限是9下限是0上限是数组元素的最后一个下标,下限是第一个下标。
9.206循环进行了三次,每次判断*(prt+y)是否 9.2112第一个循环给每个数组元素赋值为0到9,第二个循环把前四个元素的值和下标值进行连加。 9.22程序出错信息在fun函数中没有把a定义为数组,因此不能用[]给它做运算。 9.232721如果sub函数中的"else"是"else",那结果是这样的。 否则有错。 9.24-850,2,0程序的功能是找出二维数组中最小的元素及所在位置。 9.25k=p k 当数组元素s[p]>s[k]时,就让k=p,这样每次比较都是拿下一个数组元素和最大的数比较。 最终返回最大元素的下标。 9.26(c=getchar()) c-'A'注意外面的括号不能少,因为赋值符的优先级比关系运算符低。 三、编程题: 9.27程序如下: #include"stdio.h" main() {intn[10]={0},i=0;charc; for(;(c=getchar())! ='\n';) if(c>='0'&&c<='9')n[(c-'0')%10]+=1; for(i=0;i<10;i++)if(n[i]) printf("%c%d\n",(i+'0'),n[i]); } 9.28#include"stdio.h" #defineNUM10 voidarrmove(int*,int,int); voidarrout(int*,int); intgetindex(intn); main() {intn,d,p[10]={21,22,23,24,25,26,27,28,29,30}; n=NUM; printf("Outputprimarydata: \n"); arrout(p,n); d=getindex(n); arrmove(p,n,d); printf("outputthedataaftermove: \n"); arrout(p,n); } voidarrout(intw[],intm) {intk; for(k=0;k printf("%d",w[k]); printf("\n");} intgetindex(intn) {inti; do{printf("pleaseinputtheindex[1<=i<=%d]: ",n); scanf("%d",&i);}while(i<1||i>n); returni; } voidarrmove(int*w,intn,intk) {inti; for(i=k-1;i } 9.29函数如下: #defineM10 intgetodd(int*arr,int*arrodd) {inti,j; for(j=0,i=0;i if(arr[i]%2! =0) {arrodd[j]=arr[i];j++;} } main() {inti; intarr[M]={1,2,3,4,5,6,7,8,9,0}; intarrodd[M]={0}; printf("\n"); for(i=0;i printf("\n"); getodd(arr,arrodd); for(i=0;arrodd[i]! =0;i++) printf("%d",arrodd[i]); } 9.30函数如下: #defineM10 #include"stdio.h" charsort(char*arr) {inti,j;chart; for(i=0;i for(j=i+1;j if(arr[i]>arr[j]) t=arr[i],arr[i]=arr[j],arr[j]=t; } main() {chararr[M];inti;i=0; while(i if((arr[i]=getchar())>='A'&&arr[i]<='z')i++; printf("\nprimaryarray: \n"); for(i=0;i printf("%c",arr[i]); sort(arr); printf("\nsortedarray: \n"); for(i=0;i printf("%c",arr[i]); } 9.31程序如下: #include"stdio.h" #defineM10 insert(int*arr,intn,intlocation) {inti,j,t; for(i=M-1;i>location;i--) arr[i]=arr[i-1]; arr[location]=n; for(i=0;i for(j=i+1;j if(arr[i] t=arr[i],arr[i]=arr[j],arr[j]=t; printf("\nSortedarraywithinsertnumber: \n"); for(i=0;i printf("%d",arr[i]);} main() {intarr[M],n,l,i; printf("\n\nInputasortedarray: (M=%d)",M-1); for(i=0;i {scanf("%d",&n); arr[i]=n; } printf("\nTheprimaryarray: \n"); for(i=0;i printf("%d",arr[i]); printf("Now,inputanumber: ");scanf("%d",&n); printf("anditslocation(0-%d)",M-2); scanf("%d",&l); insert(arr,n,l);} 9.32程序如下: voidd2b(unsigneda,unsigned*p) {inti; for(i=15;a! =0;i--) p[i]=a%2,a/=2;} main() {unsigneda,b[16]={0}; inti,j=1; printf("Inputanumber: ");scanf("%u",&a); d2b(a,b); printf("\n%u(10)=",a); for(i=0;i<16;i++) if(b[i]==0&&j==1)j=1; else { j=0; if(b[i])printf("1"); elseprintf("0"); } printf(" (2)\n"); } 9.33程序如下: #defineM15 #include"stdlib.h" intrannum(int*p,intn) {intj;intx; x=rand()%20; for(j=0;j if(p[j]==x)x=rand()%20; returnx; } main() {inta[M],i; for(i=0;i {a[i]=rannum(a,i); printf("%d",a[i]); } printf("\n"); } 9.34程序如下: #include"stdlib.h" #defineM5 #defineN100 main() { inta[M][M],sumr[M]={0},sumc[M]={0}; intsumd1=0,sumd2=0; inti,j; for(i=0;i { for(j=0;j {a[i][j]=rand()%N; printf("%15d",a[i][j]); sumr[i]+=a[i][j]; sumc[j]+=a[i][j]; } printf("\n"); sumd1+=a[i][i]; sumd2+=a[i][M-i-1];} printf("\n"); for(i=0;i {printf("sumrow[%d]=%d",i,sumr[i]); printf("sumcol[%d]=%d\n",i,sumc[i]); } printf("sumdia1=%dsumdia2=%d\n",sumd1,sumd2); } 9.35程序如下: #include"stdlib.h" #defineM5 #defineN6 #defineT100 main() { inta[M][N],b[M][N],i,j; printf("\nThematrixA: \n"); for(i=0;i { for(j=0;j { a[i][j]=rand()%T; printf("%6d",a[i][j]);} printf("\n"); } printf("\nThematrixB: \n"); for(i=0;i { for(j=0;j {b[i][j]=rand()%T; printf("%6d",b[i][j]); } printf("\n"); } printf("\nThemartrixA+B: \n"); for(i=0;i { for(j=0;j printf("\n"); } } 9.36程序如下: main() {inta[9][9],i,j; printf("**AMULTIPLICATIONTABLE**\n"); printf("\n"); printf("-------------------------------------------------------"); printf("\n"); for(i=0;i<=9;i++) {for(j=0;j<=9;j++) {if(i==0)printf("(%d)",j+1); elseif(j==0)printf("(%d)",i+1); if(i>0&&j>0)printf("%4d",i*j); } printf("\n"); } printf("--------------------------------------------------------"); } 9.37程序如下: #include"stdlib.h" #defineM5 #defineN4 main() {inti,j,a[M][N],sumr[M]={0},t,p,q; printf("\nTheprimarymatrix: \n\n"); for(i=0;i {for(i=0;i {a[i][j]=rand()%100; sumr[i]+=a[i][j]; printf("%6d",a[i][j]); } printf("\n"); } t=sumr[0]; for(i=0;i {if(sumr[i]>t)t=sumr[i],p=i; printf("\nsumr[%d]=%d",i,sumr[i]); } for(j=0;j {t=a[0][j];a[0][j]=a[p][j];a[p][j]=t;} printf("\nThenewmatrix: \n\n"); for(i=0;i>M;i++) { for(j=0;j printf("\n");}} 9.38#include"stdlib.h" #defineM5 main() { inta[M][M],i,j,t; printf("\nTheprimarymatrix: \n"); for(i=0;i { for(j=0;j { a[i][j]=rand()%100; printf("%6d",a[i][j]); } printf("\n"); } for(i=0;i for(j=i;j t=a[i][j],a[i][j]=a[j][i],a[j][i]=t; printf("\nThetranspose: \n"); for(i=0;i { for(j=0;j printf("%6d",a[i][j]); printf("\n"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 二级 教材 语言程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)