数组测试题
- 格式:doc
- 大小:41.50 KB
- 文档页数:4
1、以下定义语句中,错误的是________。
A) int a[]={1,2}; B) char a[]={"test"};C) char s[10]={"test"}; D) int n=5,a[n];D一维数组的定义方式:类型说明符数组名[常量表达式]常量表达式中可以包括常量和符号常量,但不能包含变量。
2、以下对一维数组a进行正确初始化的是__________。
A) int a[10]=(0,0,0,0,0); B) int a[10]={ };C) int a[ ]={0}; D) int a[10]={ 10*2};C1.在定义数组时对数组元素赋以初值。
2. 可以只给一部分元素赋值。
3. 如果想使一个数组中全部元素值为0,可以写成:int a[10]={0,0,0,0,0,0,0,0,0,0};或int a[10]={0};4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度,系统根据后面花括号里的数据决定数组的长度。
3、以下对二维数组a进行正确初始化的是__________。
A) int a[2][3]={ {1,2},{3,4},{5,6} };B) int a[ ][3]={1,2,3,4,5,6 };C) int a[2][ ]={1,2,3,4,5,6};D) int a[2][ ]={ { 1,2},{3,4}};B4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
可以用下面4种方法对二维数组初始化:1.分行给二维数组赋初值。
2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
3.可以对部分元素赋初值。
4、在定义int a[5][4]; 之后,对a的引用正确的是________。
A) a[2][4] B) a[1,3]C) a[4][3] D) a[5][0]C在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。
C语言程序设计_单元测试题三本单元包含“数组、函数”的内容。
一、选择题1.以下为一维整型数组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];2.以下对二维数组a的正确说明是________.A)int a[3][]; B)float a(3,4);C)double a[1][4] D)float a(3)(4);3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.(假设a[0][0]位于数组的第一个位置上。
)A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+14.若二维数组a有m列,则在a[i][j]前的元素个数为________.A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+15.25.若有以下程序段: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;}... ...则该程序段的功能是_________.A)对数组a进行插入排序(升序) B)对数组a进行插入排序(降序)C)对数组a进行选择排序(升序) D)对数组a进行选择排序(降序)6.有两个字符数组a、b,则以下正确的输入语句是_______.A)gets(a,B); B)scanf("%s%s",a,B);C)scanf("%s%s",&a,&B); D)gets("a"),gets("b");7.下面程序段的运行结果是_________.char a[7]="abcdef";</P< p>char b[4]="ABC";strcpy(a,B);printf("%c",a[5]);A)空格B)\0 C)e D)f8.判断字符串s1是否大于字符串s2,应当使用_______.A)if(s1>s2) B)if(strcmp(s1,s2))C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔,请选择填空。
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个进行比较,并进行交换。
第一章测试试题参考答案一、单选题1.一个数组元素a[i]与____A____的表示等价。
A、*(a+i)B、a+iC、*a+iD、&a+i2.下面程序段的时间复杂度为____C________。
for(int i=0; i<m; i++)for(int j=0; j<n; j++) a[i][j]=i*j;A、O(m2)B、O(n2)C、O(m*n)D、O(m+n)3.执行下面程序段时,执行S语句的次数为_____D_____。
for(int i=1; i<=n; i++)for(int j=1; j<=i; j++) S;A、n2B、n2/2C、n(n+1)D、n(n+1)/24.下面算法的时间复杂度为______B______。
int f( unsigned int n ){ if ( n==0 || n==1 ) return 1; else return n*f(n-1); }A、O(1)B、O(n)C、O(n2)D、O(n!)二、填空题1.数据的逻辑结构被分为__集合__、___线性结构__、_树形结构_和____图状结构_四种。
2.数据的存储结构被分为_顺序存储结构___和_____链式存储结构_____两种。
3.在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着__一对一___、___一对多_____和__多对多__的联系。
4.一种抽象数据类型包括__数据模型(数据对象及数据关系)_和_该模型上的操作两个部分。
5.当一个形参类型的长度较大时,应最好说明为_指针或引用型____,以节省参数值的传输时间和存储参数的空间。
6.当需要用一个形参访问对应的实参时,则该形参应说明为__指针或引用型___。
7.在函数中对引用形参的修改就是对相应__实参___的修改,对__值型__形参的修改只局限在该函数的内部,不会反映到对应的实参上。
8.一个数组a所占有的存储空间的大小即数组长度为___sizeof(a)____,下标为i的元素a[i]的存储地址为__a+i______,或者为____a+i*sizeof(a[0])___。
第五章数组一、单项选择1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C)2.下列选项中,能正确定义数组的语句是( D)3.下面是有关C语言字符数组的描述,其中错误的是( D)4.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( C)#include<stdio.h>int main(){ char a[30],b[30];scanf("%s",a);gets(b);printf("%s\n %s\n",a,b);return 0;}5.以下选项中正确的语句组是( D)6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )7.以下数组定义中错误的是( A)8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A )9.有以下程序,程序运行后的输出结果是( C)#include <stdio.h>#include <string.h>int main(){char x[]="STRING";x[0]='0';x[1]='\0';x[2]=0;printf("%d %d\n",sizeof(x),strlen(x));return 0;10.有以下程序,程序运行后的输出结果是( B )#include <stdio.h>#include <string.h>int main(){char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;strcat(a,b); printf(“%s\n”,a);return 0;二、程序设计1./* 编写程序,实现矩阵(3行3列)的转置(即行列互换)。
零起点学算法80——逆序输出(数组练习)Time Limit:1000MS Memory Limit:65536KTotal Submit:2994 Accepted:1369Description数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组数组类型说明在C语言中使用数组必须先进行类型说明。
数组说明的一般形式为:类型说明符数组名[常量表达式],……;其中,类型说明符是任一种基本数据类型或构造数据类型。
数组名是用户定义的数组标识符。
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例int a[10]; 说明整型数组a,有10个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch,有20个元素。
Input多组测试数据。
第一行输入一个整数T表示测试数据组数每组首先输入1个整数n,然后输入n个整数(不大于20)Output对于每组测试数据按照输入相反的顺序输出n个数据Sample Input231 2 352 3 1 4 5Sample Output3 2 15 4 1 3 2Source零起点学算法81——找出数组中最大元素的位置(下标值)Time Limit:1000MS Memory Limit:65536KTotal Submit:4376 Accepted:1535Description找出数组中最大的元素的下标。
Input多组测试,每组先输入一个不大于10的整数n然后是n个整数Output输出这n个整数中最大的元素及下标值Sample Input41 4 5 6Sample Output6 3Source零起点学算法82——数组中查找数Time Limit:1000MS Memory Limit:65536KTotal Submit:3001 Accepted:1393Description在给定的数组中查找一个数Input多组测试,每组第一行输入1个整数n(n<20),然后是n个整数第二行输入1个整数mOutput查找在第一行的n个整数中第一次出现数字m的下标位置并输出,如果没有找到则输出NoSample Input3 4 5 654 2 2 2 22Sample Output1Source零起点学算法83——数组中删数Time Limit:1000MS Memory Limit:65536KTotal Submit:2938 Accepted:961Description在给定的数组中删除一个数Input多组测试,每组第一行输入1个整数n(n<20),然后是n个整数第二行输入1个整数m删除在第一行的n个整数中第一次出现数字m并删除,然后按照顺序输出剩下的数,Sample Input4 1 2 3 43Sample Output1 2 4Hintm有可能在原数组中找不到,找不到则输出原数组Source零起点学算法84——数组中删数IITime Limit:1000MS Memory Limit:65536KTotal Submit:1411 Accepted:754Description在给定的数组中删除数Input多组测试,每组第一行输入1个整数n(n<20),然后是n个整数第二行输入1个整数mOutput删除在第一行的n个整数中的数字m(多个的话都要删除),然后按照顺序输出剩下的数,Sample Input5 1 2 3 4 33Sample Output1 2 4零起点学算法85——数组中插入一个数Time Limit:1000MS Memory Limit:65536KTotal Submit:1566 Accepted:546Description给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序Input多组测试,每组第一行输入一个整数n,然后是n个有序的整数第二行输入1个整数m和1个整数KOutput将整数m插入到原数组中保持顺序是升序,然后输出2行第一行是插入以后的数组第二行是插入以后的数组中下标值是K的数n m k不超过20Sample Input3 1 2 53 1Sample Output1 2 3 52Source零起点学算法87——打印所有低于平均分的分数Time Limit:1000MS Memory Limit:65536KTotal Submit:4940 Accepted:1717Description输入n个成绩,打印出所有低于平均分的分数(注意:ave = s/n中s 为float或ave = (float)s/n)。
第7章选择题(数组)1.以下关于数组的描述正确的是:CA、数组的大小是固定的,但可以有不同类型的数组元素B、数组的大小是可变的,但所有数组元素的类型必须相同C、数组的大小是固定的,所有数组元素的类型必须相同D、数组的大小是可变的,可以有不同类型的数组元素2.下述关于字符数组的描述中错误的是:BA、字符数组可以存放字符串B、字符数组中的字符串可以整体输入和输出C、定义字符数组后,可用赋值运算符‚=‛对字符数组整体赋值D、不可以用关系运算符对字符数组中的字符串整体进行比较3.不能把字符串”Hello!‛赋给数组b的语句是:A、char b[10]={‘H’,’e’,’l’,’l’,’o’,’!’};B、char b[10];b=‛Hello!‛;C、char b[10];strcpy(b,‛Hello!‛);D、char b[10]=‛Hello!‛;4.若有以下定义,则数值为4的表达式是:Dint a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c=’a’,d,g;A、a[g-c]B、a[4]C、a[‘D’-‘C’]D、a[‘d’-c] 5.以下合法的数组定义是: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,4,5};6.以下错误的字符串赋值或赋初值方式是:CA、char *str,str=”string‛;B、char str[7]={‘s’,’t’,’r’,’i’,’n’,’g’};C、char str[10];str=”string‛;D、char str1[]=”string‛,str2[]=”12345678‛;stcpy(str2,str1); 7.若有以下定义和语句,则输出结果是:char a[12]=”a book!‛;printf(‚%d‛,strlen(a));A、12B、8C、7D、68.以下的一维数组a的正确定义是: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];9.以下对一维数组a正确初始化的是:A、int a[10]=(0,0,0,0,);B、int a[10]={};C、int a[]={0};D、int a[10]={10*2}; 10.在执行static int a[][3]={{1,2},{3,4}};语句后,a[1][2]的值是:CA、3B、4C、0D、211.在定义int a[3][6];后,第10个元素是:A、a[2][3]B、a[1][3]C、a[3][1]D、a[1][4]12.以下程序运行后的结果是:#include <stdio.h>Void 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*A D、SW13.以下程序结果是:#include <stdio.h>main(){int i,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,9B、1,4,7C、3,5,7D、3,6,9 14.调用strlen(‚abcde\0df\0g‛)的返回值为:A、4B、5C、8D、9CBBDD,CCDCC,BBCB。
习题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选项正确。
第7次测试参考答案一、判断是非题(每题4分)1. 一个数组中的元素可以定义为不同的数据类型正确错误2. 数组的初始化是指数组定义时给数组元素赋初值,初值的个数可以超过数组的长度,多余的被忽略正确错误3. 在C语言中,数组元素既能使用下标变量逐个引用,也能使用数组名一次性引用正确错误4. 定义二维数组时,可以将该数组的两个维数全部省略正确错误5. C语言编译系统为所定义的数组变量在内存中分配一片连续的存储单元正确错误6. int a[9]; 则a数组的下标范围是1-9正确错误7. int a[][3]={{1,0,1},{0},{1,1}}; 语句能够对二维数组a进行正确的初始化正确错误8. 现定义数组:inta[5][4]={0};则数组中每个元素的初值均为0正确错误9. 现有定义:double x[3][5];则x数组的行下标下限为0,列下标的上限为4正确错误10. 若有定义:double x[3][5]; 则x数组占据内存大小为15个字节正确错误11. 要找出二维数组的最大元素及其位置,采用如下算法:设变量max为“擂主”(它的行、列号分别存放到变量row、colum中),初值为a[0][0]。
然后每一个元素与“擂主”比较,比“擂主”大的,则成为新“擂主”,并记录下其位置。
这种方法称为“打擂台算法”正确错误二、单项选择题(每题4分)1. 下列语句中,能够正确定义一维数组a的是【】(A) int a[10]=(0,0,0,0,0);(B)int n=10;int a[n];(C)int n;scanf("%d",&n);int a[n];(D)#define SIZE 10int a[SIZE];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}; 3. 若有语句:int a[ ][3]={0,1,2,3,4,5,6,7,8};则a 数组第一维的大小是【 】(A) 2(B) 3(C) 4(D) 有错误,不能确定 4. 若二维数组a 有m 列,则在a[i][j]前的元素个数为【 】(A) j*m+i(B) i*m+j-1(C) i*m+j(D) i*m+j+1 5. 若有以下变量和数组的定义,则代码段输出结果是【 】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 7(B) 3 6 9(C) 1 5 9(D) 1 4 7 6. 下列语句执行后,输出的结果是【 】int a[6],i;for(i=1;i<6;i++){a[i]=9*(i-2+i*(i>3))%5;printf("%2d",a[i]);}(A) -4 0 4 0 4(B) -4 0 4 0 3(C) -4 0 4 4 2(D) -4 0 4 4 0 7. 下列语句执行后,输出的结果是【 】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++)printf("%2d",a[i][i]);(A) 1 1 1 1 1(B) 0 0 0 0 1(C) 1 0 0 0 0(D) 1 0 0 0 1 8. 下列语句执行后,输出的结果是【 】int n[2]={0};int i,k=2; for(i=0;i<k;i++)n[i]=i+1;printf("%d\n",n[k]);(A) 下标越界,输出结果不确定(B) 3(C) 2(D) 1 9. 下列语句组中,能对数组元素实现从小到大排序的是【 】(A)int a[6],i,j,t; printf("input 6 numbers :\n");scanf("%d",&a[i]); printf("\n");for(j=0;j<5;j++)for(i=0;i<5-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}(B)int a[6],i,j,t;printf("input 6 numbers :\n");for (i=0;i<6;i++)scanf("%d",&a[i]); printf("\n");if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}(C)int a[6],i,j,t;printf("input 6 numbers :\n");for (i=0;i<6;i++)scanf("%d",&a[i]); printf("\n");for(j=0;j<6;j++)for(i=0;i<5-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}(D)int a[6],i,j,t;printf("input 6 numbers :\n");scanf("%d",&a[i]);printf("\n");for(j=0;j<5;j++)for(i=0;i<4-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}三、多项选择题(每题4分)1. 在C语言中,引用数组元素时,其下标可以是【】(A) 整型常量(B) 整型变量(C) 整型表达式(D) 任何类型的表达式2. 以下语句能对二维数组a正确定义的是【】(A) nt a[3][ ];(B) float a(3,4);(C) double a[3][4];(D) float a[3][ 4]3. 先定义int a[2][3]; 下列对数组a元素的引用中,错误的是【】(A) a(1,2)(B) a[1,3](C) a[2][0](D) a[1>2][!1]4. 在定义int a[4][4]后,下列语句中,输出结果为4的是【】(A) printf("%d\n",sizeof(a));(B) printf("%d\n",sizeof(a[1][0]));(C) printf("%d\n",sizeof(a[0][0]));(D) printf("%d\n",sizeof(a)/sizeof(int));5. 以下语句中,正确定义了数组的是【】(A) int a[2][4]={1,2,3,4,5};(B) float b[3][ ]={{1},{2},{3}};(C) long c[2][3]={{1},{1,2}};(D) double d[ ][3]={{1},{2},{3}};。
习题四参考答案一、选择题1.下面关于串的叙述中,哪一个是不正确的?(B )A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2.串的长度是指( A )A. 串中包含的字符个数B. 串中包含的不同字符个数C. 串中除空格以外的字符个数D. 串中包含的不同字母个数3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串B.联接C.模式匹配D.求串长4.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。
A. O(m)B. O(n)C. O(n + m)D. O(n×m)5. 串也是一种线性表,只不过( A )。
A. 数据元素均为字符B. 数据元素是子串C. 数据元素数据类型不受限制D. 表长受到限制6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。
A. 13B. 33C. 18D. 407. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组占用的存储空间大小是(D )个字节。
A. 48B. 96C. 252D. 2888.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序为主序顺序存放,则数组元素 A[5,8]的存储首地址为( B )。
A. BA+141B. BA+180C. BA+222D. BA+2259. 稀疏矩阵的三元组存储表示方法( B )A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效C. 是一种链式存储方法D. 比十字链表更高效10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。
MOOC-SPOC测试题(部分答案)(至数组一章)-C语言-宣城校区2022第二周作业1.已知:chara;intb;floatc;doubled;执行语句c=a+b+c+d;后,变量c的数据类型是____//CA.intB.doubleC.floatD.char2.已知inti=5;执行语句i+=++i;i的值是____//CA.10B.11C.12D.他答案都不对3.已知int某=5,y=5,z=5;执行语句某%=y+z;后,某的值是____//CA.1B.6C.5D.04.下列可以正确表示字符型常数的是____//BA.297B.'\\t’C.\D.\5.字符串\的长度是____//CA.7B.6C.5D.86.把算术表达式表示为一个C语言表达式,正确的写法是____//DA.–(31.6a某8+1/7)某12B.–31.6某a某8+1.0/7某12C.–(31.6a某8.0+1.0/7.0)某12D.–(31.6某a某8+1.0/7)某1227.温度华氏和摄氏的关系是:C=5(F-32)/9。
已知:floatC,F;由华氏求摄氏的正确的赋值表达式是____//CA.C=5/9某(F-32)B.三个表达式都正确C.C=5某(F-32)/9D.C=5/9(F-32)8.已知inti=10;表达式“20-0<=i<=9”的值是____//BA.0B.1C.20D.199.已知:int某,y;doublez;则以下语句中错误的函数调用是____//DA.canf(\B.canf(\C.canf(\D.canf(\10.已知”inta=5,b=5,c;”,则执行表达式”c=a=a>b”后变量a的值为____//BA.1B.0C.5D.423第四周作业1.下面程序的输出是1.#include2.main()3.{int某=1,y=0,a=0,b=0;4.witch(某)5.{cae1:witch(y)6.{cae0:a++;break;7.cae1:b++;break;8.}9.cae2:a++;b++;10.break;11.}12.printf(\13.}A.a=2,b=1B.a=1,b=0C.a=2,b=2D.a=1,b=1//A2.以下程序的输出结果是1.main()2.{float某=2,y;3.if(某<0)y=0;4.eleif(某<5&&!某)y=1/(某+2);5.eleif(某<10)y=1/某;6.eley=10;7.printf(”%f\\n”,y);348.}A.0.000000B.0.250000C.0.500000D.10.000000//C3.填空(2分)若下列程序执行后t的值为4,则执行时输入a,b的值范围是1.#include”tdio.h”2.main()3.{inta,b,=1,t=1;4.canf(”%d,%d”,&a,&b);5.if(a>0)+=1;6.if(a>b)t+=;7.eleif(a= =b)t=5;8.elet=2某;9.printf(”=%d,t=%d\\n”,,t);10.}b>a,a>0请输入答案45第五周编程作业2.寻找特殊偶数(10分)题目内容:有一种特殊偶数,它每一位上的数字都两两不相同。
一、单项选择题1. 将一个 n ×n 的三对角矩阵 A=[a ij ]的三条对角线上的元素按行优先顺序存储在一维数组B[1..3n-2]中,则元素a ij 在B 中的位置是________。
A. i+2j-12. 术语________与数据的逻辑结构无关。
A. 链式结构B. 线性结构C. 树型结构B. i+j+2C. 3i-j+1D. 2i+j-2D. 网状结构3. 对一个栈S 依次进行操作PUSH(S,1),PUSH(S,2),POP(S),PUSH(S,3),PUSH(S,4),POP(S),PUSH(S,5)后,栈 S 中从栈顶到栈底元素的排列顺序是________。
A. 5,3,1B. 1,3,5C. 2,4,5D. 5,4,24. 数组Q[0..n-1]作为一个循环队列,f 为队头元素的前一个位置,r 为队尾元素的位置,那么在队列未满时进行将元素x 进队的操作需要执行________。
A. r=r+1;Q[r]=x ;C. Q[r]=x ;r=r+1; B. r=(r+1) % n ;Q[r]=x ;D. Q[r]=x ;r=(r+1) % n ;5. 若一棵二叉树的先序序列是ABCEGDF ,中序序列是GECBFDA ,那么其后序序列是________。
A. EGCDFBA6. ________的邻接矩阵是对称矩阵。
A. 有向图 B. 无向图B. AGECDFB C. ABDFCEG D. GECFDBA C. AOV-网 D. AOE-网7. 有n 个顶点的强连通图至少含有________条弧(有向边)。
A. n B. n(n-1)/2 C. n-1 D. n+18.为了实现图的广度优先遍历,其广度优先搜索算法使用的一种辅助数据结构为_________。
A .栈B .队列C .二叉树D .集合9.长度为12 的有序表采用顺序存储结构,采用折半查找技术,在等概率情况下,查找成功的平均查找长度是_________。
数组题汇总(python3)题⽬主要来⾃《剑指offer》和LeetCode,⽤python3来写的代码。
1、⼆维数组的查找:在⼀个⼆维数组中(每个⼀维数组的长度相同),每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。
请完成⼀个函数,输⼊这样的⼀个⼆维数组和⼀个整数,判断数组中是否含有该整数。
# -*- coding:utf-8 -*-class Solution:def Find(self, target, array):rows = len(array)-1cols = len(array[0])-1i = rowsj = 0while i >= 0 and j <= cols:if target < array[i][j]:i -= 1elif target > array[i][j]:j += 1else:return Truereturn False2、旋转数组的最⼩数字把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。
输⼊⼀个⾮减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的⼀个旋转,该数组的最⼩值为1。
NOTE:给出的所有元素都⼤于0,若数组⼤⼩为0,请返回0。
# -*- coding:utf-8 -*-class Solution:def minNumberInRotateArray(self, rotateArray):lens = len(rotateArray)if lens == 0:return 0elif lens == 1:return rotateArray[0]else:left = 0right = lens-1while left < right:mid = (left+right)//2if rotateArray[mid] <= rotateArray[right]:right = midelse:left = mid+1return rotateArray[right]3、斐波那契数列⼤家都知道斐波那契数列,现在要求输⼊⼀个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
数组(23)1.设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。
下面要解决的Josephus问题是:对于任意给定的n, s和m,求出这n个人的出局序列。
请以n = 9, s = 1, m = 5为例,人工模拟Josephus的求解过程以求得问题的解。
2.试编写一个求解Josephus问题的函数。
用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。
然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。
3.设有一个线性表 (e0, e1, …, e n-2, e n-1) 存放在一个一维数组A[arraySize]中的前n个数组元素位置。
请编写一个函数将这个线性表原地逆置,即将数组的前n个原址内容置换为 (e n-1, e n-2, …, e1, e0)。
4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放,每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表位置在676(10)示用10进制表示。
5.设有一个n n的对称矩阵A,如图(a)所示。
为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。
前者称为上三角矩阵,后者称为下三角矩阵。
我们把它们按行存放于一个一维数组B中,如图(b)和图(c)所示。
并称之为对称矩阵A的压缩存储方式。
试问:(1) 存放对称矩阵A上三角部分或下三角部分的一维数组B有多少元素?(2) 若在一维数组B中从0号位置开始存放,则如图(a)所示的对称矩阵中的任一元素a ij在只存上三角部分的情形下(图(b))应存于一维数组的什么下标位置?给出计算公式。
1、以下定义语句中,错误的是________。
A) int a[]={1,2}; B) char a[]={"test"};C) char s[10]={"test"}; D) int n=5,a[n];D一维数组的定义方式:类型说明符数组名[常量表达式]常量表达式中可以包括常量和符号常量,但不能包含变量。
2、以下对一维数组a进行正确初始化的是__________。
A) int a[10]=(0,0,0,0,0); B) int a[10]={ };C) int a[ ]={0}; D) int a[10]={ 10*2};、C1.在定义数组时对数组元素赋以初值。
2. 可以只给一部分元素赋值。
3. 如果想使一个数组中全部元素值为0,可以写成:int a[10]={0,0,0,0,0,0,0,0,0,0};或int a[10]={0};4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度,系统根据后面花括号里的数据决定数组的长度。
3、以下对二维数组a进行正确初始化的是__________。
A) int a[2][3]={ {1,2},{3,4},{5,6} };B) int a[ ][3]={1,2,3,4,5,6 };%C) int a[2][ ]={1,2,3,4,5,6};D) int a[2][ ]={ { 1,2},{3,4}};B4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
可以用下面4种方法对二维数组初始化:1.分行给二维数组赋初值。
2.可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
3.可以对部分元素赋初值。
4、在定义int a[5][4]; 之后,对a的引用正确的是________。
"A) a[2][4] B) a[1,3]C) a[4][3] D) a[5][0]C在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。
一、填空共5题(共计20分)第1题(4.0分)题号:341定义int a[2][3];表示数组a中的元素个数是【1】个.答案:6第2题(4.0分)题号:308当a=3,b=2,c=1;时,执行以下程序段后 a=【1】.if(a>b) a=b;if(b>c) b=c;else c=b;c=a;答案:2第3题(4.0分)题号:1524下列程序的输出是【1】,main(){int a=011;printf("%d\n",++a);}答案:10第4题(4.0分)题号:658int x=2;x*=y=z=4; 则x的值为【1】.答案:8第5题(4.0分)题号:312以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则括号内应填写【1】. ch=getchar();while(ch ____ 'Y')/*在括号中填写*/ch=getchar();答案:==二、单项选择共15题(共计30分)第1题(2.0分)题号:98以下标识符中,不能作为合法的C用户定义标识符的是()。
A:For B:Printf C:WORD D:sizeof答案:D第2题(2.0分)题号:152以下程序的运行结果是()。
main(){ int n;for(n=1;n<=10;n++){if(n%3==0) continue;printf("%d",n); }}A:12457810 B:369 C:12 D:1234567890答案:A第3题(2.0分)题号:184下列定义不正确的是()。
A:#define PI 3.141592 B:#define S 345C:int max(x,y); int x,y; { } D:static char c;答案:C第4题(2.0分)题号:513int a[10];合法的数组元素的最小下标值为()。
2012年上期期中考试试题
时量:90分钟班级:计41 姓名:
一、选择题(每题5分,共50分)
1.以下为一维整型数组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];
2.以下对二维数组a的正确说明是________.
a)int a[3][]; b)float a(3,4); c)double a[1][4] d)float a(3)(4); 3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.
(假设a[0][0]位于数组的第一个位置上。
)
a)i*m+j b)j*m+I c)i*m+j-1 d)i*m+j+1 4.若二维数组a有m列,则在a[i][j]前的元素个数为________.
a)j*m+i b)i*m+j c)i*m+j-1 d)i*m+j+1 5.若有以下程序段:
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;}
... ...
则该程序段的功能是_________.
a)对数组a进行插入排序(升序) b)对数组a进行插入排序(降序)
c)对数组a进行选择排序(升序) d)对数组a进行选择排序(降序)
6.有两个字符数组a、b,则以下正确的输入语句是_______.
a)gets(a,b); b)scanf("%s%s",a,b);
c)scanf("%s%s",&a,&b); d)gets("a"),gets("b");
7.下面程序段的运行结果是_________.
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf("%c",a[5]);
a)空格b)\0 c)e d)f
8.判断字符串s1是否大于字符串s2,应当使用_______.
a)if(s1>s2) b)if(strcmp(s1,s2)) c)if(strcmp(s2,s1)>0) d)if(strcmp(s1,s2)>0) 9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔,请选择填空。
#include <stdio.h>
main()
{char s[80],c1,c2='';
int i=0,num=0;
gets(s);
while(s[i]!='\0')
{c1=s[i];
if(i==0) c2='';
else c2=s[i-1];
if( _________ )num++
i++;
}
printf("There are %d words.\n",num);
}
a)c1==''&&c2=='' b)c1!=''&&c2=='' c)c1==''&&c2!='' d)c1!=''&&c2!=''
10.下面程序的运行结果是________.
#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*A d)SW
二、填空题(共50分)
1.若有定义:double x[3][5];则x数组中行下标的下限为_________,列下标的上限为_________.(5分)
2.下面程序以每行4个数据的形式输出a数组,请填空(10分)。
#define N 20
main()
{int a[N],i;
for(i=0;i<N;i++) scanf("%d",_______);
for(i=0i<N;i++)
{if (_____________) _____________
printf("%3d",a[i]);
}
printf("\n");
}
3. 下面程序可求出矩阵a的主对角线上的元素之和,请填空(5分)。
main()
{int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(_____)sum=sum+_______;
printf("sum=%d\n",sum);
}
4. 当从键盘输入18并回车后,下面程序的运行结果是________.(5分)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]);
}
5. 下面程序用插入法对数组a进行降序排序。
请填空(10分)。
main()
{int a[5]={4,7,2,5,1};
int i,j,m;
for(i=1;i<5;i++)
{m=a[i];
j=____;
while(j>=0&&m>a[j])
{_______; j--; }
_______=m;
}
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
}
6. 下面程序的功能是在三个字符串中找出最小的,请填空(10分)。
#include<stdio.h>
#include<string.h>
main()
{char s[20],str[3][20];
int i;
for(i=0;i<3;i++)gets(str[i]);
strcpy(s,_______);
if(strcmp(str[2],s)<0)strcpy(s,str[2]);
printf("%s\n",_______); }
7. 下面程序的运行结果是________.(5分)
#include<stdio.h>
main()
{char s[]="ABCCDA";
int k;char c;
for(k=1;(c=s[k])!='\0';k++)
{switch(c)
{case 'A':putchar('%');continue;
case 'B':++k;break;
default:putchar('*');
case 'C':putchar('&');continue;
}
putchar('#');
}
}。