编译执行和解释执行的区别:
可以从两方面去比较两者之间的关系:执行效率和平台无关性
编译时错误:对于自然语言来说,一点儿语法错误不是很严重的问题,因为我们仍然可以读懂句子,编译错误哪怕一个很小的语法错误就会罢工
运行时错误:编译器检查不出这类错误,仍然可以生成可执行文件,但在运行时会出错导致程序崩溃,类似于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。
阅读(882) | 评论(1) | 转发(0) |