求1+2+…+n,要求不能使用乘除法、for、while、if、else...

题目:求1+2+…+n,

要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。

其实会有很多种解法,但是下面给出了一个简单的代码-----巧用递归算法。

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.   
  5. int add_fun(int n, int & sum)  
  6. {  
  7.     n && add_fun(n-1, sum);  
  8.       
  9.     return (sum += n);  
  10. }  
  11.   
  12. int main()  
  13. {  
  14.     int sum = 0;  
  15.     int n = 100;  
  16.   
  17.     printf("1+2+...+n = %d\n", add_fun(n, sum));  
  18.   
  19.     return 0;  
  20. }  

顺便记录下一些容易忘记的题目:

int a[3][5],*p=a,(*)q[5]=a;设a的地址为2000,则下述语句的输出的结果?? 
printf(“%u%u\n”,p+6,*(q+1)+4); 

理解不了的地方:(*)q[5]=a,这句话是什么意思呢?实在是费解,还请大牛给分析下

首先说明这短短两条语句,却包括了两处语法错误:1,*p = a 这句是不合法的,两个值的类型不同,前者是整形指针,后者是数组指针,如果你一定要这样做的话应该这样写 *p = (int *)a 强制转换; 2,(*)q[5] = a 这句也是不对的(或者是我见识少,从未见过这种写法),程序的意思可能是这样 (*q)[5] = a 将q定义为数组指针。 
经过两处改动后,再来看,假如a的地址是2000,int是4个字节的话。那么p+6的值就是2000 + 4*6 = 2024; *(q+1)+4 的值就是 2000 + 5*4 + 4*4。 

最后,你说(*)q[5]=a 不理解,我认为是不解 (*q)[5] = a 这句,其实这是定义了一个数组指针,该指针指向的是一个数组。例如 ++q,是将q移动一个数组的距离,在本例中就是 4*5 。

http://blog.csdn.net/shiren_bod/article/details/6703467

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值