目录
本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!
选择题:
题一:
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: 以上都不对
题二:
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: 8C: 9 D: 6
题三:
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
题四:
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: 都一样
题五:
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: 以上说法都不对
A选项,没有考虑内存对齐。B选项,**考察double类型的比较,由于浮点数存在误差,**不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。C选项,a为数组首地址是常量不能改变,所以A,B,C都是错的,选择D
编程题:
题一:尼科彻斯定理
示例1
输入:
6
输出:
31+33+35+37+39+41
思路一:
此题考查对等差数列的认识 ,能够分析出题目中以公差为二 ,输入m即为项数 ,和即为等差求和。
cpp
#include <stdio.h>
#include <math.h>
//等差数列求和公式
int main()
{
int m = 0;
scanf("%d",&m);
//知和求首项
int sum = pow(m,3);
int a1 = sum/m -(m-1);
//打印每一项
for(int i = a1,j = 0;j < m;i+=2,j++)
{
printf("%d",i);
if(j < m-1)
{
printf("+");
}
}
return 0;
}
题二:等差数列
示例2
输入:
275
输出:
113575
说明:
2+5+...+821+824=113575
思路一:
等差数列求和: Sn=n*a1+n*(n-1)/2*3或者Sn=n*(a1+an)/2 an=a1*(n-1)*3
cpp
#include <stdio.h>
int main()
{
int n = 0;
int a1 = 2;
int sum = 0;
scanf("%d",&n);
//等差数列求和:Sn=n*a1+n*(n-1)/2*3
//Sn=n*(a1+an)/2 an=a1*(n-1)*3
sum = n*a1 + (n*(n-1)/2)*3;
printf("%d",sum);
return 0;
}