数组

语法: 类型 数组名[元素个数];

int a[6];  //  4*6 字节
char b[24]; // 1*24 字节
double c[2]; // 2*8 字节

访问数组中的元素

语法: 数组名[元素下标]

a[2];
b[4];
c[1];
  • 注意
int a[6];
a[0]; // 访问第一个元素
a[6]; // 访问第七个元素 出现数组越界。

使用循环给数组赋值

#include<stdio.h>
#define NUM 10 int main(){
int a[NUM];
int i,sum=0; for(i = 0;i < NUM;i++){
printf("请输入第%i位同学的成绩:",i+1);
scanf("%d",&a[i]);
sum+=a[i];
}
printf("成绩录入完毕,该次考试的平均分是:%.2f\n",(double) sum/NUM);
return 0;
}

初始化

语法: 类型 数组名[元素个数] = {n,n+1,....};

#include<stdio.h>
#define NUM 5 int main(){
int a[NUM] = {0};
int b[NUM] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("a的第%d个元素为:%d\n",i+1,a[i]);
printf("b的第%d个元素为:%d\n",i+1,b[i]);
}
return 0;
}
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:0
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
#include<stdio.h>
#define NUM 5 int main(){
int a[NUM];
int b[NUM] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("a的第%d个元素为:%d\n",i+1,a[i]);
printf("b的第%d个元素为:%d\n",i+1,b[i]);
}
return 0;
}
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:26
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
  • 有时候初始化了数组的值,可以在定义的时候不写数组的长度
#include<stdio.h>
#define NUM 5
int main(){ int b[] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d\n",i+1,b[i]);
}
return 0;
}
  • c99 新特性:指定初始化的元素。未被赋值的元素自动初始化 0;
#include<stdio.h>
#define NUM 5 int main(){ int b[5] = {[3] = 4,[4] = 7};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d\n",i+1,b[i]);
}
return 0;
}
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
  • sizeof
#include<stdio.h>
#define NUM 5
int main(){ int b[5] = {[3] = 4,[4] = 7};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d\n",i+1,b[i]);
}
printf("sizeof b:%d个字节",sizeof(b));
return 0;
}
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
sizeof b:20个字节
  • c99 支持可变长度,是值用变量指定数组的长度
#include<stdio.h>

int main(){
int n,i;
printf("请输入字符串个数:");
scanf("%d",&n);
char a[n+1]; printf("请输入字符串:");
getchar(); // 把输入字符串个数之后的回车键获取扔掉
for(i = 0;i < n; i++){
scanf("%c",&a[i]);
}
a[n] = '\0';
printf("你输入的字符串是:%s\n",a);
return 0;
}

在录入数据的时候会出现换行,所以在 for 前加上getchar();

数组越界

#include<stdio.h>

int main(){
int a[10],i;
for(i = 0;i <= 10; i++){
a[i]=i;
} for(i = 0;i <= 10; i++){
printf("%d\n",a[i]);
} return 0;
}
0
1
2
3
4
5
6
7
8
9
10

可以打印出 11 个元素,越界不报错的原因是编译器做了手脚。不是所有的编译器可以正常执行。

字符数组

定义方式

  • 初始化字符串数组每个元素,以\0结尾
char str[6] ={ 'H','e','l','l','o','\0 '};
  • 可以不写元素的个数,因为编译器会自动计算
char str[] = { 'H','e','l','l','o','\0 ' };
  • 使用字符串常量初始化字符串数组
char str[] = {"Hello"};
  • 使用字符串常量初始化,可以忽略大括号
char str[]= "Hello";

字符串处理函数

  • 获取字符串长度(个数):strlen
#include<stdio.h>
#include<string.h>
int main(){
char str[] = "hello";
printf("sizeof str = %d\n",sizeof(str)); // sizeof str = 6
printf("strlen str = %u\n",strlen(str)); // strlen str = 5
return 0;
}
  • 拷贝字符串:strcpy,strncpy
#include<stdio.h>
#include<string.h>
int main(){ char str1[] = "hello world";
char str2[] = "New string 123";
char str3[100];
strcpy(str2,str1);
strcpy(str1,"123");
strcpy(str3,"321");
printf("str1 = %-20s , size = %4d\n",str1,sizeof(str1));
printf("str2 = %-20s , size = %4d\n",str2,sizeof(str2));
printf("str3 = %-20s , size = %4d\n",str3,sizeof(str3));
// str1 = 123 , size = 12
// str2 = hello world , size = 15
// str3 = 321 , size = 100
return 0;
}

使用 strcpy 第一个参数的字符串内存一定要大于第二个,否则会出现字符串截断。

#include<stdio.h>
#include<string.h>
int main(){
char str1[] = "to be No.1";
char str2[50];
strncpy(str2,str1,4);
str2[4] = "\0";
printf("str2 = %s\n",str2); // str2 = to b
return 0;
}

使用 strncpystrcpy多出一个参数,第三个参数,是表示复制的字符串数字个数。

  • 连接字符串:strcat,strncat
#include<stdio.h>
#include<string.h>
int main(){ char str1[] = "hello";
char str2[] = " world!";
strcat(str1," big");
strcat(str1,str2);
printf("str1: %s",str1); // str1: hello big world!
return 0;
}
#include<stdio.h>
#include<string.h>
int main(){ char str1[] = "hello";
char str2[] = "world!";
strncat(str1," big",1);
strcat(str1,str2);
printf("str1: %s",str1); // str1: hello world!
return 0;
}
  • 比较字符串:strcmp,strncmp
#include<stdio.h>
#include<string.h>
int main(){ char str1[] = "hellbe No.1";
char str2[] = "hello wold";
int num = 3;
int b = strcmp(str1,str2);
int c = strncmp(str1,str2,num);
printf("b = %d\n",b);
printf("c = %d\n",c);
if(!c){
printf("两个字符串前%d完全一致!\n",num);
}else{
printf("两个字符串前%d存在差异!\n",num);
}
if(!b){
printf("两个字符串完全一致!\n");
}else{
printf("两个字符串存在差异!\n");
}
// b = -1
// c = 0
// 两个字符串前3完全一致!
// 两个字符串存在差异!
return 0;
}

strcmp方法 相同返回0,不同返回其余数字。

c 语言学习第六天的更多相关文章

  1. python学习 第六天课后总结:

    <br class="Apple-interchange-newline"><div></div>       python学习 第六天课后总结 ...

  2. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  3. C语言学习 第七次作业总结

    C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...

  4. 技能收获与C语言学习

    你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...

  5. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  6. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  7. 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标

    自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...

  8. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  9. 20155229-付钰涵-分析自我技能延展到c语言学习状况

    我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...

  10. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

随机推荐

  1. 密码学—凯撒密码Python程序

    文章目录 凯撒密码来源 加密算法 解密算法 凯撒密码来源 古典密码,且属于单表加密 凯撒密码又称恺撒变换.变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系.(当然 ...

  2. Netflow/IPFIX 流量收集与分析

    目录 文章目录 目录 Netflow(网络数据流检测协议) IPFIX(网络流量监测) IPFIX 组网架构 IPFIX 应用场景 Usage-based Accounting(基于使用流量的计费) ...

  3. c#事件的实际应用场景

    最简单的定义事件的语法 public event Action<bool> Refreash; 先介绍这个Action 这个Action是委托的快速实现方式,我用.net framewor ...

  4. Android 13 - Media框架(27)- ACodec(五)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 前面几节我们了解了OMXNodeInstance是如何处理setPortMode.allocateBuffer.useBuffer的,这一节我们再回 ...

  5. 拼凑一个ABP VNext管理后台拼凑一个ABP VNext管理后台

    介绍# 本项目前后端分离,后端采用ABP VNext框架,前端Vue.项目地址: https://github.com/pojianbing/AuthCenter 目前包含的模块有: 身份认证管理 I ...

  6. golang的 CGO 是什么

    CGO是Go(Golang)语言中的一个工具,全称为 "C-Go" 或者 "C for Go". 它是Go标准库的一部分,允许Go代码与C语言代码进行交互. C ...

  7. .NET开源、跨平台、使用简单的面部识别库

    前言 今天给大家分享一个.NET开源(MIT License).免费.跨平台(适用于 Windows.MacOS 和 Linux ).使用简单的面部识别库:FaceRecognitionDotNet. ...

  8. 小米路由器4c刷入openwrt并成功进行锐捷认证

    小米路由器4C 刷入openwrt 并成功进行锐捷认证 前言: 在大学中,宿舍有个路由器当然是刚需,然而,我们学校的校园网需要进行锐捷认证,常规的路由器还用不了,需要自己刷路由器或是从奸商处购买.初入 ...

  9. 面试必会->Redis篇

    01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 : 使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些 ...

  10. LVGL8文本框设置长文本会自动滚动到文本最后解决方法

    在创建完成并设置完文本之后加一句 lv_obj_scroll_to_y(obj,0, LV_ANIM_OFF); 就可以了 原因:官方控件里面设置文本的接口里面设置文本后会设置一次光标位置到文本末尾, ...