《C语言假期作业学习笔记》—Day02

《C语言假期作业学习笔记》—Day02_第1张图片

请乘理想之马

挥鞭从此起程

路上春色正好

天上太阳正晴 

                                                                       ——希望疫情早日结束,所有美好如约而至!

 Day02

一、选择题

1、以下程序段的输出结果是( )
《C语言假期作业学习笔记》—Day02_第2张图片

A: 12  

B: 13  

C: 16  

D: 以上都不对

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

 《C语言假期作业学习笔记》—Day02_第3张图片

A: 4  

B: 8  

C:

 D: 6

3、如下函数的 f(1) 的值为( )
《C语言假期作业学习笔记》—Day02_第4张图片

 A: 5  

B: 6  

C: 7  

D: 8

4、下面3段程序代码的效果一样吗( )
《C语言假期作业学习笔记》—Day02_第5张图片

 A: (2)=(3)

B: (1)=(2)

C: 都不一样

D: 都一样

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: 以上说法都不对

二、编程题

T1: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个连续奇数之和的形式输出。

本题含有多组输入数据。

数据范围:数据组数:

进阶:时间复杂度:O(1),空间复杂度:O(1)

输入描述:

输入一个int整数

输出描述:

输出分解后的string

示例1

输入:6

输出:31+33+35+37+39+41

T2:HJ100 等差数列

描述

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

本题有多组输入

数据范围: 

输入描述:

输入一个正整数n。

输出描述:

输出一个相加后的整数。

示例1

输入:2

输出:7

说明:2+5=7

示例2

输入:275

输出:113575

说明:2+5+...+821+824=113575

题解:

一、选择题

1、

答案解析:
正确答案: A
这里考查转义字符,注意: \\ 表示字符 '\' \123 表示字符 '{' \t 表示制表符,这些都是一个字符
2、
答案解析:
正确答案: B
宏只是替换,替换后 NUM 的样子是 (2+1+1)*2+1/2 ,计算得 8
3、
答案解析:
正确答案: C
此题注意静态局部变量的使用, static 改变了 i 的生命周期,第一次调用函数: i 初值是 1 ,递归第二次调用函数时, i 还是第一次那个变量,值已经变成了2 ,再一次调用函数时 i 就是 3 ,依次类推
4、
答案解析:
正确答案: B
const * 的左边,则指针指向的变量的值不可直接通过指针改变 ( 可以通过其他途径改变 ); * 的右边,则指针的指向不可变。简记为" 左定值,右定向 " (1) (2)const 都在 * 的左边, (3) const * 的右边,所以应该选择 B
5、
答案解析:
正确答案: D
A 选项,没有考虑内存对齐。 B 选项,考察 double 类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C 选项, a为数组首地址是常量不能改变,所以A,B,C 都是错的,选择 D

二、编程题

1 、【答案解析】:
这道题的关键在于知道规律后,能够找到第 n 个数据立方的起始奇数,从这个起始奇数开始,组成连续的 n 个奇数项之和的表达式即可。
比如: 3^3 的起始奇数是 7 , 则 {7, 9, 11} 3 个奇数求和表达式 7 + 9 + 11
而起始奇数有个规则: m^3 的起始奇数值等于 m * (m - 1) + 1
奇数起始项规律:
首先所有奇数项构成一个差值为2的等差数列, 1 3 5 7 9 ....
其次,1的起始奇数是第1个等差数列项,2的起始奇数是第2个等差数列项,3的起始奇数是第4个等差数列项...
形成规律: 1 2 4 7....,而他们的差值分别是1 2 3 4 5...,所以第n项就是一个从1开始到n - 1的等差数列之和 + 1
因此当有了需求m的立方,首先计算他的第一个奇数项是总体的第几个 。
等差数列求和公式 Sn = n(a1 + an) / 2 m * (m - 1) / 2
等差数列第n项公式 an = a1 + (n - 1)d 1 + ((m * (m - 1) / 2) + 1 - 1) * 2
最终得到m的立方的表达式起始奇数: m * (m - 1) + 1
#include 
int main()
{
	int m;
	while (~scanf("%d", &m)) 
	{
		int start = m * (m - 1) + 1;//找到对应m^3的起始奇数
		char buf[10240] = { 0 };
		//sprintf(buf, format, ...) 与printf用法类似,格式化字符串但是不用于打印而是放到一个buf中
		sprintf(buf, "%d", start);//先将起始奇数转换成为字符串存入buf中
		for (int i = 1; i < m; i++)
		{
			//然后将紧随随后的m-1个奇数数字转换为字符串,按照指定格式放入buf中
			//%s+%d, 要求先有一个字符串,然后是+符号,然后是个数字的格式,对应是buf原先的数据,和奇数
			sprintf(buf, "%s+%d", buf, start += 2);
		}
		printf("%s\n", buf);
	}
	return 0;
}

2、【答案解析】: 这道题了解了等差数列求和公式 Sn=n(a1+an)/2 就简单了 ,根据题目得知 a1=2 ,而等差数列第n项也有具体公式 an=a1+(n-1)d ,而公差为3, 这时候只需要套入公式计算即可。

#include 
int main()
{
	int n, a1 = 2;
	while (~scanf("%d", &n))
	{
		int an = a1 + (n - 1) * 3;//等差数列第n项计算
		printf("%d\n", n * (a1 + an) / 2); //等差数列求和打印
	}
	return 0;
}

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                ——By 作者:新晓·故知

《C语言假期作业学习笔记》之内容采用动态管理即若学习到多解、优解等将会进行更新,敬请读者斧正!

你可能感兴趣的:(《C语言》,c语言)