【C语言】每日一题(半月斩)——day2

 

目录

一.选择题

1、以下程序段的输出结果是( )

2、若有以下程序,则运行后的输出结果是( ) 

3、如下函数的 f(1) 的值为( ) 

4、下面3段程序代码的效果一样吗( ) 

5、对于下面的说法,正确的是( ) 

二,编程题

1.尼科彻斯定理

2.等差数列


一.选择题

1、以下程序段的输出结果是( )

int main()
{
	char s[] = "\\123456\123456\t";
	printf("%d\n", strlen(s));
	return 0;
}

A: 12              B:13             C: 16               D: 以上都不对 

解析

考察的是转义字符

\\ 表示字符'\',\123表示字符'{',\t表示制表符;

转义字符通常考察两种:

①\ddd ddd表示1~3个八进制

②\xhh hh表示1~2个十六进制

正确答案:A

2、若有以下程序,则运行后的输出结果是( ) 

#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
	printf("%d\n", NUM);
	return 0;
}

A: 4         B: 8         C: 9         D: 6 

解析

考察的是define宏定义

宏只是替换,替换后NUM的样子是(2+1+1)*2+1/2,计算得8 ;

#define是宏定义,只进行替换

正确答案:B

3、如下函数的 f(1) 的值为( ) 

int f(int n)
{
	static int i = 1;
	if (n >= 5)
		return n;
	n = n + i;
	i++;
	return f(n);
}

A:5         B:6         C:7         D:8

解析:
考察的是函数递归

static修饰的局部变量——称为静态局部变量

 static实际修改了局部变量的存储类型,将原本应该存储在栈区的局部变量存储在静态区。静态区上数据存储的特点是,程序结束变量才被释放。我们常见的全局变量就是存储在静态区上。现在我们分析static修饰后作用域和生命周期的变化:

【作用域】:作用域不变,只是出作用域不被销毁
【生命周期】:生命周期变长,程序结束生命周期才结束

正确答案:C

4、下面3段程序代码的效果一样吗( ) 

int b;
①const int* a = &b;
②int const* a = &b;
③int* const a = &b;

A: (2)=(3)         B: (1)=(2)         C: 都不一样         D: 都一样 

解析:

考察的是const; 

将变量转成常量

但并不是真正的变成常量,只是语法形式变成常量;本质上还是变量,

counst 修饰的变量不能再被改变;

修饰指针有两种方法

counst int* p ;

int * counst p;

  • const 放在的左边

限制的指针指向的内容,也就是说: 不能通过指针来修改指针指向的内容

但是指针变量是可以修改的,也就是指针指向其他变量的

  • const 放在的右边

限制的是指针变量本身,指针变量不能再指向其他对象

但是可以通过指针变量来修改指向的内容

正确答案:B

5、对于下面的说法,正确的是( ) 

 A: 对于 struct X{short s;int i;char c;},sizeof(X)等于sizeof(s) + sizeof(i) + sizeof(c)

B: 对于某个double变量 a,可以使用 a == 0.0 来判断其是否为零

C: 初始化方式 char a[14] = "Hello, world!"; 和char a[14]; a = "Hello, world!";的效果相同

D: 以上说法都不对 

 解析:

考察的是结构体和sizeof;

A.没有考虑内存对齐

B.考察浮点型的比较,由于浮点型存在误差,不能直接判断两个数是否相等,通常采用比较两个数差的绝对值是否小于一个很小的数,作为误差

C.第二种的a代表首元素的地址,地址是常量不可以改变

正确答案:D

二,编程题

1.尼科彻斯定理

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

数据范围:1≤m≤100 

尼科彻斯定理——牛客网 

#include<math.h>
int main()
{
    int m = 0;
    scanf("%d", &m);
    //获得m的三次幂的数
    int ret = pow(m, 3);
    printf("m的立方数:%d\n", ret);
    //如果m是1
    if (m == 1)
    {
        printf("%d", m);
    }
    //找到首个元素
    int num = m * m - m + 1;
    //进行循环找到后面m个数字
    for (int i = 0; i < m; i++)
    {
        //打印首个数字
        if (i == 0)
        {
            printf("%d ", num);
        }
        //打印后面的
        else {
            printf("+ %d ", num);
        }
        num += 2;
    }
    return 0;
}

 通过示例发现,我们只要找到相加数字串的首个数字就可以通过+2的方式找到后面m-1个;

4^3=13+15+17+19;

首数字13是4*4-4+1得到的数字,然后就是通过循环找到后面几个数字;

2.等差数列

等差数列 2,5,8,11,14。。。。
(从 2 开始的 3 为公差的等差数列)
输出求等差数列前n项和

数据范围:1≤n≤1000
输入描述:
输入一个正整数n。
 
输出描述:
输出一个相加后的整数。

等差数列———牛客网

int main()
{
	int n = 0;
	int arr[1000];
	scanf("%d", &n);
	//将等差数列存入数组
	for (int i = 0; i < 1000; i++)
	{
		arr[i] = 3 * (i + 1) - 1;
	}

	//将等差数累加
	int sum = 0;
	for (int j = 0; j < n; j++)
	{
		sum = sum + arr[j];	
	}
	printf("%d", sum);
	return 0;
}

 

 

猜你喜欢

转载自blog.csdn.net/m0_67367079/article/details/132890227
今日推荐