C语言题目强化-DAY13

题型指引

  • 一、选择题
  • 二、编程题


★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录C语言题目练习的过程,如果对你也有帮助,那就点个赞吧。


一、选择题

1、如果x=2014 ,下面函数的返回值是( )

int fun(unsigned int x)
{
	int n = 0;
	while(x + 1)
		{
		n++;
		x = x | (x + 1);
		}
	return n;
}

A: 20 B: 21 C: 23 D 25

正确答案:C
答案解析:这个作用是对整型中0的个数进行统计,x=x|(x+1);的作用是每次循环把x的二进制中从右往左数的最后一位0变成1,直道变成
全1的时候x+1就溢出为全0,循环结束。2014的二进制是0000 0000 000 0000 0000 0111 1101 1110,所以结果是23,选项C正确。

2、下列语句定义x 为指向int 类型变量a 的指针,其中哪一个是正确的( )
A: int a , *x = a; B: int a , *x = &a; C: int *x = &a , a; D: int a , x = a;

正确答案:B
答案解析:A选项的x是指针,赋值时应该使用&a,C选项在赋值时a变量还没定义,D选项中的x不是指针,选项B正确。

3、下面有关空指针和未初始化指针,说法错误的是( )
A: 对0x0这个地址取值是非法的
B: 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方
C: 空指针与任何对象或函数的指针值都不相等
D: malloc在其内存分配失败时返回的是一个未初始化的指针

正确答案:D
答案解析:malloc函数在内存分配失败时返回NULL,选项D错误。

4、若有定义int a[8]; ,则以下表达式中不能代表数组元素a[1] 的地址的是( )
A: &a[0]+1 B: &a[1] C: &a[0]++ D: a+1

正确答案:C
答案解析:D选项a计算时是首元素地址,再加1,就是a[1]的地址,AB明显对,C选项a[0]先和++结合,形成一个表达式,不能对表达式
取地址,会报错,选项C错误。

5、以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )
A: + B: - C: = D: ==

正确答案:A
答案解析:A错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相
隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同,选项A正确。

二、编程题

1、有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问第n 个月的兔子总数为多少?
注意:本题有多组数据。
数据范围:每组输入满足 1 <= n <= 31
输入描述:多行输入,一行输入一个int型整数表示第n个月
输出描述:每一行输出对应的兔子总数

牛客网【牛客网题号: HJ37 统计每个月兔子的总数】

示例:
输入:1 2 3 4 5 6 9
输出:1 1 2 3 5 8 34
#include 
int main()
{
	int n;
	while (~scanf("%d", &n)) {
		int num1 = 1, num2 = 1, ret = 0;
		if (n == 1)
			ret = 1;
		if (n == 2)
			ret = 2;
		for (int i = 2; i < n; i++) {
			ret = num1 + num2;
			num1 = num2;
			num2 = ret;
		}
		printf("%d\n", ret);
	}
	return 0;
}

代码思路:这道题的关键在于寻找数字之间的规律,如果细心的同学会发现这其实是一个斐波那契数列。

2、数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
输入描述:输入数据有多组,每组占一行,由两个整数n(n<10000) 和m(m<1000) 组成,n和m的含义如前所述。
输出描述:对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
牛客网【牛客网题号: ZJ16 数列的和】

示例:
	输入:81 4
		2 2
	输出:94.73
		3.41
#include
#include
int main() {
	double n = 0.00;
	int m = 0;
	while (scanf("%lf%d", &n, &m) != EOF)
	{
		double sum = 0.00;
		for (int i = 0; i < m; i++)
		{
			sum += n;
			n = sqrt(n);
		}
		printf("%.2lf \n", sum);
	}
	return 0;
}

代码思路:简单的循环思路对每一次根号下的n取求和即可,循环控制相加的项数,最后格式化打印需要用.2来控制字符个数,注意要包含头文件。

你可能感兴趣的:(C语言题目强化练习,c语言,算法,开发语言)