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

Posted 小赵小赵福星高照~

tags:

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

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

一、选择题

  • 在 C 语言中,表示静态存储类别的关键字是
    A. auto B. register C. static D. extern

答案解析:

static是静态存储类别的关键字

  • C 语言中函数返回值的类型是由决定的
    A. 函数定义时指定的类型
    B. return语句中的表达式类型
    C. 调用该函数时的实参的数据类型
    D. 形参的数据类型

答案解析:

C 语言中函数返回值的类型是由return语句中的表达式类型决定的

  • 对二维数组的正确定义是
    A. int a[][] = {1,2,3,4,5,6};
    B. int a[2][] = {1,2,3,4,5,6};
    C. int a[][3] = {1,2,3,4,5,6};
    D. int a[2,3] = {1,2,3,4,5,6};

答案解析:

二维数组列能省略,但是行不能省略

  • 若定义数组: int a[12] = {1,4,7,10,2,5,8,11,3,6,9,12}; , 则 i = 10;a[a[i]] 元素数值是____
    A. 10 B. 9 C. 6 D. 5

答案解析:

a[10]等于9,a[9]等于6,故答案为6

  • 以下能对一维数组 a 进行初始化的语句是
    A. int a[5] = (0,1,2,3,4,)
    B. int a(5) = {}
    C. int a[3] = {0,1,2}
    D. int a{5} = {10*1}

答案解析:

数组是用[]表示的,初始化需要用{}。

二、填空题

  • 下列代码段打印结果是
int main()
{
    int arr[] = {1,2,3,4,5};
    int *ptr = (int *)(&arr+1);
    printf("%d %d\\n",*(arr+1),*(ptr - 1));
    return 0;
}

答案解析:

arr是数组名,数组名是数组首元素的地址,+1为第二个元素地址,对它解引用拿到第二个元素,故第一个打印2,&数组名是整个数组的地址,+1是数组最后一个元素的下一个地址,ptr指向这里,ptr-1指向数组最后一个元素,解引用拿到最后一个元素,故打印5

  • 下面程序运行结果是____
int main()
{
    unsigned short sht = 0;
    sht--;
    printf("%d",sht);
    return 0;
}

答案解析:

sht–,sht减为-1,但是sht是无符号的short,-1在内存中的存储为11111111 11111111,它会被看成无符号的short,无符号数的补码就是原码,在打印时,会发生整型提升,它是无符号数,无符号数提升高位补0,即00000000 00000000 11111111 11111111,最终打印为65535

  • 有表达式 ch =‘B’+‘8’-‘3’ ,则 ch 表示的字符是

答案解析:

字符8-字符3的值为5,字符B+5为G,故表示的字符为’G’

三、算法题

题目描述:

模拟实现函数 pow(x,y) , 即实现运算x^y(x的y次方), 这里x和y都为整数。

思路:

递归思想:2^3等价于2*2^2等价于2*2*2^1,故代码如下

代码如下:

#include<stdio.h>
double my_pow(int x, int y)
{
	if (y > 0)
	{
		return x * my_pow(x, y - 1);
	}
	else if (y == 0)
	{
		return 1.0;
	}
	else
	{
		return 1.0/ my_pow(x, -y);
	}
}
int main()
{
	my_pow(2, 3);
	double ret = my_pow(2, -3);
	printf("%lf\\n",ret);
	return 0;
}

优化版本:

#include<stdio.h>
double my_pow(int x, int y)
{
	if (y > 0)
	{
		double temp = my_pow(x, y / 2);
		//如果为偶数
		if (y % 2 == 0)
		{
			return temp * temp;
		}
		//如果为奇数
		else
		{
			return x * temp * temp;
		}
	}
	else if (y == 0)
	{
		return 1.0;
	}
	else
	{
		return 1.0 / my_pow(x, -y);
	}
}
int main()
{
	my_pow(2, 3);
	double ret = my_pow(2, 4);
	printf("%lf\\n", ret);
	return 0;
}

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

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

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

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

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

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

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