Linux C基础(7)

news2024/10/6 20:39:50

1、二维数组

1.1 概念

本质:元素为一堆数组的数组(数组的数组)

数组的特点:(1)数据类型相同 (2)地址连续

1.2 定义

 数组:存储类型 数据类型 数组名[元素个数]
 二维数组:存储类型 数据类型 数组名[行数][列数];
 行数:表示有几个一维数组
 列数:一维数组中有多少个元素
 int a[2][3]://定义了一个长度为2的二维数组,该数组有两个元素,每一个元素又是一个长度为3的int型数组;该二维数组的大小为24字节

1.3 初始化

1.3.1 部分初始化

 int a[2][3] = {1,2,3};
 int a[2][3] = {0};//清零

1.3.2 全部初始化

 (1)降维给二维数组赋初值,即按行初始化。每一组的初始值都用{}括起来。
     int a[2][3] = {{1,2,3},{4,5,6}};//按降维给a数组元素全部初始化
     int a[3][3] = {{1},{4}};//只初始化了部分数组元素,其他元素为0.第一行为 1 0 0,第二行4 0 0.
 (2)按线性存储的形式给二维数组赋初值。
     int a[2][3] = {1,2,3,4,5,6};//线性存储全部初始化
     int a[3][3] = {1,2};//只初始化了部分数组元素,其他元素为0。第一行为 1 2 0,第二行为 0 0 0.
 (3)可以省略左边下标范围的方式,给二维数组赋初值。
     int a[2][] = {1,2,3,4};//error 列数是不能省略的
     int a[][3] = {1,2,3,4};
     注意:二维数组的行数是可以省略的,由所赋值决定,但是列数不能省略

1.4 数组的访问

1.5 数组的输入输出

案例

 #include <stdio.h>
 #define N 8
 ​
 int main(void)
 {
         int a[N][N]={0};
         int i,j=0;
         for(i=0;i<N;i++)
         {
                 for(j=0;j<=i;j++)
                 {
                         if(j==0||j==i)
                         {
                                 a[i][j]=1;
                         }
                         else
                         {
                                 a[i][j]=a[i-1][j-1]+a[i-1][j];
                         }
                         printf("%d\t",a[i][j]);
                 }
                 printf("\n");
         }
         return 0;
 }

2、二维字符数组

定义一个长度为6的字符数组,数组中的每个元素都是char型的

 char str[6] = "hello";
 char str[6] = {'h','e','l','l','o'};
 //输入
 scanf("%s",str);
 //输出
 printf("%s",str);

输入输出

3、函数

3.1 概念

一个独立的概念模块

3.2为什么要使用函数

3.2.1 使程序模块化

3.2.2 提高代码的复用率

3.3 函数的分类

3.3.1 库函数

 (1)引入头文件
 #include <stdio.h>      #include <string.h>
 (2)调用函数
 printf();
 注意:a、入参的个数,数据类型  b、返回值(可以没有,如果有的话有且仅有一个)
 函数名(实际参数列表)//函数定义的是形式参数,我们传入的为实际参数

3.3.2 自定义函数

3.3.2.1 函数定义
 存储类型 数据类型 函数名(形式参数列表)
 {
     函数体;
     返回值;
 }
 存储类型:auto(局部变量,栈)、static(局部和全局)、extern、register;
 数据类型:函数返回值的类型(如果不写,默认为int);
 函数名:见名知意;
 形式参数列表:要实现功能所需要的值,需要调用者传入;
 函数体:具体功能的实现;
 返回值:可以没有返回值,有返回值的话有且仅有一个;
3.3.2.2 调用函数
 函数名(实际参数列表);

注意

1、需要将实参的值传递给形参,实参的个数和数据类型必须和形参的一致
2、实参的值可以是变量、常量,也可以是表达式,必须是一个确定的数
3、实参和形参是两块独立的内存空间
4、传参实际上是将实参的值拷贝给形参
5、形参是局部变量,在函数调用开始的时候定义,函数调用结束时释放空间

调用时

调用结束

3.3.3 函数声明

如果不是在main函数之前定义的,就需要添加函数声明

声明:将函数头拷贝过来然后加上分号

没加声明之前

加上声明之后

注意:声明的作用帮助语法进行检查

作业

1、实现字符串的排序
2、编写一子函数,实现简易计算器
1、实现字符串的排序
#include <stdio.h>
#include <string.h>
#define N 5

int main()
{
        char arr[N][N] = {0};
        int i, j, k = 0;
        char tmp[N] = {'\0'};
        printf("请输入%d个字符数组", N); 
        for(i = 0; i < N; i++)
        {
                scanf("%s", arr[i]);    
        }
        for(i = 1; i < N; i++)
        {
                for(j = 0; j < N-i; j++)
                {
                        k = strcmp(arr[j], arr[j+1]);
                        if(k>0)
                        {
                                strcpy(tmp, arr[j]);
                                strcpy(arr[j], arr[j+1]);
                                strcpy(arr[j+1], tmp);
                        }
                }
        }
        printf("---------------------------\n");
        for(i = 0; i < N; i++)
        {
                printf("%s\n", arr[i]);
        }    
        return 0;
}

2、编写一子函数,实现简易计算器
#include <stdio.h>
#include <string.h>

void menu();
int add(int m, int n); 
int subtract(int m, int n); 
int multiply(int m, int n); 
double except(int m, int n); 

int main()
{
        int x, y, tmp=0;
        printf("输入两个整数");
        scanf("%d",&x);
        scanf("%d",&y);
        menu();
        scanf("%d",&tmp);
        switch(tmp)
        {
                case 1:printf("%d\n",add(x, y));
                       break;
                case 2:printf("%d\n",subtract(x, y));
                       break;
                case 3:printf("%d\n",multiply(x, y));
                       break;
                case 4:printf("%.2lf\n",except(x, y));
                       break;
        }
        return 0;
}
void menu()
{
        printf("选择计算方式\n");
        printf("1、加法\n");
        printf("2、减法\n");
        printf("3、乘法\n");
        printf("4、除法\n");
}
int add(int m, int n)
{
        int num = m + n;
        return num;
}
int subtract(int m, int n)
{
        int num = m - n;
        return num;
}
int multiply(int m, int n)
{
        int num = m * n;
        return num;
}
double except(int m, int n)
{
        double num =(double) m / n;
        return num;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TinyEngine 开源低代码引擎首次直播答疑QA合集

前言 10月27日晚8点&#xff0c;OpenTiny 社区开启了 TinyEngine 开源低代码引擎首次答疑直播&#xff0c;本次直播我们通过收集开发者诉求&#xff0c;精心策划和组织了内容&#xff0c;希望提供给大家最明确和清晰的答疑方式。这是 TinyEngine 低代码引擎直播计划的开端&…

什么是数字化管理?产业园区如何进行数字化管理?

工业园区的数字化管理涉及利用技术和数据驱动的工具来优化工业园区环境中的运营、提高效率并改进决策流程。它通常包括使用各种数字技术和数据分析技术来监视、控制和增强公园运营的各个方面。 以下是工业园区数字化管理的一些关键方面以及如何实施&#xff1a; 1.数据收集和…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点

酷开科技持续推动智能投影行业创新发展

近年来&#xff0c;投影仪逐渐成为年轻人追捧的家居时尚单品。据国际数据公司&#xff08;IDC&#xff09;报告显示&#xff0c;2022年中国投影机市场总出货量505万台&#xff0c;超80%为家用投影仪。相比于电视&#xff0c;投影仪外观小巧、屏幕大小可调节&#xff0c;无论是卧…

C#中基于.NET6的动态编译技术

前几天要解决动态计算问题&#xff0c;尝试着使用了不同的方法。问题是给定一个包含计算的字符串&#xff0c;在程序运行中得到计算结果&#xff0c;当时考虑了动态编译&#xff0c;在网上查了一些资料完成了这项功能&#xff0c;可是基于不同的.NET平台使用的编程代码相差比较…

sparksql明明插入了但是表里数据是null

现象 将数据插入表的时候&#xff0c;表里的数据是null 代码 原因 建表语句的时候detail字段的类型写成了bigint&#xff0c;而要插入的数据类型是string&#xff0c;所以把建表语句的字段类型改了然后sql文件重跑就解决了

动态轮换住宅代理是什么?为何需要使用它?

随着越来越多的企业完善网络活动&#xff0c;IP代理的重要性变得显而易见。代理可确保顺利、安全且不受限制地访问互联网的大量资源。在不同类型的代理中&#xff0c;轮换代理脱颖而出&#xff0c;那么他哪里有别于其他IP代理呢&#xff1f; 一、什么是动态轮换代理&#xff1f…

Navicat的使用--mysql

表关系 数据库的操作&#xff0c;表字段的设计&#xff0c;一般都由于图形化界面工具Navicat完成。 而表中数据的增删改查&#xff0c;需要熟悉sql语句。 一对一 一对一&#xff1a;一个A对应一个B&#xff0c;一个B对应一个A 将A或B任意一张表的主键设置为外键 一对多 一…

高性能网络编程 - The C10M problem

文章目录 Pre概述回顾C10K实现C10M的挑战思路总结 Pre 高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路 概述 在接下来的10年里&#xff0c;因为IPv6协议下每个服务器的潜在连接数都是数以百万级的&#xff0c;单机服务器处理数百万的并发连接&#xff0…

SpringDataJpa(一)

一、JPA概述 1.1 ORM概述 ORM&#xff08;Object-Relational Mapping&#xff09; 表示对象关系映射。在面向对象的软件开发中&#xff0c;通过ORM&#xff0c;就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联&#xff0c;操作对象就可以直…

【自然语言处理】利用python创建简单的聊天系统

一&#xff0c;实现原理 代码设计了一个简单的客户端-服务器聊天应用程序&#xff0c;建立了两个脚本文件&#xff08;.py文件)&#xff0c;其中有一个客户端和一个服务器端。客户端和服务器之间通过网络连接进行通信&#xff0c;客户端发送消息&#xff0c;服务器端接收消息并…

工业相机基本知识理解:帧率、带宽(数据接口)、图像数据格式

1、帧率&#xff1a;Frame Per Second&#xff0c;单位fps&#xff0c;每秒采集的图像数量 2、带宽&#xff1a;一般单位用Gbps&#xff0c;每秒能传输的Gbit数据量 Gige&#xff1a;千兆网&#xff0c;带宽1Gbps USB3.0&#xff1a;带宽5Gbps&#xff0c;一般U3V工业相机用到3…

Redis笔记 Redis主从同步

文章目录 Redis主从搭建主从架构主从数据同步原理全量同步增量同步repl_backlog原理 主从同步优化小结 Redis主从 搭建主从架构 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 主从数据…

10 # 手写 every 方法

every 使用 every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 8];var result arr.ever…

网络通信——与Socket交换数据(三十一)

1. 与Socket交换数据 1.1 知识点 &#xff08;1&#xff09;通过Android与Socket完成基本的Echo程序实现&#xff1b; &#xff08;2&#xff09;通过对象序列化进行大数据的传输&#xff1b; 1.2 具体内容 对于网络的开发而言&#xff0c;最常使用的交互模式&#xff1a;W…

ZZ308 物联网应用与服务赛题第F套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;F卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…

【MySQL篇】数据库角色

前言 数据库角色是被命名的一组与数据库操作相关的权限&#xff0c;角色是权限的集合。因此&#xff0c;可以为一组具有相同权限的用户创建一个角色&#xff0c;使用角色来管理数据库权限可以简化授权的过程。 CREATE ROLE&#xff1a;创建一个角色 GRANT&#xff1a;给角色授…

个人前端编程技巧总结

目录 1. 让界面位于当前屏幕的中心&#xff08;屏幕中心&#xff09;css代码示例 2. 界面透明但是内部元素不透明&#xff08;毛玻璃&#xff09;css代码示例 3. 将当前界面的参数传递到跳转的目标页面&#xff08;携参跳转&#xff09;js代码 1. 让界面位于当前屏幕的中心&…

cmake 之add_definitions使用误区

需求 需要实现&#xff0c;在cmake中定义宏定义&#xff0c;可以&#xff1a;1&#xff09; 在code中可以使用&#xff1b;2&#xff09; 在cmake中可以识别是否已定义 问题 宏定义&#xff0c;cmake有add_definitions函数&#xff0c;直观的实现方法如下。 cmake_minimum…

java--实体javaBean

1.什么是实体类 1.就是一种特殊形式的类 2.这个类中的成员变量都要私有&#xff0c;并且要对外提供相应的getXXX&#xff0c;setXXX方法 3.类中必须要有一个公共的无参的构造器 2.实体类有啥应用场景 实体类只负责数据存取&#xff0c;而对数据的处理交给其他类来完成&…