一维数组习题

合集下载

第六~八章 概念练习题-附参考答案

第六~八章 概念练习题-附参考答案

第六~第八章基本概念练习题第6章数组一、选择题。

1. 以下对一维数组a的正确定义是:A)char a(10);B) int a[];C)int k=5,a[k];D)char a[3]={‘a’,’b’,’c’};2.以下能对一维数组a进行初始化的语句是: ( )A. int a[5]=(0,1,2,3,4,)B. int a(5)={}C. int a[3]={0,1,2}D. int a{5}={10*1};3.在C语言中对一维整型数组的正确定义为。

A)int a(10); B)int n=10,a[n];C)int n;a[n]; D)#define N 10int a[N];4. 若二维数组a有m列,则在a[i][j]之前的元素个数为A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1*5. 下列说法中错误的是A 构成数组的所有元素的数据类型必须是相同的B 用指针法引用数组元素允许数组元素的下标越界C 一维数组元素的下标依次是1、2、3……·D 定义数组时的长度可以是整型常量表达式6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A) 3 B) 6 C) 10 D) 207.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )A. 2B. 3C. 4D.无确定值8.以下定义语句中,错误的是( )A) int a[]={1,2}; B) char *a;C) char s[10]=“test”; D) int n=5,a[n];9.下面程序段的输出结果是: ( )int i;、int x[3][3]={1,2,3,4,5,6,7,8,9};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 9二.分析题。

C语言习题集合4(数组)

C语言习题集合4(数组)

第四部分数组4.1 选择题1. 以下关于数组的描述正确的是( )。

A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组a的正确说明是( )。

<a(10); B. int n=10,a[n];n; D. #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。

A. 整型常量B. 整型表达式C. 整型常量或整型表达式;D. 任何类型的表达式4. 以下对一维数组m进行正确初始化的是( )。

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]的地址的是( )。

A. &bb[0]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )。

A. 3B. 6C. 10D. 20,7. 若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;则数值为4的表达式是( )A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c]8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。

#include<>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中的值为( )。

一维数组练习题

一维数组练习题

一维数组练习题题目一:数组元素反转描述:给定一个整数数组,将数组中的元素反转并输出。

要求: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. 若目标值存在于数组中,则输出"目标值存在于数组中",否则输出"目标值不存在于数组中"。

解答:以上为一维数组练习题的题目描述及解答,请根据题目所需完成相应的练习。

C语言程序设计第六章数组习题及答案

C语言程序设计第六章数组习题及答案

1.以下对一维整型数组a的定义,正确的是_。

(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。

(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。

(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。

(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。

(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。

(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。

(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。

一维数组练习题

一维数组练习题

维数组练习题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 、以下程序的输出结果是 ________ 。

数组复习题

数组复习题

1.输入10个数,存入一维数组,求10个数的最大值
2.把一个不多于5位的整数分解,存到一维数组中,对这个一维数组的数据
按照从小到大的顺序排序。

3.有个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入
数组中。

4.将一个数组中的值按逆序重现存放。

5.建立一个3*4行矩阵,输入数据,求其中的正数、负数、零的个数,并且
输出矩阵,同时输出正数、负数、零的个数。

6.有一篇文章,共有3行文字,每行有80个字符。

要求分别统计出其中英
文大写字母、小写字母、数字、空格以及其他字符的个数。

7.有10个学生,5门课,输入这10个学生的成绩,求各门课的平均分以及
每个学生的总分。

(要求平均分和总分用一维数组保存)
8.建立一个3*4行矩阵,输入数据,求其中的正数、负数、零的个数,并且
输出矩阵,同时输出正数、负数、零的个数。

9.有一个4*5的矩阵,求素数的个数
10.有一篇文章,共有3行文字,每行有80个字符。

要求分别统计出其中英
文大写字母、小写字母、数字、空格以及其他字符的个数。

C语言程序设计 练习题参考答案 第四章 (1) 一维数组

C语言程序设计 练习题参考答案 第四章 (1) 一维数组
printf("%4d",a[i]);
printf("\n请输入要插入的整数,输入之后按回车键,如要结束请输入-1\n");
scanf("%d",&x);
}
}
/* 4.15 将十进制数转换成二进制数,并按位存到数组中。(限正整数) */
C语言程序设计 练习题参考答案 第四章 (1) 一维数组
/* 4.11 fibonacci数列,前15项 1,1,2,3,5,。。。。。*/
#include "stdio.h"
void main()
{
int f[15]={1,1}, i;
for(i=2;i<=14;i++) /* 计算 */
f[i]=f[i-2]+f[i-1];
printf("fibonacci数列,前15项\n"); /* 输出 */
for(i=0;i<=14;i++)
{
printf("%5d",f[i]);
if((i+1)%5==0)
for(i=0;i<=9;i++)
printf("%3d",a[i]);
}
/* 4.13 有序数列中插入若干个数,仍然保持有序 */
#include "stdio.h"
void main()
{
int a[100]={1,4,8,10};
int i,k,x,count=4;/* i,k 循环变量, x 输入整数,count 有多少整数*/

C语言一维数组练习题及参考程序

C语言一维数组练习题及参考程序

4.1习题1、输入10个整数,然后将这10个整数逆序输出。

#include<stdio.h>int main(){int i;int a[10];printf("Input data: ");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("Output data: ");for(i=9;i>=0;i--) //通过下标引用顺序实现逆序printf("%d ",a[i]);return 0;}2、输入一个整数m,然后输入m个整数,存放在数组a中;再输入一个整数n,然后输入n个整数,存放在数组b中。

找出a和b两数组的非共有元素,存放在数组c中并输出。

(m和n的值不超过20)#include<stdio.h>int main(){int a[20], b[20], c[20];//假定元素值不超过20int m, n, i, j, k=0;scanf("%d", &m);for(i=0; i<m; i++)scanf("%d", &a[i]);scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &b[i]);for(i=0; i<m; i++)//找出数组a中不是共同元素的值{for(j=0; j<n; j++){if(a[i]==b[j])break;}if(j>=n)//不是共同元素{c[k]=a[i];k++;//为存放下一个元素做准备}}for(i=0; i<n; i++)//找出数组b中不是共同元素的值{for(j=0; j<m; j++){if(b[i]==a[j])break;}if(j>=m){c[k]=b[i];k++;}}for(i=0; i<k; i++)printf(" %d", c[i]);printf(“\n”);return 0;}3、输入N个整数(N定义为常量),将最小值与第一个数交换,最大值与最后一个数交换。

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

一维数组【例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个数的和,输出这个和。

program p1;vara:array [1..10] of integer;i,s:integer;beginfor i:=1 to 10 do read(a[i]);for i:=10 downto 1 do write(a[i],' ');writeln;s:=0;for i:=1 to 10 do s:=s+a[i];writeln('s=',s);end.【例4】用筛法求100以内的素数(质数)。

分析:素数是除了1和它本身以外没有其它约数的数。

用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。

把所有非0数输出。

program p2;vara:array [1..100] of integer;i,j,k:integer;beginfor i:=1 to 100 do a[i]:=i;a[1]:=0;i:=2;while i<=100 dobegink:=i;while k<=100 dobegink:=k+i;a[k]:=0;end;{————上面将所有a[i]的倍数清0}i:=i+1;while a[i]=0 do i:=i+1;{————查找接下来的第一个非0数}end;for i:=1 to 100 do if a[i]<>0 then write(a[i],' ');end.【例5】输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。

【问题分析】在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。

但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把50 个学生的成绩都保留下来,然后逐个和平均分比较,把高于平均分的成绩打印出来。

如果,用简单变量a1,a2,…,a50 存放这些数据,可想而知程序要很长且繁。

要想如数学中使用下标变量ai形式表示这50 个数,则可以引入下标变量a[i]。

这样问题的程序可写为:tot:=0; {tot表示总分}for i:=1 to 50 do {循环读入每一个学生的成绩,并累加它到总分}beginread(a[i]);tot:=tot+a[i];end;ave:=tot/50; {计算平均分}for i:=1 to 50 doif a[i]<ave th en writeln(‗No.‘,i,‘ ‗,a[i]);{如果第i个同学成绩小于平均分,则输出}而要在程序中使用下标变量,则必须先说明这些下标变量的整体―数组,即数组是若干个同名(如上面的下标变量的名字都为a)下标变量的集合。

【例6】将a数组中第一个元素移到最后数组末尾,其余数据依次往前平移一个位置。

【问题分析】为完成题目所要求的操作,其算法应该包括以下几个主要步骤:①把第一个元素的值取出入在一个临时单元temp中;②通过a[2]→a[1], a[3]→a[2], a[4]→a[3],……,a[n]→a[n-1],实现其余元素前移③将temp值送入a[n].program p6-4;const n=10;var a:array[1..n] of integer;i:integer; temp:integer;beginwriteln(‗reak',n,'datas');for i:=1 to n do read(a[i]);temp:=a[1];for i:=1 to n-1 do a[i]:=a[i+1];a[n]:=temp;writeln(‗Result:');for i:=1 to n do write(a[i]:3);end.运行结果:read 10 datas:• 1 2 3 4 5 6 7 8 9 10Result:• 2 3 4 5 6 7 8 9 10 1【例7】编程输入十个正整数,然后自动按从大到小的顺序输出。

(冒泡排序)【问题分析】①用循环把十个数输入到A数组中;②从A[1]到A[10],相邻的两个数两两相比较,即:A[1]与A[2]比,A[2]与A[3]比,……A[9]与A[10]比。

只需知道两个数中的前面那元素的标号,就能进行与后一个序号元素(相邻数)比较,可写成通用形式A[ i ]与A[ i +1]比较,那么,比较的次数又可用1~( n - i )循环进行控制(即循环次数与两两相比较时前面那个元素序号有关) ;③在每次的比较中,若较大的数在后面,就把前后两个对换,把较大的数调到前面,否则不需调换位置。

下面例举5个数来说明两两相比较和交换位置的具体情形:5 6 4 3 7 5和6比较,交换位置,排成下行的顺序;6 5 4 37 5和4比较,不交换,维持同样的顺序;6 5 4 37 4和3比较,不交换,顺序不变6 5 4 37 3和7比较,交换位置,排成下行的顺序;6 5 47 3 经过(1~(5-1))次比较后,将3调到了末尾。

经过第一轮的1~(N-1)次比较,就能把十个数中的最小数调到最末尾位置,第二轮比较1~(N-2)次进行同样处理,又把这一轮所比较的―最小数‖调到所比较范围的―最末尾‖位置;……;每进行一轮两两比较后,其下一轮的比较范围就减少一个。

最后一轮仅有一次比较。

在比较过程中,每次都有一个―最小数‖往下―掉‖,用这种方法排列顺序,常被称之为―冒泡法‖排序。

Program Exam52;const N=10;Var a: array[1..N] of integer; {定义数组}i,j: integer;procedure Swap(Var x,y: integer); {交换两数位置的过程}Var t:integer;begint:=x; x:=y; y:=tend;Beginfor i:=1 to N do {输入十个数}beginReadln(a[ i ])end;for j:=1 to N-1 do {冒泡法排序}for i:=1 to N-j do {两两相比较}if a[ i ] < a[i+1] then swap(a[ i ], a[i+1]); {比较与交换}for i:=1 to N do {输出排序后的十个数}write(a[ i ]:6);Readlnend.【例8】用筛法求出100以内的全部素数,并按每行五个数显示。

【问题分析】⑴把2到100的自然数放入a[2]到a[100]中(所放入的数与下标号相同);⑵在数组元素中,以下标为序,按顺序找到未曾找过的最小素数minp,和它的位置p(即下标号);⑶从p+1开始,把凡是能被minp整除的各元素值从a数组中划去(筛掉),也就是给该元素值置0;⑷让p=p+1,重复执行第②、③步骤,直到minp>Trunc(sqrt(N)) 为止;⑸打印输出a数组中留下来、未被筛掉的各元素值,并按每行五个数显示。

用筛法求素数的过程示意如下(图中用下划线作删去标志):① 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {置数}② 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被2整除的数}③ 2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被3整除的数}……2 3 4 5 6 7 8 9 10 11 12 13 14 15…98 99 100 {筛去被整除的数}Program Exam53;const N=100;type xx=1 .. N; {自定义子界类型xx(类型名)}Var a: array[xx] of boolean; i,j: integer;BeginFillchar(a,sizeof(a),true);a[1] := False;for i:=2 to Trunc(sqrt(N)) doif a[I] thenfor j := 2 to N div I doa[I*j]:= False;t:=0;for i:=2 to N doif a[i] thenBeginwrite(a[ i ]:5); inc(t);if t mod 5=0 then writelnend;End.练习1、国际象棋盘中,第1 格放1 粒米,第2 格放2 粒米,第3格放4 粒米,第4 格放8 粒米,第5 格放16粒米,......问:16个格子总共可以放多少粒米?分析:第i个格子可放多少粒米:2i–12、输出斐波列契数列的前N项(5个1行)0 1 1 2 3 5 8 13 21 ..........3、输入N个整数,找出最大数所在位置,并将它与第一个数对调位置。

相关文档
最新文档