★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录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来控制字符个数,注意要包含