Linux C 学习

本文深入探讨了C++编程中整数和浮点数的输出格式,包括使用printf函数进行不同类型的输出,以及如何控制输出的精度和对齐方式。此外,还介绍了进程管理和信号处理的基本概念,如fork和wait函数的使用,以及如何创建和接收信号。最后,通过简单的二维数组实例展示了C++中数组的使用和操作。

 

int main()
{   
    int64_t test = 100;
    printf("%lld\n",test);
    float f_test = 100.2123;
    printf("%f\n",f_test);

    scanf("%f",&f_test);
    printf("%f\n",f_test);

}


格式输出浮点

    double shoes = 10.23;
    printf("%-10.2f ok\n",shoes);
    printf("%-15.2f ok\n",shoes);
    printf("%10.2f ok\n",shoes);
    printf("%15.2f ok\n",shoes);
    printf("%.2f ok\n",shoes);
    printf("%.6f ok\n",shoes);
    printf("%.2ef ok\n",shoes);

整数空格输出 ,下面控制前面5个空格

如果是%-5d,就是右对齐。上面的float输出也是一样的

    int index = 0 ;
    while(++index < 5)
    {
        printf("%5d \n",index);
    }
    return 0;

 

 

 

#include <stdio.h>
void test(const void *data,int size)
{
    const float *_data = (float*)data;
    for(int i=0;i<size;i++)
    {
        printf("data array %d is %f\n",i,_data[i] );
    }
}

void get_name()
{
    printf("name is gearslogy\n");
}


void run_get_name(void (*pf)()) // argument point to a function address
{
    pf();
    printf("function address %p\n",pf);
}


int main()
{
    float a[4] = {1,2,3,4};
    test(a,4);

    run_get_name(get_name);
    return 0;
}

 

 

进程fork:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
/*

 // THIS PROGRAM WILL REPLACE THE MAIN(),SO WILL DO NOT RUN THE printf(" Done .\n")
int main()
{
    printf("Running ps with execlp\n");
    execlp("ps","ps","ax",0);
    printf(" Done.\n");
    return 0;
}
 */

// wait
#include <sys/wait.h>
#include <stdlib.h>

int main()
{
    pid_t  pid;
    char *message;
    int n;
    int exit_code;

    printf("fork program starting\n");
    pid = fork();
    switch (pid)
    {
        case -1:
            perror("fork error\n");
            exit(1);
        case 0:
        {
            message = "this is the child";
            n=5;
            exit_code = 10; // child return code
            break;
        }
        default:
        {
            message = "This is the parent";
            n=3;
            exit_code = 55;  // this is the main process exit_code
            break;
        }
    }

    for(;n>0;n--)
    {
        puts(message);
        sleep(1);
    }

    if(pid != 0 )
    {
        int stat_val;
        pid_t child_pid;
        child_pid = wait(&stat_val); //return the child pid
        printf("child has finished : PID=%d \n",child_pid);
        if(WIFEXITED(stat_val))
        {
            printf("Child exit with code %d\n",WEXITSTATUS(stat_val));
        }
    }
    exit(exit_code); // this is the child exit code,this will eval two times,becuase have a main process,and fork() process

}
View Code

信号:

void ouch(int sig)
{
    printf("I got signal %d \n",sig);
}
int main()
{
    signal(SIGINT,ouch);
    while(1)
    {
        printf("hello world\n");
        sleep(1);
    }
    return 0;
}
View Code

 信号等待获取:

static int arlarm_fired = 0;
void ding(int sig)
{
    arlarm_fired = 1;
}
// in the child process wait 5 secends,then send a signal
// to the father process
int main()
{
    pid_t pid;
    printf("alarm application starting\n");

    pid = fork();
    switch(pid)
    {
    case -1:
        perror("fork faild\n");
        exit(1);
    case 0:
        sleep(5);
        kill(getppid(),SIGALRM); // send a signal to main(father)  process
        exit(0);
    }

    printf("waiting for alarm to go off\n");
    signal(SIGALRM,ding); // main process recive the signal
    pause();
    if(arlarm_fired)
    {
        printf("ding ding\n");
    }
    exit(0);
}
View Code

 

简单的二维数组

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int zippo[2][3] = {{1,2,3},
                       {4,5,6}};
    cout << zippo[0] << endl;  // point to the {1,2,3}
    cout << zippo[1] << endl;  // point to the {4,5,6}

    cout << (zippo+0) <<endl;  // point to the {1,2,3}
    cout << (zippo+1) <<endl;  // point to the {4,5,6}

    cout << *(*zippo+0) <<endl;  // -> 1
    cout << *(*zippo+1) <<endl;  // -> 2

    cout << *(*(zippo+1)+0) <<endl;  // ->4
    cout << *(*(zippo+1)+1) <<endl;  // ->5
    return  0;
}

 

转载于:https://www.cnblogs.com/gearslogy/p/5406130.html

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
多角色体系 支持管理员、教师、学生三种角色,权限分级管控: 管理员:负责系统配置、用户管理、数据维护、权限分配等全局操作。 教师:创建题库、组卷、发布考试、手动阅卷、查看成绩统计。 学生:查看考试列表、参与在线考试、查看个人成绩与错题解析。 实现用户注册(支持批量导入学生信息)、登录(账号密码 / 验证码登录)、个人信息管理(密码修改、头像设置)。 班级与课程关联 教师可创建班级并添加学生,将考试与特定班级 / 课程绑定,确保学生仅能参与授权范围内的考试。 二、题库管理功能 题库创建与维护 支持多种题型录入:单选题、多选题、判断题、填空题、简答题、编程题(支持 Python 代码在线运行)等。 题目信息包括:题干(支持图文混排)、选项(选择题)、答案、解析、难度等级(易 / 中 / 难)、知识点标签(如 “Python 函数”“高数积分”)、分值。 支持题目批量导入(Excel/Word 模板)、导出、批量修改(如统一调整难度),自动检测重复题目。 题库分类与检索 按课程、章节、知识点对题目分类,形成结构化题库(如 “计算机基础→操作系统→进程管理”)。 支持多条件检索:按题型、难度、关键词搜索题目,便于教师快速组卷。 三、试卷管理与考试发布 智能组卷功能 手动组卷:教师从题库中手动选择题目,自定义每题分值,系统自动计算总分。 随机组卷:设置组卷规则(如 “10 道单选 + 5 道多选 + 3 道简答,总分 100 分,难度比例 2:6:2”),系统从题库中随机抽取符合条件的题目,支持生成多套平行试卷。 试卷预览与调整:组卷后可预览完整试卷,修改题目或分值,确认无误后保存为试卷模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值