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