首页 > 系统相关 >Linux C语言基础 day8

Linux C语言基础 day8

时间:2024-07-10 20:00:36浏览次数:20  
标签:函数 day8 int void Linux C语言 printf 返回值 sum

目录

思维导图:

学习目标:

学习内容:

1. 字符数组

1.1 二维字符数组

1.1.1 格式

1.1.2 初始化

1.1.3 二维字符数组输入输出、求最值、排序

2. 函数

2.1 概念

关于函数的相关概念

2.2 函数的定义及调用

2.2.1 定义函数的格式

2.3 函数的分类

1. 无参无返回值函数

2、有参无返回值函数

3、无参有返回值函数

4、有参有返回值函数

例如:

课堂练习:

课外作业:


思维导图:


学习目标:

例如:

  • 一周掌握 C基础知识

学习内容:

1. 字符数组

1.1 二维字符数组

1.1.1 格式

        char 数组名[常量1][常量2];

        常量1:表示的是定义的字符串的个数

        参数2:表示的是每个字符串的最大长度+1

1.1.2 初始化

        1、单字符初始化:该方式跟二维整形数组一致

        2、字符串初始化:

                全部初始化:char arr[3][8] = {"apple", "banana", "orange"}; arr[0] arr[1] arr[2]

                特殊初始化:char arr[ ][8] = {"apple", "banana", "orange"}; //此时省略的第一维,会根据初始化字符串的个数确定

                部分初始化:char arr[5][8] = {"apple", "banana", "orange"}; //没有初始化的字符串 默认为空串

1.1.3 二维字符数组输入输出、求最值、排序

例如:

#include<stdio.h>
#include<string.h>
#define MAX 5
int main(int argc, const char *argv[])
{
    char arr[MAX][20]={""};
    char brr[MAX][20]={""};
    for (int i = 0; i < MAX; i++)
    {
        printf("请输入第%d个字符串:", i+1);
        scanf("%s", arr[i]);
    }
    //输出所有的字符串
    printf("目前的字符串分别是:");
    for(int i=0; i<MAX;i++)
    {
        printf("%s\t", arr[i]);
    }
    puts("");
    char max[20]={""};
    stpcpy(max,arr[0]);
    for(int i=0;i<MAX;i++){
        if(strcmp(max,arr[i])){
            strcpy(max,arr[i]);
        }
    }
    printf("最大字符串为:%s\n", max);
    //将所有字符串进行排序
    char temp[20]={""};
    for(int i=0;i<MAX;i++){
        for ( int j= 0; j < MAX-i; j++)
        {
            if(strcmp(arr[j],arr[j+1]) > 0){
                strcpy(temp,arr[i]);
                strcpy(arr[i],arr[i+1]);
                strcpy(arr[i+1],temp);
            }
        }
       
    }
     //输出排序后的结果
    printf("目前的字符串分别是:");
    for(int i=0; i<MAX;i++)
    {
        printf("%s\t", arr[i]);
    }
    puts("");
}

2. 函数

2.1 概念

        将能实现某些功能的代码封装成代码块,然后通过通过代码块的名字就能调用到该部分的代码,这样,在多次相同操作的场景下,可以减少由于重复代码导致的劳动量,这个代码块,就是函数,代码块的名字,就是函数名。

        例:strlen strcpy printf scanf atoi。

关于函数的相关概念

        主调函数:调用别的函数的函数叫做主调函数

        被调函数:被别的函数调用的那个函数称为被调函数

        形式参数:也称形参,定义函数时,括号里面的参数称为形参

        实际参数:也称实参,函数调用时,括号里面的参数称为实参

2.2 函数的定义及调用

2.2.1 定义函数的格式

        返回值类型 函数名(函数的形参列表){ 函数体; }

2.3 函数的分类

1. 无参无返回值函数

        该函数,仅仅只是单纯执行特定的代码,没有数据传入,也不需要返回结果,仅仅只是执行一个过程 函数定义格式: void 函数名(void) {} 例如:void print_menu(void);

2、有参无返回值函数

        该函数,需要主调函数传入给定的数据后,才能进行执行该功能,但是,执行结束后,没有返回结果 函数定义格式:void 函数名(形参列表) {} 例如:void print_arr(int arr[], int n);

3、无参有返回值函数

        该函数无需外界传入数据,直接执行内部语句,并且执行结束后,会向主调函数返回一个确定的数据 函数定义格式:返回值类型 函数名(void){} 例如:int getchar(void);

4、有参有返回值函数

        该函数需要外界提供对应的参数,执行函数体代码后,并向主调函数返回一个确定的值 函数定义格式:返回值类型 函数名(参数列表) {} 例如:int strlen(char *src);

例如:

#include<myhead.h>

//定义菜单函数
void print_menu()
{
        printf("\t\t======1、无参无返回值函数======\n");
        printf("\t\t======2、有参无返回值函数======\n");
        printf("\t\t======3、无参有返回值函数======\n");
        printf("\t\t======4、有参有返回值函数======\n");
        printf("\t\t======0、退出======\n");
}

//定义无参无返回值函数
void sum_1(void)
{
    int num,key;
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    int sum = num + key;          //求两数的和
    printf("sum = %d\n", sum);
}

//定义有参无返回值函数
void sum_2(int m, int n)
{
    int sum = m+n;        //将传入的两个数据求和

    printf("sum = %d\n", sum);        //输出结果

}

//定义无参无返回值函数
int sum_3()
{
    int num,key;
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    int sum = num + key;          //求两数的和

    //将求出的和值,返回值给主调函数使用
    return sum;
}

//定义有参有返回值函数
int sum_4(int m, int n)
{
    int sum = m+n;

    return sum;
}

/************************主程序****************************/
int main(int argc, const char *argv[])
{
    //做个菜单
    int menu = 0;
    while(1)
    {
        print_menu();           //调用菜单函数

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        //多分支选择
        switch(menu)
        {
        case 1:
            {
                sum_1();      //调用无参无返回值函数
            }
            break;

        case 2:
            {
                int num,key;         //这两个数据是主调函数中的
                printf("请输入两个数:");
                scanf("%d%d", &num, &key);    

                sum_2(num, key);        //调用有参无返回值函数

            }
            break;
        case 3:
            {
                //要求调用一个函数,不传递任何数据
                //并且要得到该函数的结果,由主调函数输出
                int sum = sum_3();      //无参有返回值函数调用

                printf("sum = %d\n", sum);
            }
            break;
        case 4:
            {
                int num,key;         //这两个数据是主调函数中的
                printf("请输入两个数:");
                scanf("%d%d", &num, &key);    
                
                int sum = sum_4(num, key);          //调用有参有返回值函数
                
                printf("sum = %d\n", sum);

            }
            break;
        case 0: goto END;
        default:printf("您输入的功能有误,请重新输入\n");
        }
    }

END:

    return 0;
}


课堂练习:

#include<stdio.h>
void print_menu()
{
        printf("\t\t======1、第一题======\n");
        printf("\t\t======2、第二题======\n");
        printf("\t\t======3、第三题======\n");
        printf("\t\t======0、退出======\n");
}
void max1(int num,int key){
    if(num > key){
        printf("最大值为%d\n",num);
    }else
    {
        printf("最大值为%d\n",key);
    }
    
}
int max2(){
    int a[5]={0};
    for (int  i = 0; i < 5; i++)
    {
        printf("请输入该数组的第%d个值",i+1);
        scanf("%d",&a[i]);
    }
    printf("\n");
    int max1=a[0];
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            if(max1 < a[j]){
                max1=a[j];
            }
        }
    }
    return max1;
    
}
int con(int a,int b,int c){
    if((a+b)<=c || (a+c)<=b || (c+b)<=a){
        return -1;
    }else if (a==b && b==c && c==a)
    {
       return 2;
    }else if (a==b || b==c || c==a )
    {
       return 1;
    }else
    {
        return 0;
    }
}
int main(int argc, char const *argv[])
{
     int menu=0;
    while (1)
    {
    print_menu();
    printf("请输入>>>");
    scanf("%d", &menu);
    getchar();  
    switch(menu)
    {
    case  1:{
    int num,key;        
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    max1(num,key);}
    break;
    case 2:
    {
    int max1=max2();
    printf("最大值为%d\n",max1);
    }
    break;
    case 3:
    {
        int x=0,y=0,z=0;
        while (1)
        {   
        printf("请输入三角形的三条边:");
        scanf("%d%d%d",&x,&y,&z);
        int a=con(x,y,z);
        if(a==-1){
            printf("不能构成三角形,请重新输入\n");
        }else if (a==0)
        {
            printf("构成普通三角形\n");
            break;
        }else if (a==1)
        {
            printf("构成等腰三角形\n");
            break;
        }else if (a==2)
        {
            printf("构成等边三角形\n");
            break;
        }
        }
        
    }
    break;
    case 0: goto END;
    default:printf("您输入的功能有误,请重新输入\n");
    }
    }
    END:
    return 0;
    }
 


课外作业:

完成学生管理系统

1> 使用菜单完成

2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入

3> 查看学生信息:输出所有学生姓名以及对应的分数

4> 求出学习最好的学生信息:求最大值

5> 按姓名将所有学生进行升序排序

6> 按成绩将学生学生进行升序排序

要求每个功能使用函数完成

解析:

#include<stdio.h>
#include<string.h>
#define MAX 50
char names[MAX][50];
int scores[MAX];
int count = 0;
void print_menu();                                 //菜单
void enterstu();                                        // 学生信息录入
void findstu();                                          // 查看所有学生信息
void findtopstu();                                  // 寻找学习成绩最好的学生
void sortnamestu();                             // 按姓名将学生进行升序排序
void sortscorestu();                                // 按成绩将学生进行升序排序


int main(int argc, char const *argv[])
{
   //做个菜单
    int menu = 0;
    while(1)
    {
        print_menu();           //调用菜单函数

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        //多分支选择
        switch (menu)
        {
        case 1:
        enterstu();
        break;
        case 2:
        findstu();
        break;
        case 3:
        findtopstu();
        break;
        case 4:
        sortnamestu();
        break;
        case 5:
        sortscorestu();
        break;
        case 0: goto END;
        default:printf("您输入的功能有误,请重新输入\n");
        }
    }
END:
return 0;
}

//菜单
void print_menu()
{
        printf("\t\t======1、学生信息录入======\n");
        printf("\t\t======2、查看学生信息======\n");
        printf("\t\t======3、查看成绩最好的学生(姓名加成绩)======\n");
        printf("\t\t======4、按姓名将所有学生就行升序排序======\n");
        printf("\t\t======5、按成绩将所有学生就行升序排序======\n");
        printf("\t\t======0、退出======\n");
}
// 学生信息录入
void enterstu(){
    printf("请输入学生个数:");
    scanf("%d",&count);//输入学生个数
    for(int i=0;i<count;i++){
    printf("输入第%d个学生姓名:",i+1);
    scanf("%s", names[i]);
    if (strcmp(names[i], "\n") == 0) {  //换行
        return;
    }
    printf("输入学生分数:");
    scanf("%d", &scores[i]);     
    }
}
// 查看所有学生信息
void findstu(){
    for(int i=0;i<count;i++){
        printf("学生姓名:%s成绩:%d\n",names[i],scores[i]);                //输出学生姓名以及对应的成绩
    }
    printf("\n");
}
// 寻找学习成绩最好的学生
void findtopstu(){
    int top = 0;
    for (int i = 0; i < count; i++)
    {
       if(scores[top] < scores[i] ){
           scores[top] = scores[i];                 //寻找成绩最高的学生
       }
    }
    printf("最好成绩学生姓名为:%s,成绩为%d。\n",names[top],scores[top]);                  //输出最好成绩的学生姓名和成绩
}
// 按姓名将学生进行升序排序
void sortnamestu(){
    char temp[MAX];
    int tempx=0;
    for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(strcmp(names[j],names[j+1]) > 0){               //进行交换三部曲
               strcpy(temp,names[j]);
               strcpy(names[j],names[j+1]);
               strcpy(names[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
      
    }
     findstu();
}
// 按成绩将学生进行升序排序
void sortscorestu(){
    char temp[MAX];
    int tempx=0;
    for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(scores[j] > scores[j+1]){                                    //进行交换三部曲
               strcpy(temp,names[j]);
               strcpy(names[j],names[j+1]);
               strcpy(names[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
    }
        findstu();   
}
 

标签:函数,day8,int,void,Linux,C语言,printf,返回值,sum
From: https://blog.csdn.net/weixin_50357983/article/details/140316807

相关文章

  • 【Linux】00.Linux 介绍及其环境搭建
    一、Linux的发展史想要谈Linux的发展史,还是得先从UNIX开始讲起。1.1UNIX的发展历程1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的......
  • Rockchip RK3566 - Linux SDK 之orangepi-build编译
    ----------------------------------------------------------------------------------------------------------------------------开发板:OrangePi3B开发板eMMC:32GBLPDDR4:8GB显示屏:15.6英寸HDMI接口显示屏u-boot:2017.09linux:5.10-------------------------------......
  • linux关于CPU使用率以及psutil真正计算CPU使用率的调研
    不一定准确,只是个人的分析CPU使用率mpstat-u通过查看每个CPU核心的用户进程使用时间(%usr)来计算CPU使用率的。它只考虑了用户进程的CPU使用情况,而不考虑内核进程的CPU使用情况。 这种计算方式会更大CPU使用率=2.19+4.57=6.76 Top将用户进程(us)和内核进程(sy)的CPU使用时间......
  • Linux (10) 配置HAProxy,实现负载均衡器的主备模式
    《WindowsAzurePlatform系列文章目录》 最近有1个客户需求,在这里记录一下。客户提出需要使用Azure负载均衡器(四层负载均衡器),实现主备模式。场景是负载均衡器后有2台虚拟机-平时100%的流量都发送到第一台虚拟机-如果第一台虚拟机发生......
  • Linux环境下安装DM8数据库
    文章目录一、安装包下载二、新建组和用户三、设置文件打开最大数四、创建目录及修改目录权限五、挂载镜像及数据库安装六、配置数据库实例七、注册服务八、运行数据库(启动,停止,重启,查看数据库状态和端口号等)总结一、安装包下载官方下载网址:https://eco.dameng.com......
  • Linux中的DNS服务
    DNS服务解析域名域名---->IP正向解析:域名---->IP反向解析:IP---->域名域名:haha.com站点名:mail.haha.com【1】、DNS的分布式结构【2】、安装DNS软件包bindbind-chroot在服务器端安装主程序:bind服务名:named主要执行程序:/usr/sbin/namedDNS协议默认端口:53运......
  • Linux下有线网卡驱动
    1网络硬件接口介绍1.1MAC和PHY介绍嵌入式网络硬件分为两部分:MAC和PHY,大家都是通过看数据手册来判断一款SOC是否支持网络,如果一款芯片数据手册说自己支持网络,一般都是说的这款SOC内置MAC,MAC类似I2C控制器、SPI控制器一样的外设。光有MAC还不能直接驱动网络,还需......
  • 【C语言学习】2.常量的分类及使用
    C语言中的常量有以下几种:·字面常量·const修饰的常变量·#define定义的标识符常量·枚举常量1.字面常量如数字(整型、浮点型),字符串等2.const修饰的常变量对于a这一变量,可以多次赋值而使用const修饰后变量被锁定,变更为常变量仍为变量的证明:创建数组后运行,报错显示其......
  • 【C语言学习】3.字符串+转义字符+注释
    字符串由双引号引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。注:字符串以\0为结束标志,不算作字符串内容,若未输入,编译器将隐藏添加\0。\0为字符串的结束标志的证明:法一:chararr1[]="abc";//双引号为字符串chararr2[]={'a','b','c'};//单引号......
  • Linux命令-Grep逻辑:OR、AND、NOT
    Grep的OR,AND和NOT grep这个强大的文本处理工具,在linux的命令行中几乎随时要使用,被用来过滤一些关键词。要过滤的关键词有时是好几个,关键词之间就有了OR,AND和NOT各种关系,所以有必要了解grep的OR,AND和NOT是如何操作的在grep中,有等同于OR和NOT操作符的选项,但没有grepAND......