题1:
- #include <stdio.h>
- int main(void)
- {
- int sum=0;
- int a[][4]={1,2,3,5,8,13,21,34,56};
- int (*ptr)[4]=a;
- sum=(*ptr)[1]+a[0][3]+a[1][2];
- ptr++;
- sum+=(*ptr)[2];
- printf("sum=%d\n",sum); //49
- return 0;
- }
题2:
- #include <stdio.h>
- union
- {
- int x;
- char y[3];
- }w;
- int main()
- {
- w.y[0]=10;
- w.y[1]=1;
- printf("%d\n",w.x); //266
- return 0;
- }
题3:用递归实现n的阶乘
1)比较低级的写法:
- #include <stdio.h>
- int ask(int a,int *sum)
- {
- (*sum)*=a;
- if(a>1)
- {
- a--;
- ask(a,sum);
- }
- else
- return *sum;
- return 0;
- }
- int main()
- {
- int sum=1;
- ask(3,&sum);
- printf("%d\n",sum);
- return 0;
- }
2)一般会这样写
- #include <stdio.h>
- #include <string.h>
- /*int ask(int a)
- {
- if(a>1)
- return a*ask(a-1); //return a*ask( a--); 这样,就错
- //return a*ask( --a);这样总少一个
- else
- return 1;
- }*/
- int ask(int a)
- {
- return (a>1)?(a*ask(a-1)):1;
- }
- int main()
- {
- int sum=0;
- sum=ask(5);
- printf("%d\n",sum);
- return 0;
- }
转载于:https://blog.51cto.com/liangbing8612/671297