C语言—数组和指针练习题合集(二)

发布于:2025-08-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

做题要求:闭卷

做题时间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;
}

制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!


网站公告

今日签到

点亮在社区的每一天
去签到