校软第二次考核11.11

 

题解:

一、选择题

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\n");
11     printf("- -----------\n");
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 }

 

posted @ 2018-12-13 14:30  lukelmouse  阅读(152)  评论(0编辑  收藏  举报