数组练习题
c语言数组练习题及答案

c语言数组练习题及答案第一题:在数组a中,存放有n个学生的成绩.试编一函数:将低于平均分的学生人数m由函数值返回,将低于平均分的分数由数组b带回. int fun(int a[],int n,int b[]) {int i,m=0,aver=0;for(i=0;i<n;i++) aver+=a[i];aver/=n;for(i=0;i<n;i++)if(a[i]<aver) b[m++]=a[i];return m;}第二题:试编一函数:求出1000之间能被7或11整除,但不能同时被7或11整除的所有整数的个数n由函数值返回,并将符合条件的数放在数组a中带回. int fun(int a[]){int i,n=0;for(i=1;i<1000;i++)if((i%7==0&&i%11!=0)||(i%7!=0&&i%11==0)) a[n++]=i;return n;}第三题:试编一函数:将大于整数m且紧靠m的k个素数存入数组a中. void fun(int m,int k,int a[]) {int i,n,data,flag;data=m+1; n=0;while(n<k){flag=1;for(i=2;i<=data/2;i++)if(data%i==0){flag=0; break;}if(flag) a[n++]=data;data++;}}第四题:试编一函数:在数组a中有n个整数,要求把下标从0到p(p小于等于n-1)的数平移到数组的最后.如:原始内容: 1,2,3,4,5,6,7,8,9,10; 当p=4时:移后内容: 6,7,8,9,10,1,2,3,4,5void fun(int a[],int n,int p) {int i,j,t;for(i=0;i<=p;i++){t=a[0];for(j=1;j<n;j++) a[j-1]=a[j];a[n-1]=t;}}第五题:试编一函数:在具有n个数据的数组a中,求出次最大值的下标并由函数值返回.int fun(int a[],int n){int i,j,max,may;if(a[0]>a[1]){max=0; may=1;}else {max=1; may=0;}for(i=2;i<n;i++)if(a[i]>a[max]){may=max;amx=i;}else if(a[i]>a[may]) may=i;return may;}第六题:在数组a中有n个四位数.试编一函数,要求按每个数的后三位的大小进行升序排列,当后三位等相同时,则对这些数值按原始四位数据进行降序排序.将排序后的前10个数存入数组b中.(提示:可采用选择排序)int fun(int a[],int n,int b[]) {int i,j,k,t,m=10;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]%1000<a[k]%1000) k=j;else if(a[j]%1000==a[k]%1000 && a[j]>a[k]) k=j;if(k!=i){t=a[i]; a[i]=a[k]; a[k]=t;}}for(i=0;i<m;i++) b[i]=a[i];return m;}第七题:在三位数(100至999)中寻找符合下面条件的整数.它即是完全平方数,又有两位数字相同.(如:144,676;)并将符合条件数的个数n由函数值返回,符合条件的数存入数组a中返回.int fun(int a[]){int i,j,hun,ten,data,n=0;for(i=10;i<32;i++){j=i*i;if(j>=100&&j<=999){hun=j/100;ten=j%100/10;data=j%10;if(hun==ten||ten==data||data==hun) a[n++]=j;}}return n;}第八题:判断一个长整型数是否为回文数(回文数是指其数字左右对称的整数).当该数是回文数时,函数值返回1,否则返回0.(提示:利用逻辑量flag进行操作). intfun(long m){int i=0,n=0,flag=1,a[20];while(m){a[n]=m%10; m=m/10; n++;}while(i<=n/2 && flag)if(a[i]!=a[--n] flag=0;else i++;return flag;}第九题:在数组a中存有n个数据,试编一函数:依次从数组中取出一个数据,如查该数连续大于该数以后的5个数且该数是奇数,统计出满足此条件数的个数m由函数值返回,并把这些数按从小到大的顺序存入数组b中.int fun(int a[],int n,int b[]) {int i,j,flag,m=0;for(i=0;i<n-5;i++){for(j=i+1;j<=i+5;j++)if(a[i]>a[j]) flag=1;else {flag=0; break;}if(flag==1 && a[i]%2==1) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]>b[j+1]){flag=b[j]; b[j]=b[j+1]; b[j+1]=flag;}return m;}第十题:在数组a中有n个四位数,试编一函数:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数m由函数值返回,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序排序.int fun(int a[],int n,int b[]) {int i,j,m,thou,hun,ten,data;for(i=0;i<n;i++){thou=a[i]/1000;hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;if(thou+data==hun+ten) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]<b[j+1]){data=b[j]; b[j]=b[j+1]; b[j+1]=data;}}第十一题:在数组a中有n=100个人围坐一圈并按顺时针方向从1到n编号,从第s=1个人开始进行从1到m=10的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止,现要求将出圈次序重新存入数组a中.void fun(int a[],int n,int s,int m) {int i,j,k,l,x;i=s-1; k=0; l=n;while(l>0){k++;if(k==m){x=a[i];for(j=i+1;j<n;j++) a[j-1]=a[j];a[n-1]=x;k=0; l--;}else i++;if(i==l) i=0;}}。
C语言程序设计练习题之数组与结构体

一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的。
) 1.若有定义 int a[4] = {l, 2, 3, 4};则 a[a[0]+2 * a[2]-a[3]]等于A. 1B. 2C. 3D. 42 .设有数组定义:char array [ ]=〃China 〃;则数组array 所占的空间为A. 4个字节B. 5个字节C. 6个字节D. 7个字节3 .设有定义 char a 口=“xyz”, b □二{'x',' y',' z'};,则语句 cout«sizeof (a)«* ,,«sizeof (b) «endl;的输出结果为 A. 3 3B. 3 4C. 4 3D. 4 44 .设 int b[ ][5]={1,2,3,4,5,6,7};,则元素 b[l] [2]的值是A. 0B. 2C. 6D. 75 .数组定义为int a L2J [3j={1, 2, 3, 4, 5, 6},值为1的数组元素是A. a [0] [0] B, a [1] [1] C. a [1] [2] D. a [2] [3]6 . C++中,若有说明:int a[3] [4];则对a 数组元素的正确引用是9 .设 char x[][10] = {〃Windows 〃,〃dos 〃,〃unix 〃};,执行 cout«x[l][2];后输出的结果是A. nB. iC. oD. s10 .以下叙述中错误的是A.对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界” 的出错信息D.可以通过赋初值的方式确定数组元素的个数11 .设#pragma pack(l),则结构体类型变量占用内存的字节数是A.各成员占用内存字节数之和B.第一个成员占用的内存字节数C.占用内存最大成员所需的字节数D.最后一个成员占用的内存字节数12 .下面程序运行后,输出结果是#include <iostream> using namespace std;数组与结构体A. a[2][4] B, a[l + l][0] 7 .定义二维数组并初始化,正确的是A.mta[][]={l,2,3,4,5,6}; C.inta[][3]={ 1、2,3,4,5,6}; 8 .以下数组定义中,不正确的是A. inta[2][3];C. int c[100][100]={0};C. a(2)(l)D. a[l,3] B.int a[2][]={ 1,2,3,4,5,6};D.inta[2,3]={ 1,2,34,5,6};B. mt b[][3]={0,l,2,3);D. mt d[3][]={]l,2},{l,2,3},{l,2,3,4}};21int/mtp[8]={l,2,3,4,5,6,7,8}J=0,j=0;while(i++<7)if(p[i]%2) j+=p[i];cout<<j«endl;return 0;}A. 15B. 16C. 20D. 3613.下面程序运行后,输出结果是#include <iostream>using namespace std;int main()int a[3][3]={{l,2},{3,4},{5,6}},ij,s=0;fbr(i=l;i<3;i++)砧i(J=0jv=i;j++)s+=a[i][j];cout«s«endl;retuin 0;}A. 18B. 19C. 20D. 2114.下面程序运行后,输出结果是#mclude<iostieam>using namespace std;int main(){ mt a[3][3]={l,2,3,4,5,6,7,8,9},n,sum=0;fdi(n=0;n<3;n++)sum=sum+a [n] [n];cout«sum«endl;return 0:}A. 6B. 12C. 15D. 4515.下面程序运行后,输出结果是#include <iostream>using namespace std;stmct abc{ mt a, b, c; };int main。
数组练习题及答案

第五章数组练习题及答案一、选择题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、下面程序段是输出两个字符串中对应相等的字符。
C程序设计(数组)习题与答案

C程序设计(数组)习题与答案C程序设计(数组)习题与答案数组是C语言中常用的数据结构之一,它可以存储多个相同类型的元素。
掌握数组的使用对于C程序设计至关重要,下面将为大家介绍一些关于C数组的习题及其答案。
1. 习题一:计算数组元素的和题目描述:编写一个程序,计算给定数组中所有元素的和,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组int sum = 0; // 用于存储和的变量// 遍历数组,累加每个元素的值for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 习题二:查找数组中的最大值题目描述:编写一个程序,找出给定整型数组中的最大值,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[7] = {4, 7, 2, 9, 1, 5, 8}; // 定义一个包含7个元素的整型数组int max = arr[0]; // 假设第一个元素为最大值// 遍历数组,比较每个元素的值与当前最大值的关系for (int i = 1; i < 7; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 习题三:查找数组中的特定元素题目描述:编写一个程序,在给定整型数组中查找是否存在指定元素,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[6] = {3, 6, 9, 2, 5, 8}; // 定义一个包含6个元素的整型数组 int target = 2; // 指定要查找的元素int found = 0; // 用于标记是否找到目标元素的变量// 遍历数组,比较每个元素的值与目标值的关系for (int i = 0; i < 6; i++) {if (arr[i] == target) {found = 1;break;}}if (found) {printf("数组中存在目标元素:%d\n", target);} else {printf("数组中不存在目标元素:%d\n", target);}return 0;}```4. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。
数组练习题大全

数组练习题大全数组是计算机编程中一种重要的数据结构。
掌握数组的基本操作和应用是每个程序员都需要具备的技能之一。
本文将为您提供一系列数组练习题,帮助您熟练掌握数组的使用。
一、基础操作题1. 请编写一个程序,创建一个长度为5的整型数组,然后将数组中的元素依次赋值为1、2、3、4、5,并输出数组中的所有元素。
2. 请编写一个程序,创建一个长度为10的字符型数组,然后将数组中的元素依次赋值为'A'、'B'、'C'、'D'、'E'、'F'、'G'、'H'、'I'、'J',并输出数组中的所有元素。
3. 请编写一个程序,创建一个长度为7的浮点型数组,然后使用循环从键盘输入数组中的元素值,并计算数组中所有元素的平均值。
二、查找与排序题4. 请编写一个程序,在一个已知整型数组中查找指定的元素。
如果找到该元素,则输出该元素的下标位置;如果未找到,则输出"未找到该元素"。
5. 请编写一个程序,将一个已知整型数组按照从小到大的顺序进行排序,并输出排序后的结果。
三、统计与分析题6. 请编写一个程序,统计一个整型数组中负数的个数,并输出统计结果。
7. 请编写一个程序,计算一个整型数组中所有元素的和,并输出总和。
8. 请编写一个程序,找出一个整型数组中的最大值和最小值,并输出这两个值。
四、应用题9. 请编写一个程序,统计一个整型数组中奇数和偶数的个数,并输出统计结果。
10. 请编写一个程序,从一个已知整型数组中删除指定的元素,并输出删除后的数组。
11. 请编写一个程序,将一个整型数组中的所有元素向左移动一位,并输出移动后的数组。
12. 请编写一个程序,将一个整型数组中的所有元素向右移动一位,并输出移动后的数组。
总结:通过以上一系列的数组练习题,您可以逐步掌握数组的使用技巧。
Java数组练习题目

Java数组练习题目一填空题1)数组的元素通过来访问,数组Array的长度为。
2)数组复制时,\将一个数组的传递给另一个数组。
3)没有显式引用变量的数组称为数组。
4)JVM将数组存储在(堆或栈)中。
5)数组的二分查找法运用的前提条件是数组已经。
6)矩阵或表格一般用维数组表示。
7)如果把二维数组看成一维数组,那么数组的元素是数组。
8)Java 中数组的下标的数据类型是。
9)不用下标变量就可以访问数组的方法是。
10)数组最小的下标是。
11)arraycopy()的最后一个参数指明。
12)向方法传递数组参数时,传递的是数组的。
13)线性查找法的平均查找长度为。
14)数组初始化包括。
15)数组下标访问超出索引范围时抛出异常16)浮点型数组的默认值是。
17)对象型数组的默认值是。
18)对象类型的数组虽然被默认初始化,但是并没有构造函数。
19)二维数组的行的长度不同。
20)数组创建后其大小改变。
二选择题1.下面错误的初始化语句是___A.chartr[]=\B.chartr[100]=\C.chartr[]={'h','e','l','l','o'};D.chartr[]={'hello'};2.定义了一维int型数组a[10]后,下面错误的引用是___A.a[0]=1;B.a[10]=2;C.a[0]=5某2;D.a[1]=a[2]某a[0];3.下面的二维数组初始化语句中,正确的是____A.floatb[2][2]={0.1,0.2,0.3,0.4};B.inta[][]={{1,2},{3,4}};C. inta[2][]={{1,2},{3,4}};D.floata[2][2]={0};4.引用数组元素时,数组下标可以是____A.整型常量B.整型变量C.整型表达式D.以上均可5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____A.24B.25C.18D.176.下列初始化字符数组的语句中,正确的是____A.chartr[5]=\B.chartr[]={'h','e','l','l','o','\\0'};C.chartr[5]={\D.chartr[100]=\7.数组在Java中储存在中A.栈main(){B.队列C.堆D.链表8.下面程序的运行结果是____int某=30;int[]number=newint[某];某=60;Sytem.out.println(number.length);}A.60B.20C.30D.509.下面不是创建数组的正确语句A.floatf[][]=newfloat[6][6];C.floatf[][]=newfloat[][6];10.下面不是数组复制方法的是()A.用循环语句逐个复制数组C.用\进行复制A.a(3)11.数组a的第三个元素表示为B.a[3]C.a(2)D.a[2]12.当访问无效的数组下标时,会发生A.中止程序B.抛出异常C.系统崩溃D.直接跳过13.使用arraycopy()方法将数组a复制到b正确的是A.arraycopy(a,0,b,0,a.length)B.arraycopy(a,0,b,0,b.length)C. .arraycopy(b,0,a,0,a.length)D.arraycopy(a,1,b,1,a.length)14.关于数组默认值,错误的是A.char--'\B.Boolean--trueC.float--0.0fD.int--015.关于数组作为方法的参数时,向方法传递的是A.数组的引用B.数组的栈地址C.数组自身D.数组的元素16.关于数组复制,下列说法错误的是A.\可以实现数组复制B.运用循环语句进行数组复制必须两个数组长度相同C.arraycopy()方法没有给目标数组分配内存空间D.数组复制是数组引用的传递17.下列语句会造成数组newint[10]越界是A.a[0]+=9;B.a[9]=10;()A.publictaticvoidmain();B.publictaticvoidmain(String[]arg)C.publictaticintmain(String[]arg)D.publicvoidmain(Stringarg[ ])C.—a[9]D.for(inti=0;i<=10;i++)a[i]++;18.main方法是javaApplication程序执行的入口点。
数组应用练习题

5、给出10个老师的打分,对10个老师的打分找出最高分。
6、有30个0-9之间的数字,分别统计0-9义一个整型数组,保存10个数据,利用程序将最大值保存到数组中第一个元素的操作。
8、定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,
1、定义一个由整数组成的数组,要求求出其中的奇数个数和偶数个数。
2、定义一个整型数组,求出数组元素的和、数组元素的最大值和最小值,并输出所求的结果。
3、给出10个整数(int型),然后任意查询一个数字是否存在该10个数字内。
4、定义一个包含10个元素的数组,对其进行赋值,使每个元素的值等于其下标 然后输出,最后将这个数组倒置输出。
for (int j=0; j < a.length - i -1; j++){
if (a[j] < a[j+1]) {
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
10、定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课
按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。
(1)给二维数组的每一个元素赋0~100之间的整数。
(2)按照列表的方式输出这些学员的每门课程的成绩。
即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。
9、定义一个int型的一维数组,包含10个元素,利用程序将数组中的元素从大到小进行排序。
提示:冒泡算法
C语言练习3(数组)=参考解答

C语言(数组)一、选择题1. 设有程序:main(){ int i,a[11];printf("给数组赋值:\n");for (i=0;i<=10;i++)scanf("%d",( ));... ...printf("输出数组:\n");for(i=0;i<=10;i++)printf("%d,",( ));}则在程序中的两个园括号中分别应填入:CA) &a[i]和&a[i]B) a[i]和&a[i]C) &a[i]和a[i]D) a[i]和a[i]2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ).A) 15 B) 16 C) 30 D) 323. 阅读程序:main(){ int a[2]={0},i,j,k=2;for(i=0;i<k;i++)for(j=0;j<k;j++) a[j]=a[i]+1;printf("%d\n",a[k]);}以上程序的输出结果是( D ).A) 1 B) 3 C) 2 D) 不确定的值4. 阅读程序:f(int b[],int n){ int i,r=1;for(i=0;i<=n;i++) r=r*b[i];return r;}main(){ int x,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf("%d\n",x);}以上程序的输出结果是( D ).A) 720 B) 6 C)24 D) 1205. 以下定义语句中,错误的是( B ).A) int a[ ] = {6,7,8};B) int n=5, a[n];C) char a[ ]= "string";D) char a[5 ]={'0','1','2','3','4'};6. 以下描述中正确的是( D ).A) 数组名后面的常量表达式用一对圆括弧括起来B) 数组下标从1开始C) 数组下标的数据类型可以是整型或实型D) 数组名的规定与变量名相同7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ).A) scanf("%c",a[0]);B) scanf("%s",&a);C) printf("%c",a[3]);D) printf("%s",a);8.若定义数组int a[10] ,其最后一个数组元素为( C ).A) a[0]C) a[9]D) a[10]9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )?A) a[8] 的值为0B) a[1] 的值为1C) a[3] 的值为4D) a[9] 的值为010. 指出以下错误语句( A ).A) int n=10,a[n];B) int n,a[10];C) int a[10]={1,2,3};D) int a[10]={1,2,3,4,5,6,7,8,9,10};11. 请读程序:main(){int n[2],i,j,k;for(i=0;i<2;i++) n[i]=0;k=2;for(i=0;i<k;i++)for(j=0;j<k;j++) n[j]=n[i]+1;printf("%d\n",n[k]);}上面程序的输出结果是( A ).A)不确定的值 B)3 C)2 D)112. 若有以下的定义和语句:int str[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='e',则数值为2的表达式是( C ).A)str['g'-c] B)str[2] C)str['d'-'c'] D)str['d'-c]13. 设有数组定义:int a[5];则下列给数组元素赋值错误的是( B ).B) scanf("%c",a[3]);C) a[3]=getchar();D) a[3]='a'+3;14. 以下数组定义中错误的是( D ).A) #define N 30int a[N+30];B) #define N 30int a[N];C) int a[30];D) int a[N];15. 在定义一个一维数组时,不能用来表示数组长度的是( D ).A)常量 B)符号常量 C)常量表达式 D) 已被赋值的变量16. 若float型变量占用4个字节,有定义float a[20]={1.1,2.1,3.1};则数组a在内存中所占的字节数是( D ).A)12 B)20 C)40 D)8017. 设已定义:int x[2][4]={1,2,3,4,5,6,7,8}; 则元素x[1][1]的正确初值是( A ).A) 6 B) 5 C) 7 D) 118. 设有定义:int a[][3]={{1,2,3},{4,5,6},{7,8,9}}; 则a[1][2]的初值为( C ).A) 2 B) 4 C) 6 D) 819. 设有:int a[4][5]; 则数组a占用的内存字节数是( C ).A) 12 B) 24 C) 40 D) 2020. 以下数组定义中,不正确的是( B ).A) int b[3][4];B) int c[3][ ]={{1,2},{1,2,3},{4,5,6,7}};C) int b[200][100]={0};D) int c[ ][3]={{1,2,3},{4,5,6}};21. 定义数组:int x[2][3]; 则数组x 的维数是( 2 ).A) 1 B) 2 C) 3 D) 622. 若定义数组并初始化int b[2][3]= { 1,2,3,4,5,6},以下语句哪一个成立( C )?A) 表达式b[1][2]的值为1B) 表达式b[1][2]的值为4C) 表达式b[1][2]的值为6D) 表达式b[1][2]的值为223. 若定义数组并初始化int a[2][3]={{1,2,3},{4,5,6}};for(i=0;i<2;i++)for(j=0;j<3;j++)printf("%d",a[i][j]);语句的结果是哪一个( C )?A) 1,2,3,4,5,6B) 1 2 3 4 5 6C) 12345624. 若定义数组并初始化int a[2][3]= {{1,2, 3},{4,5,6}};以下语句哪一个不成立( B )?A) a数组中有6个元素B) a[2][3]是a数组的最后一个元素的引用C) a数组中每个元素都为整数D) a数组是整型数组25. 定义如下变量和数组:int i;int x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是( C ).for(i=0;i<3;i++) printf("%d",x[i][2-i]);A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 926. 如有以下定义:double s[][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};则数值为2的元素是( C ).A) s[1][3] B) s[0][3] C) s[0][2] D) s[1][2]27. 以下程序的输出结果是( A ).main(){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d",s);}A) 18 B) 19 C) 20 D) 2128. 若已有char b[10][50];则该二维字符数组在内存所占字节数为( D ).A) 10 B)50 C)60 D)50029. 设有:char a[10]; 下列语句那个是正确的( D )?A) scanf("%s",a[0]);B) scanf("%s",&a);C) printf("%s",a[0])D) printf("%s",a)30. 阅读程序:main(){ char a[10];int i;for(i=1;i<=5;i++)scanf("%c",&a[i]);printf("%c",a[0]);}设从键盘输入字符串:abcde,则程序的输出结果是( C ).A) a B)空格 C)不确定D)031. 合法的数组定义是( D ).A) int a[ ] = "string";B) int a[5]={0,1,2,3,4,5};C) char a= "string";D) char a[ ]={'0','1','2','3'};32. 设有数组定义:char string[ ]="China";则数组string所占的空间为( B ).A) 5个字节B) 6个字节C) 7个字节D) 10个字节33. 定义字符数组c:char c[ ]={"c language"};数组c在内存中所占字节数是( C ).A) 9 B) 10 C) 11 D) 1234. 指出以下错误语句( C ).A) char a[10]={'0','1','2','3','4','5','6','7','8','9'};B) char a[10]={'0','1 ','2','3'};C) char a[2]= {"1","2"};D) char a[2]= {'a’,'b’};35. 若定义数组并初始化char a[10]={"hello"},该数组的元素个数是( A ).A) 10B) 5C) 6D) 736. 若定义数组并初始化char a[10]={"HELLO"},该数组的元素中 a[2]是( A ).A) 'L'B) 'E'C) 'H'D) 'O'37. 若定义数组并初始化int b[10]={ 1,2,3,4},以下哪几个语句成立( A C D)?A)b[8]的值为0B)b[1]的值为1C)b[3]的值为整数D)b[10]不是b数组中的元素38. 若定义数组int a[10];指出下列错误语句:ABCDA) a数组共有10个元素,其引用方法是:a[1],a[2]...a[10];B) a数组是整型数组,其元素自动初始化为0;C) a数组最后一个元素的引用方法是a[10];D) a数组第一个元素的引用方法是a[1];二、判断题1.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章数组一、教学的目的与要求掌握一维数组、二维数组、字符数组以及二维的字符数组的定义和使用,数组中元素的引用,数组的初始化,字符串的输入与输出,字符串运算函数的使用。
二、重点与难点数组的应用三、教学内容第一节一维数组数组是指一组同类型数据组成的序列,用一个统一的数组名标识这一组数据,用下标来指示数组中元素的序号,同一数组中的所有元素必须属于同一数据类型。
1、一维数组的定义一维数据的定义方式为:类型说明符数组名[常量表达式];例如:int a[10];说明:①数组名定名规则和变量名相同,遵循标识符定名规则。
②数组名后是用方括号括起来的常量表达式,不能用圆括号。
③常量表达式表示元素的个数,即数组长度。
④常量表达式中可以包括常量或符号常量,不能包含变量。
例1:以下对一维数组a的正确说明是()。
A)int a(10); B)int n=10,a[n];C)int n;scanf(“%d”,&n); D)#define SIZE 10int a[n]; int a[SIZE];答案:D2、一维数组的初始化①可对全部元素赋初值:例如:int a[5]={1,3,5,7,9};②可给部分赋值:例:int a[5]={1,3,5};③如果想使全部元素为1:例 int a[5]={1,1,1,1,1};(注:不能省略)④在对全部元素赋值时,可不指定数组长度。
例 int a[ ]={1,2,3,4,5,6};⑤如对一个静态或外部的数组不进行初始化,隐含的初值为0。
如不对动态数组初始化,则其初始值为一些不可预料的数。
例2:以下能对一维数组a进行正确初始化的语句是()。
A)int a[10]=(0,0,0,0,0); B)int a[10]={};C)int a[]={0}; D)int a[10]={10*1};答案:C例3:以下不正确的定义语句是()。
A)double x[5]={1.0,2.0,3.0,4,0,5.0}; B)int y[5]={1,2,3,4,5,6};C)char c1[]={‘1’,’2’,’3’,’4’,’5’}; D)char c2[]={‘\x10’,’\xa’};3、一维数组元素的引用数组元素的表示形式为:数组名[下标]例4:数组元素引用实例main( ){int I,a[10]for(I=0;I<=9;I++)a[i]=I;for(I=0;I<=0;I++)printf(“%d”,a[i]);}说明:①下标可以是整型常量、变量或表达式②不要越界例5:若有说明:int a[10];则对a数组元素的正确引用是()。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]例6:下面程序中有错误的行是()注:每行程序前面的数字表示行号1 main()2 { int a[3]={1};3 int i;4 scanf(“%d”,&a);5 for(I=1;I<3;I++) a[0]=a[0]+a[i];6 printf(“a[0]=%d\n”,a[0]);7 }答案:44、数组名作为函数参数main( ){void swap(int x[2])int a[2]={3,5};swap(a);printf(“%d,%d\n”,a[0],a[1]);}void swap(int x[2]){int t;t=x[0];x[0]=x[1];x[1]=t;}输出结果:5,3注意:以数组名作参数时,采取的不是“值传递”方式,而是“地址传送”方式,即把实参数组起始地址传给形参数组,这样形参数组就和实参数组共占同一段内存单元。
5、一维数组的应用举例例7:对n个数排序(由小到大)起泡法基本思想:将相邻两个数a[0]与a[1]比较,按要求将这两个数排好序;再将a[1]与a[2]比较,.….依次处理,直到将最后两个数比较处理完毕。
void bubble(int a[],int n){int I,j,tempfor(I=1;I<=n-1;I++)for(j=0;j<=n-I-1;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}例8:选择法:从所有元素中选择一个最小元素放在a[0]作为第一轮;第二轮是从a[1]开始到最后一个元素选择一个最小的放在a[1]中以此类推。
n个数要比较n-1轮。
void selectsort(int a[],int n){int I,j,p,temp;for(I=0;I<n-1;I++){p=I;for(j=I+1;I<n;I++)if(a[j]<a[p]) p=j;if(p!=i){temp=a[p];a[p]=a[i];a[i]=temp;}}}例9:插入法:有n个数,已按由小到大顺序排列好,要求输入一个数据,把它插入到原有数列中,而仍然保持有序。
void f(int a[ ],int n,int x){int I,j;while(a[i]<=x && i<n)i++;If(a[i]>x){for(j=n-1;j>=I;j--)a[j+1]=a[j];a[i]=x;}elsea[i]=x;}改写:void f(int a[ ],int n,int x){int I,j;while(a[i]<=x && i<n)i++;for(j=n-1;j>=I;j--)a[j+1]=a[j];a[i]=x;}例10:插入法:下面程序的运行结果是()。
main(){ int I=0,n=3,j,k=3;int a[5]={1,4,5};while(I<=n&&k>a[I]) I++;for(j=n-1;j>=I;j--)a[j+1]=a[j];a[i]=k;for(I=0;I<=n;I++)printf(“%3d”,a[i]);}答案:1 3 4 5例11:插入法:若有以下程序段:…………..int a[]={4,0,2,3,1},I,j,t;for(I=1;I<5;I++){t=a[i];j=I-1;while(j>=0&&t<a[j]){a[j+1]=a[j];j--;}a[j+1]=t;}for(I=0;I<5;I++)printf(“%d ”,a[i]);…………则该程序段的输出结果是()。
答案:0 1 2 3 4例12:下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。
请填空。
main(){ int a[3]={5,9,19};int b[5]={12,24,26,37,48};int c[10],I=0,j=0,k=0;while(I<3&&j<5)if(__________){c[k]=b[j];k++;j++;}else{c[k]=a[i];k++;I++;}while(________){ c[k]=b[j];k++;j++;}while(________){ c[k]=a[i];k++;I++;}for(I=0;I<k;I++)printf(“%3d”,c[i]);}例13:折半查找法void binary_search(int a[],int n,int x){int mid,top=0,bot=n-1,I,find=0;do{mid=(top+bot)/2;if(x==a[mid]){printf(“found”);find=1;}else if(x<a[mid]) bot=mid-1;else bot=mid+1;}while((top<=bot)&&(find==0));}例14:下面程序用“顺序查找法”查找数组a中是否存在某一关键字。
请填空。
main(){int a[8]={25,57,48,37,12,92,86,33};int I,x;scanf(“%d”,&x);for(I=0;I<8;I++)if(x==a[I]){printf(“Found! The index is :%d\n”,--i);____________;} if(____________)printf(“Can’t found!”);}例15:要求写一函数,实现对包含任意个数据的数列实现头尾颠倒。
void f(int a[ ],int n){int I,t;for(I=0;I<n/2;I++){t=a[i];a[i]=a[n-i];a[n-i]=t;}}例16:下面程序的运行结果是()。
main(){int a[10]={1,2,2,3,4,3,4,5,1,5};int n=0,I,j,c,k;for(I=0;I<10-n;I++){c=a[i];for(j=I+1;j<10-n;j++)if(a[j]==c){for(k=j;k<10-n;k++)a[k]=a[k+1];n++;}}for(I=0;I<10-n;I++)printf(“%d”,a[i]);}答案:12345例17:当从键盘输入18并回车后,下面程序的运行结果是()。
main(){int x,y,I,a[8],j,u,v;scanf(“%d”,&x);y=x;I=0;do{ u=y/2;a[i]=y%2;I++;y=u;}while(y>=1);for(j=I-1;j>=0;j--)printf(“%d”,a[j]);}答案:10010例18:有17个人围成一圈,编号为0—16,从第0号的人开始从1报数,凡报到3的倍数离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号。
main(){int a[17],I,t=0,s=0;for(I=0;I<17;I++)a[i]=1;while(t<=16){ for(I=0;I<17;I++)if(a[i]==0) {s=s+1;if(s%3==0) {a[i]=0;t=t+1;}}}for(I=0;I<17;I++)if(a[i]==1) printf(“%d”,i);}第二节二维数组1、二维数组的定义二维数组定义的一般形式为:类型说明符数组名[常量表达式][常量表达式]注意:二维数组在内存中是按一维连续顺序存放的。
设有一个m*n的二维数组a,其中第i行第j 列元素a[i][j]在数组中的顺序号计算公式为:i*n+j例19:以下对二维数组a的正确说明是()。