题解:
一、选择题
1. A ,命令,以#号带头的行是预编译处理命令
2.B
array[][3]:
1 2 3
4 5 0
6 0 0
*p[3] 是一个数组指针
**dp是一个指向指针的指针
*(--dp-1) == p , p+5 的地址(从1开始数,1,2,3,4,5)
那么,*(p+5) == 5
深入理解C语言数组和指针:https://www.cnblogs.com/maluning/p/7955648.html
数组指针和指针数组 :https://blog.csdn.net/u013719339/article/details/80563247
3.B
因为数组名本身代表的就是数组的首地址,所以不需要&
如果是 int a;,那么 int *p = &a 才对
4. A = = = = =
100 104 108 112 116
5.A 结构体嵌套
6.D 原地逆序,链表直接头尾互换就ok了,O(1),数组原地逆序 O(n)
头部插入,链表O(1),数组还要往后挪n个单位 O(n)
返回头结点,都是一样的速度,head,a[0]
返回随机节点,链表需要模拟一个随机值,然后next到那个值O(n)
数组直接用下标就好 a[i]
7.C
程序区:存放二进制代码的区域
静态存储区:只读的变量区域,如const常量等。
动态存储区:堆、栈、动态变量(malloc)、函数调用返回等。
详解:https://blog.csdn.net/qq_36802648/article/details/79600741
8.B head->next == NULL
单链表详解:https://www.cnblogs.com/wft1990/p/6718623.html
9.C
每隔一年半生一个,那么15个孩子,一共用了 14*1.5年(15个节点,14段,每个1.5年)
设最大的孩纸 x 岁,最小的孩纸 y岁
x = 8 y
x = y + 14*1.5 ,解得 x = 24, y = 3
10.
array[][3]:
1 2 0
3 4 0
5 6 7
*(array + 1) == 第二行的首地址 array[1][0]
*(*(array + 1) + 3) == 0
二维数组的指针表示:https://zhidao.baidu.com/question/457190355.html
二、判断题
1.数组特定的值初始化后,余下的值都为0 ,正确
2. c 不可以是 float类型 (只能是整形和字符型),错误
3.(那上面少打个 & ,是逻辑运算与) ,&& 和 || 都是短路运算 , 正确
4.对于不同类型的值进行运算时,向取值范围大的那类转换 int->unsigned int ,正确
unsigned int 只有正数,没有负数,所以 a + b是个值很大的正数(肯定大于0的啦)
5.正确
详解:https://www.cnblogs.com/xwdreamer/archive/2012/04/12/2444494.html
三、填空题
1. sizeof(d) = 12,因为:struct内存对齐
详解:https://blog.csdn.net/u014170207/article/details/53113901
2. a+b > 0 ,因为: int 转化为 unsigned int
3. a = 9, b = 0
b^=a--;
b 0 0 0 0 0
a 1 0 0 1 9
----------------------
b 1 0 0 1 9
a 1 0 0 0 8
------------------------
a&=b++;
a 1 0 0 0 8
b 1 0 0 1 9
----------------------
a 1 0 0 0 8
b 1 0 1 0 10
------------------------
b|=--a;
b 1 0 1 0 10
a 0 1 1 1 7
-------------------
b 1 1 1 1 15
a 0 1 1 1 7
4.输出 49 8 (手动模拟一边就ok)
5 while(x > 0) if(sum == i)
6.for(int i=1; i<=n ; i+=2) for(int j=1 ; j<=i ; j++) f*=j
7 length - 1 array[j] = array[i] array[i] = traget 或者 array[j] = target (快排的一小段)
四、编程题
1.
1 #include <stdio.h> 2 int gcd(int a,int b){ 3 return b == 0 ? a:gcd(b,a%b); 4 } 5 int lcm(int a,int b,int x){ 6 return (a/x) * b; 7 } 8 int main(){ 9 int a,b; 10 scanf("%d%d",&a,&b); 11 int x = gcd(a,b); 12 printf("gcd:%d lcm:%d",x,lcm(a,b,x)); 13 return 0; 14 }
2.
1 #include <stdio.h> 2 double fac(int x){ 3 if(x == 0) return 1; 4 double ans = 1; 5 for(int i=1;i<=x;i++) 6 ans *= i; 7 return ans; 8 } 9 int main(){ 10 printf("n e "); 11 printf("- ----------- "); 12 for(int i=0;i<10;i++){ 13 printf("%d ",i); 14 double ans = 0; 15 for(int j=0;j<=i;j++){ 16 ans += (1.0/fac(j)); 17 } 18 printf("%.10g",ans); 19 if( i != 9) puts(""); 20 } 21 return 0; 22 }