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

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

一、选择题

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

#include<stdio.h>
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 表示制表符


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


image.png


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


【答案】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<stdio.h>
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<stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n))
    {
        printf("%d\n", (3 * n + 1) * n / 2);
    }
    return 0;
}

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


d52ce744a5b345408dd596d71f65e762[0].png

相关文章
|
6月前
|
安全 C语言
【C语言刷题】字符串逆序
【C语言刷题】字符串逆序
57 0
|
6月前
|
存储 C语言
【C语言刷题】操作符系列
【C语言刷题】操作符系列
44 0
|
6月前
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
89 1
|
6月前
|
机器学习/深度学习 C语言
【C语言刷题】函数递归系列
【C语言刷题】函数递归系列
32 1
|
7月前
|
编译器 C语言
C语言刷题(1)
C语言刷题(1)
52 0
|
5天前
|
C语言
C语言刷题1
C语言刷题1
|
2月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
29 0
|
2月前
|
C语言
错误的集合(初阶C语言刷题)
错误的集合(初阶C语言刷题)
|
3月前
|
C语言
C语言刷题训练【第11天】
C语言刷题训练【第11天】
|
3月前
|
C语言
C语言刷题训练【第十天】
C语言刷题训练【第十天】

相关实验场景

更多