C语言暑假刷题冲刺篇——day2

目录

一、选择题

二、编程题


  • 个人主页:库库的里昂
  •  CSDN新晋作者
  •  欢迎 点赞✍评论⭐收藏
  • ✨收录专栏:C语言每日一练
  •   ✨其他专栏:代码小游戏C语言初阶
  • 希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!

【前言】

在大家学完初阶C语言后,有很多知识点是比较模糊的,我们应该多刷题,这样才能巩固我们所学知识。所以我开了一个新专栏C语言每日一刷,每一篇都包含5道选择题,2道编程题,每一道题后面都会有详细的解析。这个系列每日一更,大家来看看吧! 

一、选择题

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

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

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

【答案】A

【解析】

strlen() 函数用于获取字符串的长度(即字符中字符的个数,不包括\0)。\\、\123、\t是转义字符,所以长度是12。
\\表示单个字符
\123 表示八进制的ASCII码值为123对应的字符
It 表示制表符

很多小伙伴会忘记转义字符的具体内容,这里有常用转义字符。

C语言暑假刷题冲刺篇——day2_第1张图片

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

#include
#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

【答案】B

【解析】

因为#define是宏定义,仅仅是直接替换,这里2替换N,N+1替换M,所以NUM为(N+1+1)*N+1/2=4*2+0=8,选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

【答案】C

【解析】

静态变量static只会被初始化一次,所以

第一次调用f(1):n=2;i=2;调用f(2)

第二次调用f(1):n=4;i=3;调用f(4)

第三次调用f(1):n=7;i=2;调用f(7)

第四次调用f(1):返回7

所以最终函数返回结果为7,选C。

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

int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

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

【答案】B

【解析】

const修饰指针变量的效果,是根据const和*之间的相对位置来决定的    const放在*的左边意味着对应的指针不能被修改,放在*的右边意味着指针所指向的内容不能被修改。那么观察题目我们只需要找相对位置一样的即可,不难发现,(1)和(2)const和*的相对位置都是const在*的右边,故效果一样,而(3)的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.以上说法均不对

【答案】D

【解析】

A结构体要按高位对齐,int占四个字节,short占两个,char占一个字节,所以4+4+4=12;

B要判断一个双精度浮点数:if(abs(f) <= 1e-15)

C数组初始化两种方式:一种逐个赋值char a[14]={'H','e','I','I','o'};另一种char a[14]="Hello,world!"

所以选D。

二、编程题

1.OJ链接【牛客网题号: HJ76 尼科彻斯定理】【难度:简单】

验证尼科彻斯定理,即:任何一个整数 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 个连续奇数之和的形式输出。
注意:本题含有多组输入数据。
输入描述:输入一个int整数
输出描述:输出分解后的string

示例:
输入:6
输出:31+33+35+37+39+41

#include
int main()
{
    int m = 0;
    while (scanf("%d", &m))
    {
        int i = 0;
        int ret = m * (m - 1) + 1;
        for (i = 1; i <= m; i++)
        {
            printf("%d", ret);
            ret += 2;
            if (m != i)
                printf("+");
        }
        printf("\n");
    }
    return 0;
}

2.OJ链接【牛客网题号: HJ100 等差数列】【难度:简单】

等差数列 2,5,8,11,14, ... 。(从 2 开始的 3 为公差的等差数列),求等差数列前 n 项和。
注意:本题有多组输入
输入描述:输入一个正整数 n 。
输出描述:输出一个相加后的整数。

示例:
输入:2 输入:275
输出:7 输出:113575
说明:2+5=7 说明:2+5+...+821+824=113575

#include
int main()
{
    int n = 0;
    while (scanf("%d", &n))
    {
        printf("%d\n", (3 * n + 1) * n / 2);
    }
    return 0;
}

好了,今天的每日一刷就到这里结束了,感谢大家的观看!

你可能感兴趣的:(C语言每日一练,c语言,开发语言,算法)