1.生成随机数
C语言中自带的函数 rand() 和 srand() ,包含在头文件 <stdlib.h> 当中。
(1)rand() 函数
返回一个范围在0-RAND_MAX之间的随机数。
注意:该函数生成的随机数是一次性的,第二次运行时结果仍然一样。
这是因为 rand() 函数是根据“种子”来产生随机数的,在调用时,“种子”默认为1,所以产生的数相同。
(2)srand() 函数
srand() 函数用来设置 rand() 产生随机数所需要的“种子”,通过srand()函数设置“种子”,可以使 rand() 产生的“随机数”真正达到随机。
一般配合 time() 函数(在头文件 <time.h> 中)来动态生成“种子”。time(0) 返回当前系统时间,time(NULL) 返回当前日历时间,都是从1970年1月1日0时0分0秒到此时的秒数。目前测试来看(更改了计算机显示时间),两者返回的值相等。
得到一般生成随机数的用法:
srand(time(NULL));
printf("%d\n",rand());
参考:https://blog.csdn.net/beyond0824/article/details/6009908
2.并行程序中计算时间
一般计算时间可能会使用 clock() 函数(包含在 <time.h> 中),它得到的是处理器时钟所使用的时间,因此在并行程序当中,它将得到所有进程(线程)计算所花费的时间之和,与我们想要得到的相差甚远。
(1)gettimeofday() 函数
返回当前精确时间(从1970年1月1日0时0分0秒到此时的时间),包含在 <sys/time.h> 中:
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
其参数 tv 是保存获取时间结果的结构体,参数 tz 用于保存时区结果:
struct timezone{
int tz_minuteswest; /*格林威治时间往西方的时差*/
int tz_dsttime; /*DST 时间的修正方式*/
}
timezone 参数若不使用则传入 NULL 即可,一般用 NULL。
而结构体 timeval 的定义为:
struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}
一般过程为:
struct timeval start_t, end_t; //声明结构体变量
gettimeofday(&start_t, NULL); //记录开始的时间
{待计算函数过程}
gettimeofday(&end_t, NULL); //记录结束的时间
double total_t_sec, total_t_usec, total_t; //变量声明
total_t_sec = (double)(end_t.tv_sec - start_t.tv_sec); //计算秒数
total_t_usec = (double)(end_t.tv_usec - start_t.tv_usec); //计算微秒数
total_t = total_t_sec + total_t_usec / 1000000.0; //计算总时间
参考:https://baike.baidu.com/item/gettimeofday/3369586?fr=aladdin
3.main()函数的传参
#include <stdio.h>
int main(int argc, char *argv[]){
printf("可执行程序为 %s,传递的参数个数为 %d,输出:\n%s\n",argv[0],argc,argv[1]);
return 0;
}
agrc为参数个数,argv是字符串数组,下标从0开始,第一个argv[0]存放的是可执行程序的文件名字,然后一次存放传入的参数,例如上面的代码(hello.c):
1.首先通过gcc编译:gcc -o hello.out hello.c得到可执行文件hello.out。
2.在运行时通过传入参数:./hello.out hello,world其中空格后面接参数,多个参数通过空格分开。
最后得到结果
4.引入其他程序函数
首先,假设有两个源文件和一个头文件,分别命名为main.c fun.c fun.h,表示主函数main()所在文件,函数所在文件,函数声明所在文件。
1.fun.h
#ifndef #endif的作用是防止某一个源文件中两次包含同一个头文件
#define 定义该头文件的标识
#ifndef FUN_H
#define FUN_H
int fun(int a);
#endif
2.fun.c
该包含函数的源文件中必须加入#include"fun.h"
#include<stdio.h>
#include"fun.h"
int fun(int a){
printf("%d\n",a);
return 0;
}
3.main.c
在头文件中加入#include"fun.h"
用gcc编译时,需要链接到调用函数对应的.c文件,如:gcc main.c fun.c -o main.out
#include<stdio.h>
#include"fun.h"
int main(){
int a = 5;
fun(a);
return 0;
}
4.strtol()函数
该函数包含在头文件 stdlib.h 中,作用为把参数 str 所指向的字符串根据给定的 base 转换为一个长整数。
long strtol(
const char *str, //输入字符串,需要转换为长整数的字符串
char **endptr, //str中数值后的下一个字符,一般为(NULL)
int basr //基数,介于2-36之间,或者为0,表示输出的数的进制,如:base=10就为十进制
)