数组编程习题解答
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、掌握使用一维数组编程方法2、掌握使用二维数组进行程序设计【实验内容】一、上机验证程序,并分析结果要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。
1、#include <stdio.h>int main(){ int a[ ]={1,2,3,4,5} , i, j, s=0 ;j = 1;for ( i = 4 ; i>=0 ; i--){s = s+ a[i] * j ;j = j * 10 ;}printf(" s= %d \n" , s );return 0;}二、程序改错题1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。
源代码如下,程序中存在错误,请将其改正。
#include <stdio.h>int main(){int a(10);/*定义数组*/int count,i;/* i循环变量 count 正数个数*/for(i=0;i<=10;i++){/*循环输入*/scanf("%d",a[i]);}count=1;for(i=0;i<=10;i++){/*查找正数*/if(a(i)>0)count++;}printf("数组中正数有:%d个\n",count);return 0;}三编写程序1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。
#include <stdio.h>#define N 30int main(){float score[N],sum=0,aver;int i;for(i=0;i<30;i++){scanf("%f",&score[i]);sum=sum+score[i];}aver=sum/30;printf("平均分为:%.2f\n",aver);for(i=0;i<N;i++)if(score[i]>aver)printf("%.2f ",score[i]);printf("\n");return 0;}2.编写程序:假设有13位评委参与评分工作。
c语言数组试题及答案
c语言数组试题及答案1. 请编写一个程序,要求用户输入10个整数,然后将其存储在一个数组中,并输出这个数组的内容。
答案:```c#include <stdio.h>int main() {int numbers[10];int i;printf("请输入10个整数:\n");for (i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}printf("数组内容为:\n");for (i = 0; i < 10; i++) {printf("%d ", numbers[i]);}return 0;}```2. 请编写一个程序,要求用户输入一个整数n(n>0),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中所有元素的和。
答案:```c#include <stdio.h>int main() {int n;int numbers[100];int sum = 0;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);sum += numbers[i];}printf("数组元素之和为:%d\n", sum);return 0;}```3. 请编写一个程序,要求用户输入一个整数n(n>1),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中最大和最小的元素。
答案:```c#include <stdio.h>int main() {int n;int numbers[100];int max, min;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);}max = numbers[0];min = numbers[0];for (i = 1; i < n; i++) {if (numbers[i] > max) {max = numbers[i];}if (numbers[i] < min) {min = numbers[i];}}printf("数组中的最大元素为:%d\n", max);printf("数组中的最小元素为:%d\n", min);return 0;}```4. 请编写一个程序,要求用户输入两个整数m和n(1<=m<=n<=100),然后生成并输出m到n之间(包含m和n)的所有整数。
C语言数组典型例题分析与解答
数组练习解答1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是________________【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。
空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。
【答案】方法一:float a[4]={0.0,0.0,0.0,0.0};方法二:float a[]={ 0.0,0.0,0.0,0.0};方法三:float a[4]= {0.0};方法四:static float [4];2 下列数组定义语句中,错误的是()①char x[1]='a';②auto char x[1]={0};③static char x[l];④char x[l];【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。
【答案】①3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。
其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。
现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。
【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列4 1 11 4 23 2 42 3 3【答案】l、2、4、34 用"选择排序法"对n个数据排序,需要进行n-1步。
其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。
第4章_数组c++_习题答案解析
习题4一、单项选择题1.若有说明inta[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.doublex[5]={2.0,4.0,6.0,8.0,10.0};B.inty[5]={0,1,3,5,7,9};C.charc1[]={′1′,′2′,′3′,′4′,′5′};D.charc2[]={x1′0′x,a′′x,8′′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4.对以下说明语句的正确理解是【】inta[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.若有说明:inta[][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.intc[3][]={{3},{3},{4}};B.intc[][3]={{3},{3},{4}};C.intc[3][2]={{3},{3},{4},{5}};D.intc[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
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. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。
Java_数组练习答案
填空题1)数组的元素通过下标来访问,数组Array的长度为Array.length。
2)数组复制时,“=”将一个数组的引用传递给另一个数组。
3)没有显式引用变量的数组称为匿名数组。
4)JVM将数组存储在堆(堆或栈)中。
5)数组的二分查找法运用的前提条件是数组已经排序。
6)矩阵或表格一般用二维数组表示。
7)如果把二维数组看成一维数组,那么数组的元素是一维数组。
8)Java中数组的下标的数据类型是整型。
9)不用下标变量就可以访问数组的方法是f oreach循环。
10)数组最小的下标是0.。
11)array copy()的最后一个参数指明复制元素的个数。
12)向方法传递数组参数时,传递的是数组的引用。
13)线性查找法的平均查找长度为n*(n-1)/2。
14)数组初始化包括数组声明、创建和初始化。
15)数组下标访问超出索引范围时抛出arrayIndexOutOfBoundsException异常16)浮点型数组的默认值是0.0f。
17)对象型数组的默认值是null。
18)对象类型的数组虽然被默认初始化,但是并没有调用其构造函数。
19)二维数组的行的长度可以不同。
20)数组创建后其大小不能改变。
选择题1.下面错误的初始化语句是_D__A) char str[]="hello";B) char str[100]="hello";C) char str[]={'h','e','l','l','o'};D) char str[]={'hello'};2.定义了一维int型数组a[10]后,下面错误的引用是_B___A) a[0]=1;B) a[10]=2;C) a[0]=5*2;D) a[1]=a[2]*a[0];3.下面的二维数组初始化语句中,错误的是__B___A) float b[2][2]={0.1,0.2,0.3,0.4};B) int a[][2]={{1,2},{3,4}};C) int a[2][]= {{1,2},{3,4}};D) float a[2][2]={0};4.引用数组元素时,数组下标可以是__D___A) 整型常量B) 整型变量C) 整型表达式D) 以上均可5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为__B___A) 24 B) 25 C) 18 D) 176.下列初始化字符数组的语句中,错误的是__C___A) char str[5]="hello";B) char str[]={'h','e','l','l','o','\0'};C) char str[5]={"hi"};D) char str[100]="";7.数组在Java中储存在C中A) 栈B) 队列C) 堆D) 链表8.下面程序的运行结果是__C___main(){int x=30;Int[] numbers=new int[x];X=60;System.out.println(numbers.length);}A) 60 B) 20 C) 30 D) 509、下面不是创建数组的正确语句CA)float f[][]=new float[6][6]; B)float f[]=new float[6];C)float f[][]=new float[][6]; D)float [][]f=new float[6][];10.下面不是数组复制方法的是(C)A 用循环语句逐个复制数组B 用方法arraycopyC用“=”进行复制 D 用clone方法11.数组a的第三个元素表示DA a(3)B a[3]Ca(2) D a[2]12. 当访问无效的数组下标时,会发生BA中止程序 B 抛出异常C系统崩溃 D 直接跳过13.使用arraycopy()方法将数组a复制到b正确的是AA 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. 关于数组默认值,错误的是BAchar--'"u0000' B Boolean--trueCfloat--0.0f D int-- 015. 关于数组作为方法的参数时,向方法传递的是AA数组的引用 B 数组的栈地址C数组自身 D 数组的元素16. 关于数组复制,下列说法错误的是CA“=”可以实现数组复制B运用循环语句进行数组复制必须两个数组长度相同C arraycopy()方法没有给目标数组分配内存空间D 数组复制是数组引用的传递17. 下列语句会造成数组new int[10]越界是DA a[0]+=9;B a[9]=10;C—a[9] D for(int i=0;i<=10;i++) a[i]++;18. main方法是java Application 程序执行的入口点。
C程序设计(数组)习题与答案
一、单选题1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是()。
A.s++B.&s[0]+1C.&s[1]D.s+1正确答案:A2、若有定义int a[5],*p=a;则对a数组元素的正确引用是()。
A.a+2B.*(a+2)C.*&a[5]D.*(p+5)正确答案:B3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是()。
A.p+5B.&a+1C.*a+1D.&a[0]正确答案:D4、若要对a进行合法的自减运算,则之前应有下面()的说明。
A.int b[10];int *a=b+1;B.int k;int *a=&k;C.int p[3];int *a=p;D.char *a[3];正确答案:A5、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是()。
A.p1=x+3,*p1++B.x[3]C.p1=x+2,*++p1D.p1=x+2,*(p1++)正确答案:D6、设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},*p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是()。
A.x[p-x+k]B.p+kC.*(&x[k])D.*(x+k)正确答案:B7、设double *p[6];则()。
A.p是指针数组,其元素是指向double型变量的指针B.p是指向double型变量的指针C.p是double型数组D.p是数组指针,指向double型数组正确答案:A8、若有定义int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是()。
A.for(i=0;i<6;i++) printf("%2d",*p++);B.for(i=0;i<6;i++) printf("%2d",*(p+i));C.for(i=0;i<6;i++) printf("%2d",*(p++));D.for(i=0;i<6;i++) printf("%2d",(*p)++);正确答案:D9、下面程序执行后的输出结果是()。
C语言数组编程题及解答
【程序1】用筛选法求100之内的素数筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。
据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。
具体做法是:先把N个自然数按次序排列起来。
1不是质数,也不是合数,要划去。
第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。
2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。
3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。
这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。
#include <stdio.h>#include <math.h>void main(){int i,j;int a[100];for(i=0;i<100;i++)a[i]=i+1;for(i=1;i<100;i++){if(a[i]==0)continue;for(j=i+1;j<100;j++)if(a[j]%a[i]==0)a[j]=0;}for(j=1;j<100;j++) //j从1开始,去除a[0](其值为1),因为1既不是质数,也不是合数if(a[j]!=0)printf("%d,",a[j]);printf("\n");}【程序2】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数。
程序源代码:#include <stdio.h>int main(){int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i<j;i++){if ((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0) //说明是完数{printf("%d is a wanshu:",j);for(i=0;i<=n;i++)printf("%d ",k[i]);printf("\n");}}return 1;}【程序3】题目:用选择法对10个数进行从大到小排序1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
数组c语言试题库及答案
数组c语言试题库及答案1. 请解释C语言中数组的概念。
答:在C语言中,数组是一种数据结构,它允许将多个相同类型的数据项存储在连续的内存位置。
数组可以是一维的,也可以是多维的。
2. 如何声明一个整型数组?答:声明一个整型数组的语法是 `int array_name[size];`,其中`array_name` 是数组的名字,`size` 是数组中元素的数量。
3. 请写出一个程序,用于计算一个整型数组中所有元素的和。
```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int sum = 0;for(int i = 0; i < 5; i++) {sum += array[i];}printf("Sum of array elements: %d\n", sum);return 0;}```4. 如果一个数组的元素数量是动态的,应该如何声明?答:在C语言中,可以使用指针来处理动态数组。
声明方式为`int *array_name;`,然后在程序中使用 `malloc` 或 `calloc` 函数分配内存。
5. 请解释数组的索引。
答:数组的索引是从0开始的,它表示数组中元素的位置。
例如,对于一个名为 `array` 的数组,`array[0]` 是数组的第一个元素。
6. 如何初始化一个整型数组?答:可以使用花括号 `{}` 来初始化数组,例如 `int array[] = {1, 2, 3, 4, 5};`。
7. 请写出一个程序,用于交换数组中的两个元素。
```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int temp;int index1 = 1; // 第二个元素int index2 = 3; // 第四个元素temp = array[index1];array[index1] = array[index2];array[index2] = temp;for(int i = 0; i < 5; i++) {printf("%d ", array[i]);}return 0;}```8. 在C语言中,数组的元素可以是什么数据类型?答:数组的元素可以是任何数据类型,包括整型、浮点型、字符型、结构体等。
数组题参考答案
数组题参考答案数组题参考答案在计算机科学中,数组是一种用于存储和管理一组相同类型数据的数据结构。
它是一种非常重要的数据结构,被广泛应用于各种编程语言和算法中。
在编程中,经常会遇到与数组相关的题目,这些题目既有基础的数组操作,也有一些较为复杂的问题。
下面,我将为大家提供一些常见数组题目的参考答案。
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语言数组练习及答案
第四部分数组4.1选择题1.以下关于数组的描述正确的是(c}A.数组的大小是固定的,但可以有不同的类型的数组元素B.数组的大小是可变的,但所有数组元素的类型必须相同C.数组的大小是固定的,所有数组元素的类型必须相同D.数组的大小是可变的,可以有不同的类型的数组元素2.以下对一维整型数组a的正确说明是(d)。
A.inta(10);C.intn;scanf("%d",&n);inta[n];B.intn=10,a[n];D.#defineSIZE10inta[SIZE];3.在C语言中,引用数组元素时,其数组下标的数据类型允许是(c)。
A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式页脚内容14.以下对一维数组m进行正确初始化的是(c)。
A.intm[10]=(0,0,0,0);B.intm[10]={};C.intm[]={0};D.intm[10]={10*2};5.若有定义:intbb[8];。
则以下表达式中不能代表数组元bb[1的地址的是(c>A.&bb[0]+1B.&bb[1]C.&bb[0]++D.bb+16.假定int类型变量占用两个字节,具有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是(d)A.3B.6C.10D.207.若有以下说明:inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};charc='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(){inta[10],i=0;while(i<10)scanf("%d",);页脚内容2)A.a+(i++)B.&a[i+1]C.a+iD.&a[++i]9.执行下面的程序段后,变量k中的值为(a)。
数组编程练习(带答案)
数组编程练习1、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
解:#include<stdio.h>#include<math.h>#define N 10int main(){int a[N],i;for(i=0;i<N;i++){a[i]=rand()%100;}printf("array a:\n");for(i=0;i<N;i++){printf("%4d",a[i]);}printf("\n");return 0;}2、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
求该数组的最大值、最小值、总和和平均值并输出。
解:#include<stdio.h>#include<math.h>#define N 10int main(){int a[N],i,max,min,sum;float ave;for(i=0;i<N;i++){a[i]=rand()%100;}printf("array a:\n");for(i=0;i<N;i++){printf("%4d",a[i]);}printf("\n");max=a[0];min=a[0];sum=0;for(i=0;i<N;i++){sum=sum+a[i];if(a[i]>max){max=a[i];}if(a[i]<min){min=a[i];}}ave=(float)sum/N;printf("max=%d,min=%d,sum=%d,ave= %.2f\n",max,min,sum,ave);return 0;}3、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
第3章 数组(习题答案及解析)
习题3 参考答案一、选择题3.1 C 分析:本题考查程序和数组的基本概念。
3.2 A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。
因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。
C选项不正确。
C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。
3.3 A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。
3.4 D 分析:本题考察的知识点是:字符串常量。
在C语言中,字符串常量是以双引号括起来的字符序列。
因此B选项和C选项不正确。
字符序列中可包含一些转义字符,转义字符都是以"\"开头的。
A选项中包含了三个"\",前两个(\\)代表了一个"\"字符,后面一个和"""一起(\")被看作一个""",所以该字符串缺少一个结束的""",因此不正确。
D选项的两个"""之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此D选项正确。
数组练习题及答案
数组练习题及答案问题1:数组的基本操作题目:编写一个程序,实现以下功能:1. 初始化一个整型数组,大小为10,所有元素初始化为0。
2. 将数组中的元素依次设置为1到10。
3. 输出数组中的所有元素。
答案:```c#include <stdio.h>int main() {int arr[10] = {0};for (int i = 0; i < 10; i++) {arr[i] = i + 1;}for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}return 0;}```问题2:数组的反转题目:编写一个函数,实现对整数数组的反转。
答案:```cvoid reverseArray(int arr[], int size) {int start = 0;int end = size - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}```问题3:数组的查找题目:编写一个函数,实现在数组中查找特定元素的索引,如果找到返回该元素的索引,如果未找到返回-1。
答案:```cint findElement(int arr[], int size, int element) {for (int i = 0; i < size; i++) {if (arr[i] == element) {return i;}return -1;}```问题4:数组的排序题目:使用冒泡排序算法对整数数组进行排序。
答案:```cvoid bubbleSort(int arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}```问题5:数组的动态扩展题目:编写一个函数,实现对数组的动态扩展,使其能够存储更多的答案:```cvoid dynamicArrayExpansion(int *arr, int *size, int capacity, int newElement) {if (*size >= capacity) {int newCapacity = capacity * 2;int *newArr = (int *)malloc(newCapacity *sizeof(int));for (int i = 0; i < *size; i++) {newArr[i] = arr[i];}free(arr);arr = newArr;capacity = newCapacity;}arr[(*size)++] = newElement;}```结束语:这些练习题涵盖了数组的基本操作、查找、排序和动态扩展等常见问题,希望能够帮助您更好地理解和掌握数组的使用。
C语言(数组)习题与答案
一、单选题1、下列描述中不正确的是()A.字符串的结束符是B.可以对字符型数组进行整体输入、输出。
C.字符型数组中能存放字符串。
D.字符串函数声明在ctype.h中。
正确答案:D2、下面是有关C语言字符数组的描述,其中错误的是()A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组只能存放字符串D.字符数组中的内容不一定是字符串正确答案:C3、下面是对数组s的初始化操作,其中不正确的是()A.char s[5]="B.char s[5]={'a'};C.char s[5]={"a"};D.char s[5]= "abcdef";正确答案:D4、下面叙述正确的是()A.字符串“123 “与“123”相等。
B.字符串“123”小于字符串C.两个字符串所包含的字符个数不相同时,才能进行大小比较。
正确答案:BD.字符个数多的字符串比字符个数少的字符串大。
5、下面程序段的输出结果是()char a[7]=''123456w;char b[4]=〃ABC〃;strcpy(a z b);printfC'%c w z a[5]);A.\0B.C.5D.6正确答案:D6、以下对二维数组a的正确说明是一。
A.double a[l][4];B.float a(3)(4);C.floatf a(3,4);D.int a[3][];正确答案:A7、以下能对二维数组a进行正确初始化的语句是A. Int a[][3]={{l/2,3},(4,576}};B.int a⑵口={{1,0,1},{5,2,3}};C.int a ⑵[4]={{1,2,3},{4,5},{6}};D. int a[][3={{l/0/l},{},{l,l});正确答案:A8、若有说明:int a[3][4]={0};则下面正确的叙述是A.数组a中各元素都可得到初值,但其值不一定为0。
C语言习题六(数组部分)习题及答案
C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。
A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)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.若有定义:int a[10],则对数组a元素的正确引用是 D 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。
A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。
AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。
A)int a[2][]={{1,0,1},{5,2,3}} ;B)int a[][3]={{1,2,3},{4,5,6}} ;C)int a[2][4]={{1,2,3},{4,5},{6}} ;D)int a[][3]={{1,0,1},{},{1,1}} ;7.以下不能对二维数组a进行正确初始化的语句是。
CA)int a[2][3]={0} ;B)int a[][3]={{1,2},{0}} ;C)int a[2][3]={{1,2},{3,4},{5,6}} ;D)int a[][3]={1,2,3,4,5,6} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。
A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。
C语言数组作业编程题答案
1、请先用记事本创建文件original.txt,往其中写入一组已排好序的整型数,今输入一个整数,要求按原来排序的规律将它插入数中,仍写入文件。
例如:原来整数依次为4、6、8、41、56、77、102(数据间的分隔符为空格)。
若将42插入数中,则插入后整数依次为4、6、8、41、42、56、77、102。
答案:#include <stdio.h>#include <stdlib.h>void main(){int a[100];int ijnumber;int n;FILE *fp;fp=fopen("e:\\C语言\\original.txt""r");if(fp==NULL){printf("open error");exit(0);}i=0;while(!feof(fp)){fscanf(fp"%d"&a[i++]);fgetc(fp);}number=i-1; //number中存最后一个数据的下标fclose(fp);scanf("%d"&n);//以下的while循环用来找n要放的位置循环结束时正好是a[i]的位置i=0;while(n>a[i]){i++;}//for循环的功能是将a[i]到最后一个元素全后移一个位置for(j=number;j>=i;j--)a[j+1]=a[j];//将n放入找到的位置a[i]=n;number=number+1; //加入n后,元素个数增1,用来控制向文件中的写入次数fp=fopen("e:\\C语言\\original.txt""w");if(fp==NULL){printf("open error");exit(0);}//写入数据for(i=0;i<=number-1;i++)fprintf(fp"%d "a[i]);fprintf(fp"%d"a[i]); //最后一个数据后没有空格fclose(fp);}2、假定整型数组中的元素值不重复。
c语言数组考试题及答案
c语言数组考试题及答案一、选择题1. 在C语言中,数组的下标从哪个数字开始?A. 0B. 1C. 2D. 3答案:A2. 下列哪个选项是正确的数组声明?A. int arr[] = {1, 2, 3};B. int arr[5] = {1, 2, 3};C. int arr[5] = {1, 2};D. int arr[] = {1, 2, 3, 4, 5};答案:B3. 若有数组声明 int arr[5] = {1, 2, 3, 4, 5}; 则arr[2]的值是多少?A. 1B. 2C. 3D. 4答案:C二、填空题1. 假设有一个数组声明为 int arr[10] = {0}; 则arr[0]的值是______。
答案:02. 如果声明了一个数组 int arr[5] = {1, 2, 3, 4, 5}; 那么arr 数组的元素个数是______。
答案:5三、简答题1. 请简述C语言中数组的初始化方式有哪些?答案:C语言中数组的初始化方式包括:- 静态初始化:在声明数组时直接指定数组的元素值。
- 动态初始化:在声明数组后,通过循环或逐个赋值的方式初始化数组。
2. 在C语言中,如何访问数组的最后一个元素?答案:可以通过数组的长度减去1来访问数组的最后一个元素,例如对于数组arr,访问最后一个元素的方式是arr[arr.length - 1]。
四、编程题1. 编写一个C语言程序,实现将一个整数数组按照从大到小的顺序排序。
答案:```c#include <stdio.h>void sortDescending(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] < arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {4, 2, 3, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);sortDescending(arr, n);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```该程序首先定义了一个排序函数sortDescending,它使用冒泡排序算法将数组从大到小排序。
数组编程习题解答
7. 字符串复制
ch1 a p p l e \0
ch2 a p p l e \0
char ch1[80], ch2[80]; int i; for(i=0; i<80; i++) ch2[i]=‘ ’ ; gets(ch1); i=0; do {ch2[i]=ch1[i];} while (ch1[i]);
#include<stdio.h> #define n 20 void main(){ int a[n], i, max, min; printf( "please input "); printf( "%d integers: ", n); for( i=0; i<n; i++) scanf( "%d", &a[i] ); for( i=0; i<n; i++)
}
#include<stdio.h> #define n 10 void main(){ int a[n], i, temp ; printf( "please input "); printf( "%d integers: ", n); for( i=0; i<n; i++) scanf( "%d", &a[i] ); printf( "交换之前 "); for( i=0; i<n; i++) printf( "%4d", a[i] ); printf( "\n"); for ( i = 0; i<n/2; i++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else if(ch[i][j]>=‘0' && ch[i][j] <= else if(ch[i][j] ==‘ ' ) blank++;
else others++;
6.打印以下图案:
***** ***** ***** ***** *****
Ch * * * * *** *****
数组编程讲解
2.求一个3*3的整型矩阵对角线之和
对角线元素怎样描述?
a[i][i]
int sum=0 , i , a[3][3]; for(i = 0; i< 3; i++) { sum=sum+ a[i][i] ; }
牰湩晴?对角线之和=m , sum);
3. 输入一个数, 将其插入到一个已排好序的数组中 , 使得原 数组依然按原序有序。
main()
{ int a[10]={5, 12, 39, 60}, i, x;
scanf(%d, &x); for(i=3; i>=0; i--)
if ( x>= a[i] ) break; else a[i+1] = a[i];
a[i+1] = x;
for ( i=0;i<10 ; i++)
printf(m, a[i] );
gets(ch1); i=0;
do {ch2[i]=ch1[i];} while (ch1[i]);
习题
1. 将10个整数放到一维数组中,并按从 大到小排序。
1. 定义一个一维整数数组 : char a[10];
2. 输入10个整数: 牰湩晴尨请输入 10个整数 :\n);
for(i=0;i<10;i++) scanf(%d,&a[i]);
#include<stdio.h> #define n 20 void main(){
int a[n], i, max, min;
printf( please input ); printf( %d integers: , n);
for( i=0; i<n; i++) scanf( % d, &a[i] );
printf(\ ); }
2. 将20个整数放到一维数组中,输出该数 组中的最大值和最小值。
① 定义一个一维整数数组 : char a[20];
② 输入20个整数: 牰湩晴尨请输入 20个整数 :\n);
for(i=0;i<20;i++) scanf(%d,&a[i]);
③ 找出数组 a 中的最大值和最小值:
程序:
for( i=0; i<n-1; i++) {
#include<stdio.h>
p=i;
#define n 10 void main() {
int a[n], i, j, p, med;
for ( j = i+1; j<n; j++)
if ( a[ j]>a[ p] ) p=j;
if( p!=i){
③ .找出数组 a 中的最大值和最小值:
?设: ?max 中存放最后找到的最大值; ?min 中存放最后找到的最小值;
?不妨设: max=a[0];min=a[0]; ?for ( i = 0; i<20; i++)
if ( a[ i]>max ) max=a[i]; else if( a[ i]<min) min=a[ i];
}
4. 将一个数组中的值按逆序存放。
原序 09 81 27 36 45 54 63 27 18 09
逆序
98 76543210
? for ( i=0 ; i< 10/2 ; i++)
?
{
temp=a[i];
?
a[i]=a[n-1-i];
?
a[n-1-i]=te为mp数; 组} 元/素*的n个数。
for( i=0; i<n; i++)
if ( a[ i]>max ) max=a[i];
else if( a[ i]<min) min=a[ i];
printf( the largest number is m\n, max); printf( the least number is m\n, min); }
med=a[ i]; a[ i]=a[ p]; a[ p]=med; }
printf( please input ); printf( %d integers: , n); for( i=0; i<n; i++)
scanf( %d, &a[i] );
for( i=0; i<n; i++)
printf(m, a[i]);
3. 将15个整数放到一维数组中,输出该数 组中的最大值它的下标。然后将它和数组 中的最前面的元素对换。
5. 有一篇文章, 有三行文字, 每行有80 个字符。要求统计出其 中英文大写字母、小写字母、数字、空格以及其他字符的个数
1. 三行文字的存放方式:
v
二维字符数组-〉ch[3][80];
2. 各类字符的个数变量:
v 大写英文字母的个数:uppercase
v 小写英文字母的个数:small _letter
3. 对数组 a 进行排序: ? 因题目未指定排序方法,所以, 可以使用任何方法排序。
对数组 a 进行排序(选择法)
for( i=0; i<n-1; i++) { p=i;
for ( j = i+1; j<n; j++) if ( a[ j]>a[ p] ) p=j;
if( p!=i){ med=a[ i]; a[ i]=a[ p]; a[ p]=med; }
for(i=0; i<5; i++) { for( j=0;j<i; j++) putchar(‘ '); puts(ch); putchar(‘\n');
}
7. 字符串复制
ch1 a p p l e \0
ch2 a p p l e \0
char ch1[80], ch2[80];
int i;
for(i=0; i<80; i++) ch2[i]=‘ ' ;
v 数字个数:digit
v 空格个数:blank
v 其他字符个数:others
处理方式:
for(i=0;i<3;i++)
for(j=0;j<80;j++)
if(ch[i][j]>=‘A' && ch[i][j] <= ‘Z' ) u else if(ch[i][j]>=‘a' && ch[i][_j] <= ‘