【Linux程序设计】之环境系统函数综合实验

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。贴出来纯粹是聊胜于无。

实验题目:Linux环境下系统函数综合实验

实验目的:熟悉并掌握Linux环境下数学函数、字符函数、系统时间与日期函数、环境控制函数、内存分配函数以及数据结构中常用函数的使用方法。

一、Linux环境下数学函数的使用

设计程序,满足如下要求:

1、使用rand函数产生10个介于110之间的随机数值。要求在程序中对每行代码添加注释。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     int i,j;
 6     srand((int)time(0));
 7     for(i=0;i<10;i++)
 8     {
 9         j=1+(int)(10.0*rand()/(RAND_MAX + 1.0));
10             printf(" %d",j);
11     }
12     printf("\n");
13     return 0;
14 }

2、使用srandom函数对上题中的程序进行修改,实现相同功能。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    srandom(time(NULL));
    int i;
    for(i=0;i<10;i++)
    {
        printf("%ld ",random()%10);

    }
    printf("\n");
    return 0;
}

二、Linux环境下字符函数的使用

设计程序,满足如下要求

从键盘中输入一行字符,同时测试读入字符是否为1)大写字符;2)十六进制数字符号;3)标点符号或特殊符号。

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 int main()
 4 {
 5     char c;
 6     while((c=getchar())!=‘\n‘)
 7     {
 8         if(isupper(c))
 9             printf("%c is an uppercase character\n",c);
10
11         if(isxdigit(c))
12             printf("%c is an hexadecimal digits\n",c);
13         if(ispunct(c))
14             printf("%c is an   punct\n",c);
15     }
16     return 0;
17 }

三、Linux环境下系统时间与日期函数的使用

设计程序,满足如下要求:

1、使用timelocaltimegmtime等时间相关的系统函数分别显示当前的系统时间。

 1 #include<time.h>
 2 #include<stdio.h>
 3 int main()
 4 {
 5     time_t timep;
 6     char * wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
 7     struct tm *p;
 8     time(&timep);
 9     printf("%s",asctime (gmtime(&timep)));
10     p=localtime (&timep);
11     printf("%d年 %d月 %d日",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
12     printf("%s %d :%d:%d\n",wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
13     return 0;
14 }

2、应用结构体struct timeval的成员tv_sec与tv_usec显示系统时间的秒与微妙,并测试输出成员tv_sec与tv_usec这段程序所用的时间。

 1 #include<stdio.h>
 2 #include<sys/time.h>
 3 #include<unistd.h>
 4 int main()
 5 {
 6     struct timeval tv1,tv2;
 7     struct timezone tz;
 8     gettimeofday(&tv1,&tz);
 9     printf("tv_sec; %d\n",tv1.tv_sec);
10     printf("tv_usec; %d\n",tv1.tv_usec);
11     gettimeofday(&tv2,&tz);
12     printf("tv_usec-tv1_usec; %d\n",tv2.tv_usec-tv1.tv_usec);
13
14     return 0;
15 }

3、设计一个程序,计算机屏幕随机呈现一个字符,持续0.5s后字符消失,此时取得结构体timeval成员tv_sec与tv_usec的值,然后作出按键正确反应后再取得tv_sec与tv_usec的值,循环5次,计算正确反应率以及正确反应的平均时间。

 1 #include<stdio.h>
 2 #include<sys/time.h>
 3 #include<unistd.h>
 4 #include<stdlib.h>
 5 #include<ctype.h>
 6 int main()
 7 {
 8     int i,j;
 9     struct timeval tv1,tv2;
10     struct timezone tz;
11     float ave,sum;
12     ave=0;sum =0;
13     int a,b;
14     for(a=0;a<5;a++){
15     srand(int time (0));
16     while(1){
17     j=1+(int)(122.0* rand()/(RAND_MAX +1.0));
18     if (j>=65 && j<=90 || j<=122 && j>=97){
19     printf("%c",char(j));
20     break;
21     }
22     }
23     system(sleep(0.5));
24     gettimeofday(&tv1,&tz);
25     char c;
26     while(1){
27     c=getchar();
28     sum++;
29     if (c==char(j))
30     break;
31 }
32     gettimeofday(&tv2,&tz);
33     ave=tv2.tv_usec-tv1.tv_usec;
34     }
35     sum =5/sum;
36     ave=ave/5;
37     printf("%f",sum);
38     printf("%f",ave);
39     return 0;
40 }

四、Linux环境下环境控制函数的使用

设计程序,满足如下要求:

显示当前所登录的用户,并使用环境控制函数分别将登录用户修改为zhangsannull,同时输出系统中所有的环境变量及其值。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     char *p;
 6     if((p=getenv("USER")))
 7     printf("USER =%s\n",p);
 8     setenv ("USER","zhangsan",1);
 9     printf("USER =%s\n",getenv("USER"));
10     unsetenv("USER");
11     printf("USER =%s\n",getenv("USER"));
12     printf("===============所有环境变量=================\n");
13     extern char ** environ;
14     int i;
15     for(i=0;environ[i]!=NULL;i++)
16     printf("%s\n",environ[i]);
17     return 0;
18 }

五、Linux环境下内存分配函数的使用

设计程序,满足如下要求:

1、用单向链表实现下述功能。某手机用户要增加通讯录,通讯录的结构体定义如下:

struct co

{

int index;

char name[8];

char htel[12];

char tel[12];

};

       其中,index为用户在通讯录中的序号;name存放用户名;htel存放手机号;tel存放电话号码。如果要增加一用户,就分配一存储空间,输入数据,请编写一程序进行模拟,最后检测此内存的大小。

2、利用mmap()来读取/etc/passwd文件内容,把文件中的内容映射到内存中的区域,可读取此区域中的内容,对映射区域的写入操作会产生一个映射文件。要求在程序中对每行代码添加注释。

六、综合部分

设计程序,满足如下要求:

1、从键盘读入不多于50个数的int型数据,组成一个数组,应用qsort函数进行排序。

2、编一个程序:求2~n间的素数,n由键盘输入,循环变量分别从2n2(int)sqrt(n),分别测出两个循环的所用时间。

 1 #include<stdio.h>
 2 #include<sys/time.h>
 3 #include<stdlib.h>
 4 #include<math.h>
 5 #include<unistd.h>
 6 void  prime1(int n)
 7 {
 8     int i;
 9     for(i=2;i<n;i++)
10     {
11         if(n%i==0)
12             break;
13     }
14     if(i>=n)
15         printf("%d\n",n);
16 }
17 void prime2(int n)
18 {
19     int i;
20     for(i=2;i<=(int)sqrt(n);i++)
21         if(n%i==0)
22             break;
23     if(i>(int)sqrt(n))
24         printf("%d\n",n);
25 }
26
27 int main()
28 {
29     int n;
30     struct timeval tv1,tv2,tv3,tv4;
31     struct timezone tz;
32     int i;
33     printf("Please input a  number :\n");
34     scanf("%d",&n);
35     printf("================Test1==============\n");
36         gettimeofday(&tv1,&tz);
37     for(i=2;i<=n;i++){
38     prime1(i);
39     }
40     gettimeofday(&tv2,&tz);
41     printf("Use time : %f\n",tv2.tv_sec-tv1.tv_sec+0.000001*(tv2.tv_usec-tv1.tv_usec));
42     printf("================END==============\n");
43     printf("================Test2==============\n");
44         gettimeofday(&tv3,&tz);
45     for(i=2;i<=n;i++){
46     prime2(i);
47     }
48     gettimeofday(&tv4,&tz);
49     printf("Use time : %f\n",tv4.tv_sec-tv3.tv_sec+0.000001*(tv4.tv_usec-tv3.tv_usec));
50     return 0;
51 }

3、编写程序,类似于猜数游戏,程序产生一随机数,对游戏者输入的数据通过比较,在计算机屏幕上能提示太大了、太小了或恭喜你猜中了等。

4、编写一个简单的C语言程序,用随机数函数产生两个整型数,根据输入的字符‘+’、‘-’、‘*’、‘/’作算术运算。

时间: 2024-10-27 14:20:43

【Linux程序设计】之环境系统函数综合实验的相关文章

Linux运维实战之DNS综合实验

本次博文主要是对Linux系统中DNS知识的总结. DNS的基础知识(参见http://sweetpotato.blog.51cto.com/533893/1596973) DNS的基础配置(参见http://sweetpotato.blog.51cto.com/533893/1598225) DNS的高级配置(参见http://sweetpotato.blog.51cto.com/533893/1607383) [本次博文的主要内容] 1.以一个综合案例总结Linux系统中DNS的配置 2.B

Linux网络编程2&mdash;&mdash;系统函数

socket信息数据结构 #include <netinet/in.h> struct sockaddr { unsigned short sa_family; /*地址族*/ char sa_data[14]; /*14字节的协议地址,包含该socket的IP地址和端口号.*/ }; struct sockaddr_in { short int sa_family; /*地址族*/ unsigned short int sin_port; /*端口号*/ struct in_addr sin

如何利用PC机搭建综合实验环境之Vmware workstation篇

无论学习windows还是linux,还是学习这些系统上的应用,我们都需要一台甚至多台服务器.但一台服务器动辄上万元,做为正在学习的学生或个人根本无力购买.况且一些实验不止需要一台,还需要多台服务器.再加上供电等因素,个人买服务器来做实验真的是不可能的事情.但不通过实验的话又很难将知识串联起来,实践是检验真理的唯一标准.因此,今天我们来讲如何通过一台PC模拟多台服务器.PC,并且模拟交换机.路由器.防火墙.AAA服务器,最后将交换机,路由器.防火墙.服务器连接起来,搭建成一个综合的实验环境,完成

20165230 《Java程序设计》实验二(Java开发环境的熟悉)实验报告

20165230 <Java程序设计>实验二(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:45 - 17:20 实验序号:实验二 实验名称:Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求: 没有Linux

20175325 《JAVA程序设计》实验二《JAVA开发环境的熟悉》实验报告

20175325 <JAVA程序设计>实验二<JAVA开发环境的熟悉>实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 指导教师:娄嘉鹏 实验日期:2018年4月17日 实验名称:面向对象程序设计 实验目的与要求: 1.完成实验.撰写实验报告,注意实验报告重点是运行结果,遇到的问题以及分析. 2.实验报告中统计自己的PSP(Personal Software Process)时间: 3.掌握使用IDEA完成基础编程与程序调试

linux系统编程综合练习-实现一个小型的shell程序(四)

上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧,都只是想办法去尽快实现,而肯定会有一些代码是写得不太好的,所以有时间的话最好是从头至尾将整个代码进行梳理,也许在梳理的过程中会发现许多不足的地方,好了,下面开始: 而这个信号安装函数是在init.c中实现的: 接下来进行shell循环: 它的实现是在parse.c中: 如注释所示,可以挪至init.

20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

20165227 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱越 学号:20165227 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:实验一 实验名称:Java开发环境的熟悉 实验题目:实现凯撒密码并进行安全加固,并进行测试(正常情况,异常情况,边界情况) 实验内容: 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑.编译.运行.调试Ja

20155336 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

20155336 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 JVM.JRE.JDK的安装位置与区别: 命令行运行javac:java:javac -cp; java -cp: PATH,CLASSPATH,SOURCEPATH的设定方法与应用: 包管理:package:import:javac -d : Eclipse(Netbeans)管理Ja

20155208 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

20155208 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 打开windows下的```cmd → 输入cd Code命令进入Code目录,进入"代码托管"文件夹 → 输入md 20155202建立以自己学号命名的文件夹 → 输入cd 20155202进入文件夹 → 输入md exp1建立"实验一"文件夹 → 输入cd exp1进入"实验一