C语言小练习(二)

C语言小练习(二)_第1张图片
“去努力吧,最坏的结果不过是大器晚成!”

Day02

  • 一.选择题
  • 二.编程题

一.选择题

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函数。关于转义字符,详细可见博客链接: 转义字符C语言小练习(二)_第2张图片
这里,我们主要使用了以上三种转义字符!
同样,我们也需要了解strlen函数,该函数用于求字符串的长度,遇到'\0'即停止。
在上述字符串中,✅答案中的12个字符分别是'\\' '1' '2' '3' '4' '5' '6' '\123' '4' '5' '6' '\t'.
通过程序运行,我们也能得到这样的结果:
C语言小练习(二)_第3张图片

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: 8C: 9 D: 6

答案:B
答题思路:#define是一种宏,一般会用在预处理阶段,在预处理阶段,define只会替换,不会做任何的算计逻辑等处理。那么NUM就应该等于(2+1+1)*2+1/2=8.
C语言小练习(二)_第4张图片

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

#include 
int f(int n)
{
	static int i = 1;
	if (n >= 5)
		return n;
	n = n + i;
	i++;
	return f(n);
}
int main()
{
	printf("%d\n", f(1));
	return 0;
}

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

答案:C
答题思路:本题主要的就是需要了解清楚static这个关键字的用法,关于关键字的详解可以跳转至博客链接: 关键字。
C语言小练习(二)_第5张图片
本题的解题流程如下:C语言小练习(二)_第6张图片

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

int b;
const int* a = &b;
int const* a = &b;
int* const a = &b;

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

答案:B
答题思路:const*左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变); 在 *的右边,则指针的指向不可变。简记为“左定值,右定向”.题目中(1)和(2)const都在 * 左边,(3)在*的右边,所以选择B.

5.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 选项,没有考虑内存对齐。 B 选项,考察 double 类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C 选项, a为数组首地址是常量不能改变,所以A,B,C 都是错的,选择 D
结构体和最大的类型对齐:一个格子代表一个字节,那么sizeof(X)的值应当为12,而sizeof(s) + sizeof(i) + sizeof(c)的值为7.
在这里插入图片描述

我们也可以编译运行得到该结果:

#include 
struct X
{
	short s; 
	int i; 
	char c;
};
int main()
{
	struct X x;
	printf("%d\n", sizeof(x));
	printf("%d", sizeof(x.s) + sizeof(x.i) + sizeof(x.c));
	return 0;
}

C语言小练习(二)_第7张图片

二.编程题

1.验证尼科彻斯定理,即:任何一个整数 m 的立方都可以写成 m 个连续奇数之和。例如:
13=1
23=3+5
33=7+9+11
43=13+15+17+19
输入一个正整数 m(m≤100) ,将 m 的立方写成 m 个连续奇数之和的形式输出。 注意:本题含有多组输入数据。数据范围:1≤m≤100
OJ链接【牛客网题号: HJ76 尼科彻斯定理】【难度:简单】

答题思路:C语言小练习(二)_第8张图片
我们可以发现,第一个奇数即为n2-(n-1),那么当我们知道了第一个奇数,后面的奇数我们可以采用for循环来表示出来!对于n2我们可以用库函数pow来实现。

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	int n = 0;
	scanf("%d", &n);
	int first = pow(n, 2) - (n - 1);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d",first);
		first += 2;
		if (i < n - 1)
		{
			printf("+");
		}
	}
	return 0;
}

✅自测运行:
C语言小练习(二)_第9张图片
C语言小练习(二)_第10张图片
2、等差数列 2,5,8,11,14, … 。(从 2 开始的 3 为公差的等差数列),求等差数列前 n 项和。
注意:本题有多组输入
输入描述:输入一个正整数 n 。
输出描述:输出一个相加后的整数。
数据范围: 1≤n≤1000
OJ链接【牛客网题号: HJ100 等差数列】【难度:简单】

答题思路:定义一个变量,通过for循环来表示以2为首项,3为公差的每一项。同时,还需要定义一个变量通过for循环来计算前n项的和。

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 2;
	int sum = 0;
	for (i = 0; i < n; i++)
	{
		sum += ret;
		ret += 3;
	}
	printf("%d\n", sum);
	return 0;
}

样例输出:
C语言小练习(二)_第11张图片

好啦,第二天的练习到这里就结束啦!后期会继续更新C语言的小练笔,欢迎大家持续关注、点赞和评论!❤️❤️❤️

你可能感兴趣的:(c语言,开发语言)