Chinaunix首页 | 论坛 | 博客
  • 博客访问: 296984
  • 博文数量: 69
  • 博客积分: 3093
  • 博客等级: 中校
  • 技术积分: 626
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-17 13:48
文章分类

全部博文(69)

文章存档

2011年(27)

2010年(11)

2009年(31)

分类: LINUX

2010-03-02 21:11:20

编译执行和解释执行的区别:
可以从两方面去比较两者之间的关系:执行效率和平台无关性

编译时错误:对于自然语言来说,一点儿语法错误不是很严重的问题,因为我们仍然可以读懂句子,编译错误哪怕一个很小的语法错误就会罢工

运行时错误:编译器检查不出这类错误,仍然可以生成可执行文件,但在运行时会出错导致程序崩溃,类似于linux下编写程序运行时会出现段错误

逻辑错误和语义错误:如果程序里有逻辑错误,编译和 运行都会很顺利,看上去不产生错误信息,但是程序没有干它该干的事情,而是干了别的事情

C中使用注释需要注意两点:
    1. 注释不能嵌套使用,如/*aa/*aa*/aa*/ 编译器只能解释/*aa/*aa*/为止,而aa*/则无法解析,因而会报错
    2. //注释不可以跨行

看到数组这块儿看到一个比较有意思的程序:
(程序计算一组随机数,并计算随机数中各个数字出现的次数,并且保存到数组中)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

int a[N];

void gen_random(int upper_bound)
{
    int i;
    for(i = 0; i < N; i++){
         a[i] = rand() % upper_bound % 10;
        }
}

int howmany(int value)
{
    int count = 0, i;
    for(i = 0; i < N; i++)
        if(a[i] == value)
            ++count;
        return count;
}

void print_random(void)
{
    int i;
    for (i = 0; i < N; i++)
        printf("%d ",a[i]);
    printf("\n");
}

int main(void)
{
    int i,j;
    int histogram[10] = {0};

    gen_random(time(NULL));
    print_random();
   
    printf("value\thowmany\n");
    for(j = 0; j < N; j++){
        histogram[j] = howmany[j];

        printf("%d\t%d\n", j,histogram[j]);

    }

    return 0;
}


上边的程序执行多次循环,耗时又耗CPU再看下边的程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

int a[N];

void gen_random(int upper_bound)
{
    int i;
    for(i = 0; i < N; i++)
        a[i] = rand() % upper_bound % 10;
}

void print_random()
{
    int i;
    for(i = 0; i < N; i++)
        printf("%d ", a[i]);
    printf("\n");
}

int main(void)
{
    int i,j;
    int histogram[10] = {0};

    gen_random(time(NULL));
    print_random();
    
    printf("value\thowmany\n");
    for(i = 0; i < N; i++)
    histogram[a[i]]++;

   

    for(j = 0; j < N; j++)

        printf("%d\t%d\n", j,histogram[j]);

    return 0;
}


首先把histogram的所有元素初始化为0,注意使用局部变量的值之前一定要初始化,否则值是不确定的。接下来的代码很有意思,在每次循环中,a[i]就是出现的随机数,而这个随机数同时也是histogram的下标,这个随机数每出现一次就把histogram中相应的元素加1。
阅读(848) | 评论(1) | 转发(0) |
0

上一篇:gdb命令手册

下一篇:C Shell内置命令

给主人留下些什么吧!~~

xwhbin2010-03-02 21:30:42

还有一点儿挺有意思,关于数组,如下: char str[14] = "Hello, world.\n"; 如果用于初始化的字符串字面值比数组刚好长出一个空字符的长度,则数组str不包含NULL字符,并且编译不会给出警告,因为C标准就是这么规定的