这篇文章将为大家详细讲解有关Linux如何实现程序设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
例子:
指数函数
/*4-1.c 输入两个实数x,y 求指数x^y * gcc -g -o 4-1 4-1.c -lm * **/ #include <stdio.h> #include <math.h> int main() { double answer,x,y; printf("please input two double x,y:\n"); scanf("%lf %lf",&x,&y); answer=pow(x,y); printf("%lf的%lf次方是:%lf\n", x,y,answer); return 0; }
开平方
/*4-2.c 先输入整数n:然后要求逐个输入n个实数并开平方 * gcc -g -o 4-2 4-2.c -lm * **/ #include <stdio.h> #include <math.h> int main() { int i,n; float x,y; printf("please input an int n:\n"); scanf("%d",&n); for(i=0;i<n;i++){ printf("please input %dth double number:\n",i+1); scanf("%f",&x); y=sqrt(x); printf("%f的开平方是:%f\n", x,y); } return 0; }
随机数
/*4-3.c 产生10个介于1~10的随机数 gcc -g -o 4-3 4-3.c **/ #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i,j; srand((unsigned int)time(0)); printf("RAND_MAX= %d\n",RAND_MAX); for(i=0;i<10;i++){ j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); /* 1+(int)(10.0*rand()/(RAND_MAX+1.0)) 的意思是生成1到10的随机数 (int)10.0*rand()/(RAND_MAX+1.0)的意思是将0到RAND_MAX之间的整数等分成十份,如果随机的生成数落在第一份,则映射成0, 如落在第二份,则映射成1。。。。。。如落在第十分,则映射成9. */ printf(" %d",j); } printf("\n"); return 0; }
/*4-3_1.c 产生0 到 50 之间的 n 个随机数 * gcc -g -o 4-3_1 4-3_1.c void srand(unsigned seed); 用法: 它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的 rand() 函数会出现一样的随机数,如: srand(1); 直接使用 1 来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。 进一步说明下:计算机并不能产生真正的随机数,而是已经编写好的一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。 即:只需在主程序开始处调用 srand((unsigned)time(NULL)); 后面直接用rand就可以了。不要在 for 等循环放置 srand((unsigned)time(NULL)); **/ #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, n; time_t t; n = 20; /* 初始化随机数发生器 */ srand((unsigned) time(&t)); /* 输出 0 到 50 之间的 20 个随机数 */ for( i = 0 ; i < n ; i++ ) { printf("%d\n", rand() % 50); } return(0); }
/*4-4.c 从键盘读入一行字符,判断其是否为大写 gcc -g -o 4-4 4-4.c **/ #include <stdio.h> #include <ctype.h> int main() { char c; while((c=getchar())!='\n'){ if(isupper(c)) printf(" %c is an upppercase character\n",c); } printf("\n"); return 0; }
/*4-5.c 从键盘读入一行字符,判断其是否为十六进制数字 gcc -g -o 4-5 4-5.c QAc6587Abaaa669DReAEgg **/ #include <stdio.h> #include <ctype.h> int main() { char c; /* for( ; (c=getchar())!='\n' ; ) if(isxdigit(c)) printf(" %c is a hexadecimal digits\n",c); **/ while((c=getchar())!='\n') if(isxdigit(c)) printf(" %c is a hexadecimal digits\n",c); printf("\n"); return 0; }
/*4-6.c 显示当前系统时间 gcc -g -o 4-6 4-6.c **/ #include <stdio.h> #include <time.h> int main(void) { char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; char *chwday[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; time_t timep; struct tm *p_tm; time(&timep); //timep = time(NULL); p_tm = gmtime(&timep); /*获取GMT时间*/ printf("%d-%d-%d ", (p_tm->tm_year+1900), (p_tm->tm_mon+1), p_tm->tm_mday); printf("%s %d:%d:%d\n", wday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec); p_tm = localtime(&timep); /*获取当地时间并按照中文时间日期显示*/ printf("%d年 %d月 %d日 ", (p_tm->tm_year+1900), (p_tm->tm_mon+1), p_tm->tm_mday); printf("%s %d:%d:%d\n", chwday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec); printf("当前的本地时间和日期:%s", asctime(p_tm)); /* asctime(struct tm * ptr)返回的时间字符串格式为:星期,月,日,小时:分:秒,年 */ /* ctime函数 函数原型: char *ctime(const time_t * timer) 函数功能: 将日历时间参数timer转换为一个表示本地当前时间的字符串 函数返回: 返回字符串格式:星期,月,日,小时:分:秒,年 参数说明: timer参数应由函数time获得,其等价于 astime( localtime(timer) ) */ time(&timep); printf("当前时间 = %s", ctime(&timep)); printf("\n"); return 0; }
思考与实验:
1.编写一个简单的c语言程序:函数int input(int a[ ],int n)用于输入一个有n个元素的整型数组,void output(int b[ ],int n),函数int sum(int a[ ],int n)用于数组求和,在main函数中依次调用函数input、output、sum
/*ex4-1.c gcc -g -o ex4-1 ex4-1.c $ ./ex4-1 113 123 13 12 14 13 11 1 12 53 113 123 13 12 14 13 11 1 12 53 365 */ #include <stdio.h> int input(int a[],int n); void output(int b[],int n); int sum(int a[],int n); void main() { int a[10]; input(a, 10); output(a, 10); printf("%d\n", sum(a, 10)); } int input(int a[],int n) { for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } return 1; } void output(int b[],int n) { for (int i = 0; i < n; i++) { printf("%d ", b[i]); } } int sum(int a[],int n) { int s = 0; for (int i = 0; i < n; i++) { s = s + a[i]; } return s; }
3. 编写C语言程序:用随机函数产生两个整型数,根据输入的字符:+-*/做算术运算,不是这四个字符则报错
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int i,b,d; char a; srand((int)time(0)); for(i=0;i<2;i++){ b=1+(int)(4.0*rand()/(RAND_MAX+1.0)); d=1+(int)(4.0*rand()/(RAND_MAX+1.0)); } printf("%d %d\n",b,d); printf("请输入+、-、*、/ 中的任意一个符号:"); a=getchar(); int m,n,p; float q; m=b+d; n=b-d; p=b*d; q=(float)(b/d); switch(a){ case '+':printf("这两个数的和是:%d\n",m); break; case '-':printf("这两个数的差是:%d\n",n); break; case '*':printf("这两个数的积是:%d\n",p); break; case '/':printf("这两个数的商是:%f\n",q); break; default:printf("error!\n"); } return 0; }
4.编写程序,测试某一程序段运行时间
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { long i = 10000000L; clock_t start, finish; double Total_time; printf( "CLOCKS_PER_SEC= %ld\n",CLOCKS_PER_SEC ); /* 测量一个事件持续的时间*/ printf( "Time to do %ld empty loops is ", i ); start = clock(); while(i--) ; finish = clock(); Total_time = (double)(finish-start) / CLOCKS_PER_SEC; printf( "%f seconds\n", Total_time); return 0; }
或
/* ex4-4_1.c https://blog.csdn.net/HelloZEX/article/details/53744838 * * gcc -g -o ex4-4_1 ex4-4_1.c * */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { clock_t start, finish; double Total_time; /* 测量一个事件持续的时间*/ start = clock(); /*被测试代码*/ int size = 64 * 1024 * 1024; int *arr = (int *) malloc( sizeof(int)*size); for (int i = 0; i < size; i++) arr[i] *= 3; for (int i = 0; i < size; i += 8) arr[i] *= 3; finish = clock(); Total_time = (double)(finish-start) / CLOCKS_PER_SEC; printf( "%f seconds\n", Total_time); return 0; }
关于“Linux如何实现程序设计”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。