C语言—数组和指针练习题合集(二)
做题要求:闭卷
做题时间60分钟;
(选择题每题5分共50分,填空题每题5分共10分,编程题每题10分共40分)总分100分
一、选择题(50分)
题目1
判断字符串str1是否大于字符串str2,应当使用______;
A、if (str1>str2) B、if (strcmp(str1, str2))
C、if (strcmp(str2, str1)>0) D、if (strcmp(str1, str2)>0)
正确答案:D 分析:使用strcmp字符串比较函数,形参1比形参2大会返回一个正整数,相反会返回一个负数;相同会返回0;
题目2
下面程序段的运行结果是______;
char x[5]={'a', 'b', '\0', 'c', '\0'};printf("%s", x);
A、'a' 'b' B、ab C、ab0c D、abc
正确答案:B 分析因为使用字符串打印,遇到‘\0’编译器自动判断结束
题目3
有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_______;
A、gets(a, b); B、scanf("%s%s", &a, &b);
C、getchar(a); getchar(b); D、gets(a); gets(b);
正确答案:D 分析:选项A函数形参输入错误,选项B不应该采用取地址符,数组名就是首地址,选项C是单个字符输入
题目4
有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是________;
A、puts(s1, s2) B、printf("%s, %s", s1, s2);
C、putchar(s1, s2); D、puts(s1), puts(s2);
正确选项:D 分析:选项B也可以输出,但是不会换行不满足输出语句的要求。正确答案是选择D因为输出完后会自动换行
题目5
以下程序段的运行结果是________;
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a, b);
printf("%c", a[5]);
A、空白 B、\0 C、e D、f
正确答案:D 分析:是拷贝函数,ABC\0前四个拷贝过去但是a[5]的值并没有改变;
题目6
以下描述正确的是_______;
A、两个字符串所包含的字符个数相同时,才能比较字符串
B、字符个数多的字符串比字符个数少的字符串大
C、字符串"STOP└┘"与"STOP"相等
D、字符串"That"小于字符串"The"
正确答案:D 分析:A选项:错误。长度不同仍可比较。B选项:错误。长度不是决定性因素。C选项:错误。含空格的字符串与原字符串不等。D选项:正确。按字典序
"That"
确实小于"The"
。
题目7
以下对字符数组的描述中错误的是_________;
A、字符数组中可以存放字符串
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D、不可以用关系运算符对字符数组中的字符串进行比较
正确答案:D 分析:比较字符数组要有strcmp函数,关系运算符只能对单个字符比较
题目8
若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_______;
A、s1={"books"}; B、strcpy(s1, s2); C、s1=s2; D、strcpy(s2, s1);
正确答案B 分析:使用拷贝函数可以正确使用S2拷贝在S1上
题目9
以下printf语句的输出结果是_______;
printf("%d\n", strlen("school"));
A、7 B、6 C、存在语法错误 D、不定值
正确答案:B 分析:字符串加上结束标识符一共有7位,使用字符串计算长度函数不会把结束标识符记录上
题目10
下面程序的功能是将字符串s中所有的字符c删除。请选择填空。_______;
#include <stdio.h>
main( )
{ char s[80];int i, j;gets(s);for (i=j=0; s[i]!='\0'; i++)if (s[i]!='c') ____s[j]='\0';puts(s);
}
A、s[j++]=s[i] B、s[++j]=s[i] C、s[j]=s[i]; D、s[j]=s[i];
正确答案:A 分析:程序目的是删除字符串
s
中所有字符'c'
。通过遍历字符串,将非'c'
字符重新写入原数组,最后添加字符串结束符'\0'
并输出。
二、填空题(10)
题目1
根据下面说明和要求,完成对应的填空。
①、若有:char str1[10],str2[ ]={"student"}; 能把str2中的字符串赋给str1的串函数调用语句是___________;
②、若有:char str1[20]={"a good"}, str2[ ]={"student"}; 能把str2中的字符串接到str1中的字符串后面的串函数调用语句是____________
正确答案:1.strcpy( str1 ,str2);2.ctrcat( str1,str2);
题目2
下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。
int main( )
{ int a[2][3]={{1, 2, 3}, {4, 5, 6}};int b[3][2], i, j;printf("array a:\n");for (i=0; i<=1; i++){for (j=0; ____; j++){ printf("%5d", a[i][j]);____________;}printf("\n");}printf("array b:\n");for (i=0; ____; i++){for (j=0; j<=1; j++)printf("%5d", b[i][j]);printf("\n");}
}
正确答案:1.j<=2 2.arr[j][i] 3.i<2
三、编程题(40分)
题目1
需求:在数组{ 5,6,8,2,4}中排序
1.从小到大排序 2.从大到小排序
#include <stdio.h>
void bianli_arr(int arr[],int len);
void xuanze_min_max(int arr[],int len);
void xuanze_max_min(int arr[],int len);
int main()
{int arr[]={5,6,8,2,4};int len=sizeof(arr)/sizeof(int);bianli_arr(arr,len);xuanze_min_max(arr,len);bianli_arr(arr,len);xuanze_max_min(arr,len);bianli_arr(arr,len);return 0;
}
void xuanze_min_max(int arr[],int len)
{for(int i=0;i<len-1;i++){int temp=0;for(int j=i+1;j<len;j++){if(arr[i]>arr[j]){temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}
}
void xuanze_max_min(int arr[],int len)
{for(int i=0;i<len-1;i++){int temp=0;for(int j=i+1;j<len;j++){if(arr[i]<arr[j]){temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}
}
void bianli_arr(int arr[],int len)
{for(int i=0;i<len;i++){printf("arr[%d]=%d ",i,arr[i]);}printf("\n");
}
题目2
定义一个5个成员整型数组data[]={10,22,88,66,88},将所有的88替换成666
#include<stdio.h>
int main()
{int arr[]={10,22,88,66,88};int len=sizeof(arr)/sizeof(int);for(int i=0;i<len;i++){if(arr[i] == 88){arr[i]=666;}}for(int i=0;i<len;i++){printf("%d ",arr[i]);}return 0;
}
题目3
定义一个5个成员整型数组data[]={10,22,88,66,88},统计88的个数
#include<stdio.h>
int main()
{int arr[]={10,22,88,66,88};int len=sizeof(arr)/sizeof(int);int count=0;for(int i=0;i<len;i++){if(arr[i] == 88){count++;}}printf("88出现的个数有%d个\n",count);return 0;
}
题目4
定义一个5个成员整型数组data[]={10,22,88,66,88},将所有的88删除:data[]={10,22,66};
#include <stdio.h>
int main()
{int arr[]={10,22,88,66,88};int len=sizeof(arr)/sizeof(int);for(int i=0;i<len;){if(arr[i] == 88){len--;for(int j=i;j<len;j++){arr[j]=arr[j+1];}arr[len]=0;}else{i++;}}for(int i=0;i<len;i++){printf("%d ",arr[i]);}return 0;
}
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!