如何定义指针数组和数组指针_数组是一种数据类型

如何定义指针数组和数组指针_数组是一种数据类型C语言期末错题集锦小司是城工人 第七章数组第八章指针作业九第七章数组(一)1.在C语言中,引用数组素时,其数组下标的数据类型允许是( C )。A. 整型变量B. 实型表达式C. 整型常量、整

C语言期末错题集锦–小司是城工人 第七章数组第八章指针   作业九第七章数组(一)   1.在C语言中,引用数组素时,其数组下标的数据类型允许是( C )。   A. 整型变量   B. 实型表达式   C. 整型常量、整型变量或整型表达式   D. 任何类型的表达式   注:但定义数组时,其数组下标的数据类型必须是整型常量,不能是变量、表达式或其它的数据类型   2.在C99标准之前,下列定义数组的语句中,正确的是(B )。   A.   int N=10;   int x[N];   B.   #define N 10   int x[N];   C. int x[0..10];   D. int x[];   3.若要定义一个具有5个素的整型数组,以下错误的定义语句是( D)。   A. int a[5]={0};   B. int b[ ]={0,0,0,0,0};   C. int c[2+3];   D. int i=5,d(i);   4.以下函数的功能是:通过键盘输入数据,为数组中的所有素赋值。   #include <stdio.h>   #define N 10   void fun(int x[N])   { int i=0;   while(i<N) scanf(“%d”,_______);   }   在程序中下划线处应填入的是(C )。   A. x+i   B. &x[i+1]   C. x+(i++)   D. &x[++i]   作业十第七章数组(二)   1.C语言中,若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首地址,即数组中第一个素的地址,而非第一个素的的值。   2.下述对C语言字符数组的描述中错误的是( )。   A. 字符数组可以存放字符串   B. 字符数组中的字符串可以进行整体输入/输出   C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值   D. 字符数组的下标从0开始   我的答案: C正确答案: C   3分   答案解析:C语言中,单个的字符变量只能存一个字符,字符数组可以存放字符串;字符数组中的字符串可以进行整体输入/输出,即可以用gets(数组名)/puts(数组名)的格式输出;字符数组的下标从0开始;但不可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值,所以引入了一个strcpy函数来实现字符串的复制。   3.错误的说明语句是( )。   A. static char word[ ]={‘T’, ‘u’, ‘r’, ‘b’, ‘o’, ‘\0’};   B. static char word[ ]={“Turbo\0”};   C. static char word[ ]= “Turbo\0”;   D. static char word[ ]= ‘Turbo\0’正确答案: D   0分   答案解析:字符数组在定义的同时赋初值,可以用单个字符一个一个的赋值,如A选项。也可以用字符串的形式赋值,如B、C选项。字符串是用双引号引起来的,字符是用单引号引起来的,所以D选项是错误的,因为字符串不能用单引号引起来。   4.错误的说明语句是( )。   A. static char word[ ]={‘T’, ‘u’, ‘r’, ‘b’, ‘o’, ‘\0’};   B. static char word[ ]={“Turbo\0”};   C. static char word[ ]= “Turbo\0”;   D. static char word[ ]= ‘Turbo\0’正确答案: D   答案解析:字符数组在定义的同时赋初值,可以用单个字符一个一个的赋值,如A选项。也可以用字符串的形式赋值,如B、C选项。字符串是用双引号引起来的,字符是用单引号引起来的,所以D选项是错误的,因为字符串不能用单引号引起来。   5.:strlen函数测的是字符串中第一个’\0’之前的有意义的字符的个数。   6.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):   #include<stdio.h>   #include<string.h>   main( )   { char a[10]= “abc”, b[10]= “012”, c[10]= “xyz”;   strcpy(a+1, b+2);   puts(strcat(a, c+1));   }   程序运行后的输出结果是( )。   A. a12xyz   B. 12yz   C. a2yz   D. bc2yz   我的答案: C正确答案: C   3分   答案解析:strcpy(a+1, b+2)是将b数组中从b[2]素开始的字符串复制到a[1]开始的位置上去, 所以复制后a数组的内容变成了”a2″。 strcat(a, c+1)是将c数组中从c[1]素开始的字符串连接到a数组中去,所以c数组中的a[0]素没有连接过去。所以最后a数组中的内容变成了“   7.分)已知:char str[ ]=”%%ab\n012\012\\\””;则执行语句:printf(“%d”,strlen(str));的结果是( )。   A. 5   B. 7   C. 9   D. 11   我的答案: D正确答案: D   3分   答案解析:strlen(str)函数的功能是统计出数组str中第一个’\0’之前的有意义的字符的个数,因此str中的11个字符分别是:%、%、a、b、\n、0、1、2、\012、\\、\”。注意此题中\n只控制了n,没有控制012,所以012要看成三个字符,而非一个八进制的转义字符。   8.int x[2][3];,则以下关于二维数组x的叙述错误的是( )。   A. x[0]可看作是由3个整形素组成的一维数组   B. x[0]和x[1]是数组名,分别代表不同的地址常量   C. 数组x包含6个素   D. 可以用语句x[0]=0;为数组所有素赋初值0   我的答案: D正确答案: D   3分   答案解析:二维数组的每一行可以看成一个一维数组,所以A选项正确。二维数组只写一个下标时,可以看成是一个一维数组名,代表的是某一行的起始地址,所以B选项正确。二维数组中素的个数是行标数乘以列标数,所以C选项正确。不能用语句x[0]=0;为数组所有素赋初值0,必须用循环给数组中的素一个一个的赋值,所以 D选项错误。   9.有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   3分   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   3分   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   3分   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   3分   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于传的是数组名,属于地址传递,共享同一段内存空间。所以数组a和b的内容相同,所以数组x和y的内容相同。在fun函数中,第一次循环,b[0]=a[0][0]-a[0][3]=1-4=-3;第二次循环,b[1]=a[1][1]-a[1][2]=6-7=-1;第三次循环,b[2]=a[2][2]-a[2][1]=11-10=1;第四次循环,b[3]=a[3][3]-a[3][0]=16-13=3。所以B选项正确。   10.下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是( A )。   A. if(strcmp(s2,s1)==0) ST;   B. if(s1==s2) ST;   C. if(strcpy(s1,s2)==1) ST;   D. if(s1-s2==0) ST;   字符串不行直接比较,必须使用循环一个字符一个字符的比,或使用strcmp函数来进行比较,所以B、D选项错误。如果两个字符串相等,则strcmp函数的返回值为0。所以A选项正确。   11.字符串不行直接比较,必须使用循环一个字符一个字符的比,或使用strcmp函数来进行比较,所以B、D选项错误。如果两个字符串相等,则strcmp函数的返回值为0。所以A选项正确。   12.作业详情   作业10-第7章数组(2)   题量: 27 满分: 100 作答时间:12-14 08:00至12-19 23:30   最终成绩100分   作答记录 本次成绩100分   一. 单选题(共17题,50分)   1. (单选题, 2分)若用数组名作为函数调用时的实参,则实际上传递给形参的是(   A. 数组首地址   B. 数组的第一个素值   C. 数组中的全部素的值   D. 数组素的个数   我的答案: A正确答案: A   2分   答案解析:在C语言中,若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首地址,即数组中第一个素的地址,而非第一个素的的值。   2. (单选题, 3分)下述对C语言字符数组的描述中错误的是( )。   A. 字符数组可以存放字符串   B. 字符数组中的字符串可以进行整体输入/输出   C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值   D. 字符数组的下标从0开始   我的答案: C正确答案: C   3分   答案解析:C语言中,单个的字符变量只能存一个字符,字符数组可以存放字符串;字符数组中的字符串可以进行整体输入/输出,即可以用gets(数组名)/puts(数组名)的格式输出;字符数组的下标从0开始;但不可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值,所以引入了一个strcpy函数来实现字符串的复制。   3. (单选题, 2分)错误的说明语句是( )。   A. static char word[ ]={‘T’, ‘u’, ‘r’, ‘b’, ‘o’, ‘\0’};   B. static char word[ ]={“Turbo\0”};   C. static char word[ ]= “Turbo\0”;   D. static char word[ ]= ‘Turbo\0’;   我的答案: D正确答案: D   2分   答案解析:字符数组在定义的同时赋初值,可以用单个字符一个一个的赋值,如A选项。也可以用字符串的形式赋值,如B、C选项。字符串是用双引号引起来的,字符是用单引号引起来的,所以D选项是错误的,因为字符串不能用单引号引起来。   4. (单选题, 3分)已知:char s[10],若要从终端给s输入5个字符,错误的语句是( )。   A. gets( &s[0] );   B. scanf(“%s”,s+1 );   C. scanf(“%s “,s[1] );   D. gets( s );   我的答案: C正确答案: C   3分   答案解析:因为s是数组名,它代表的是数组首素的地址,所以s等价于&s[0]。所以s+1等价于&s[1]。因为输入语句中都要用到地址,所以A、B、D选项是正确的,只有C选项中s[1]是素而非一个地址,所以C选项是错误的。   5. (单选题, 3分)   若有以下语句,则调用函数strlen(x), strlen(y),正确的描述是( )。   static char x[]=”01234”;   static char y[]={‘1′,’2′,’3′,’4′,’5’, ‘\0’};   A. x数组和y数组的长度相同   B. x数组长度大于y数组长度   C. x数组长度小于y的数组长度   D. x数组等价于y数组   我的答案: A正确答案: A   3分   答案解析:strlen函数测的是字符串中第一个’\0’之前的有意义的字符的个数。所以strlen(x)=5,strlen(y)=5,所以两个数组的长度相同。   6. (单选题, 3分)已知:char str1[10],str2[10]={“books”};则在程序中能够将字符串”books”赋给数组str1的正确语句是( )。   A. str1 = {“Books”};   B. strcpy (str1,str2);   C. str1 = str2;   D. strcpy (str2,str1);   我的答案: B正确答案: B   3分   答案解析:字符串的赋值不能直接用赋值语句赋值,除非是在定义的同时赋初值才可以,所以A、C选项错误。而strcpy函数是将第二个参数中的字符中赋值到第一个参数中去,所以B选项正确。   7. (单选题, 3分)   有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):   #include<stdio.h>   #include<string.h>   main( )   { char a[10]= “abc”, b[10]= “012”, c[10]= “xyz”;   strcpy(a+1, b+2);   puts(strcat(a, c+1));   }   程序运行后的输出结果是( )。   A. a12xyz   B. 12yz   C. a2yz   D. bc2yz   我的答案: C正确答案: C   3分   答案解析:strcpy(a+1, b+2)是将b数组中从b[2]素开始的字符串复制到a[1]开始的位置上去, 所以复制后a数组的内容变成了”a2″。 strcat(a, c+1)是将c数组中从c[1]素开始的字符串连接到a数组中去,所以c数组中的a[0]素没有连接过去。所以最后a数组中的内容变成了“a2yz” 。   8. (单选题, 3分)已知:char str[ ]=”%%ab\n012\012\\\””;则执行语句:printf(“%d”,strlen(str));的结果是( )。   A. 5   B. 7   C. 9   D. 11   我的答案: D正确答案: D   3分   答案解析:strlen(str)函数的功能是统计出数组str中第一个’\0’之前的有意义的字符的个数,因此str中的11个字符分别是:%、%、a、b、\n、0、1、2、\012、\\、\”。注意此题中\n只控制了n,没有控制012,所以012要看成三个字符,而非一个八进制的转义字符。   9. (单选题, 2分)以下能对二维数组a进行正确初始化的语句是( )。   A. int a[1][4] = {1,2,3,4,5};   B. float a[3][] = {{1,2},{2,3},{3,1}};   C. long a[2][3] = {{1},{1,2},{1,2,3},{0,0}};   D. double a[ ][3] = {8};   我的答案: D正确答案: D   2分   答案解析:二维数组定义的同时赋初值注意以下几点:1、只能省略行标,不能省略列标,所以B选项不正确。2、总个数不能超,所以A、C选项不正确。3、行数或列数不能超,C选项有4个内花括号,表示有4行,所以C选项不正确。   10. (单选题, 3分)设有定义:int x[2][3];,则以下关于二维数组x的叙述错误的是( )。   A. x[0]可看作是由3个整形素组成的一维数组   B. x[0]和x[1]是数组名,分别代表不同的地址常量   C. 数组x包含6个素   D. 可以用语句x[0]=0;为数组所有素赋初值0   我的答案: D正确答案: D   3分   答案解析:二维数组的每一行可以看成一个一维数组,所以A选项正确。二维数组只写一个下标时,可以看成是一个一维数组名,代表的是某一行的起始地址,所以B选项正确。二维数组中素的个数是行标数乘以列标数,所以C选项正确。不能用语句x[0]=0;为数组所有素赋初值0,必须用循环给数组中的素一个一个的赋值,所以 D选项错误。   11. (单选题, 3分)   有以下程序:   #include<stdio.h>   #define N 4   void fun(int a[][N],int b[])   { int i;   for(i=0; i<N; i++) b[i]=a[i][i]-a[i][N-1-i];   }   int main( )   { int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}, y[N], i;   fun(x,y);   for(i=0; i<N; i++) printf(“%d,”, y[i]); printf(“\n”);   }   程序运行后的输出结果是( )。   A. -12,-3,0,0,   B. -3,-1,1,3,   C. 0,1,2,3,   D. -3,-3,-3,-3   我的答案: B正确答案: B   3分   答案解析:实参数组x传给了形参数组a,实参数组y传给了形参数组b,由于传的是数组名,属于地址传递,共享同一段内存空间。所以数组a和b的内容相同,所以数组x和y的内容相同。在fun函数中,第一次循环,b[0]=a[0][0]-a[0][3]=1-4=-3;第二次循环,b[1]=a[1][1]-a[1][2]=6-7=-1;第三次循环,b[2]=a[2][2]-a[2][1]=11-10=1;第四次循环,b[3]=a[3][3]-a[3][0]=16-13=3。所以B选项正确。   12. (单选题, 3分)以下选项中,合法的是( )。   A. char str3[]={‘d’, ‘e’, ‘b’, ‘u’, ‘g’, ‘\0′};   B. char str4; str4=”hello world”;   C. char name[10]; name=”china”;   D. char str1[5]=”pass”, str2[6]; str2=str1;   我的答案: A正确答案: A   3分   答案解析:注意:C语言中不能直接使用赋值语句来实现拷贝或赋值,除非是在定义的同时赋初值,或者使用strcpy函数来实现赋值或拷贝。因此B、C、D选项错误,只有A选项正确。   13. (单选题, 3分)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是( )。   A. if(strcmp(s2,s1)==0) ST;   B. if(s1==s2) ST;   C. if(strcpy(s1,s2)==1) ST;   D. if(s1-s2==0) ST;   我的答案: A正确答案: A   3分   答案解析:字符串不行直接比较,必须使用循环一个字符一个字符的比,或使用strcmp函数来进行比较,所以B、D选项错误。如果两个字符串相等,则strcmp函数的返回值为0。所以A选项正确。   14. (单选题, 3分)下面描述正确的是( )。   A. 两个字符串所包含的字符个数相同时,才能比较字符串   B. 字符个数多的字符串比字符少的字符串大   C. 字符串”STOP”与”stop”相等   D. 字符串”That”小于字符串”The”   我的答案: D正确答案: D   3分   答案解析:两个字符串比较与其包含的字符个数无关,比较是它们对应位置上的字符的ASCII码的大小。C语言是区分大小写的,而所以小写字符的ASCII码比大写字符的ASCII码大。所以只有D选项正确。   15. 由于传的是数组名,属于地址传递,共享同一段内存空间。所以数组a和b的内容相同   16.以下程序的输出结果是( )。   #include<stdio.h>   #include<string.h>   void fun(int b[])   { static int i=0;   do   { b[i]+=b[i+1];   }while(++i<2);   }   main( )   { int k,a[5]={1,3,5,4,9};   fun(a);   for(k=0;k<5;k++)printf(“%d”,a[k]);   }   A. 13579   B. 48579   C. 48549   D. 48999   我的答案: C正确答案: C   4分   答案解析:实参数组a地址传递给了形参数组b,地址传递属于共享空间,所以数组a和b中的内容相同。又在fun函数中,do~while循环只执行了两次,第一次,b[0]=b[0]+b[1]=1+3=4。第二次,b[1]=b[1]+b[2]=3+5=8。b数组中后面的内容没有变,因此b数组中的内容为{4,8,5,4,9}。又因为地址传递属于共享空间,所以数组a和b中的内容相同。因此a数组中的内容也为{4,8,5,4,9}。   17.下面程序的输出结果是 。   #include<stdio.h>   void sort(int a[],int n)   { int i,j,t;   for(i=0;i<n-1;i++)   for(j=i+1;j<n;j++)   if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}   }   main( )   { int aa[10]={1,2,3,4,5,6,7,8,9,10},i;   sort(&aa[3],5);   for(i=0;i<10;i++) printf(“%d,”,aa[i]);   printf(“\n”);   }   我的答案:   5分   (1) 1,2,3,8,7,6,5,4,9,10,   正确答案:   (1) 1,2,3,8,7,6,5,4,9,10,   答案解析:此题中实参&aa[3]传给了形参数组a,所以形参数组a共享了实参数组aa中的后7个数据,即{4,5,6,7,8,9,10}。实参值5传给了形参n。而fun函数的功能是将形参a数组中的前5个数据进行降序排列,所以形参a数组中的内容变为:{8,7,6,5,4,9,10}。又aa数组的前三个数据没有共享给数组a,所以前三个数据不会改变,即还是为{1,2,3},所以aa数组中的内容最后变成:{1,2,3,8,7,6,5,4,9,10,}。   18.下面程序的输出结果是 。   #include<stdio.h>   #include<string.h>   main( )   { char x[]=”STRING”;   x[0]=0; x[1]=’\0′; x[2]=’0′;   printf(“%d%d\n”,sizeof(x),strlen(x));   }   我的答案:   5分   (1) 70   正确答案:   (1) 70   答案解析:sizeof是求数组x总共所占用的内存空间,包括’\0’。而strlen求的是数组x中第一个’\0’之前的有意义的字符的个数。又整数0、小数0.0、字符’\0’这三种符号的ASCII码值都相等,都为0,所以这三者等价。又字符串常量在内存中所占的空间数,除了双引号里字符外,还要再加一个结束标志’\0’。所以数组x所占的长度除了字符串”STRING”中的6个字符外,还要加一个结束标志’\0’,所以数组x所占的长度为7。 又x[0]=0,相当于 x[0]=’\0’。所以strlen(x)=0。   19.下面的函数invert的功能是将一个字符串的内容颠倒过来。   void invert(char str[])   { int i,j, ① ;   for(i=0,j=strlen(str) ② ;i<j;i++,j–)   { k=str[i];   str[i]=str[j];   str[j]=k;   }   }   我的答案:   5分   (1) k   (2) -1   正确答案:   (1) k   (2) -1   答案解析:第二个空要填的是最后一个有意义字符的下标,它应该为字符串的实际长度减1。   20.己知a所指的数组中有N个素。函数fun的功能是,将下标k(k>0)开始的后续素全部向前移动一个位置。   void fun(int a[N],int k)   { int i;   for(i=k;i<N;i++) a[ ① ]=a[i];   }   我的答案:   5分   (1) i-1   正确答案:   (1) i-1   答案解析:与a[i]素相邻的有a[i-1]和a[i+1],其中a[i-1]是a[i]前一个素,a[i+1]是a[i]后一个素。根据题意,我们要向前移动,所以是后一个素赋值给前一个素。所以应填i-1   21.下面的函数itoh(n,s)完成将无符号十进制整数转换成用十六进制数表示,并存入字符串组s中。程序中用到的函数reverse(char s[ ])是一个将字符串置逆的函数。   itoh(unsigned n, char s[])   { int h,i=0;   do   { h=n%16;   s[i++]=(h<=9)?h+’0’: ① ;   } while((n/=16)!=0);   ② ;   reverse(s);   }   我的答案:   5分   (1) ‘a’+ h-10   (2) s[ i]=’\0’   正确答案:   (1) ‘a’+h-10;h+’a’-10;’A’+h-10;h+’A’-10;h+(‘a’-10);h+(‘A’-10);   (2) s[i]=’\0′   答案解析:第一个空填的是当余数为10~15时,要转换成十六进制中对应的字符’a’~’f’,所以应填’a’+h-10。由于没有指定大小写,所以也可以填’A’+h-10。第二个空要填的是给字符数组s赋一个结束标志’\0’。所以应填s[i]=’\0’。   22.函数squeez (char s[ ], char c )的功能是删除字符串s中所出现的与变量c相同的字符。   squeez(char s[],char c)   { int i,j;   for(i=j=0; ① ;i++)   if(s[i]!=c) ② ;   s[j]=’\0′;   }   我的答案:   5分   (1) s[i]!=’\0′   (2) s[J++]=s[i]   正确答案:   (1) s[i]!=’\0′   (2) s[j++]=s[i]   答案解析:第一个空填的是循环的条件,而字符数组的循环条件一般是不等于结束标志,所以应填:s[i]!=’\0’。第二个空填的是将不等于字符c的其余字符保存下来,所以应填:s[j++]=s[i]。   23.函数index(char s[ ], char t[ ])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。   index(char s[],char t[])   { int i, j, k;   for(i=0;s[i]!=’\0′;i++)   { for(j=i,k=0; ① && s[j]==t[k];j++,k++); //s[j]不为空并且t[k]也不为空   if( ② ) //如果t[k]不为空   return(i);   }   return(-1);   }   我的答案:   5分   (1) s[j]!=’\0’&&t[k]!=’\0′   (2) t[k]==’\0′   正确答案:   (1) s[j]!=’\0’&&t[k]!=’\0′   (2) t[k]==’\0′   答案解析:第一个空填的是循环的条件,字符数组的循环条件一般都是不等于结束标志’\0’,由于有两个数组,因此两个数组应该都不等于结束标志,所以应填:s[j]!=’\0’&&t[k]!=’\0’。第二个空填的是找到字符串t的条件,找到了字符串t就证明在前面的匹配过程中字符串t前面的字符在字符串s中都连续存在,即字符串t找完了,所以应填:t[k]==’\0’。   作业11第八章指针   1.)对于类型相同的指针变量,不能进行( +)运算。   2)已知:   int a[10],*p;   p=a;   下列错误的语句是( D )。   A. *p=a[0];   B. *p=*a;   C. p=a+1;   D. p=*a;   3)下列程序段的运行结果是( C )。   #include <stdio.h>   void fun(int *x,int *y)   { printf(“%d %d “,*x,*y);   *x=3;   *y=4;   }   void main( )   { int x=1,y=2;   fun(&x,&y);   printf(“%d %d\n”,x,y);   }   A. 2 1 4 3   B. 1 2 1 2   C. 1 2 3 4   D. 2 1 1 2   4)若有以下说明和语句,且0<=i<10,则下面哪个是对数组素地址的正确表示( )。   int a[]={1,2,3,4,5,6,7,8,9,10},*p,i;   p=a;   A. &(a+1)   B. a++   C. &p   D. &p[i]   我的答案: D正确答案: D   5)下面程序的运行结果是( )。   #include <stdio.h>   void fun(int *a)   { a[0]=a[1];   }   int main( )   { int a[5]={5,4,3,2,1},i;   for(i=2;i>=0;i- -) fun(&a[i]);   for(i=0;i<5;i++) printf(“%d”,a[i]);   printf(“\n”);   }   我的答案:   10分   (1) 22221   正确答案:   (1) 22221   6)   下面程序的运行结果是( 50 )。   #include <stdio.h>   void f(int *p)   { p=p+3; }   int main( )   { int a[5]={50,40,30,20,10}, *p;   p=a;   f(p);   printf(“%d”,*p);   }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/78848.html

(0)
上一篇 2024年 8月 3日
下一篇 2024年 8月 3日

相关推荐

关注微信