当前位置: 首页 > news >正文

华清远见25072班C语言学习day6

重点内容:

一维字符数组:

        定义:

                C中的字符数组通常用于存储字符串;char 数组名[长度];

        初始化和赋值:

                方法一:使用字符初始化

                        完全初始化 char arr[3]={'a','b','c'};

                        不完全初始化 char arr1[5]={'a','b','c'};-->不完全初始化,未初始化的部分默认为0

                方法二:使用字符串给字符数组初始化

                        不完全初始化 char arr[]="hello";-->不给长度的初始化,需要给'\0'预留出空间

数组名的含义:

        数组名表示数组中首元素的地址,不能更改

C中字符串的处理逻辑:

        C语言中没有字符串类型,所以字符串用字符数组存储,为了和普通的字符数组区分,字符串后面有看不见的'\0'作为结束的标志

        所以C中所有对字符串处理的函数和格式符,都是要数组(字符串)的首地址,从首地址开始处理字符串遇到'\0'结束对字符串的操作

字符串的输入输出函数:

gets函数:

        gets(字符串的首地址); //从终端获取字符串

        使用gets函数获取会报警告,因为gets不会做合理性检查(可能数组不能容纳下字符串也会写入)

puts函数:

        puts(字符串的首地址);-->从字符串的首地址开始,一直向后输出,直到遇到'\0'结束

字符串函数族的函数:

        如果要使用字符串函数族的函数需要导头文件#include

strlen:求字符串的真实长度(不包括'\0')

        strlen(字符串首地址);

strcpy:字符串拷贝

        strcpy(目标字符串的首地址,源字符串的首地址);-->将源字符串中的内容,拷贝给目标字符串中,需要保证目标字符串的空间足够大,来接受拷贝的结果

strcat:将一个字符串拼接到另一个字符串后面

        strcat(目标字符串的首地址,源字符串的首地址);-->目标字符串必须足够长,接收拼接后的结果

strcmp:字符串比较函数,C中不支持字符串的比较,用strcmp来比较字符串大小

        strcmp(字符串s1的首地址,字符串s2的首地址)-->比较字符串s1和s2中相同位置的每一个字符,如果字符相同继续向下一个位置比较,如果不同直接返回s1中字符-s2中字符的差值,结束函数(遇到不同字符就结束)

bzero:内存置0,从首地址开始置n个字节的0

        bzero(要置0的空间的首地址,从首地址开始置0多大空间)

memset:把从s地址开始的n个Byte的空间置为c

        memset(要置位的内存的首地址,要置为什么内容,置多少个字节)


作业:

1.把strlen、strcpy、strcat自己实现(不可以使用库函数)

strlen:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr[100]="";
gets(arr);
int i=0;
while(arr[i])
{
i++;
}
printf("len=%d",i);
putchar(10);
return 0;
}

strcpy:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[]="hello world";
char arr2[]="hqyj25072";
puts(arr1);
puts(arr2);
int i=0;
while(arr2[i])
{
arr1[i]=arr2[i];
i++;
}
arr1[i]=arr2[i];
printf("after strcpy:");
puts(arr1);
return 0;
}

strcat:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[100]="hello world";
char arr2[]="hqyj25072";
puts(arr1);
puts(arr2);
int i=0;
while(arr1[i])
{
i++;
}
int j=0;
while(arr2[j])
{
arr1[i]=arr2[j];
j++;
i++;
}
arr1[i]=arr2[j];
printf("after strcat:");
puts(arr1);
return 0;
}

2.终端输入10个学生成绩,根据用户选择1表示升序,0表示降序,完成对成绩的排序。

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int arr[10];
printf("please enter arr:");
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len;i++)
{
scanf("%d",&arr[i]);
}
int choose;
printf("please choose 1 or 0(1升序、0降序):");
scanf("%d",&choose);
if(choose==1)
{
for(int i=1;i<len;i++)
{
for(int j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
else
{
for(int i=1;i<len;i++)
{
int max_index=i-1;
for(int j=i;j<len;j++)
{
if(arr[max_index]<arr[j])
{
max_index=j;
}
}
if(max_index!=i-1)
{
int temp=arr[max_index];
arr[max_index]=arr[i-1];
arr[i-1]=temp;

            }
}
}
for(int i=0;i<len;i++)
{
printf("%d\t",arr[i]);
}
putchar(10);

    return 0;
}

3.思维导图

http://www.dtcms.com/a/326792.html

相关文章:

  • 操作系统1.5:操作系统引导
  • 101. 孤岛的总面积
  • 下一代防火墙组网
  • 晓知识: 动态代理与静态代理的区别
  • Android模块化架构深度解析:从设计到实践
  • 强联通分量(重制版)
  • 环境配置-拉取NVIDIA Docker镜像时出现401Unauthorized错误
  • 数据填报是什么?数据填报工具有哪些?
  • 黑马程序员mysql基础篇笔记
  • 自定义switch with icon
  • 使用Pytest进行接口自动化测试(三)
  • 深入了解torch框架
  • 数据类型 string
  • 算法题——IP地址分类与子网掩码
  • CobaltStrike安装和使用教程
  • Cobalt Strike的搭建和使用
  • JDK21虚拟线程和 Golang1.24协程的比较
  • STM32——system文件夹
  • Empire--安装、使用
  • 集团型企业如何统一管控子公司权限?
  • 奈飞工厂:算法优化实战​
  • 视频播放器哪个好用?视频播放器PotPlayer,KMP Player
  • 多轮会话记忆的核心挑战
  • 8.11下一代防火墙组网方案笔记
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • C++算法·前缀和
  • DCN之AP IGMP Snooping 原理与配置
  • P3917 异或序列 题解
  • Day01_QT编程20250811
  • while循环结合列表或字典