数组-理论教材习题参考答案

合集下载

程序设计基础-c语言-第四章数组-教材答案-科学出版社

程序设计基础-c语言-第四章数组-教材答案-科学出版社

程序设计基础-c语言-第四章数组-教材习题及其答案1.0编程将一个一维数组的值按逆序重新存放#include<stdio.h>void main(){int i_data[10];int m,i_temp;printf("给定10个数,用空格分隔:");scanf("%d %d %d %d %d %d %d %d %d %d",&i_da ta[0],&i_data[1],&i_data[2],&i_data[3],&i_data[4],&i_d ata[5],&i_data[6],&i_data[7],&i_data[8],&i_data[9]);for(m=1;m<=10/2;m++) //有意写成10/2 已解决任意一维数组的逆序问题,为什么此处用m=1;m<=10/2,而不能m=0;m<10/2{ i_temp=i_data[m-1]; //下面三条语句是典型的两数交换的方法i_data[m-1]=i_data[10-m];i_data[10-m]=i_temp;}for(m=0;m<10;m++){ printf("%d ",i_data[m]);}printf("\n");}2.0 编程求Fibonacci数列的前二十项。

FIBONACCI数列的定义F0=0,F1=1,Fn=Fn-1+Fn-2#include<stdio.h>void main(){int F[20];int m,n,i_blanknum;for(m=0;m<20;m++){ switch(m){ case 0:F[0]=0;break;case 1:F[1]=1;break;default: F[m]=F[m-1]+F[m-2];}}printf("Fibonacci数列的前20项是:\n"); for(m=0;m<20;m++){ printf("%d ",F[m]);}printf("\n");//下面输出项,这是我加的效果for(m=0;m<20;m++){ printf("%d",m+1); //输出项的编号//计算该项数据占几位i_blanknum=1;//每个数据间占一个空格n=F[m];do{ i_blanknum=i_blanknum+1;n=n/10;}while(n!=0);//减去该项编号数据占的位数n=m+1;do{ i_blanknum=i_blanknum-1;n=n/10;}while(n!=0);//输出空格while(i_blanknum>0){ printf(" ");i_blanknum--;}}printf("\n");}2.0在一个从小到大排列的数组中查找X,若x存在就将其测出,若不存在将其添加。

数组习题参考答案2011

数组习题参考答案2011

//输出每行最大值 void printLineMax(int[][] a) { System.out.println("每行最大值:"); for (int i = 0; i < a.length; i++) { int max = a[i][0]; for (int j = 0; j < a[i].length; j++) { if (a[i][j] > max) { max = a[i][j]; } } System.out.println(max + " "); } }
/* 编程采用选择排序法实现对一维数组的元素由小到大 排序并输出。(先选择数组中最小数与第一个元素交换, 再选择次小数与第二个元素交换, 一共进行长度-1次选择。) */ public static void main(String[] args) { //定义待排序的数组 int[] ary = { 12, 8, 6, 40, 9, 10 }; //进行选择排序 ary = sort(ary); //输出排序后的数组元素 for (int i = 0; i < ary.length; i++) { System.out.print(ary[i] + " "); }
39 59 79 99
数组下标 元素的值 数组下标 数组下标 数组下标 数组下标
0 1 10 20 30 40
1 3 11 21 。 。
2 5 12 22 。 。
3 7 13 23 。 。
4 9 14 24 。 。
5 11 15 25 。 。
6 13 16 26 。 。
7 15 17 27 。 。

数组试题及答案

数组试题及答案

数组试题及答案1. 定义一个整型数组,包含10个元素,并初始化为0。

答案:```cint array[10] = {0};```2. 编写一个函数,用于计算数组中所有元素的和。

答案:```cint sumArray(int arr[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];}return sum;}```3. 给定一个数组,编写一个函数来找到数组中的最大值。

答案:```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```4. 编写一个程序,将一个数组中的所有元素逆序输出。

答案:```cvoid reverseArray(int arr[], int size) {for (int i = size - 1; i >= 0; i--) {printf("%d ", arr[i]);}}```5. 给定一个整数数组,编写一个函数,将数组中的所有负数移到数组的开头,所有非负数移到数组的末尾。

答案:```cvoid moveNegativesToFront(int arr[], int size) {int j = 0;for (int i = 0; i < size; i++) {if (arr[i] < 0) {arr[j++] = arr[i];}}for (int i = j; i < size; i++) {arr[i] = 0;}}```6. 编写一个函数,用于检查数组中是否存在重复元素。

答案:```cbool hasDuplicates(int arr[], int size) {for (int i = 0; i < size; i++) {for (int j = i + 1; j < size; j++) {if (arr[i] == arr[j]) {return true;}}}return false;}```7. 给定一个数组,编写一个函数,用于找出数组中第二大的元素。

数组练习题及答案

数组练习题及答案

第五章数组练习题及答案一、选择题1、判断字符串a和b是否相等,应当使用()A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))2、以下正确的定义语句是()A、int a[1][4]={1,2,3,4,5};B、float x[3][]={{1},{2},{3}};C、long b[2][3]={{1},{1,2},{1,2,3}};D、double y[][3]={0};3、以下各组选项中,均能正确定义二维实型数组a的选项是()A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}};D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB#include "stdio.h"main(){ char str[]="SSSWLIA",c;int k;for(k=2;(c=str[k]!='\0');k++){ switch(c){case 'I':++k;break;case 'L':continue;default:putchar(c);continue;}putchar('*');}}A、SSW*B、SW*C、SW*AD、SW5、下面程序段是输出两个字符串中对应相等的字符。

第4章 数组c++_习题答案

第4章 数组c++_习题答案

习题 4一、单项选择题1.【答案】 D【解析】数组下标从0开始,a[0][4]的列下标越界。

2.【答案】 B3.【答案】 B【解析】初始值的个数大于数组的大小,系统会出现编译错误。

4.【答案】 B5.【答案】 D【解析】二维数组初始化时,行维数可以省略,被省略的维数根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。

元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。

6.【答案】 B【解析】二维数组初始化时,第一(行)维数可以省略,第二(列)维数不可以省略,所以A 答案错误。

C 答案中初始值行数多于数组大小中的行维数,也是错误的。

另外初始化时,初值之间不能有空位置,故D 错误。

7.【答案】 C8.【答案】 B【解析】每层外层for 循环结束会增加对一个元素的排序,确定c[0] ,c[1]的大小顺序,如图4-1所示。

c[1]c[2]c[3]c[4]c[5]c[0]c[6]图4-1 第一次排序第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0] ,c[1], c[2] 的大小顺序,如图4-2所示。

c[1]c[2]c[3]c[4]c[5]c[0]c[6]图4-2 第二次排序以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。

9.【答案】 D10.【答案】 C11.【答案】 C12.【答案】 C13.【答案】 C【解析】 a 数组中存放的是字符串,数组大小为6个字节空间,分别存放′t′,′o′,′y′,′o′,′u′和′\0′,b 数组的长度为5个字节空间,只存放′t′,′o′,′y′,′o′,′u′,5个字符。

二、填空题1.【答案】 32.【答案】 63.【答案】 204.【答案】 k=p;5.【答案】 s[j++] =s[i];【解析】 此处相当于补充了2条语句,等价于s[j] =s[i]; j++;。

6.【答案】 67.【答案】 2和28.【答案】 i*m+j+19.【答案】951【解析】定义的二维数组可以描述一个方阵:9 8 76 5 43 2 1语句功能是实现该方阵主对角线上元素的输出。

第四章习题答案

第四章习题答案

第4章数组选择题1.以下对一维数组 a 的定义正确的是( C )。

(A)int n = 5, a[n]; (B)int a(5);(C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n];2.下列数组定义语句中,不合法的是( A )。

(A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 };(C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 };3.已知 int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, p = a;,不能..表示数组 a 中元素的式子是( C )。

(A) a (B)p (C)a (D)a[ p a ] 4.已知 int a[] = { 0,2,4,6,8,10 }, p = a+1; 其值等于0的表达式是( D )。

(A) (p++) (B)(++p) (C)(p) (D)(p) 5.以下不能对二维数组a进行正确初始化的语句是( C )。

(A)int a[2][3] = { 0 };(B)int a[][3] = { { 0,1 }, { 0 } };(C)int a[2][3] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };(D)int a[][3] = { 0, 1, 2, 3, 4, 5 };6.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } }; 则 a[2][1]的值是( C )。

(A)0 (B)2 (C)6 (D)77.已知int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 不能表示数组元素a[2][1]的地址是( B )。

(A)&a[2][1] (B)(a[2]+1) (C)a[2]+1 (D)(a+2)+1 8.已知char a[]={ "fortran", " basic", "pascal", "java", "c++" };,则 cout<<a[3];的显示结果是( C )。

java数组习题答案

java数组习题答案

java数组习题答案Java数组习题答案在学习Java编程语言的过程中,数组是一个非常重要的概念。

它是一种用来存储相同类型数据的数据结构,可以帮助我们更有效地管理和操作数据。

在学习数组的过程中,我们经常会遇到一些习题,通过解答这些习题可以加深对数组的理解,提高编程能力。

下面我们来看一些常见的Java数组习题及其答案:1. 如何声明一个数组?答:可以使用以下语法来声明一个数组:```javaint[] arr = new int[5];```2. 如何初始化一个数组?答:可以使用以下语法来初始化一个数组:```javaint[] arr = {1, 2, 3, 4, 5};```3. 如何访问数组中的元素?答:可以使用以下语法来访问数组中的元素:```javaint[] arr = {1, 2, 3, 4, 5};System.out.println(arr[2]); // 输出3```4. 如何计算数组中元素的和?答:可以使用以下代码来计算数组中元素的和:```javaint[] arr = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}System.out.println("数组元素的和为:" + sum);```5. 如何找出数组中的最大值和最小值?答:可以使用以下代码来找出数组中的最大值和最小值:```javaint[] arr = {1, 2, 3, 4, 5};int max = arr[0];int min = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}if (arr[i] < min) {min = arr[i];}}System.out.println("数组中的最大值为:" + max);System.out.println("数组中的最小值为:" + min);```通过解答这些习题,我们可以更加深入地理解和掌握Java数组的相关知识,提高自己的编程能力。

C语言-第03讲-数组-答案.docx

C语言-第03讲-数组-答案.docx

3.6强化练习3.6.1选择题[3-1] A)整型常呈[3-2] C)不能得到确定的初值[3-3] D) static char s[ ]= 1 Turbo\0 :简析:其它选项的'\0',多余,但不错。

[3-4] C)可以在赋值语句中通过赋值运算符对字符数组整体赋值[3-5] D) scanf( "%s%c", s, &c );简析:1 register修饰的变量是寄存器存储类型,不能进行&取地址运算。

[3-6] A) int a[10];[3-7] B) ab简析:参见第[3-41]题[3-8] B) 3[3-9] D)f简析:strcpyf a, b )字符串复制函数,将字符串b复制到字符串a中。

[3-10] D)程序出错简析:i 数组名是地址常量,不能将一个数组名赋了另一个数纽名。

[3-11] A) 4[3-12] B)x数组长度大于y数组长度[3-13] D)字符串"That”小于字符串”The”[3-14] B) strcpyf strl, str2 );[3-15] A) number=-12345简析:此程序为将字符数字转换为数字字符[3-16] A)数组首地址[3-17] B) 3简析:先将str2复制到strl中,然后计算strl的长度。

[3-18] A) char str[7]=,,FORTRAN ,;[3-19] C) 357[3-20] C) 6[3-21] D) if( strcmp( si, s2 )>0 )[3-22] D) #define SIZE 10int a[SIZE];[3-23] D) a[10-101[3-24] A)[常最表达式][3-25] C) int a[10]={ 10 };[3-26] C) double a[l][4][3-27] C) a[l + l][0][3-28] D) a[0][4][3-29] B) int a[][3]={{l, 2, 3},{4, 5, 6}};[3-30] C) int a⑵[3] ={{1,2}, {3, 4}, {5, 6}};[3-31] D)数组a中每个元素均可得到初值0[3-32] D)只有元素a[0][0]和a[0]⑴可得到初值0 其余元素均得不到初值0[3-33] B)町在程序的编译阶段得到初值0简析:静态变量在编译时,系统默认其变量初值为0.[3-34] C) float a[3][4];float a[ ]|4]={ {0}, {0}};auto float a[ ][4]={ {0}, {0}, {0}};[3-35] A)按行存放[3-36] B)将5个初值依次赋给a[0]~a[4][3-37] B) int y[5]={ 0,1,3,5,7,9 };[3-38] B) 3[3-39] D) double y[ ][3]={ 0 };[3-40] D) char s⑸="abcdef";[3-41] C) abc简析:参见第【3-7】题,,[3-42] D) a数组比b数组长度长简析:参见第[3-12]题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.在“校园歌手大奖赛”中有10位评委为选手打分。

某位选手的最终得分是去掉一个最高、去掉一个最低分后的平均分,编写程序实现这一功能。

#include "stdio.h"#define N 10 /*评委人数*/#define MAX 10 /*打分分数上限*/#define MIN 0 /*打分分数下限*/int main( ){float s[N]; /*存储10位评委的打分*/float sum=0; /*sum用于存储10个分数之和*/float aver; /*aver用于存储最终得分*/float min= MAX, max= MIN;int i; /*循环控制变量*/for( i=0; i<N; i++){printf("请输入第[%d]个评委的打分:", i+1);scanf("%f", &s[i]);sum += s[i];if(min>s[i]) min = s[i]; /*min得到最低分*/if(max<s[i]) max = s[i]; /*max得到最高分*/}aver = (sum-max-min)/(N-2); /*计算除最高分和最低分的平均分*/printf("该选手最终得分为:%.2f\n", aver);return 0;}2.成绩分析是“成绩管理系统”的一个模块,包括统计各分数段人数及比例,计算平均分数、标准差等。

编程实现成绩分析的以上功能。

#include "stdio.h"#include "math.h" /*平方根函数sqrt()的头文件*/#define N 10 /*人数*/int main( ){int i; /*循环控制变量*/float score[N] = {55,86,79,93,66,71,95,72,88,65}; /*准备数据*/int s[5]={0}; /*数组s存放个分数段人数*/float sum = 0, aver; /*sum存储总分,aver存储平均分*/float var, stdev; /*var存储方差,stdev存储标准差*/for(i=0;i<N;i++){sum+= score[i];if(score[i]<60) s[0]++;if(score[i]>=60 && score[i]<70) s[1]++;if(score[i]>=70 && score[i]<80) s[2]++;if(score[i]>=80 && score[i]<90) s[3]++;if(score[i]>=90 && score[i]<=100) s[4]++;}aver = sum/N;var=0;for(i=0;i<N;i++)var+=(aver-score[i])* (aver-score[i]);var/=N-1; /*计算方差*/stdev=sqrt(var); /*计算标准差*/printf("总分:%f\n", sum);printf("平均分:%.2f\n", aver);printf("不及格人数:%d\n", s[0]);printf("60~69人数:%d\n", s[1]);printf("70~79人数:%d\n", s[2]);printf("80~89人数:%d\n", s[3]);printf("90~100人数:%d\n", s[4]);printf("标准差:%f\n", stdev);return 0;}3.利用数组存放斐波那契(Fibonacci)数列的前20项并输出。

#include "stdio.h"#define N 20 /*项数*/int main( ){int i; /*循环控制变量*/int F[N]={1,1}; /*数组F用于存储前N项数*/printf("%d,%d",F[0], F[1]); /*先输出前两项*/for(i=2;i<N;i++) /*计算并输出后面各项*/{F[i]=F[i-2]+F[i-1];printf(",%d",F[i]);}printf("\n");return 0;}4.使用数组精确计算M/N(0<M<N<=100)的值。

如果M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号)。

循环节:如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。

#include"stdio.h"#define N 100 /*最大计算精度*/int main(){int m, n; /*被除数和除数*/int i, j; /*循环控制变量*/int flag = 0; /*数据性质标志,0:表示非无限循环小数;1:表示无限循环小数*/int remainder[N]; /*存放每次除法的余数*/int quotient[N]; /*存放每次除法的商数*/int start; /*循环节起始位*/int end; /*循环节终止位*/printf("请输入被除数M:");scanf("%d",&m);printf("请输入除数N(N>M):");scanf("%d",&n);if(m>n){printf("数据错,被除数大于除数!\n");return;}printf("%d/%d=%s",m,n,"0."); /*输出"0"和小数点*/m = m%n; /*第一次余数再存入m中*/for(i=0; i<N; i++ ) /*商的位数*/{remainder[i] = m; /*保存当前余数*/m *= 10; /*余数扩大10倍,作为下一个被除数*/quotient[i] = m/n; /*保存本次商*/printf("%d",quotient[i]); /*输出小数点后各位*/m = m%n; /*余数再次放入变量m中*/if(m == 0) break; /*当前余数为0,结束循环*/for(j=0; j<=i; j++)/*本循环查找当前余数是否已经存在*/{if(m==remainder[j]) /*若当前余数在前面已经出现过*/{flag = 1; /*标志置1*/start = j+1; /*记录循环数列开始位置,下标标号加1*/end = i+1; /*记录循环数列结束位置,下标标号加1*/break;}}if(flag == 1)break; /*如果是循环小数,则不用再继续除*/}printf("\n");if(flag==1)printf("结果为有限循环小数,循环节从第%d位开始,共%d位。

\n",start,end-start+1);return 0;}5.有两个长度相同的整型一维数组,分别输出它们对应位置上的数字之差。

#include"stdio.h"#define N 5 /*数组长度*/int main(){int i; /*循环控制变量*/int a[N] = {54,12,35,64,78}; /*定义数组a、准备数据*/int b[N] = {71,25,46,81,69}; /*定义数组b、准备数据*/printf("位置\t数组a\t数组b\t差值\n");for(i=0;i<N;i++)printf("%d\t%d\t%d\t%d\n",i,a[i],b[i],a[i]-b[i]);return 0;}6. 已有一个排好序的数组,从键盘输入一个数,按原顺序插入到该数组中。

#include"stdio.h"#define N 5 /*数组长度*/int main(){int i,j; /*循环控制变量*/int x; /*x用于存储用户输入的数据*/int a[N+1] = {6,12,35,64,78}; /*定义数组a、准备数据*/printf("原数据序列:");for(i=0;i<N;i++)printf("%d\t",a[i]);printf("\n");printf("请输入一个整数:");scanf("%d", &x);for(i=0;i<N;i++){/*如果输入的数小于当前数,说明i为新数据的位置,则结束循环*/if(x<a[i]) break;}for(j=N; j>i; j--) a[j] = a[j-1]; /*移动后面的数*/a[i] = x; /*将新数放在i号位置上*/printf("插入新数据后的数据序列:");for(i=0;i<N+1;i++)printf("%d\t",a[i]);printf("\n");return 0;}7. 自编代码实现字符串比较函数strcmp( )的功能。

#include"stdio.h"#define MAX 80 /*字符串的最大字符数*/int main(){int i=0; /*循环控制变量*/char str1[MAX],str2[MAX]; /*存储两串字符*/printf("请输入第1串字符:");gets(str1);printf("请输入第2串字符:");gets(str2);while(str1[i]==str2[i]) i++; /*如果对应位置字符相同,则继续比较下一个字符*/ if(str1[i]-str2[i]>0)printf("第1串大于第2串\n");else printf("第2串大于第1串\n");return 0;}8. 逆序输出输入的一串字符。

相关文档
最新文档