3.7day05

news2024/11/25 11:57:00

二维数组:

int arr[10] = {1,2,3,5,6,7};

{1,2,3,5,6,7};

{1,2,3,5,6,7};

{1,2,3,5,6,7};

{1,2,3,5,6,7};

定义语法:

int arr[2][3] =

{

{2, 5, 8},

{7, 9 10}

};

int arr[3][5] = {{2, 3, 54, 56, 7 }, {2, 67, 4, 35, 9}, {1, 4, 16, 3, 78}};

打印:

for(i = 0; i < 3; i++)// 行

{

for(j = 0; j <5; j++) // 列

{

printf("%d ", arr[i][j]);

}

printf("\n");

}

大小:

数组大小: sizeof(arr);

一行大小: sizeof(arr[0]): 二维数组的一行,就是一个一维数组。

一个元素大小:sizeof(arr[0][0])单位:字节

行数:row = sizeof(arr)/ sizeof(arr[0])

列数:col = sizeof(arr[0])/ sizeof(arr[0][0])

地址合一:

printf("%p\n", arr); == printf("%p\n", &arr[0][0]); == printf("%p\n", arr[0]);

数组的首地址 == 数组的首元素地址 == 数组的首行地址。

二维数组的初始化:

1)常规初始化:

int arr[3][5] = {{2, 3, 54, 56, 7 }, {2, 67, 4, 35, 9}, {1, 4, 16, 3, 78}};

2) 不完全初始化:

int arr[3][5] = {{2, 3}, {2, 67, 4, }, {1, 4, 16, 78}}; 未被初始化的数值为 0

int arr[3][5] = {0};初始化一个 初值全为0的二维数组

int arr[3][5] = {2, 3, 2, 67, 4, 1, 4, 16, 78}; 【少见】 系统自动分配行列。

3)不完全指定行列初始化:

int arr[][] = {1, 3, 4, 6, 7}; 二维数组定义必须指定列值。int arr[行][列]

int arr[][2] = { 1, 3, 4, 6, 7 }; 可以不指定行值。

练习:求出5名学生3门功课的总成绩。(一个学生的总成绩。一门功课的总成绩)

int scores[5][3];

int row = sizeof(scores) / sizeof(scores[0]);

int col = sizeof(scores[0]) / sizeof(scores[0][0]);

// 获取 5 名学生、3门功课成绩

for (size_t i = 0; i < row; i++)

{

for (size_t j = 0; j < col; j++)

{

scanf("%d", &scores[i][j]);

}

}

// 求一个学生的总成绩

for (size_t i = 0; i < row; i++) // 每个学

{

int sum = 0;

for (size_t j = 0; j < col; j++)// 每个学生的成绩

{

sum += scores[i][j];

}

printf("第%d个学生的总成绩为:%d\n", i+1, sum);

}

//求一门功课的总成绩

for (size_t i = 0; i < col; i++) // 第几门功课

{

int sum = 0;

for (size_t j = 0; j < row; j++) // 每门功课的第几个学生

{

sum += scores[j][i];

}

printf("第%d门功课的总成绩为:%d\n", i + 1, sum);

}

快捷导入代码:

VS --》 工具--》 代码片段管理器 --》 Visual C++

多维数组:【了解】

三维数组:[层][行][列]

数组类型 数组名[层][行][列];

int arr[3][3][4];

{ {12, 3, 4, 5}

{12, 3, 4, 5} },

{ {12, 3, 4, 5}

{12, 3, 4, 5} },

{ {12, 3, 4, 5}

{12, 3, 4, 5} },

for(i = 0; i < 3; i++) 层

for (j = 0; j < 3; j++) 行

for (k = 0; k<4; k++) 列

printf("%d ", arr[i][j][k]);

4维、5维、6维。。。N维。

int arr[10];

short arr[20];

long long arr[20];

字符数组 和 字符串区别:

字符数组:

char str[5] = {'h', 'e', 'l', 'l', 'o'};

字符串:

char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

char str[6] = "hello";

printf("%s");使用printf打印字符串的时候,必须碰到 \0 结束。

练习:键盘输入字符串,存至str[]中,统计每个字母出现的次数。

for (size_t i = 0; i < 10; i++)

{

scanf("%c", &str[i]);

}

int count[26] = {0}; // 代表26个英文字母出现的次数。

for (size_t i = 0; i < 11; i++)

{

int index = str[i] - 'a';// 用户输入的字符在 count数组中的下标值。

count[index]++;

}

for (size_t i = 0; i < 26; i++)

{

if (count[i] != 0)

{

printf("%c字符在字符串中出现 %d 次\n", i+'a', count[i]);

}

}

字符串获取 scanf:

注意:1)用于存储字符串的空间必须足够大,防止溢出。 char str[5];

2) 获取字符串,%s, 遇到空格 和 \n 终止。

借助“正则表达式”, 获取带有空格的字符串:scanf("%[^\n]", str);

字符串操作函数:

gets: 从键盘获取一个字符串, 返回字符串的首地址。 可以获取带有 空格的字符串。 【不安全】

char *gets(char *s);

参数:用来存储字符串的空间地址。

返回值:返回实际获取到的字符串首地址。

gets(str)与scanf(“%s”,str)的区别:

  • gets(str)允许输入的字符串含有空格

  • scanf(“%s”,str)不允许含有空格

  • 注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。

fgets(弥补上述两个函数的缺陷): 从stdin获取一个字符串, 预留 \0 的存储空间。空间足够读 \n, 空间不足舍弃 \n 【安全】

    char str[10];
    printf("请输入str: ");//如果输入的大于10个字符的字符串,str只保存前10个字符串
    fgets(str, sizeof(str), stdin);
    printf("str = \"%s\"\n", str);

char *fgets(char *s, int size, FILE *stream);

参1:用来存储字符串的空间地址。

参2:描述空间的大小。

参3:读取字符串的位置。键盘 --》 标准输入:stdin

返回值:返回实际获取到的字符串首地址。

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。

puts:将一个字符串写出到屏幕. printf("%s", "hello"); / printf("hello\n"); / puts("hello"); 输出字符串后会自动添加 \n 换行符。

int puts(const char *s);

参1:待写出到屏幕的字符串。

返回值: 成功:非负数 0。 失败: -1.

#include <stdio.h>

int main()
{
    printf("hello world");//不换行
    puts("hello world");//换行

    return 0;
}

fputs:将一个字符串写出到stdout.输出字符串后, 不添加 \n 换行符。

int fputs(const char * str, FILE * stream);

参1:待写出到屏幕的字符串。屏幕 --》标准输出: stdout

参数:写出位置 stdout

返回值: 成功:0。 失败: -1.

strlen: 碰到 \0 结束。

size_t strlen(const char *s);

参1: 待求长度的字符串

返回:有效的字符个数。

    char str[] = "abc\0defg";
    int n = strlen(str);
    printf("n = %d\n", n);//3

字符串追加:

char str1[] = "hello";

char str2[] = "world";

char str3[100] = {0};

int i = 0;// 循环 str1

while (str1[i] != '\0')

{

str3[i] = str1[i]; // 循环着将str1中的每一个元素,交给str3

i++;

}// str3=[h e l l o]

//printf("%d\n", i); --> 5

int j = 0;// 循环 str2

while (str2[j]) // 等价于 while(str2[j] !='\0') 等价于 while (str2[j] != 0)

{

str3[i+j] = str2[j];

j++;

}// str3=[h e l l o w o r l d]

// 手动添加 \0 字符串结束标记

str3[i + j] = '\0';

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>

int main(void)
{
    char str1[] = "hello";
    char str2[] = "world";

    char str3[20] = "111111111111";//此处注意字符串 数组的初始化
    puts(str3);
    int i = 0;
    while (str1[i] != 0) {//'\0'的ASCII码就是0
        str3[i] = str1[i];
        i++;
    }
    printf("%d\n", i);
    int j = 0;
    while (str2[j] != 0) {
        str3[i] = str2[j];
        i++;
        j++;
    }
    str3[i] = 0;
    puts(str3);
    printf("%d", sizeof(str3));

    for (int k = 0; k < 20; k++) {
        printf("%c", str3[k]);
        printf("\n");
    }
    system("pause");
    return EXIT_SUCCESS;
}

---------------------------------------

函数的作用:

1. 提高代码的复用率

2. 提高程序模块化组织性。

函数分类:

系统库函数: 标准C库。 libc

1. 引入头文件 --- 引入头文件就是声明函数

2. 根据函数原型调用。

用户自定义函数:

除了需要提供函数原型之外,还需要提供函数实现。

随机数:

1. 播种随机数种子: srand(time(NULL));

2. 引入头文件 #include <stdlib.h> <time.h>

3. 生成随机数: rand() % 100;

函数定义:

包含 函数原型(返回值类型、函数名、形参列表) 和 函数体(大括号一对, 具体代码实现)

形参列表: 形式参数列表。一定包 类型名 形参名。

int add(int a, int b, int c)

{

return a+b+c;

}

int test(char ch, short b, int arr[], int m)

函数调用:

包含 函数名(实参列表);

int ret = add(10, 4, 28);

实参(实际参数): 在调用是,传参必须严格按照形参填充。(参数的个数、类型、顺序) 没有类型描述符

int arr[] = {1, 3, 6};

函数声明:

包含 函数原型(返回值类型、函数名、形参列表) + “;”

要求 在函数调用之前,编译器必须见过函数定义,意思就是,函数的定义必须在调用函数那一行的前面,例如,在main函数中调用冒泡排序,冒泡排序的函数必须在main函数上面定义,要不就是在main函数上面声明一下,然后在main函数后面定义。否则,需要函数声明。

int add(int a, int b, int c);

隐式声明:【不要依赖】

默认编译器做隐式声明函数时,返回都为 int ,根据调用语句不全函数名和形参列表。

#include <xxx.h> --> 包含函数的声明

exit函数与return关键字: #include <stdlib.h>

return关键字:

返回当前函数调用,将返回值返回给调用者。

exit()函数:

退出当前程序。

多文件编程:将多个含有不同函数功能 .c 文件模块,编译到一起,生成一个 .exe文件。

<>包裹的头文件为系统库头文件。

""包裹的头文件为用户自定义头文件。

防止头文件重复包含:头文件守卫。

1) #pragma once--- windows中

2) #ifndef __HEAD_H__<--- head.h

#define __HEAD_H__

.... 头文件内容(include文件,函数声明,类型定义,宏定义)

#endif

自定义头文件:

//head,h
#ifndef __HEAD_H__
#define __HEAD_H__ 

// include 头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

// 函数声明
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);

// 类型定义
// 宏定义
#define N 10
#define PI 3.14

#endif
#define _CRT_SECURE_NO_WARNINGS

#include "head.h"

int main(void)
{
    int a = 5;
    int b = 35;

    printf("%d + %d = %d\n", a, b, add(a, b));
    printf("%d - %d = %d\n", a, b, sub(a, b));
    printf("%d x %d = %d\n", a, b, mul(a, b));

    system("pause");
    return EXIT_SUCCESS;
}

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

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

相关文章

【计算机体系结构-05】流水线冒险 (Pipeline Hazards)——控制冒险 (Control Hazards)

1. 流水线冒险 (Pipeline Hazards) 在流水线处理器中会有这样的情况&#xff0c;当前级流水线的指令可能会阻止下一条连续指令在流水线中预期的时钟周期内执行&#xff0c;这样的情况被称为流水线冒险 (Pipeline Hazards)。当发生流水线冒险后将会降低流水化所带来的理想加速比…

IDEA中自动书写setter插件

一般我们创建一个对象后&#xff0c;想要设置属性&#xff0c;是不是我们经常需要一个一个写&#xff0c;当属性很多的时候会非常麻烦&#xff0c;这个插件就可以解决这个问题&#xff1a;它可以一键生成该对象所有的setter方法 下载插件 选择需要设置属性的类名&#xff0c;a…

【Matlab】如何设置多个y轴

MTALAB提供了创建具有两个y轴的图&#xff0c;通过help yyaxis就能看到详细的使用方式。 但是如果要实现3个及以上y轴的图&#xff0c;就没有现成的公式使用了&#xff0c;如下图所示。 具体代码 % 数据准备 x10:0.01:10; y1sin(x1); x20:0.01:10; y2cos(x2); x30:0.01:10;…

C++:详解C++11 线程(一):MingGW 各版本区别及安装说明

MingGW 各版本区别一&#xff1a;MinGW、MinGW-w64 简介二&#xff1a;MinGW 各版本参数说明三&#xff1a;下载解压一&#xff1a;MinGW、MinGW-w64 简介 MinGW&#xff08;全称为 Minimalist GNU for Windows&#xff09;&#xff0c;它实际上是将经典的开源 C 语言编译器 G…

Serviceaccount

K8S鉴权 目录 K8S鉴权 什么是RBAC K8S中的RBAC 角色 角色绑定 主体&#xff08;subject&#xff09; 角色&#xff08;Role和ClusterRole&#xff09; 集群内置权限 cluster-admin admin edit view system开头的y用户 演示 参考 k8s集群相关所有的交互都通过apiserve…

Go 内置运算符 if for switch

算数运算符fmt.Println("103", 103) //103 13 fmt.Println("10-3", 10-3) //10-3 7 fmt.Println("10*3", 10*3) //10*3 30 //除法注意&#xff1a;如果运算的数都是整数&#xff0c;那么除后&#xff0c;去掉小数部分&#xff0c;保留整数部分 f…

redis Big key (俗称大key)

一、什么是Big Key? 大key&#xff0c;其实不是说比较大的主键&#xff0c;而是值比较大的key。key往往是程序可以自行设置的&#xff0c;value往往不受程序控制&#xff0c;因此可能导致value很大。 redis中这些Big Key对应的value值很大&#xff0c;在序列化/反序列化过程中…

SAP MM学习笔记5-SAP中的移动类型实例,对应收货入库以及退货之后的各种情况

对应现实的情况&#xff0c;SAP中有各种各样的收货模式。在SAP中使用移动Type来对应这些情况。 最常用的就是 移动Type 101 收货。没有意外情况&#xff0c;就是正常的收货。 以下是我调查及验证的结果&#xff0c;如果有错误&#xff0c;请指正&#xff0c;谢谢。 移动Type…

腾讯云企业网盘2.5版本全新发布啦!!!

腾讯云企业网盘又又又更新啦&#xff01;本期重点打磨管理协同、企业安全守护能力&#xff0c;同时也不断强化自身产品体验&#xff0c;助力企业高效办公~那么&#xff0c;此次更新具体有什么安全可靠的新功能呢&#xff1f;今天就带大家一起解锁~01协同管理&#xff0c;提升工…

【网络】http协议

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…

C/C++ 操作ini文件(SinpleIni 跨平台库)

最近在学习时&#xff0c;发现自己还不会操作ini文件&#xff0c;想着以前工作时接触到的项目或多或少都要用到ini文件去保存初始化程序的数据&#xff1b;所以赶紧去网上搜索以下C/C操作ini文件都有些什么库可以玩玩&#xff1b;搜索到有&#xff1a; 1. inih&#xff1a;这是…

Dubbo原理简介

Dubbo缺省协议采用单一长连接和NIO异步通讯&#xff0c;适合于小数据量大并发的服务调用&#xff0c;以及服务消费者机器数远大于服务提供者机器数的情况。 作为RPC&#xff1a;支持各种传输协议&#xff0c;如dubbo,hession,json,fastjson&#xff0c;底层采用mina,netty长连接…

SAP 分析云 2023.03 版新功能抢先看

本文介绍了 SAP 分析云2023.03版本的新功能。对于 SAP 分析云季度发布周期 (QRC) 客户&#xff0c;此版本及其功能将作为 QRC 2023 年第2季度版本的一部分提供。本版本主要在仪表盘和故事设计、数据集成、企业计划方面进行了功能更新&#xff0c;来和阿拓一起看看吧&#xff01…

Hive---窗口函数

Hive窗口函数 其他函数: Hive—Hive函数 文章目录Hive窗口函数开窗数据准备建表导入数据聚合函数window子句LAG(col,n,default_val) 往前第 n 行数据LEAD(col,n, default_val) 往后第 n 行数据ROW_NUMBER() 会根据顺序计算RANK() 排序相同时会重复&#xff0c;总数不会变DENSE…

C#要点技术(一) - List 底层源码剖析

1。 ## 常用组件底层代码解析List 底层代码剖析List是一个C#中最常见的可伸缩数组组件&#xff0c;我们常常用它来替代数组&#xff0c;因为它是可伸缩的&#xff0c;所以我们在写的时候不用手动去分配数组的大小。甚至有时我们也会拿它当链表使用。那么到底它的底层是怎么编写…

将Quazip编译成基于32位release版的库时报错的解决方案

开发环境&#xff1a;Win10 Qt5.9.9 注意&#xff1a;阅读本篇文章前&#xff0c;首先阅读Quazip的编译及使用&#xff0c;保姆级教程。 之前写了如何编译Quazip的库&#xff0c;当时是使用MSV2015-64-release来编译的&#xff0c; 具体编译流程可参考之前的文章Quazip的编译及…

3句代码,实现自动备份与版本管理

前言&#xff1a;服务器开发程序、测试版本等越来越多&#xff0c;需要及时做好数据的版本管理和备份&#xff0c;作为21世界的青年&#xff0c;希望这些事情都是可以自动完成&#xff0c;不止做了数据备份&#xff0c;更重要的是做好了版本管理&#xff0c;让我们可以追溯我们…

用Go快速搭建IM即时通讯系统

WebSocket的目标是在一个单独的持久连接上提供全双工、双向通信。在Javascript创建了Web Socket之后&#xff0c;会有一个HTTP请求发送到浏览器以发起连接。在取得服务器响应后&#xff0c;建立的连接会将HTTP升级从HTTP协议交换为WebSocket协议。由于WebSocket使用自定义的协议…

深度学习部署笔记(十): CUDA RunTime API-2.2流的学习

1. 流的定义 流&#xff08;Stream&#xff09;是一个基于上下文&#xff08;Context&#xff09;的任务管道抽象&#xff0c;是一组由GPU依次执行的CUDA操作序列&#xff0c;其中每个操作可能会使用或产生数据。在一个上下文中可以创建多个流&#xff0c;每个流都拥有自己的任…

Kettle体系结构及源码解析

介绍 ETL是数据抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;、装载&#xff08;Load&#xff09;的过程。Kettle是一款国外开源的ETL工具&#xff0c;有两种脚本文件transformation和job&#xff0c;transformation完成针对数据的基础转换&…