数组-理论教材习题参考答案
程序设计基础-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
//输出每行最大值 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一、单项选择题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数组习题及其答案: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
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. 数组反转题目描述:给定一个数组,将其反转。
解题思路:可以使用双指针法,一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。
然后交换两个指针所指向的元素,并分别向中间移动,直到两个指针相遇。
```pythondef reverse_array(arr):left = 0right = len(arr) - 1while left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```2. 数组去重题目描述:给定一个数组,删除其中重复的元素。
解题思路:可以使用一个集合来存储已经出现过的元素,然后遍历数组,将未出现过的元素添加到集合中。
```pythondef remove_duplicates(arr):unique_elements = set()result = []for num in arr:if num not in unique_elements:unique_elements.add(num)result.append(num)return result```3. 数组求和题目描述:给定一个数组,计算其中所有元素的和。
解题思路:可以使用一个变量来记录累加的和,然后遍历数组,将每个元素加到累加和中。
```pythondef array_sum(arr):sum = 0for num in arr:sum += numreturn sum```4. 数组中的最大值和最小值题目描述:给定一个数组,找出其中的最大值和最小值。
c语言第七章数组课后练习题答案
c语言第七章数组课后练习题答案第七章数组学习目的与要求:1 、重点掌握一维数组的定义和引用;、基本掌握二维数组的定义和引用;、重点掌握字符型数组的定义与引用;、能正确使用字符串处理函数;、学会使用数组解决实际问题。
重点:1 、一维数组的定义与引用;、二维数组的定义与引用;、字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ;数组名后必须用方括弧 [ ] ,用其他括弧均错误;方括弧中的常量表达式表示数组的元素个数;方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;2、一维数组的引用:数组名[ 下标 ] //下标从0如 int a[10] ;//可以引用的数组元素为不是本数组元素;3、一维数组的初始化:int a[3] ;a = { 1,3,} ;可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ??, float 0.0 ;如 int a [3]= {1,} ; //a[0] =1 ; a[1]= ; a[2]= 0 ;在对数组全部元素赋初值时,可以不指定元素个数;可以在循环控制下,给数组各元素赋值;如:int a[10] ;fora [ i ] = i ;基础训练一、选择题1、在c语言中,引用数组元素时,其数组下标的数据类型允许是。
A)整型常量 B)整型表达式 )整型常量或整型表达式D)任何类型的表达式2、要说明一个有10个int元素的数组,应当选择语句。
) int a[10]; B) int a; C) int a[9] D) int a[11]3、以下对数组的正确定义是:。
A) float b[5.0] ) float b[5] C) float b D) float b[]4、对以下说明语句的正确理解是。
int a[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5]C语言复习题)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确5、已知:int a[10];则对a数组元素的正确引用是。
数组练习题及答案
精品文档数组练习题及答案第五章一、选择题)b1、判断字符串a和是否相等,应当使用(if(strcmp(a,b)) 、C 、if(strcpy(a,b)) D A、if(a==b) B、if(a=b))2、以下正确的定义语句是(}; 、 B A、int a[1][4]={1,2,3,4,5};double y[][3]={0}; D、C、2,3}};)a的选项是(3、以下各组选项中,均能正确定义二维实型数组}; float a[ ][4]; A、float a[3][4];};float a[3][4]; B、float a(3,4);}; }; C、D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB21—25 BBAAA 26—30 DBDDB#include stdio.hmain(){ 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、下面程序段是输出两个字符串中对应相等的字符。
横线处应填入()char x[]=programming;char y[]=Fortran;int i=0;精品文档.精品文档while(x[i]!='\0'&&y[i]!='\0')if(x[i]==y[i]) printf(%c,《1》);else i++;A、x[i++]B、y[++i]C、x[i]D、y[i]6、有下面的程序段,则()char a[3],b[]=china;a=b;printf(%s,a);A、运行后将输出ChinaB、运行后将输出ChC、运行后将输出ChiD、编译出错7、下面程序的运行结果是()main(){ char ch[7]={ab56};int i,s=0;for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)s=10*s+ch[i]-'0';printf(%d\n,s);}A、1B、1256C、12ab56D、12568、定义如下变量和数组:则下面语句的输出结果是()int k;int a[3][3]={1,2,3,4,5,6,7,8,9,};for(k=0;k<3;k++)printf(%d,a[k][2-k]);A、3 5 7B、3 6 9C、1 5 9D、1 4 79、下面程序段的运行结果是()char c[5]={'a','b','\0','c','\0'};printf(%s,c);A、'a''b'B、abC、ab cD、abc10、若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()A、2B、3C、4D、无确定值精品文档.精品文档11、下面程序的运行结果是()main(){ int a[6],i;for(i=1;i<6;i++){ a[i]=9*(i-2+4*(i>3))%5;printf(-,a[i]);}}A、-4 0 4 0 4B、-4 0 4 0 3C、-4 0 4 4 3D、-4 0 4 4 012、下面程序的运行结果是()main(){int a[6][6],i,j;for(i=1;i<6;i++)for(j=1;j<6;j++)a[i][j]=(i/j)*(j/i);for(i=1;i<6;i++){ for(j=1;j<6;j++)printf(-,a[i][j]);printf(\);}}A、1 1 1 1 1B、0 0 0 0 1C、1 0 0 0 0D、1 0 0 0 11 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 01 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 01 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 01 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 113、下述对C语言字符数组的描述中错误的是()A、字符数组可以存放字符串。
C语言数组练习及答案
第四部分数组4.1 选择题1. 以下关于数组的描述正确的是(c )。
A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组a的正确说明是(d )。
A.int a(10);B. int n=10,a[n];C.int n;D. #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。
A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式4. 以下对一维数组m进行正确初始化的是(c )。
A. int m[10]=(0,0,0,0) ;B. int m[10]={ };C. int m[ ]={0};D. int m[10]={10*2};5. 若有定义:int bb[ 8];。
则以下表达式中不能代表数组元bb[1]的地址的是(c )。
A. &bb[0]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。
A. 3B. 6C. 10D. 207. 若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;则数值为4的表达式是(d )A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c]8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。
#include<stdio.h>main(){int a[10],i=0;while(i<10) scanf("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为(a )。
c语言第六章数组习题答案【可编辑】
第六章 数组习题答案2、0 43、0 64、&a[i] i%4==0 printf("\n");5、i+j==3_ a[i][j]6、127、a[i][j]+b[i][j] printf(“\n ”)8、按行存放9、( a[i]>a[j])10、将串str2复制到串str1中后再将串str3连接到串str1之后三、阅读题1、如右图所示2、AQM3、AzyD4、91985、如右图所示6、927、1,2,5,7,8、29、v1=5,v2=8,v3=6,v4=110、a*b*c*d*四、编程题1(1)选择法排序#include <stdio.h>void main( ){int i,j,n=10,p,a[10];int temp;for(i=0;i<n;i++) scanf("%d",&a[i]);//输入十个数printf("\n 原始的一维数组是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列 */ for(i=0;i<n-1;i++){ p=i; /*假定第i 趟中最小数的位置是i*/for(j=i+1;j<n;j++)if(a[j]<a[p]) p=j;if(i!=p) {temp=a[i];a[i]=a[p];a[p]=temp;}}printf("\n排序后的一维数组:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出排序后的一维数组序列*/}(2)比较法排序#include<stdio.h>void main( ){int i,j,n=10,p,a[10];int temp;for(i=0;i<n;i++) scanf("%d",&a[i]);//输入十个数printf("\n 原始的一维数组是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列*/for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]) {temp=a[i];a[i]=a[j];a[j]=temp;}printf("\n排序后的一维数组:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出排序后的一维数组序列*/}2、以在十个数据(由小到大排列的十个数)中插入一个数为例#include <stdio.h>void main( ){int a[11],i,n=10,k; int point;printf("\n 请输入原始数据:\n");for(i=0;i<n;i++) scanf("%d",&a[i]); /*输入原始数据,输入的数据要从小到大*/ printf("\n 原始数据是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列*/printf("\n请输入要插入的数");scanf("%d",&k); /*输入要插入的数据*/for(i=0;i<n;i++)if(a[i]>k) {point=i; break;}if(i!=n){for(i=n;i>point;i--) a[i]=a[i-1];a[point]=k;} /*从后向前方式*/elsea[n]=k;printf("插入后的数是:\n");for(i=0;i<n+1;i++) printf("%4d ",a[i]); /* 输出插入后的一维数组序列*/}3、#include <stdio.h>int main(){int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for (i=0;i<3;i++){ printf("please input line %d:\n",i+1);gets(text[i]);for (j=0;j<80 && text[i][j]!='\0';j++){if (text[i][j]>='A'&& text[i][j]<='Z')upp++;else if (text[i][j]>='a' && text[i][j]<='z')low++;else if (text[i][j]>='0' && text[i][j]<='9')dig++;else if (text[i][j]==' ')spa++;elseoth++;}}printf("\nupper case: %d\n",upp);printf("lower case: %d\n",low);printf("digit : %d\n",dig);printf("space : %d\n",spa);printf("other : %d\n",oth);return 0;}5、以5个数逆序存放为例,将n值修改,则可实现n个数逆序存放#include <stdio.h>#define n 5 //n为符号常量,值为5void main( ){int i,a[n],t;for(i=0;i<n;i++)scanf("%d",&a[i]);//输入n个数for(i=0;i<n/2;i++)//将a[0]与a[4]交换,a[1]与a[3]交换,a[i]与a[n-1-i]交换{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}for(i=0;i<n;i++)//输出n个数printf("%5d",a[i]);printf("\n");}6、杨辉三角#include <stdio.h>void main( ){int i,j,a[10][10];for(i=0;i<10;i++)for(j=0;j<=i;j++)if(j==0||i==j)a[i][j]=1;else a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}}7、提高题:编写程序:#include <stdio.h>#include <string.h>void main (){char s1[80]={0},s2[80]={0};char a;int i,j,k;printf("请输入一段字符s1\n");gets(s1);printf("======================(1)============================\n"); for(i=0;s1[i];i++);printf("%s的长度:%d\n",s1,i);printf("======================(2)============================\n"); for(j=0;s1[j];j++){s2[j]=s1[j];}printf("将一个字符串S1的内容复制给另一个字符串S2:\n");puts(s2);printf("i:%d\n",i);printf("======================(3)============================\n"); for(k=0;k<=j;k++){s1[i]=s2[k];i++;}printf("将两个字符串S1和S2连接起来,结果保存在S1字符串中:\n"); puts(s1);printf("======================(4)============================\n"); printf("请输入要寻找的字母:");scanf("%c",&a);for(i=0;s1[i];i++){if(s1[i]==a)break;}if(!s1[i])printf("\n-1\n");else printf("\n%c在第%d个位置\n",a,i+1);8、与第5题同9、Fibonacci数列前20项数值#include <stdio.h>int main( ){int i; long f[20];f[0]=1;f[1]=1;for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){if(i%5==0) printf("\n");//每行五个元素printf("%10ld",f[i]);}}10、输入10个元素,统计奇数的个数#include <stdio.h>void main( ){int i,num[10],count=0;for(i=0;i<10;i++){printf("请输入第%d个数: ",i+1); /*给予输入提示*/scanf("%d",&num[i]);if(num[i]%2!=0) count++;}printf("奇数个数是:%d\n",count );}11、下面程序的功能是从键盘输入一行字符,统计其中有多少单词。
黄文胜版数组练习册习题及讲解
A.scanf(“%d”,a); B.scanf(“%d”,b[10]);
C.scanf(“%d”,&a); D.scanf(“%d”,&b);
7.下列对数组的定义正确的是()。
A.float sc(10); B.float sc[];
4.数组是一组同名变量的集合,通过下标访问其中的变量元素。()
5.数组的元素被称为下标变量,格式为数组名[下标]。()
6.定义数组时,初始化列表的数据个数不能超过数组长度。()
7.下标变量有同基本变量相同的操作特性。()
8.字符数组就是字符串。()
9.gets函数可用于输入中间有空格的字符串。()
10.puts函数可以输出整个字符数组的值。()
三、选择题
1.以下数组定义正确的是()
A.int aa[-1]; B.char 2cc[36];
C.char bb[0xFF]; D.float ff(5);
2.以下数组初始化犯错误的是()
A.int wl[5]={1,2,3,4,5}; B.char w2[]={‘a’,’b’,’c’};
C.float w3[10]={1,2,3,4,5}; D.flaot w4[3]={1,2,3,4,5};
构造数据对象——数组
(黄文胜 主编)
一、填空题
1、数组是一级有序的、连续存储的的变量的集合。
2.一维数组是指个数为一的数组。
3.在C语言中,数组元素的下标从开始。
4.定义一个名为pers,能存放10个整型数据的一维数组。
5.有数组定义:double gp [8];该数组长度为,最后一个元素的下标为。
数组习题及答案
构造数据对象——数组一、填空题1.数组是一组相同的集合。
2.数组名代表数组的。
3.数组元素在数组中的位置序号称为它是从开始整数。
4.有int a[ ]={4,6,2,12,435,-9,76,0,0};该数组元素值最大的下标为。
5.定义数组tw,其能存储23个长整形数的语句为。
6.有说明语句int a[10]={1,2,3,4,5,6};则元素a[9]的值为。
7.数组char c[ ]=”abcd”中有个元素,最后一个元素是。
8.”a”在内存中占个存储单元。
9.定义一个能存放下字符串Vocation的字符数组enm的语句为。
10.定义一个可保存100个整型数的数组pn,并把每个元素初值设为0的语句是。
11.与puts(ss)等价的printf函数调用是。
二、选择题1.下面关于数组的说法,不正确的是()A.数组总为一个整体,可以参加算术运算B.数组中的数组元素相当于一个简单变量C.数组可以用来保存字符串D.数组是一组连续的,类型相同的数据集合2.下列说法不是数组特性的是()A.数组元素类型相同B.数组长度固定C.数组占用连续的内存空间D.数组可作为一个整体参与运算3.定义一个具有8个元素的整形数组,应使用语句()A.int a[8]; B.int a[2,4];C.int a[ ]; D.int *a[8];4. 以下能正确定义一维数组的选项是()A.int num[ ];B.#define N 100 int num[N];C.int num[0..100];D.int N=100;5.下面对s的初始化,不正确的是()A.char s[5]={“abcd”};B.char s[5]={‘a’,’b’,’c’};C.char s[5]=””;D.char s[5]=”abcd”;6.对以下说明语句正确的理解是()int a[10]={6,7,8,9,10,12};A.将6个初值依次赋值给a[1]至a[5];B.将6个初值依次赋值给a[0]至a[5];C.将6个初值依次赋值给a[5]至a[10];D.因数组长度和初值的个数不同,所以此语句不正确7.用scanf语句为数组a中的第二个数组元素输入数据,格式正确的是()A.scanf(“%d”,a[2]);B.scanf(“%d”,&a[2]);C.scanf(“%d”,&a[1]);D.scanf(“%d”,a(1));三、判断题1.数组在内存中占用的空间是不连续的。
第5章数组和广义表
第五章习题参考答案一、简答题1.【参考答案】:数组是一组具有相同数据类型的数据集合。
数据元素按次序存储于一段地址连续的内存空间中。
可以通过下标找到存放该元素的存储地址,访问该数据元素的值。
数组中的每一个元素和下标惟一对应。
访问数组中任意指定的数据元素形式是,数组名[下标]。
举例略。
2.【参考答案】:数组是一组具有相同数据类型的数据集合。
数据元素按次序存储于一段地址连续的内存空间中。
即数组是数据元素的线性组合,类似于顺序存储结构的线性表。
3.【参考答案】:在n阶方阵A中,若元素满足下述性质:aij=aji (0≤i,j≤n-1)则称A为n阶对称矩阵。
三角矩阵是指n阶矩阵中上三角(不包括对角线)或下三角(不包括对角线)中的元素均为常数c或为0的n阶方阵。
以主对角线划分,三角矩阵有上三角和下三角两种。
在n阶矩阵A中,所有的非零元素都集中在以对角线为中心的带状区域中,则称A为n阶对角矩阵。
实质上,除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素均为零或为常数c。
稀疏矩阵压缩存储方法有两类:顺序存储结构和链式存储结构。
共同点:为了节省存储单元,可只存储非零元素,压缩零元素的存储空间;非零元素的分布一般是没有规律的;在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能惟一确定非零元素是矩阵中的哪一个元素。
稀疏矩阵中的所有非零元素构成了三元组线性表。
4.【参考答案】:一个阶数较大的m×n矩阵中,设有s个非零元素,如果s<<m×n时,则称该矩阵为稀疏矩阵。
准确的讲,在矩阵A中,有s个非零元素。
令e=s/(m×n),称e 为矩阵的稀疏因子。
通常认为e≤0.05时,称矩阵A为稀疏矩阵。
特点:非零元素分布没有规律,而且很少,远小于矩阵中的元素总个数。
采用压缩存储,节省存储空间,只存储非零元素,并且每个非零元素都需要一个三元组(i,j,aij)惟一表示。
第4章_数组c++_习题答案解析
习题 4一、单项选择题1. 若有说明int a[3][4];则a数组元素的非法引用是【】A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。
2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式【答案】C3. 以下不正确的定义语句是【】A. double x[5]={2.0,4.0,6.0,8.0,10.0};B. int y[5]={0,1,3,5,7,9};C. char c1[]={′1′,′2′,′3′,′4′,′5′};D. char c2[]={′\x10′,′\xa′,′\x8′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4. 对以下说明语句的正确理解是【】int a[10]={6,7,8,9,10};A. 将5个初值依次赋给a[1]至a[5]B. 将5个初值依次赋给a[0]至a[4]C. 将5个初值依次赋给a[6]至a[10]D. 因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。
6. 以下能对二维数组c进行正确的初始化的语句是【】A. int c[3][]={{3},{3},{4}};B. int c[][3]={{3},{3},{4}};C. int c[3][2]={{3},{3},{4},{5}};D. int c[][3]={{3},{},{3}}; 【答案】 B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A 答案错误。
第四章 数组习题集答案
D)puts(s);
34.若有说明double b[7][6];对元素的非法引用是【】。
A)b[3][5]B)b[7][5]C)b[2*3][4]D)b[0][9-6]
35.若已包含标题文件<string.h>,并已有定义char s1[5],s2[]="abcd";int i;现要将字符串”abcd”赋给s1,下述语句中错误的是【】。
4.若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【】元素。
A)6B)9C)10D)12
5.要将20,30,40,50存入数组b中,下列正确的程序段是【】。
A)
int i,b[4];
for(i=0; i<4; i++)
b[i]=(i+2)*10;
B)
int b[4];
A)strcpy(s1,"abcd");
B)s1=”abcd”;
C)for(i=0;i<5;i++) s1[i]=s2[i];
D)s[0]=’a’,s[1]=’b’,s[2]=’c’,s[3]=’d’;s[4]=’\0’;
36.运行下面程序段的输出结果是【】。
char s1[6]={'d','o','\0','i','t ','\0'};
A)scanf("%s",&s);
B)gets(s);
C)for(i=0;i<10;i++) scanf("%c",s[i]);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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. 逆序输出输入的一串字符。