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;ic语言数组习题
数组练习解答 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 && iC语言数组练习题
第七章数组 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'};