暑假第二十天之每天一些题系列

Posted 小赵小赵福星高照~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第二十天之每天一些题系列相关的知识,希望对你有一定的参考价值。

暑假第二十天之每天一些题系列

一、选择题

  • 若函数的参数是数组,则传递给这个参数的值是

A. 整个数组被拷贝过去
B. 数组的首地址
C. 数组元素的个数
D. 数组第一个元素的值

答案解析:

数组传参是传过去得是数组的首地址

  • 以下数组初始化错误的是

A. int d[2][3] = {{1,2},{3,4},{5,6}};
B. int a[2][3] = {0};
C. int a[][3] = {1,2,3,4,5,6};
D. int b[][3] = {{1,2},{0}};

答案解析:

二维数组d是二行三列,但是初始化里面一个大括号是一行,有三个大括号就是三行,故是错误的

  • char x[] = “China”; 则 x 所占据的空间为

A. 6个字节
B. 7个字节
C. 5个字节
D. 8个字节

答案解析:

字符串的结束标志是\\0,China后面还要一个字符\\0,故是六个字符,占用六个字节

  • 以下不能正确进行字符串初始化的语句是

A. char str[8] = {‘g’, ‘o’, ‘o’, ‘d’, ‘!’};
B. char str[5] = “good!”;
C. char *str = “good!”;
D. char str[5] = {‘g’, ‘o’, ‘o’, ‘d’, ‘!’};

答案解析:

字符串后面还有\\0,而数组str只有五个空间,存不下\\0,故这种初始化是错误的。

  • 若有如下变量定义,则正确的叙述为
char x[] = "abcd";
char y[] = {'a', 'b', 'c', 'd'};

A. 数组x和数组y的值相同
B. 数组x的长度小于数组y的长度
C. 数组x的长度大于数组y的长度
D. 两个数组的长度相同

答案解析:

数组x和数组y的值不同,数组x当中有\\0,数组y没有;故数组x的长度大于数组y

二、填空题

  • 如下程序的输出结果是______________
#include<stdio.h>
int fun(int x)
{
    int count = 0;
    while (x)
    {
        count++;
        x = x &(x - 1);
    }
    return count;
}
int main()
{
    printf("%d\\n", fun(2019));
}

答案解析:

x=x&(x-1),这个操作是将x的二进制位当中从低位到高位的第一个1删除,故该函数的作用是计算传进来参数的二进制位当中1的个数,2019的二进制位的1的个数为:8

  • 如下程序的输出结果是___________
int Func(int a)
{
    int b = 0;
    static int c = 3;
    a = c++,b++;
    return (a);
}
int main()
{
    int a = 2, i, k;
    for (i = 0; i < 2; i++)
    {
        k = Func(a++);
    }
    printf("%d\\n", k);
    return 0;
}

答案解析:

for循环一共进行两次,故调用两次Func函数,第一次调用函数,a=c++,b++;a为3,c变为4,b变为1,然后第二次调用,因为c是静态变量,故a此时是4,故最后返回4,故最后k=4。

  • 如下程序的输出结果是__________
#include<stdio.h>
int main()
{
    int s = 0,n;
    for(n=0; n<4; n++)
    {
        switch(n)
        {
        default:s+=4;
        case 1:s+=1;
        case 2:s+=2;
        case 3:s+=3;
        }
    }
    printf ("%d\\n",s);
    return 0;
}

答案解析:

当n=0时,switch语句进入default,因为没有break,故会一直往下执行case,执行完后,s=10,当n=1时,switch语句执行case 1,因为没有break,故会一直往下执行case,执行完后,s=16,当n=2时,switch语句执行case 2,因为没有break,故会一直往下执行case,执行完后,s=21,当n=3时,switch语句执行case 3,执行完后,s=24,故最后s为24

三、算法题

题目描述:

编写代码完成如下功能:删除字符串首尾的空格,中间的连续空格只留一个,原来字符串的顺序不变。
如 “*****as****adadq******”(*是空格) 变成 “as*adadq”

代码如下:

char* format_string(char arr[])
{
	char* begin = arr;//指向首字符
	char* cur = arr;//指向当前处理的字符
	while (*cur!='\\0')
	{
		//去掉首部空格
		if (*begin == ' ')
		{
			begin++;
			cur++;
		}
		//如果有两个以上的空格
		if (*cur == ' ' && (*(cur + 1) == ' '|| *(cur+1) == '\\0'))//去除中间的空格与尾部的空格
		{
			char* temp = cur;
			while (*(temp + 1) != '\\0')
			{
				*temp = *(temp + 1);
				temp++;
			}
			*temp = '\\0';
		}
		else
		{
			cur++;
		}
	}
	return begin;
}
int main()
{
	char arr[] = "  i   love   you        ";
	printf("%s\\n", format_string(arr));
	return 0;
}

以上是关于暑假第二十天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章

暑假第五天之每天一些题系列

暑假第四天之每天一些题系列

暑假第一天之每天一些题系列

暑假第二天之每天一些题系列

暑假第九天之每天一些题系列

暑假第三天之每天一些题系列