随笔 - 2, 文章 - 1, 评论 - 0, 引用 - 0
数据加载中……

2012年4月28日

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)

这里是详细的四种解法 http://anwj336.blog.163.com/blog/static/89415209201010294122283/

但是我认为还有一种更简便的方法:使用&&运算符。
代码如下
1int nFactorial(int n)
2{
3    int num = 0;
4    (n > 0&& (num = n + nFactorial(n - 1));
5
6    return num;
7}

在第四句,如果n<=0了,就不会去判断&&后面的语句了,也就不会继续递归下去了。

posted @ 2012-04-28 10:32 阿伟 阅读(2811) | 评论 (0)编辑 收藏

2012年4月27日

scanf读取屏幕一行的问题

用scanf获取一行字符串包括空格的以及C语言函数   的原帖在http://www.rupeng.com/forum/thread-3196-1-1.html

其内容为

#include<stdio.h>
int main()
{
      char a[777];
      scanf("%[^\n]",&a);
      printf("%s",a);
      return 0;
}

说明:
在scanf函数中,可以使用 %c来读取一个字符,使用%s读取一个字符串,但是读取字符串时不忽略空格,读字符串时忽略开始的空格,并且读到空格为止,因此只能读取一个单词,而不是整行字符串,因此一般使用fgets来读取一个字符串。其实scanf函数也可完成这样的功能,而且还更强大。这里主要介绍一个参数,%[ ],这个参数的意义是读入一个字符集合。[ ]是个集合的标志,因此%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是"^", 这说明读取不在"^" 后面集合的字符,既遇到"^" 后面集合的字符便停止.注意此时读入的字符串是可以含有空格的。

在这里主要是想说明一点:
      如果要循环的从屏幕上读取一行的话,就要在读取一行后,在用%c读取一个字符,将输入缓冲区中的换行符给读出来。否则的话,在下一次读取一行的时候,第一个就遇到'\n',匹配不成功就直接返回了。

posted @ 2012-04-27 19:16 阿伟 阅读(1165) | 评论 (0)编辑 收藏