复习第五课 C语言-初识数组

news2024/11/18 1:32:40

目录

【1】初识数组

【2】一维数组

【3】清零函数

【4】字符数组

【5】计算字符串实际长度

练习:


【1】初识数组

1. 概念:具有一定顺序的若干变量的集合

2. 定义格式:

数组名 :代表数组的首地址,地址常量,不能为左值

访问元素 :数组名[下标],下标从0开始,到n-1;

数组越界问题需要注意!!!

3. 特点:数据类型相同,内存连续

4. 注意:

  • 数组的类型就是数组元素的数据类型
  • 数组名符合标识符命名规则
  • 同一个函数中,数组名不能和其他变量名相同
  • 【】下标从0开始到n-1结束

【2】一维数组

1.格式

数组名: 代表数组的首地址,地址常量,不能为左值

访问元素:数组名[下标], 下标从0开始,到n-1;

数组越界问题需要注意!!!

2.初始化:

1)全部初始化:

int a[5]={1,2,3,4,5}; // 1 2 3 4 5

2)部分初始化:未被赋初值的元素值为0

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

3)未初始化:只能单个赋值,未被赋初值的元素值为随机值

int a[5]; a[0]=1; a[2]=3; //1 随机 3 随机 随机

3.定义空数组:

int a[5]={0,0,0,0,0};

int a[5]={0};

int a[5]={};

4.引用

1)先定义向后引用

2)每次只能引用数组的一个元素a[i],如果想要引用所有元素,可以for循环遍历

3)防止数组越界

4)打印数组元素地址,%p

5.内存分配

5. 数组遍历

for循环,把元素下标作为循环变量,循环范围就是0~n-1

6. 数组的大小

sizeof(数组名) 数据类型的大小*元素个数

练习:计算斐波那契数列前15项并逆序输出

1 1 2 3 5 8 13 21 .....

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int arr[15] = {1, 1};
    for (int i = 2; i < 15; i++)
    {
        arr[i] = arr[i - 1] + arr[i - 2];
    }
    for (int i = 14; i >= 0; i--)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

【3】清零函数

头文件:#include <strings.h>
void bzero(void *s, size_t n);
功能:将内存空间置零
参数:
s:要清空内存的首地址
n:要清空字节数
返回值:无
例子:
int a[5]={1,2,3,4,5};
bzero(a,sizeof(a));		//以地址a开始,将sizeof(a)个字节清空为0
头文件:#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将内存空间设置为0
参数:
s:要清空内存的首地址
c:要设置的值,0
n:要清空字节数
返回值:要清空内存的首地址
例子:
int a[5]={1,2,3,4,5};
memset(a,0,sizeof(a));		//以地址a开始,将sizeof(a)个字节设置为0

【4】字符数组

1.定义方式

1)char a[]={'a','b','c'};	//sizeof(a)==3,	单个字符赋值
2)char b[]={"abc"};		//sizeof(b)==4,字符串赋值
3)char c[]="abc";			//sizeof(c)==4,字符串赋值

注意:字符串赋值经常容易忽略数组的长度,一定要注意数组越界!!!

2. 输入输出

输入:
char buf[32]={};
1)	scanf("%s",buf);		//遇到空格或\n都会认为字符串输入完成,结束
	scanf("%[^\n]",buf);	//直到遇到\n才会结束,字符串可以包含空格

2)gets
char *gets(char *s);		//gets不会检查数组越界
功能:从终端获取字符串
参数:
s:目标数组的首地址
返回值:同参数、


输出:
1)printf("%s",buf);		//打印到\0为止

2)puts
int puts(const char *s);
功能:向终端输出字符串
参数:
s:要输出字符串的首地址
返回值:输出字符的个数(包括\0)

练习1:输入一串字符,计算其中空格个数

#include <stdio.h>

int main() {
    char str[100];
    int count = 0;

    printf("请输入一串字符:");
    scanf("%[^\n]", str);

    // 遍历字符串,计算空格个数
    for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] == ' ') {
            count++;
        }
    }
    printf("空格的个数为:%d\n", count);
    return 0;
}

练习2:将一串字符串进行倒置,例如:char buf[32]=”hello”;

#include<stdio.h>
int main(int argc, char const *argv[])
{
    char buf[32]="hello";
    char t;
    int n,i;
    for(n=0;buf[n] != '\0';n++);//n==5,实际个数

    for(i=0;i<n/2;i++)//交换n/2次
    {
        t = buf[i];
        buf[i] = buf[n-1-i];
        buf[n-1-i] = t;
    }
    printf("%s\n",buf);
    return 0;
}

【5】计算字符串实际长度

1.通过for循环,直到\0为止

2. #include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际长度,不计算\0
参数:
s:要计算的字符串首地址
返回值:实际长度
例如:char buf[32]="hello";
int t = strlen(buf);		//t == 5

区分strlen和sizeof

1. strlen是函数;sizeof是关键字

2. strlen是用来计算字符串的实际长度;sizeof计算数据所占空间大小

3. strlen不计算\0,sizeof计算\0,字符数组省略元素个数时,sizeof比strlen大1

练习:

1.在终端输入大写字母、小写字母、空格、数字,分别在终端输出他们的个数

#include <stdio.h>

int main() {
    char ch;
    int uppercaseCount = 0;
    int lowercaseCount = 0;
    int spaceCount = 0;
    int digitCount = 0;
    printf("请输入一串字符,以回车结束:\n");
    while ((ch = getchar()) != '\n') {
        if (ch >= 'A' && ch <= 'Z') {
            uppercaseCount++;
        } else if (ch >= 'a' && ch <= 'z') {
            lowercaseCount++;
        } else if (ch == ' ') {
            spaceCount++;
        } else if (ch >= '0' && ch <= '9') {
            digitCount++;
        }
    }
    printf("大写字母个数:%d\n", uppercaseCount);
    printf("小写字母个数:%d\n", lowercaseCount);
    printf("空格个数:%d\n", spaceCount);
    printf("数字个数:%d\n", digitCount);
    return 0;
}

2.编写一个程序,找出1000以内所有的完数,所谓完数就是一个数恰好等于它的因子之和,

例如6=1+2+3,6就是一个完数。

#include <stdio.h>
void findPerfectNumbers(int limit) {
    int i, j, sum;
    printf("1000以内的完数有:\n");
    for (i = 2; i <= limit; i++) {
        sum = 1; // 初始化因子之和为1
        for (j = 2; j <= i / 2; j++) {
            if (i % j == 0) {
                sum += j; // 累加因子
            }
        }
        if (sum == i) {
            printf("%d ", i);
        }
    }
    printf("\n");
}
int main() {
    int limit = 1000;
    findPerfectNumbers(limit);
    return 0;
}

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

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

相关文章

【iOS】ARC内存管理

内存管理 内存管理的思考方式iOS底层内存管理方式1. tagged pointer2. on-pointer iSA--非指针型iSA3. SideTables&#xff0c;RefcountMap&#xff0c;weak_table_t 内存管理有关修饰符__strong修饰符对象的所有者和对象的生命周期__strong对象相互赋值方法参数中使用__strong…

LeetCode 热题 100(一):哈希。49. 字母异位词分组、128. 最长连续序列。

LeetCode100链接&#xff1a;LeetCode 热题 100 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 一、49. 字母异位词分组 题目要求&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。…

【ACM】—蓝桥杯大一暑期集训Day2

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前正在学习C/C、Java、算法等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&#xff…

10秒搞定!教你如何轻松压缩jpg格式图片大小!

大家在日常拍照时&#xff0c;都会发现拍摄出来的JPG图片体积比较大&#xff0c;使用和保存时都会比较麻烦。那么该怎样压缩图片大小呢&#xff1f; 首先&#xff0c;我们需要了解什么是JPG压缩。JPG是一种有损压缩格式&#xff0c;通过减少图像中的信息量来使文件大小缩小。使…

Java实现多文件上传及进度条提示-源码下载

1、方案概述 1、案例框架使用的是springmvc5.3.16版本,jackson使用的是2.13.3版本。 2、前端使用的是Layui2.8.11框架,这个框架上手较为容易。 3、使用关键类CommonsMultipartResolver和MultipartHttpServletRequest实现多文件捕获。 2、效果预览 【选择文件】 【上传过…

Android JNI线程的同步 (十三)

🔥 Android Studio 版本 🔥 🔥 了解线程同步的两个变量 🔥 pthread_mutex_t 互斥锁 线程的互斥: 目前存在两个线程 , 线程A和线程B, 只允许只有一个资源对临界资源进程操作 (大概意思就是 : A线程 进入操作临界资源的时候 , 那么 B线程 就要进行等待 . 等到 A线程…

感受C++模版的所带来的魅力,扎实基础,扩展思维

一、泛型编程思想 首先我们来看一下下面这三个函数&#xff0c;如果学习过了 C函数重载 和 C引用 的话&#xff0c;就可以知道下面这三个函数是可以共存的&#xff0c;而且传值会很方便void Swap(int& left, int& right) {int temp left;left right;right temp; } …

Nuxt.js--》解密Nuxt.js:构建优雅、高效的现代化Vue.js应用

博主今天开设Nuxt.js专栏&#xff0c;带您深入探索 Nuxt.js 的精髓&#xff0c;学习如何利用其强大功能构建出色的前端应用程序。我们将探讨其核心特点、灵活的路由系统、优化技巧以及常见问题的解决方案。无论您是想了解 Nuxt.js 的基础知识&#xff0c;还是希望掌握进阶技巧&…

【C++】Eigen库实现最小二乘拟合

前言 入职第二周的任务是将导师的Python代码C化&#xff0c;发现Python中存在Numpy包直接调用np.polyfit就好了&#xff0c;但是C不存在需要造轮子。 #include <iostream> #include <cmath> #include <vector> #include <Eigen/QR> #include "x…

re学习(15)BUUCTF 2019红帽杯easyRe(寻找数据+xor问题)

参考视频&#xff1a; 【BUUCTF】每天一个CTF11“2019红帽杯easyRe”_哔哩哔哩_bilibili &#xff08;本人觉得看视频比看博客效率能提高十倍&#xff0c;呜呜呜&#xff0c;还是视频香~~~与君共勉&#xff09; 下载地址&#xff1a; BUUCTF在线评测 前言&#xff1a;虽然…

Spring Boot集成Redisson实现分布式锁

Spring Boot集成Redisson实现分布式锁 在分布式系统中&#xff0c;为保证数据的一致性和并发访问的安全性&#xff0c;我们经常会使用分布式锁来协调多个节点之间对共享资源的访问。Redisson是一个基于Redis的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;和…

【C++】string类模拟

文章目录 成员变量和查看接口迭代器&#xff08;读和读写&#xff09;operator[]&#xff08;读和读写&#xff09;c_str()size() 构造函数用字符串构造用对象构造&#xff08;两种方法&#xff09;析构 赋值运算符重载扩容和调整reserve()resize()clear() 增删查改push_back()…

C++的switch函数用法

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 中 switch 语句的语法&#xff1a; switch(expression){ case constant-expression : statement(s); break; // 可选的 case c…

Redis数据类型 — Zset

目录 Zset内部设计 跳表哈希表 ZipList ZSet中每一个元素都需要指定一个score值和member值&#xff1a;<1> 可以根据score值排序后<2> member必须唯一<3> 可以根据member查询分数 Zset内部设计 因此&#xff0c;zset底层数据结构必须满足键值存储、键必…

AutoCAD如何通过C#进行插件开发?

文章目录 0.引言1.开发工具准备2.VS&#xff08;C#&#xff09;创建插件3.使用插件 0.引言 AutoCAD是一款广泛应用于工程设计和建筑行业的计算机辅助设计软件。通过使用C#语言进行插件开发&#xff0c;可以扩展AutoCAD的功能&#xff0c;实现定制化的需求。插件可以实现自动化绘…

linux之Ubuntu系列(-)

单用户和多用户 注意事项 Linux 系统 中区分大小写的 Window 系统 不分区大小写的

1.Java语言概述

1.1概述 JDK(Java development kit)java开发工具包 JDK是提供Java开发人员使用的&#xff0c;其中包含java的开发工具&#xff0c;包括JRE,所以安装JDK&#xff0c;就不需要安装JRE了 其中编译工具javac.exe、打包工具jar.exe JRE(Java Runtime environment) java运行环境 包括…

android11 input 事件 1 初始化

system_server 初始化InputManagerService // SystemServer.java private void startOtherServices(NonNull TimingsTraceAndSlog t) {t.traceBegin("startOtherServices");// 初始化InputManagerServicet.traceBegin("StartInputMana…

让机器学习不再是过门不入,带您一起详解机器学习(机器学习 Machine Learning 研习之一)

什么是机器学习&#xff08;Machine Learning&#xff09;&#xff1f; 机器学习是]赋予计算机学习能力的研究领域 无需明确编程。 ——阿瑟塞缪尔&#xff0c;1959 计算机程序可以从关于某些任务的经验 E 中学习 T 和一些绩效衡量 P&#xff0c;如果其在 T 上的绩效按 P 衡量&…

微信批量自动加好友神器,多账号如何统一自动加好友

其实这样的方式不仅太集中容易造成频繁 效率还很低 现在可以解放双手 只需要你有数据 导入数据设置相应添加任务 就可以每天根据你设置的时间点去添加好友 直到数据被用完 就不用每天手动一个个去添加咯 还可以多账号统一自动加好友 一天就可以加多点 相信 无论是个…