一维数组练习题
一维数组练习.doc

基本练习:(釆用文件输入输岀)1.输入一串小写字母(以〃.〃为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出),例:输入:aaaabbbccc.输出:a:4b:3c: 3规定:文件名:tongji. pas 输出文件:tongji. in输出文件tongji. out程序:var a:array/ z" ] of integer;n:char;beginassign (input, ' tongji,in' );reset (input);assign(output,' tongji. out' );rewrite(output);read (n);while n〈>'.' dobegininc (a[n]);read(n);end;for n:=,a" to,z‘ doif a[n]<>0 then writeln(n,J :,, a[n]);close (input);close (output);end.2.输入一个不大于32767 (integer)的正整数N,将它转换成一个二进制数,例如:输A: 100 输出:1100100规定:文件名:erjinzhi. pas 输出文件:erjinzhi. in输出文件erjinzhi. out程序:vara:array[L . 16] of integer;b, c, d, e: integer;beginassign (input,' erjinzhi. in');reset(input);assign(output,' erjinzhi. out');rewrite(output);readln(b);if b>=0 then write(b,)else write(b,'= -');b:=abs(b);d:=0;while b>0 dobegininc(d);a[d]:=b mod 2;b:=b div 2;end;for e:=d downto 1 do write(a[ej);writein;readln;close (input);close(output);end.提高练习:(釆用文件输入输岀)火3.输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数,例如:输入:1 10 85932674输出:6对应的递增或递减子序列为:1 1010 8 55 99 3 22 6 77 4规定:文件名:geshu. pas 输出文件:geshu. in输出文件geshu. out【拓展】fuctionkeytype:Boolean;beginif keytype then ......【检测任意键回车出外)】程序:label 1, 3, 4;varc:array[1..10] of longint;y, b, i:longint;a, al:boolean;beginassign(input,' geshu. if);reset (input); assign(output,' geshu. out');rewrite(output); writ eC Please in put 10 numbers:,);for i:=l to 10 do read(c[i]);y: —0; b:=1; i: —0;3:if c[b]>c[b+l] thenbegina:=true;dec (b);l:inc (b);while b<ll dobeginif b=10 then begin inc(y) ; break; end;if c[b]>c[b+l] thenbeginal:=true;if al=a then goto 1endelsebegininc (y);goto 3;end;end;endelsebegina:二false;dec (b);4:inc (b);wh订e b<ll dobeginif b=10 then begin inc(y) ; break; end;if c[b]〈c[b+l] thenbeginal:=false;if al=a then goto 4;endelsebegininc(y);goto 3;end;end;end;writein('Then answer is y);close (input);close(output);end.*4.输入N个数,将这N个数按从小到大的顺序显示出來;规定:文件名:paixu. pas 输出文件:paixu. in输出文件paixu. outvara:array[1.. 100000000] of integer;b, c, d, i, z:longint;beginassign (input,' paixu.in,):reset(input);assign (output,,paixu. out");rewrite(output);readln(i); //读入输入个数for i:=l to i do read(a[i]); //循环读入,放入数组for c:=1 to i dobeginfor b: = (c+l) to i do beginif a[c]>a[b] thenbegina[c]:二a[c] xor a[b];a[b]:=a[c] xor a[b];a[c]:=a[c] xor a[b];end;end;end;for z:=l to i dowrite(a[z],'');close (input);close(output);end.猴子选大王;有"只猴子围成一圈,每只猴子各一个从1到N中的依次编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到M的猴子出圈,最后剩下來的就是大王。
一维数组练习题

一维数组练习题题目一:数组元素反转描述:给定一个整数数组,将数组中的元素反转并输出。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中的元素,按照逆序输出。
解答:题目二:查找数组中的最大值和最小值描述:给定一个整数数组,找出数组中的最大值和最小值,并输出。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中的最大值和最小值。
解答:题目三:计算数组的和与平均值描述:给定一个整数数组,计算数组中所有元素的和及平均值,并输出结果。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中所有元素的和及平均值,结果保留两位小数。
解答:题目四:数组去重描述:给定一个整数数组,去除数组中的重复元素,并输出结果。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出去除重复元素后的数组。
解答:题目五:数组元素排序描述:给定一个整数数组,对数组中的元素进行排序,并输出结果。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出排序后的数组。
解答:题目六:数组元素查找描述:给定一个整数数组和一个目标值,判断目标值是否存在于数组中,并输出结果。
要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输入一个整数作为目标值;4. 若目标值存在于数组中,则输出"目标值存在于数组中",否则输出"目标值不存在于数组中"。
解答:以上为一维数组练习题的题目描述及解答,请根据题目所需完成相应的练习。
一维 数组 练习 参考

试验六一维数组一、基础能力落实:二、1)编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为2的前8次幂,然后打印出他们的值。
使用for循环来设置值;为了变化,使用do while 循环来显示这些值。
2)#include <stdio.h>#define SIZE 8int main( void ){int s[SIZE]={1};int i;for (i = 1; i < SIZE; i++){s[SIZE] = 2 * s[SIZE-1];}i = 0;do{printf("%d ", s[i++]);} while (i < SIZE);printf("\n");return 0;}2)将下列数组中的值逆序存放。
s[8]={3, 6, 11, 8, 4, -3, 0, 2}.#include<stdio.h>#define N 8int main(){int s[8]={3,6,11,8,4,-3,0,2};int i=0, j=N-1, swap;while(i<j);{swap=a[i];a[i]=a[j];a[j]=swap;i++;j--;}for(i=0;i<N;i++){printf(“%d ”,a[i])}printf(“\n”);return 0;}三、进阶能力落实:四、1)编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值,程序把第二个数组的元素设置为第一个数组元素的累积和,例如,第二个数组的第4个元素应该等于第1个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和,最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。
#include <stdio.h>#define SIZE 8int main(void){double arr[SIZE];double arr_cumul[SIZE];int i;printf("Enter %d numbers:\n", SIZE);for (i = 0; i < SIZE; i++){printf("value #%d: ", i + 1);scanf("%lf", &arr[i]);/* or scanf("%lf", arr + i); */}arr_cumul[0] = arr[0]; /* set first element */for (i = 1; i < SIZE; i++)arr_cumul[i] = arr_cumul[i-1] + arr[i];for (i = 0; i < SIZE; i++)printf("%8g ", arr[i]);printf("\n");for (i = 0; i < SIZE; i++)printf("%8g ", arr_cumul[i]);printf("\n");return 0;}2)编写程序实现功能:输入两个字符串,求出这两个字符串的长度,比较两个字符串的大小,将第二个字符串接到第一个字符串后面,然后再将第一个字符串拷贝到第二个字符串中。
一维数组习题

一维数组【例1】输入50个数,要求程序按输入时的逆序把这50个数打印出来;也就是说,请你按输入相反顺序打印这50个数分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出,源程序如下program ex5_1;typearr=array[1..50]of integer; {说明一数组类型arr}vara:arr;i:integer;beginwriteln('Enter 50 integer:');for i:=1 to 50 do read(a[i]);{从键盘上输入50个整数}readln;for i:=50 downto 1 do {逆序输出这50个数}write(a[i]:10);end.【例2】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的―简单选择排序‖是一种较简单的方法)分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的,则与之交换,比较结束后,则第一个数已是最大的数。
同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。
如此方法进行比较,最后一次,将第九个数与第十个数比较,以决定次小的数。
于是十个数的顺序排列结束。
例如下面对5个进行排序,这个五个数分别为829105。
按选择排序方法,过程如下:初始数据:82910 5第一轮排序:82910 592810 510289 510289 5第二轮排序:10829 510928 510928 5第三轮排序:10982 510982 5第四轮排序:10985 2对于十个数,则排序要进行9次。
源程序如下:program ex5_2;vara:array[1..10]of integer;i,j,t:integer;beginwriteln('Input 10 integers:');for i:=1 to 10 do read(a[i]);{读入10个初始数据}readln;for i:=1 to 9 do{进行9次排序}beginfor j:=i+1 to 10 do{将第i个数与其后所有数比较}if a[i]<a[j] then {若有比a[i]大,则与之交换}begint:=a[i];a[i]:=a[j];a[j]:=t;end;write(a[i]:5);end;end.【例3】从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。
一维数组练习题

维数组练习题1 、以下对一维数组 a 进行正确初始化的是 ____________A) int a[10]=(0,0,0,0,0);C) int a[ ]={0}; B) int a[10]={ };D) inta[10]={ 10*2};2 、以下一维数组 a 的正确定义是_________ 。
A) int a(10); B) int n=10,a[n];C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE];int a[n];3 、执行下面的程序段后 , 变量 k 中的值为 __________ 。
int k=3,s[2];s[0]=k;k=s[1]*10;A) 不定值B) 33C) 30 D) 104 、下列程序执行后的输出结果是main(){int a,b[5];a=0; b[0]=3;printf("%d,%d\n",b[0],b[1] );A) 3,0C) 0,3 }B) 3 0D) 3, 不定值5、已知数组a的赋值情况如下所示,则执行语句a[2]++; 后a[1]和a[2]的值分别是_______________ 。
a[0] a[1] a[2] a[3]a[4]10 | 20 | 30 | 40 | 50|A) 20 和 30 C) 21 和 30 B) 20 和 31 D) 21 和 316、以下程序输出 a 数组中的最小值及其下标,在划线处应填入的是 _____________ main( ){ int i,p=0,a[10];for(i=0;i<10;i++) scanf("%d",&a[i]);for(i=1;i<10;i++)if(a[i]<a[p]) ____________ ;printf("%d,%d\n",a[p],p);A) i=p C) p=j ,并输出低于平均分的学生B) a[p]=a[i]D) p=i7 、以下程序的输出结果是 ________ 。
一维数组习题

10、用插入法对输入的10个整数按由小到大的顺序排列。
main() x[j]=t { int x[10],j,k,l,t,flag; flag=0 for(j=0;j<10;j++) {scanf("%d",&t); x[l+1]=x[l] if(j==0) ; else { for(flag=1,k=0;k<j&&flag;k++) if(x[k]>t) ; if(flag) x[j]=t; else { for(l=j-1;l>=k-1;l--) ; x[k-1]=t; } }} for(j=0;j<10;j++) { printf("%6d",x[j]); if((j+1)%5==0) printf("\n"); } }
j+1 j- ++j n++
12.将两个升序数列归并后仍为升序数列。 main() { int a[10]={1,2,5,8,9,10},an=5; a[j] int b[10]={1,3,4,8,12,18},bn=5; j++ int j,k,l,c[20],max=9999; b[k] a[an+1]=b[bn+1]=max; k++ j=k=l=0; while(a[j]!=max||b[k]!=max) if (a[j]<b[k]) { c[l]= ; l++; ; } else { c[l]= ; l++; ; } for(j=0;j<l;j++) printf("%4d",c[j]); }
一维数组的例题

printf("the location =%d\n",i); } else {
printf("not found!\n"); } } 题 8 删除指定数据 /* arrayDelet1.c 在一个数组中找到指定数据,然后将后面的数前移
*/ #include <stdio.h> main() {
double x[]={10,20,50,9,8,100,2,18},tmp=0; double y[]={10,20,50,9,8,100,2,18}; int i=0,n=0,j=0; n=sizeof(x)/sizeof(double); printf("before sort:\n"); for (i=0;i<n;i++) printf("%6.1lf ",x[i]); //将小的数不断往前滚,则小的到前面去了,大的到了后面 for (i=0;i<=n-2;i++) //0-n-2 轮 {
//每轮将 0 到 for (j=0;j<n-i-1;j++) {
if (x[j]<x[j+1])//如果小的在左边则换到右边 {
tmp=x[j]; x[j]=x[j+1]; x[j+1]=tmp; } } } printf("\nafter sort big-->small:\n"); for (i=0;i<n;i++) printf("%6.1lf ",x[i]); //将大的数不断往后滚,则大的到后面去了,小的到了前面 //注意:对 y 排序 for (i=0;i<=n-2;i++) //滚的轮数 0-n-2 { for (j=0;j<n-i-1;j++) //从 0 到已经排好序的前一个 { if (y[j]>y[j+1]) //找一个极端的样例 i=0 时想想 { tmp=y[j];y[j]=y[j+1];y[j+1]=tmp; } } } printf("\nafter sort small-->big:\n"); for (i=0;i<n;i++) printf("%6.1lf ",y[i]); } 题 5 冒泡法 /* 将小的数不断往前滚,则小的到前面去了,大的到了后面,低到高 将大的数不断往前滚,则大的到前面去了,小的到了后面,高到低 所以后滚既可实现高到低,也可实现低到高 */ #include <stdio.h> main() {
一维数组习题

一维数组习题一、选择题1、对定义“int a[2];”的正确描述是()。
A、定义一维数组a,包含a[1]和a[2]两个元素B、定义一维数组a,包含a[0]和a[1]两个元素C、定义一维数组a,包含a[0]、a[1]和a[2]三个元素D、定义一维数组a,包含a(0)、a(1)和a(2)三个元素2、以下数组的定义中,合法的是()。
A、int x(3);B、int x[3]C、int x[2+1];D、int n=3,[n];3、以下数组的初始化中,正确的是()。
—A、char s[]={‘a’,’b’};B、char s[2]={‘a’,’b’,’c’};C、char s(2)={‘a’,’b’};D、char s={‘a’,’b’,’c’};4、以下初始化中,能够将各初始值正确赋给a数组元素的是()。
A、int a[3]={1,2};B、int a[3]={,2,};C、int a[3]={1,5,4,12};D、int a(3)={1,5};5、以下对一维数组的定义中,正确的是()。
A、#define MAX 5B、int MAX=5;int a[MAX]; int a[MAX];C、int MAX;D、#define MAX 5;scanf(“%d”,&MAX); int a[MAX];。
int a[MAX];6、若有初始化“float a[]={1,2,3,4,5};”,则以下叙述中错误的是()。
A、因所提供的初值都是整数,与数组类型不一致,所以出现错误B、a数组在内在中占据20个字节C、a数组中的最后一个元素是a[4]D、元素a[2]的值是7、若有初始化“int a[5]={1,2,3,4,5};”,则值为4的表达式是()。
A、a[4]B、a[a[2]+1]C、a[a[2]]D、a[3]+18、若有初始化语句“int a[]={1,2,3,4,5,6,7,8,9,10};”,则对a数组元素的错误引用是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维数组练习题
1、以下对一维数组a进行正确初始化的是__________。
A) int a[10]=(0,0,0,0,0); B) int a[10]={ };
C) int a[ ]={0}; D) int a[10]={ 10*2};
2、以下一维数组a的正确定义是________ 。
A) int a(10); B) int n=10,a[n];
C) int n; D) #define SIZE 10
scanf("%d",&n); int a[SIZE];
int a[n];
3、执行下面的程序段后,变量k中的值为__________。
int k=3,s[2];
s[0]=k; k=s[1]*10;
A) 不定值B) 33
C) 30 D) 10
4、下列程序执行后的输出结果是__________。
main()
{int a,b[5];
a=0; b[0]=3;
printf("%d,%d\n",b[0],b[1]); }
A) 3,0 B) 3 0
C) 0,3 D) 3,不定值
5、已知数组a的赋值情况如下所示,则执行语句a[2]++;后a[1]和a[2]的值
分别是________。
a[0] a[1] a[2] a[3] a[4]
┌──┬──┬──┬──┬──┐
│ 10 │ 20 │ 30 │ 40 │ 50 │
└──┴──┴──┴──┴──┘
A) 20和30 B) 20和31
C) 21和30 D) 21和31
6、以下程序输出a数组中的最小值及其下标,在划线处应填入的是________。
main( )
{ int i,p=0,a[10];
for(i=0;i<10;i++) scanf("%d",&a[i]);
for(i=1;i<10;i++)
if(a[i]<a[p])_______________;
printf("%d,%d\n",a[p],p);
}
A) i=p B) a[p]=a[i]
C) p=j D) p=i
7、以下程序的输出结果是________。
main( )
{ int i,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2};
for(i=1;i<10;i++)
if(a[i]<a[p]) p=i;
printf("%d,%d\n",a[p],p);
}
A) -3,4 B) 0,1
C) 9,2 D) 2,9
8、有如下说明:
int a[10]={0,1,2,3,4,5,6,7,8,9};
则数值不为9的表达式是________。
A) a[10-1] B) a[8]
C) a[9]-0 D) a[9]-a[0]
9、有如下程序
main()
{ int n[5]={0,0,0},i,k=3;
for(i=0;i<k;i++) n[i]=i+1;
printf("%d\n",n[k]);
}
该程序的输出结果是________。
A) 不确定的值B) 4
C) 2 D) 0
10、以下程序的输出结果是________。
main()
{ int i,x[9]={9,8,7,6,5,4,3,2,1};
for(i=0;i<4;i+=2) printf("%d ",x[i]);
}
A) 5 2 B) 5 1
C) 5 3 D) 9 7
11、以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,当输入负数时结束。
划线处应分
别填入_________。
main()
{ float x[1000],sum=0.0,ave,a; int n=0,i;
printf("Enter mark:\n"); scanf("%f",&a);
while(a>=0.0 && n<1000)
{ sum+=______; x[n]=a;
scanf("%f",&a);
}
ave=________;
printf("Output :\n");
printf("ave=%f\n",ave);
for(i=0;i<n;i++)
if(x[i]<ave) printf("%f\t",x[i]);
}
A) a和sum/n B) x[n]和sum/n
C) a和sum/i D) a和sum/1000
12、下面程序的输出结果是________。
main()
{ int a[]={1,8,2,8,3,8,4,8,5,8};
printf("%d,%d\n",a[4]+3,a[4+3]);
}
A) 6,6 B)8,8
C) 6,8 D)8,6
13、如有定义语句int a[]={1,8,2,8,3,8,4,8,5,8}; ,
则数组a的大小是________。
A) 10 B) 11
C) 8 D) 不定
14、下面程序的输出是________。
main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",a[a[1]*a[2]]);
}
A) 3 B) 4
C) 7 D) 2
15、以下程序输出的结果是________。
#include <stdio.h>
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);
}
A) s=12345 B) s=1 2 3 4 5
C) s=54321 D) s=5 4 3 2 1
16、以下程序输出的结果是________。
#include <stdio.h>
{ int a[ ]={1,2,3,4,5},i,j,s=0;
for(i=0;i<5;i++) s=s*10+a[i];
printf("s=%d\n",s);
}
A) s=12345 B) s=1 2 3 4 5
C) s=54321 D) s=5 4 3 2 1
17、以下程序运行,如果从键盘上输入4<回车>,则输出结果是________ 。
#include <stdio.h>
main( )
{int a[20]={1,2,3,4,5,-1,-2,-3,-4,-5,1,2,3,4,5,-1,-2,-3,-4,-5};
int i,m,n,f=0;
scanf("%d",&n);
for(i=0;i<20;i++)
if(a[i]==n) { f=1;m=i; }
if(f!=0) printf("%d,%d\n", n,m+1);
else printf(" %d not found !\n",n);
}
A) 4,4 B) 4,14
C) 4,5 D) 4,15
18、下面程序运行后,输出结果是________。
#include <stdio.h>
main( )
{ int a[10]={1,2,3,4,5,6},i,j;
for(i=0;i++<3;)
{ j=a[i];a[i]=a[5-i];a[5-i]=j;}
for(i=0;i<6;i++) printf("%d ",a[i]);
}
A) 6 5 4 3 2 1 B) 1 2 3 4 5 6
C) 1 5 4 3 2 6 D) 1 5 3 4 2 6。