目录
一、选择题
二、编程题
- 🎈个人主页:库库的里昂
- 🎐CSDN新晋作者
- 🎉欢迎 👍点赞✍评论⭐收藏
- ✨收录专栏:C语言每日一练
- ✨其他专栏:代码小游戏C语言初阶
- 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗
【前言】
在大家学完初阶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 表示制表符
很多小伙伴会忘记转义字符的具体内容,这里有常用转义字符。
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;
}
好了,今天的每日一刷就到这里结束了,感谢大家的观看!