文档库 最新最全的文档下载
当前位置:文档库 › 数组和函数习题

数组和函数习题

数组和函数习题
数组和函数习题

数组习题

一、选择题

1.(1) int a[4]={5,3,8,9};其中a[3]的值为( )。

A. 5

B. 3

C. 8

D. 9

2.以下4 个数组定义中,( )是错误的。

A. int a[7];

B. #define N 5 long b[N];

C. char c[5];

D. int

n,d[n];

3.对字符数组进行初始化,( )形式是错误。

A. char c1[ ]={'1', '2', '3'};

B. char c2[ ]=123;

C. char c3[ ]={ '1', '2', '3',

'\0'}; D. char c4[ ]="123";

4.在数组中,数组名表示( )。

A. 数组第1 个元素的首地址

B.数组第2 个元素的首地址

C. 数组所有元素的首地址

D.数组最后1 个元素的首地址

5.若有以下说明,则数值为4 的表达式是( )。

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; cha r c=?a?, d, g ;

A. a[g-c]

B. a[4]

C. a['d'-'c']

D. a['d'-c]

6.合法的数组定义是( )。

A. char 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}

7.数组定义为int a[3][2]={1,2,3,4,5,6},值为6的数组元素是( )。

A. a[3][2]

B. a[2][1]

C. a[1][2]

D. a[2][3]

8.下面的程序中哪一行有错误( )。

#include

main()

{

float array[5]={0.0}; //第A行

int i;

for(i=0;i<5;i++)

scanf("%f",&array[i]);

for(i=1;i<5;i++)

array[0]=array[0]+array[i];//第B行

printf("%f\n",array[0]); //第C行

}

A. 第A行

B. 第B行

C. 第C行

D. 没有

9.根据以下说明,写出正确的说明语句:men是一个有10个整型元素的数组。

step是一个有4个实型元素的数组,元素值分别为1.9, -2.33, 0, 20.6。grid是一个二维数组,共有4行,10列整型元素。

10.写出以下初始化数组的长度:①int chn[3];数组chn的长度为___。

②float isa[]={1.0,2.0,3.0,4.0,5.0};数组isa的长度为___。

③int doom[8];数组doom的长度为___。

④float pci[4][2];数组pci的长度为___。

⑤int ast[3][3];数组ast的长度为___。

⑥int att[3][4];数组att的长度为___。

⑦float dell[][3]={{1,4,7},{2,5},{3,6,9}};数组dell的长度为___。

(提示:在VC++中int占多少字节?float占多少字节?)

二阅读程序,分析程序的功能

(1)

#include

void main( )

{

char s[80];

int i ;

for(i=0; i<80; i++)

{

s[i]=getchar( );

if(s[i]= ='\n') break;

}

s[i]='\0'; i=0;

while(s[i]) putchar(s[i++]);

putchar(…\n?);

}

(2) 阅读程序,写出运行结果

#include

void main( )

{

int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;

for(i=0;i<6;i++)

{

for(j=0;j<6;j++) if(a[i]= =b[j])break;

if(j<6) printf("%d ",a[i]);

}

printf("\n");

}

(3)读懂下面的程序并填空。

void main()

{

char str[80];

int i=0;

gets(str);

while(str[i]!=0)

{

if(str[i]>='a'&&str<='z')

str[i]-=32;

i++;

}

puts(str);

}

程序运行时如果输入upcase, 屏幕显示

程序运行时如果输入Aa1Bb2Cc3, 屏幕显示

三、程序填空题

(1)以下程序以每行10个数据的形式输出a 数组,请填空。void main( )

{

int a[50],i;

printf("输入50个整数:");

for(i=0; i<50; i++) scanf( "%d", 【1】);

for(i=1; i<=50; i++)

{ if( 【2】)

printf( "%3d\n" , 【3】) ;

printf( "%3d",a[i-1]);

}

}

(2)下面程序的功能是输出数组s 中最大元素的下标,请填空。

void main( )

{

int k, p;

int s[ ]={1,-9,7,2,-10,3};

for(p=0,k=p; p<6; p++)

if(s[p]>s[k]) ;

printf("%d\n" ,k);

}

(3)这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、20个数的和及它们的平均值。请填空。

void main()

{

int array 【1】;

int max,min,average,sum=0;

int i;

for(i=0;i< 【2】;i++)

{

printf("请输入第%d个数:",i+1);

scanf("%d", 【3】);

}

max=array[0];

min=array[0];

for(i=0;i<= 【4】;i++)

{

if(max

【5】

if(min>array[i])

【6】

sum= 【7】;

}

average = 【8】;

printf("20个数中最大值是%d,",max);

printf("最小值是%d,",min);

printf("和是%d,",sum);

printf("平均值是%d.\n",average);

}

函数复习(适合7.1节~7.7节)

一.选择题

1.以下正确的函数定义形式是:()

a) double fun(int x,int y)

b) double fun(int x;int y)

c) double fun(int x,int y);

d) double fun(int x,y);

2.以下正确的函数形式是:()

a) double fun(int x,int y)

{ z=x+y; return z; }

b) fun(int x,y)

{ int z; return z; }

c) fun(x,y)

{ int x,y; double z; z=x+y; return z; }

d) double fun(int x,int y)

{ double z; z=x+y; return z; }

3.以下正确的说法是:()

a) 实参和与其对应的形参各占用独立的存储单元

b) 实参和与其对应的形参共占用一个存储单元

c) 只有当实参和与其对应的形参同名时才共占用存储单元

d) 形参是虚拟的,不占用存储单元

4.以下程序有语法性错误,有关错误原因的正确说法是:()

main()

{ int G=5,k;

void prt_char();

……

k=prt_char(G);

……

}

a) 语句void prt_char();有错,它是函数调用语句,不能用void说明

b) 变量名不能使用大写字母

c) 函数说明和函数调用语句之间有矛盾

d) 函数名不能使用下划线

5.若使用一维数组名作函数实参,则以下正确的说法是:()

a) 必须在主调函数中说明此数组的大小

b) 实参数组类型与形参数组类型可以不匹配

c) 在被调函数中,不需要考虑形参数组的大小

d) 实参数组名与形参数组名必须一致

6.C语言规定,函数返回值的类型是:()

a) return语句中的表达式类型所决定

b) 调用该函数时的主调函数类型所决定

c) 调用该函数时系统临时决定

d) 在定义该函数时所指定的函数类型所决定

7.折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary 的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;若没有找到,返回-1。请选择填空。

int binary(int a[10],int m)

{ int low=0,high=9,mid;

while(low<=high)

{ mid=(low+high)/2;

if(m

else if(m>a[mid]) 【2】;

else return(mid);

}

return(-1);

}

1 2 3 4 5 6 7 8 9 10 3

Low=0,high=9 mid=4

5<8 low=mid+1

5>3 high=mid-1

【1】是:()

a) high=mid-1 b) low=mid+1

c) high=mid+1 d) low=mid-1

【2】是:()

a) high=mid-1 b)low=mid+1

c) high=mid+1 d) low=mid-1

二、填空题

1.以下程序的输出结果是

main()

{ int i=2,x=5,j=7;

fun(j,6);

printf(“i=%d;j=%d;x=%d\n”,i,j,x);

}

fun(int i,int j)

{ int x=7;

printf(“i=%d;j=%d;x=%d\n”,i,j,x);

}

2.以下程序的输出结果是_______。

main()

{ increment();

increment();

increment();

}

increment()

{ int x=0;

x+=1;

printf(“%d”,x);

}

3.若输入一个整数10,以下程序的输出结果是___ ____。

main()

{ int a,e[10],c,i=0;

prin tf(“输入一整数\n”);

scanf(“%d”,&a);

while(a!=0)

{ c=sub(a);

a=a/2;

e[i]=c;

i++;

}

for(;i>0;i--) printf(“%d”,e[i-1]);

}

sub(int a)

{ int c;

c=a%2;

return c;

}

4.下面程序的功能是【1】,运行结果是【2】。

long fib(int g)

{ switch(g)

{ case 0: return 0;

case 1:

case 2: return 1;

}

return(fib(g-1)+fib(g-2));

}

main()

{ long k;

k=fib(7);

printf(“k=%d\n”,k);

}

5.以下程序的运行结果是__ _。

#include

f(int a[])

{ int i=0;

while(a[i]<=10)

{ printf(“%d”,a[i]);

i++;

}

}

main()

{ int a[]={1,5,10,9,11,7};

f(a+1);

}

6.以下程序的运行结果是__ _。

main()

{ int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum;

sum=func(a);

printf(“\nsum=%d\n”,sum);

}

func(int a[][3])

{ int i,j,sum=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{ a[i][j]=i+j;

if(i==j) sum=sum+a[i][j];

}

return(sum);

}

函数复习(7.8~7.10)

1.在一个C源程序文件中,若要定义一个只允许本源文件中所

有函数使用的全局变量,则该变量需要使用的存储类别是:(D )

a) extern b) register c) auto d) static

2.以下不正确的说法是:(D)

a) 在不同函数中可以使用相同名字的变量

b) 形式参数是局部变量

c) 在函数内定义的变量只在本函数范围内有效

d) 在函数内的复合语句中定义的变量在本函数范围内有效

3.若有以下程序:

#include

void num()

{ extern int x,y;

int a=15,b=10;

x=a-b; 5

y=a+b; 25

}

int x,y;

main()

{ int a=7,b=5;

x=a+b; 12

y=a-b; 2

num();

printf(“%d,%d\n”,x,y);

}

程序的正确运行结果是:()

a) 12,2 b) 不确定

c) 5,25 d) 1,12

4.若有以下程序:

main()

{ int a=2,i;

for(i=0;i<3;i++) printf(“%4d”,f(a));

}

f(int a)

{ int b=0;

static int c=3;

b++; c++; B=1,C=6

return(a+b+c);

}

程序的正确运行结果是:()

a) 7 7 7 b) 7 10 13

c) 7 9 11 d) 7 8 9

5.若有以下程序:

#include

main()

{ int k=4,m=1,p;

p=func(k,m); printf(“%d”,p);

p=func(k,m); printf(“%d\n”,p);

}

func(int a,int b)

{ static int m=0,i=2;

i+=m+1; i=2+1=3 i=3+8+1=12

m=i+a+b; m=3+4+1=8 m=12+4+1=17

return(m);

}

程序的正确运行结果是:()

a)8,17 b) 8,16

c) 8,20 d) 8,8

6.以下程序的运行结果是_ 10,20, 40,40

_。

int x1=30,x2=40;

main()

{ int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1); 40,10

printf(“%d,%d,%d,%d\n”,x3,x4,x1,x2);

}

sub(int x,int y)

{ x1=x; x1=40

x=y; x=20

y=x1; y=10

}

C语言数组与函数考试试题

2014年上期职二对口C语言程序设计第一次月考试题 (适用班级1219、1220) 班级:姓名:总分: 一、选择题(15*2=30分) 1、在定义“int a[5][6];”后,第11个元素是。 A、a[2][5] B、a[2][4] C、a[1][4] D、a[1][5] 2、假定int类型变量占用两个字节,其定义:int x[10]={0,2,4};,则数组x在内存中所 占字节数是。 A、3 B、6 C、10 D、20 3、当接受用输入的含空格的字符串地,应使用的函数是。 A、scanf() B、gets() C、getchar() D、getc() 4、设有数组定义:char array[]=”China”;。则数组array所占的空间为。 A、4个字节 B、5个字节 C、6个字节 D、7个字节 5、设有变量定义:int a [ ] = {1,2,3,4}; 执行语句a[3] = - - a[0]? a[1] + + : a[2] + +;执行后,数组的元素a[0], a[1], a[2], a[3]的值依次为 A、 1,2,3,4 B、 0,3,3,4 C、 0,2,3,4 D、0,2,4,3 6、以下程序的输出结果是 void main( ) {int i, x[3][3] = { 1,2,3,4,5,6,7,8,9} for(i= 0;i < 3; i + +) printf("3%d", x[i][2 - i]); } A、 1 5 9 B、 1 4 7 C、3 5 7 D、 3 6 9 7、不能把字符串: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!”; 8、在函数间传递数据的四种方式中,不能把被调函数的数据带回到主调函数的是 A、值传递 B、地址传递 C、返回值传递 D、全局外部变量 9、以下关于函数的叙述中不正确的是 A、C程序是函数的集合,包括标准库函数和用户自定义函数 B、在C语言程序中,被调用的函数必须在main函数中定义 C、在C语言程序中,函数的定义不能嵌套 D、在C语言程序中,函数的调用可以嵌套 10、若用数组名作为函数调用的实参,则传递给形参的是 A、数组的首地址 B、数组的第一个元素的值 C、数组中全部元素的值 D、数组元素的个数 11、C语言中,凡未指定存储类别的局部变量的隐含存储类别是 A、 auto B、static C、extern D、 register 12、若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实 参的个数是

数组和过程习题(有)

数组 一、思考题 1.要分配存放12个元素的整型数组,下列数组声明(下界若无,按默认规定) 哪些符合要求? (1) n=12 (2) Dim a%( ) Dim a(1 To n) As Integer n=11 ReDim a(n) (3) Dim a%[2,3] (4) Dim a(1,1,2) As Integer (5) Dim a%(10) (6) Dim a!( ) ReDim a(1 To 12) ReDim a(3,2) As Integer (7) Dim a%(2,3) 8) Dim a(1 to 3, 1 to 4) As Integer 2.已知下面的数组声明,写出它的数组名、数组类型、维数、各维的上、下界、数组的大小、并按行的顺序列出各元素。 Dim a(-1 to 2,3) As Single 3. 已声明了静态数组A(3, 4),能否在下面再用重定义动态数组A(4, 4)来重定义A数组的大小吗? 二、选择题 1.以下关于数组的说法,不正确的是______。 (A)静态数组在声明时大小必须固定(B)动态数组在声明时大小可以不确定 (C)默认情况下数组的下界为0 (D)运行时可改变动态数组或静态数组的大小 2.有关数组的说法,错误的是______。 (A)数组是一种特殊的数据类型(B)一个数组中可存放多种类型的数据 (C)数组是一组相同类型的变量的集合(D)

数组可以被声明为变体类型 3.如下数组声明语句,______正确。 (A)Dim a[3, 4] As Integer (B)Dim a(3, 4) As Integer (C)Dim a(n, n) As Integer (D)Dim a(3 4) As Integer 4. 要分配存放如下方阵的数据,______数组声明语句能实现(不能浪费空间)。 (A)Dim a(9) As Single (B)Dim a(3, 3) As Single (C)Dim a( 1 To 3 , 1 To 3) As Single(D)Dim a( -3 To -1 , 5 To 7) As Integer 5. 如下数组声明语句,则数组a包含元素的个数有______。 Dim a(3, -2 to 2,5) (A)120 (B)75 (C)60 (D)13 6. 以下程序输出的结果是______。 Dim a a = Array(1, 2, 3, 4, 5, 6, 7) For i = Lbound (a) To Ubound (a) a(i) = a(i) * a(i) Next i Print a(i) (A)49 (B)0 (C)不确定(D)程序出错 7.下列数组声明语句中的数组a包含了______个数组元素 Dim a(4,-1 To 2, 3) (A) 120 (B) 11 (C)60 ( D)80 8. 有如下程序段: Type student nl as Integer name as String*13 End Type Dim stu As student 该程序段定义了两个程序成分,它们分别是______ (A)数据类型和自定义类型变量(B)自定义类型和变量 (C)显示类型和变量(D)自定义类型和自定义类型变量 9.在窗体的通用声明段自定义了数据类型student,下列定义方式是正确的。 (A) Private Type student (B)Type student No as Integer No as Integer

第七章字符数组与指针练习题参考答案

第七章字符数组与字符串 【题7.29】下面是对s的初始化,其中不正确的是。 A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”; 【题7.30】下面程序段的运行结果是。 char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’}; printf(“%s”,c); A)‘a’‘b’ B)ab C)ab c 【题7.31】对两个数组a和b进行如下初始化 char a[]=“ABCDEF”; char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’}; 则以下叙述正确的是。 A)a与b数组完全相同B)a与b长度相同 C)a和b中都存放字符串D)a数组比b数组长度长 提示:‘\0’是字符串结束的标志 【题7.32】有两个字符数组a、b,则以下正确的输入格式是。 A)gets(a,b); B)scanf(“%s %s”,a,b); C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”); 【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。 A)puts(a,b); B)printf(“%s %s”,a[],b[]); C)putchar(a,b); D)puts(a),puts(b); 【题7.34】下面程序段的运行结果是。 char a[7]=“abcdef”; char b[4]=“ABC”; strcpy(a,b); printf(“%c”,a[5]); A)空格B)\0 C)e D)f 提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

二级c语言程序设计习题及解答ch9数组

第九章数组 一、选择题 [9.1] 若已定义: int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中0<=i<=9,则对a数组元素的引用不正确的是 A)a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i)) 【解析】A:p开始是数组a首地址,只要p++则再减去a的首地址a[p-a]就能取到所有元素,B:&a[i]循环取其地址,*(&a[i]) 是该地址中所存储的元素C:p就是指针变量,相当于a[i],D:*(a+i)则正确 [9.2] 以下程序段数组所有元素输入数据,应在下划线填入的是 A) a+(i++) B) &a[i+1] C) a+i D) &a[++i] main() { int a[10],i=0; while(i<10) scanf("%d",_); } 【解析】因为要遍历,所以排除B.C,因为D先加1再取值,丢了a[0] [9.3] 以下程序的输出结果是 A) 3 B) 4 C) 1 D) 2 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d\n",*(p+2)); } 【解析】*p=a;p指向首地址,*(p+2))往后移动两个元素,指向3 [9.4] 以下程序的输出结果是 A) 不确定的值 B) 3 C) 2 D) 1 main() { int n[2]={0},i,j,k=2; for(i=0;i

数组名作为函数参数

杨振平

●数组元素作实参,对应的形参为变量,一次传递一个元素,采用值传递。 ●数组名作实参,对应的形参为一个数组,一次传递整个数组。 ●数组作参数,其参数传递可理解为形参数组与实参数组共用同一数组空间(即共用实参数组空间)。因此,在函数中,使用形参数组就是在使用实参数组,改变形参数组元素的值就是在改变实参数组元素的值,这一点与引用传递非常相似。

1.一维数组的传递 ?一维数组作形参的声明格式: <类型> <数组名>[] 其中,[]中可以省略数组的长度值。(可认为形参数组与实参数组长度相同) ?对应的实参应为同类型的一维数组名。(仅用数组名) 说明:为了使函数知道需要处理的数组元素的个数,通常给函数再传递一个表示元素个数的整型数。

数组名作为函数参数(续) 例如:一维数组名作为函数的参数。编写函数,计算一个整型数组中从第m个元素(m从0开始)开始的n个元素之和。函数设计: 函数原型:int fun(int b[],int m,int n); 功能:计算数组b中从第m个元素开始的n个元素之和。 主函数设计: 定义并初始化一个整型数组a。 测试1:fun(a,0,10);//求从第0个元素开始的10个元素之和 测试2:fun(a,3,5); //求从第3个元素开始的5个元素之和

int fun(int b[],int m,int n) { int i,s=0; for(i=m;i

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 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务就是:在第k个数据到第n个数据中寻找最小数,与第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果就是______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的就是() ① int a[][]={1,2,3,4,5,6}; ② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④就是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也就是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句就是() ①char s[]={‘1','2','3','\0 '}; ②char s「」={"123"}; ③char s[]={"123\n"}; ④ char s[4]={'1','2','3'}; 【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计4个元素,初值依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组S中存放的就是字符串"123",该答案不符合题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组s的长度为4,其中的初值就是字符串"123",不符合题意(即正确的);备选答案③中也就是给数组s赋予字符串的初值,但就是字符串不就是"123",而就是"123\n",所以该答案符合题意(即错误的);显然答案④也不符合题意(即正确的)。下面来

C语言(数组与函数)习题与答案

1、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是()。 A.42 B.56 C.60 D.45 正确答案:D 2、以下叙述中错误的是()。 A.数组名代表的是数组所占存储区的首地址,其值不可改变 B.只有double类型数组,不可以直接用数组名对数组进行整体输入或输出 C.可以通过赋初值的方式确定数组元素的个数 D.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 正确答案:B 3、以下能正确定义一维数组的选项是()。 A.int a[5]={0,1,2,3,4,5}; B.int a[5]="0123"; C.char a[]={0,1,2,3,4,5}; D.char a={'A','B','C'}; 正确答案:C

解析: D、不加[ ],a只能被看作是一个字符变量,只能接收一个字符 4、有以下程序 main() { char p[ ]={‘a’,’b’,’c’},q[ ] =”abc”; printf("%d %d\n",sizeof(p),sizeof(q)); }; 程序运行后的输出结果是()。 A.4 4 B.3 3 C.3 4 D.4 3 正确答案:C 解析: C、p[] 只能认作字符数组,不会有字符串的结束标志,所以只有3个字符q[] 是字符串,末尾还会有字符串的结束标志,所以有4个字符 5、以下程序运行后的输出结果是()。 main() { int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ", a[i][j]); printf("\n"); } } A.1 2 3 0 5 6 0 0 9

数组c习题答案解析

习题 4 一、单项选择题 1. 若有说明int a[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. 任何类型的表达式 【答案】C 3. 以下不正确的定义语句是【】 A. double x[5]={2.0,4.0,6.0,8.0,10.0}; B. int y[5]={0,1,3,5,7,9}; C. char c1[]={′1′,′2′,′3′,′4′,′5′}; D. char c2[]={′\x10′,′\xa′,′\x8′}; 【答案】B 【解析】初始值的个数大于数组的大小,系统会出现编译错误。 4. 对以下说明语句的正确理解是【】 int a[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. 因为数组长度与初值的个数不相同,所以此语句不正确 【答案】B 5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】 A. 数组a的每个元素都可得到初值0 B. 二维数组a的第一维大小为1 C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小 D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值 【答案】D 【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。 6. 以下能对二维数组c进行正确的初始化的语句是【】 A. int c[3][]={{3},{3},{4}}; B. int c[][3]={{3},{3},{4}}; C. int c[3][2]={{3},{3},{4},{5}};

程序设计基础习题

7.8习题 1.编制一个 C 程序,从键盘输入一个正整数,如果该数为素数,则输出该素数,否则输出该数的所有因子(除去1 与自身)。 2.编制一个 C 程序,从键盘输入一个正整数N,然后计算并输出 1 2 |N | S=1 2 2 2 最后计算并输出 T= 1 1 2 1 3 K ( 1) 1 1 K 其中K S 的整数部分。 3.编制一个 C 程序,计算并输出多项式的值 5. ( 0.5 1)05.( 0.5 1)( 05.2) 2 3 S 1 05.x x x n 2!3! 5. ( 0.5 1) ( 0.5 n 1) n! x n 的值,直到|S n-S n-1|<0.000001 为止。其中x 从键盘输入。 4. 编制一个 C 程序,计算下列级数和: s n=1+(2/1)+(3/2)+(5/3)+(8/5)+(13/8)+ , +(a n/a n-1) 其中n≥1,由键盘输入; s1=1。 5.编制一个 C 程序,计算并输出下列级数之和: x e 1 x 2 3 n x x x 2! 3! n! 其中n 与x 从键盘输入。 6.编制一个 C 程序,输出能写成两个数平方之和的所有三位数。 7.如果一个数恰好等于它的所有因子(包括1 但不包括自身)之和,则称之为“完数”。例如,6 的因子为1、2、3,且1+2+3=6 ,即 6 是一个“完数”。编制一个 C 程序,计算并输 出1000 以内的所有“完数”之和。 8.编制一个 C 程序,从键盘输入30 个实数,分别计算并输出以下 5 个量:所有正数之和,所有负数之和,所有数的绝对值之和,正数的个数,负数的个数。 9. 100 元钱买100 只鸡,母鸡 3 元/只,公鸡 2 元/只,小鸡0.5 元/只。编制一个 C 程序,制 定买鸡方案 。 10.设A,B,C,D,E 五人,每人额头上贴了一张或黑或白的纸。五人对坐,每人都可以 看到其他人额头上的纸的颜 色 ,但都不知道自己额头上的纸的颜色 。五人相互观察后开始说 话: A 说:我看见有三人额头上贴的是白纸,一人额头上贴的是黑纸。 B 说:我看见其他四人额头上贴的都是黑纸。 C 说:我看见有一人额头上贴的是白纸,其他三人额头上贴的是黑纸。 D 说:我看见四人额头上贴的都是白纸。 E 什么也没说。 现在已知额头上贴黑纸的人说的都是真话,额头上贴白纸的人说的都是假 话。编制一个 C 程序,确定这五人中谁的额头上贴白纸,谁的额头上贴黑纸?

C语言程序设计教程第五章练习题题目

单选题 1、关于数组的定义与初始化,下列哪一项是错误的() A.int arr[5] = {1,2,3,4,5}; B.int arr[] = {1,2,3,4,5}; C.int arr[5] = {1,2,3}; D.int arr[5] = {1,2,3,4,5,6}; 2、在定义数组intarr[10]后,下列选项中对arr的引用正确的是() A.arr[10] B.arr[6.3] C.arr(6) D.arr[0] 3、在C语言中,引用数组元素时,其数组下标的数据类型允许是() A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 4、若intarr[5] = {1,2,3}; 则arr[2]的值为() A.1 B.2 C.3 D.null 5、在执行intarr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为() A.4 B.1 C.2 D.5 6、关于二维数组,下列选项能正确定义并赋初值的是() A.int n = 5,b[n][n]; B.int a[1][2] = {{1},{3}}; C.int c[2][] = {{1,2},{3,4}}; D.int a[3][2] = {{1,2},{3,4}}; 7、阅读下列程序段: char s[18] = "a book!"; printf("%.4s\n", s); 其输出结果为() A.a book! B.a book C.abo D.a 8、阅读下列程序: int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } }; printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);

c语言 数组习题

第7章数组习题A卷 1. 单项选择题 (1) int a[4]={5,3,8,9};其中 a[3]的值为(D )。 D A. 5 B. 3 C. 8 D. 9 (2) 以下 4 个字符串函数中,( A)所在的头文件与其他 3 个不同。 A. gets B. strcpy C. strlen D. strcmp (3) 以下 4 个数组定义中,( D)是错误的。 A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,(B )形式是错误。 A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\0'}; D. char c4[ ]="123"; (5) 在数组中,数组名表示(A )。 A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址 (6) 若有以下数组说明,则数值最小的和最大的元素下标分别是(B ) int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; A. 1,12 B. 0,11 C. 1,11 D. 0,12 (7) 若有以下说明,则数值为 4 的表达式是(D )。 int 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] (8) 设有定义:char s[12] = "string" ; 则printf( "%d\n",strlen(s)); 的输出是( A)。 A. 6 B. 7 C. 11 D. 12 (9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是( B)。 A. 6 B. 7 C. 11 D. 12 (10) 合法的数组定义是( A)。 A. char 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} (11) 合法的数组定义是(D )。 A. int a[3][ ]={0,1,2,3,4,5}; B. int a[ ][3] ={0,1,2,3,4}; C. int a[2][3]={0,1,2,3,4,5,6}; D. int a[2][3]={0,1,2,3,4,5}; (12) 下列定义的字符数组中,输出 printf("%s\n", str[2]) ;的输出是 (C )。 static str[3][20] ={ "basic", "foxpro", "windows"}; A. basic B. foxpro C. windows D. 输出语句出错 (14) 下列各语句定义了数组,其中哪一个是不正确的( C)。 A. char a[3][10]={"China","American","Asia"}; B. int x[2][2]={1,2,3,4}; C. float x[2][ ]={1,2,4,6,8,10}; D. int m[][3]={1,2,3,4,5,6};

C语言复习题及答案 第七章 数组教程文件

C语言复习题及答案第七章数组

第七章数组 (8学时) 学习目的与要求: 1 、重点掌握一维数组的定义和引用; 2 、基本掌握二维数组的定义和引用; 3 、重点掌握字符型数组的定义与引用; 4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。 重点: 1 、一维数组的定义与引用; 2 、二维数组的定义与引用; 3 、字符数组的定义与引用; 第1讲 知识归纳: 1、一维数组的定义:类型说明符数组名[ 常量表达式 ] ; (1) (1)数组名后必须用方括弧 [ ] ,用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量; 2、一维数组的引用: 数组名[ 下标 ] //下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围; 如 int a[10] ; //可以引用的数组元素为a[0]……a[9] , a[10] 不是本数组元素; 3、一维数组的初始化: (1) (1)可以在定义数组后,立刻赋值;如 int a [3] = { 1,3, 5} ; 但下面这样是错误的: int a[3] ; a = { 1,3, 5} ; (2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ‘’, float 0.0 ; 如 int a [3]= {1,3 } ; //a[0] =1 ; a[1]= 3 ; a[2]= 0 ; (3) 在对数组全部元素赋初值时,可以不指定元素个数; (4) 可以在循环控制下,给数组各元素赋值; 如:int a[10] ; for ( i=0 ; i <10 ;i ++ ) a [ i ] = i ; 基础训练(A) 一、选择题 1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。

C语言二维数组作为函数的参数

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: void Func(int array[][]); 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的: void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为: void Func(int array[3][10]); 而形参数组定义为: int array[5][10]; 这时形参数组只取实参数组的一部分,其余部分不起作用。 对于数组int p[m][n]; 如果要取p[i][j]的值(i>=0 && i

C语言数组练习题

第七章数组 1.在C语言中引用数组元素时,下面关于数组下表数据类型的说法错误的是()A)整型常量B)整型表达式 C) 整型常量或整型表达式D) 任何类型的表达式 2.以下能正确定义一维数组a的选项是() A)int a=[5]={0,1,2,3,4,5};B) char a[ ]={0,1,2,3,4,5}; C)char a={ 'A','B','C',};D) int a[5]= "0,1,2,3" 3.以下能正确定义一维数组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]; 4.若有定义:int a[10];则正确引用数组a元素的是() A) a[10] B) a[3] C) a[5] D) a[-10] 5.以下不正确的数组定义是() A) double x[5]={2.0,4.0,6.0,8.0,10.0}; B) int y[5]={0,1,3,5,7,9}; C) char c1[ ]={'1','2','3','4','5'}; D) char c2[ ]={'\x10','\xa','\x8'}; 6.以下叙述中错误的是() A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D)可以通过赋初值的方式确定数组元素的个数 7.以下正确的二维数组定义是() A)int a[ ] [ ]={1,2,3,4,5,6};B)int a[2][ ]={1,2,3,4,5,6}; C)int a[ ][3]={1,2,3,4,5,6};D)int a[2,3]={1,2,3,4,5,6}; 8.以下对二维数组a进行初始化正确的是() 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}}; 9.以下不能对二维数组a进行初始化的是() A)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}; 10.若有定义:int a[3][4];则正确引用数组a元素的是() A)a[2][4] B)a[3][3] C)a[0][0] D)a[3][4]

C语言数组名作函数参数

数组名可以作函数的实参和形参。如: 01. main(){ 02. int array[10]; 03. /* …… */ 04. /* …… */ 05. f(array,10); 06. /* …… */ 07. /* …… */ 08. } 09. 10. f(int arr[],int n); 11. { 12. /* …… */ 13. /* …… */ 14. } array为实参数组名,arr为形参数组名。在学习指针变量之后就更容易理解这个问题了。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。 同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。 【例10-15】 01. float aver(float*pa); 02. main(){ 03. float sco[5],av,*sp; 04. int i; 05. sp=sco; 06. printf("\ninput 5 scores:\n"); 07. for(i=0;i<5;i++)scanf("%f",&sco[i]); 08. av=aver(sp); 09. printf("average score is %5.2f",av);

10. } 11. float aver(float*pa){ 12. int i; 13. float av,s=0; 14. for(i=0;i<5;i++) s=s+*pa++; 15. av=s/5; 16. return av; 17. } 【例10-16】将数组a中的n个整数按相反顺序存放。 算法为:将a[0]与a[n-1]对换,再a[1]与a[n-2] 对换……,直到将a[(n-1/2)]与a[n-int((n-1)/2)]对换。今用循环处理此问题,设两个“位置指示变量”i和j,i的初值为0,j的初值为n-1。将a[i]与a[j]交换,然后使i的值加1,j 的值减1,再将a[i]与a[j]交换,直到i=(n-1)/2为止,如图所示。 程序如下: 01. void inv(int x[],int n)/*形参x是数组名*/{ 02. int temp,i,j,m=(n-1)/2; 03. for(i=0;i<=m;i++){ 04. j=n-1-i; 05. temp=x[i];x[i]=x[j];x[j]=temp; 06. } 07. return; 08. } 09. main(){ 10. int i,a[10]={3,7,9,11,0,6,7,5,4,2}; 11. printf("The original array:\n"); 12. for(i=0;i<10;i++) 13. printf("%d,",a[i]); 14. printf("\n"); 15. inv(a,10); 16. printf("The array has benn inverted:\n"); 17. for(i=0;i<10;i++) 18. printf("%d,",a[i]); 19. printf("\n"); 20. } 对此程序可以作一些改动。将函数inv中的形参x改成指针变量。

C语言函数习题及答案(20200506225202)

第 6章函数习题 一、选择题 1.一个完整的 C 源程序是【】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【】。 A) C 语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C) C 语言规定必须用 main 作为主函数名,程序将从此开始执行,在此结束D)main 可作为用户标识符,用以定义任意一个函数 3.以下关于函数的叙述中不正确的是【】。 A) C 程序是函数的集合,包括标准库函数和用户自定义函数 B)在 C 语言程序中,被调用的函数必须在main 函数中定义 C)在 C 语言程序中,函数的定义不能嵌套 D)在 C 语言程序中,函数的调用可以嵌套 4.在一个 C 程序中 ,【】。 A) main 函数必须出现在所有函数之前 B) main 函数可以在任何地方出现 C) main 函数必须出现在所有函数之后 D) main 函数必须出现在固定位置 5.若在 C 语言中未说明函数的类型,则系统默认该函数的数据类型是【】 A) float B) long C) int D )double 6. 以下关于函数叙述中,错误的是【】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一 致C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 7. C 程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是 【】。 A)参数的形实(哑实)结合 B)函数返回值 C)全局变量 D)同名的局部变量 8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【 】。 A)实参与其对应的形参共占存储单元 B)只有当实参与其对应的形参同名时才共占存储单元 C)实参与对应的形参分别占用不同的存储单元 D)实参将数据传递给形参后,立即释放原先占用的存储单元

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 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6};② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6};④ static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"}; ④ char s[4]={'1','2','3'};

相关文档