博文

[031] 判断m是否是素数(2006-03-10 22:01:00)

摘要:<谭> 6.8 判断m是否是素数

    采用如下算法:让m被2到m^2除,如果m能被2~m^2之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即m^2);如果m不能被2~k(即m^2)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2~k之间任一整数整除过,因此输出“是素数”。

#include <stdio.h>
#include <math.h>
int main()
{
    int m, i, k;
    scanf("%d", &m);
    k = sqrt(m);     for (i = 2; i <= k; i++)
        if (m % i == 0) break;     if (i >= k + 1)
        printf("%d is a prime number\n", m);
    else
        printf("%d is not a prime number\n", m);     return 0;
}

★ 素数: 大于1,并且除1和它本身外没有其他因数的自然数叫素数(或质数) ,2是最小的素数,除2以外,所有的偶数都不是素数。
6.9 求100~200间的全部素数。

#include <stdio.h>
#include <math.h>
int main()
{
  &nb......

阅读全文(7725) | 评论:3

[030] Fibonacci数列与黄金分割(2006-03-09 22:11:00)

摘要:<谭> 6.7 求Fibonacci数列的前40个数。该数列有如下特点: 第1, 2两个数为1,1。从第3个数开始,每个数等于前2个数之和。
生成方法为:
F1=1                  (n=1)
F2=1                  (n=2)
Fn=Fn-1+Fn-2           (n>=3)
#include <stdio.h>

int main()
{
    long int f1, f2; /* 作为循环体的"前两项",会超过32767,所以用long */
    int i;           /* 计数 */
    f1 = 1; f2 = 1;
    for (i = 1; i <= 20; i++)          /* 循环一次输出2个,共进行20次 */
    {
        printf("%12ld %12ld", f1, f2); /* 第22个数之后值超过32767,必须用ld,而非d */
        if ( i % 2 == 0)&......

阅读全文(5925) | 评论:1

[029] 求π的近似值(2006-03-08 22:43:00)

摘要:<谭> 6.7 用 π / 4 ≈ 1 - 1/3 + 1/5 - 1/7 + ……公式求π 的近似值,直到最后一项的绝对值小于10-6为止。
#include <stdio.h>
#include <math.h>
int main()
{
    int s; 
    float n, t, pi;
    t = 1;                    /* 第一项为1       */
    pi = 0;                   /* 多项式的和      */
    n = 1.0;                  /* 各项分母        */
    s = 1;                    /* 控制各项正负    */
    while ......

阅读全文(4068) | 评论:1

[028] break与continue(2006-02-23 14:35:00)

摘要:break:
在循环语句中,break语句的作用是在循环体中测试到应立即结束循环条件时,控制程序立即跳出循环结构,转而执行循环语句后的语句。

continue:
只能用于循环结构中,作用是结束本次循环。一旦执行了continue语句,程序就路跳循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新一轮循环。 <1> 求1到100的和,如果和超过4000,则跳出循环,此时输出的和是多少? #include <stdio.h>
int main()
{
    int i = 1, sum = 0;
    for(i = 1; i < 101; i++)
    {
        sum += i;
        if(sum > 4000)
            break;       /* 结束for循环 */
    }
    printf("i=%d sum=%d\n", i, sum);
    return 0;
} 运行结果:
======================
i=98 sum=4005
====================== <2> 求1到100内的偶数的和 #include <stdio.h>
int main()
{
    int i = 1, even_sum = 0;    
    for(i = 1; i &l......

阅读全文(2728) | 评论:0

[027] 1到100之和~while^do-while区别(2006-02-23 13:41:00)

摘要:练练循环结构: 1到100之和 <1> for 语句

#include <stdio.h>
int main()
{
    int i, sum;
    sum = 0;
    for (i = 1; i < 101; i++)
        sum += i;
    printf("sum=%d\n", sum);
    return 0;   
} <2> goto 语句

#include <stdio.h>
int main()
{
    int i = 1, sum = 0;
    table: sum += i;       /*有点像汇编^_^ */
          i++;
          if(i < 101)
              goto table;
          printf("sum=%d\n", sum);
          return 0;
} ★ goto 语句使程序的转移控制变得非常灵活,但是也造成了导......

阅读全文(5135) | 评论:1

[026] 求两数最大公约,最小公倍数(2006-02-22 14:03:00)

摘要:P120 6.1 <谭> 输入两个正整数m和n, 求其最大公约数和最小公倍数. <1> 用辗转相除法求最大公约数
算法描述:
m对n求余为a, 若a不等于0
则 m <- n, n <- a, 继续求余
否则 n 为最大公约数
<2> 最小公倍数 = 两个数的积 / 最大公约数

#include <stdio.h>
int main()
{
    int m, n;
    int m_cup, n_cup, res;          /*被除数, 除数, 余数*/
    printf("Enter two integer:\n");
    scanf("%d %d", &m, &n);
    if (m > 0 && n >0)
    {
        m_cup = m;
        n_cup = n;

        res = m_cup % n_cup;
        while (res != 0)
        {
            m_cup = n_cup;
        &n......

阅读全文(11713) | 评论:28

[025] while((c=getchar())!='\n')(2006-02-21 21:59:00)

摘要:while ((c = getchar()) != '\n');  作用:从键盘输入字符,直到输入回车为止, 最后的分号为循环体,即一个空语句 等价于:
c = getchar();
while( c != '\n' )
    c = getchar(); 当然也可用for语句实现,如:

for( ; (c = getchar()) != '\n' ; )
    printf("%c", c) ;

其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。注意:从终端键盘向计算机输入时,是在按Enter键以后才送到内存缓冲区中去的。不是从终端敲入一个字符马上输出一个字符,而是按下Enter键后数据送入内存缓冲区,然后每次从缓冲区读一个字符,再输出该字符。

#include <stdio.h>
int main()
{
    char c;
    for( ; (c = getchar()) != '\n' ; )
        printf("%c", c) ;
    return 0;
}

运行结果:
====================
afdasdfkjffl&%#$879e↙
afdasdfkjffl&%#$879e
==================== 用while语句实现如下:
#include <stdio.h>
int main()
{
    char c;
    c = getchar();
    while( c != '\n' )
    {
        ......

阅读全文(7075) | 评论:0

[024] 简单计算器(2006-02-21 14:44:00)

摘要:目的: 练习switch语句

题目: 设计一个简单的计算器, 完成两个数的加减乘除

--------------------------------------

#include <stdio.h>
int main()
{
    float x, y, result;
    char op;
    scanf("%f%c%f", &x, &op, &y);    /* 输入不能有空格 */
    switch (op)
    {
    case '+' : result = x + y; break;
    case '-' : result = x - y; break;
    case '*' : result = x * y; break;
    case '/' : 
        if(y == 0.0) op = '#';  /*除数不为0*/
        else result = x / y;
        break;
    default  : op = '#';           /*op不为+ - * / 时做个标记,以便最后结果的输出*/
    }
    if (op != '#')
 &nbs......

阅读全文(4157) | 评论:3

[023] 开关语句(2006-02-20 22:01:00)

摘要:形式:
    switch(表达式)
    {case 常量表达式1:语句1
      case 常量表达式2:语句2
      …
      case 常量表达式n:语句n
      default :语句n+1
    }

(1) switch后面括弧内的“表达式”, ANSI标准允许它为任何类型。
(2) 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。
(3) 每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。
(4) 各个case和default的出现次序不影响执行结果。
(5) 执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行Switch语句时,根据Switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。例如,下面的例子:
要求按照考试成绩的等级打印出百分制分数段

------------------------------------
#include <stdio.h>
int main()
{
    char grade;
    scanf("%c",&grade);
    switch(grade)
    {
    case 'A' : printf("85~100\n");
    case 'B' : printf("70~8......

阅读全文(3294) | 评论:0

[022] 条件运算符(2006-02-19 14:18:00)

摘要:条件运算符要求有3个操作对象,称三目(元)运算符,它是c语言中唯一的一个三目运算符。条件表达式的一般形式为:
  表达式1?表达式2∶表达式3
(1) 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
        max = (a>b) ? a : b

执行结果就是将条件表达式的值赋给max。也就是将a和b二者中大者赋给max。

(2) 条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。

条件运算符的优先级别比关系运算符和算术运算符都低。因此
        max = (a > b) ? a : b
括号可以不要,可写成
        max = a > b ? a : b
如果有
        a > b ? a : b+1
相当于a > b ? a : (b+1), 而不相当于(a>b ? a : b)+1。

(3) 条件运算符的结合方向为“自右至左”。如果有以下条件表达式:
a > b ? a : c > d ? c : d相当于a > b ? a : (c > d ? c : d)

如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。

(4) 条件表达式还可以写成以下形式:
  a>b? (a=100) : (b=100)

       a>b? printf("%d",a) : printf("%d",b);

即“表达式2”和“表达式3”不仅可以是数值表......

阅读全文(6071) | 评论:1