文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>12、素数问题

12、素数问题

时间:2010-04-01  来源:280552108

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。
          素数:大于1的自然数,只能被1和她自身整除的数。       
2.程序源代码:

#include <stdio.h>
#include <math.h>

int
man(void)
{
    int i, j, k, n, s;

    n = 0;
    s = 1;

    for(j = 101; j <= 200; j ++){
        k = sqrt(j + 1);
        for(i = 2; i <= k; i ++){
            if(j % i == 0){
                s = 0;
                break;
            }
            if(s == 1){
                printf("%-4d", j);
                n ++;
                if(n % 10 == 0)
                    printf("\n");
            }
            s = 1;
        }
    }

    printf("101到200之间一共有%d个素数。\n", n);

    return 0;
}

3.输出结果:

andy@andy-laptop:~/work/study/c/100$ gcc -Wall -o 12 12.c -lm
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status

4.分析:

 

链接外部库

库是预编译的目标文件(object files)的集合,它们可被链接进程序。静态库以后缀为‘.a’的特殊的存档文件(archive file)存储。

标准系统库可在目录 /usr/lib 与 /lib 中找到。比如,在类 Unix 系统中 C 语言的数学库一般存储为文件 /usr/lib/libm.a。该库中函数的原型声明在头文件 /usr/include/math.h 中。C 标准库本身存储为 /usr/lib/libc.a,它包含 ANSI/ISO C 标准指定的函数,比如‘printf’。对每一个 C 程序来说,libc.a 都默认被链接。

下面的是一个调用数学库 libm.a 中 sin 函数的的例子,创建文件calc.c:

#include <math.h>
#include <stdio.h>

int
main (void)
{
double x = 2.0;
double y = sin (x);
printf ("The value of sin(2.0) is %f\n", y);
return 0;
}

尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误:

$ gcc -Wall calc.c -o calc
/tmp/ccbR6Ojm.o: In function 'main':
/tmp/ccbR6Ojm.o(.text+0x19): undefined reference to ‘sin’

函数 sin,未在本程序中定义也不在默认库‘libc.a’中;除非被指定,编译器也不会链接‘libm.a’。

为使编译器能将 sin 链接进主程序‘calc.c’,我们需要提供数学库‘libm.a’。一个容易想到但比较麻烦的做法是在命令行中显式地指定它:

$ gcc -Wall calc.c /usr/lib/libm.a -o calc

函数库‘libm.a’包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。链接器将搜索所有文件来找到包含 sin 的目标文件。

一旦包含 sin 的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了:

$ ./calc
The value of sin(2.0) is 0.909297

可执行文件包含主程序的机器码以及函数库‘libm.a’中 sin 对应的机器码。

为避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项‘-l’。例如,下面的命令

$ gcc -Wall calc.c -lm -o calc

与我们上面指定库全路径‘/usr/lib/libm.a’的命令等价。

一般来说,选项 -lNAME使链接器尝试链接系统库目录中的函数库文件 libNAME.a。一个大型的程序通常要使用很多 -l 选项来指定要链接的数学库,图形库,网络库等。


5.最后结果:

  还是不行,我的gcc是4.4.1  不知道为什么, 请哪位高人知道了, 烦劳告知一声, 非常感谢。



排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载