一、数组

1.1、数组的概念

用来存储一组相同类型数据的数据结构。有点像班上放手机的手机袋,超市的储物柜。

特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。

1.2、数组的定义

格式: 类型 数组名[元素个数];

举例:存储5个人的年龄

int ages[5]; //在内存中开辟4x5=20个字节的存储空间

char str[]={'x','y'};

char str[]="xy";

double array[10];

可以在定义数组的同时对数组进行初始化:

int ages[5]={17,18,19,20,21};

遍历数组:

for(int i=0;i<5;i++)

{

printf(“ages[%d]=%d\n”,i,ages[i]);

}

注意:

(1)数组的初始化

①.int ages[5]={17,18,19,20,21};//一般写法

②. int ages[5]={17,18};//只对前两个元素赋值

③. int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个

④. int ages[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。

⑤. int ages[];//错误,编译器无法知道应该分配多少的存储空间

⑥. int ages[5];ages={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化

⑦. int ages[‘A’]={1,2,3};//正确,相当于是ages[65]

⑧. int count=5;int ages[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。

⑨. 而int count=5;int ages[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量

但是访问数组时,是利用相同的数组名和其不同的下标来访问,下标必须从0开始计算,那么最后一个元素的下标就是“长度-1”。即数组元素的一般形式为:数组名[下标]

#include "stdio.h"
void main()
{
//数组定义
int a[],i; //定义长度为5的int类型数组,相当于定义了5个变量 //使用数组元素,0-5叫下标
a[]=;
a[]=;
a[]=;
a[]=;
a[]=; //循环输入
for(i=;i<;i++)
{
scanf("%d",&a[i]);
} //遍历数组中的每一个元素
for(i=;i<;i++)
{
printf("%d \n",a[i]);
}
}

1.3、计算平均成绩与总分

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//定义一个长度为10的float类型的数组,
//循环输入10个学生的成绩
//计算出平均成绩与总分
//数组定义
int i;
float mark[],s=; //定义float数组,长度为10,0-9
for(i=;i<;i++)
{
printf("mark[%d]=",i);
scanf("%f",&mark[i]);
} for(i=;i<;i++)
{
s=s+mark[i];
} printf("总分:%.2f",s);
printf("平均分:%.2f",s/);
}

1.4、数组初始化

初始化赋值的一般形式为:
类型说明符 数组名[常量表达式]={值,值……值};
其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
相当于a[0]=0;a[1]=1...a[9]=9;

可以只给部分元素赋初值,但值的个数多于数组元素个数则不行;当{ }中值的个数少于数组元素个数时,则只给前面部分元素赋值,多于数组元素个数时,则越界。
只能给元素逐个赋值,不能给数组整体赋值。
如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。

#include "stdio.h"
void main()
{
int i,a[]={,}; for(i=;i<;i++)
{
printf("%d\n",a[i]);
} }

1

2

1.5、求数组中最大数

#include "stdio.h"
void main()
{
int a[]={,,,,,,,-,,},max,i; //假定最大数为a[0]
max=a[]; //遍历,枚举
for(i=;i<;i++)
{
if(a[i]<max)
{
max=a[i];
}
}
printf("%d",max);
}

99

1.6、冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序舞蹈演示

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//冒泡排序
int a[]={,,,,-,,,-,,},i,j,t;
for(i=;i<;i++)
{
for(j=;j<-i;j++)
{
if(a[j]>a[j+])
{
t=a[j];
a[j]=a[j+];
a[j+]=t;
}
}
} for(i=;i<;i++)
printf("%d \n",a[i]); }

N个数排序,外重循环N-1,内重循环N-1-i,比较交换

二、字符串

2.1、字符串概念与定义

C语言中的字符数组就是一个字符串,字符串是一个特殊的字符数组。

单字符数组的定义
例如:
char c[10]; /*单字符数组,即一串字符*/
单字符数组的初始化
例如:
char c[10]={'H','e','l','l','o','\0'};
char c[]={'H','e','l','l','o',0};
这种初始化方法,系统不会自动给其加上字符串结束符,即’\0’字符,所以要人为加上。
字符串结束标志:在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串常量总是以'\0'作为字符串的结束符。因此当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//字符串 (糖葫芦)
char str[]={'H','e','l','l','o','\0'};
int i;
char str1[]="Kitty";
printf("%s",str1); for(i=;i<;i++)
printf("\n %c",str1[i]); }

2.2、字符串输入与输出

2.2.1、使用scanf与printf可以完成字符串的输入

char str[100];

scanf("%[^\n]s",str);

printf("%s",str);

2.2.2、使用gets,puts完成

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h" void main()
{
//数组字符串输入时不需要&取地址
char name[];
gets(name); //从键盘输入字符串
puts(name); //输出字符串
}

2.3、字符串连接函数strcat

格式:
strcat (字符数组名1,字符数组名2)
功能:
把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。
注意:第一个参数只能是字符数组变量,而不能是字符串常量

#include "stdio.h"
#include "string.h"; void main()
{
char str1[]="Hello";
char str2[]=" Kitty";
//使用strcat函数将str2的内容复制到
//str1中,只适用于字符串
strcat(str1,str2);
printf("%s \n",str1);
printf("%s \n",str2);
}

2.4、字符串拷贝函数strcpy

格式:
strcpy (字符数组名1,字符数组名2)
功能:
把字符数组2中的字符串拷贝到字符数组1中。字符串结束标志“\0”也一同拷贝。字符数组2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"; void main()
{
char str1[]="Boy!";
char str2[]="Girl!";
printf("%s \n",str1);
printf("%s \n",str2); //将str2的内容复制到str1中
strcpy(str1,str2); printf("%s \n",str1);
printf("%s \n",str2);
}

2.5、字符串比较函数strcmp

格式:
strcmp(字符数组名1,字符数组名2)
功能:
按照ASCII码顺序比较两个数组中同位字母的大小,并由函数返回值返回比较结果。
字符串1=字符串2的话,返回值=0;
字符串2>字符串2的话,返回值 >0;
字符串1<字符串2的话,返回值 <0。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"; void main()
{
char str1[]="abe123";
char str2[]="abd";
//-1 小于
//0 等于
//1 大于
printf("%d",strcmp(str1,str2));
}

1

2.6、获得字符串长度函数strlen

格式:
strlen(字符数组名)
功能:
计算数组里字符串的实际长度(不含字符串结束标志‘\0’) 并将长度作为函数返回值;也可以计算字符串常量的长度。

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"; void main()
{
char str1[]="abe123";
//获得字符串长度,中文占两位
printf("\n %d",strlen(str1));
}

6

更多函数请点击这里

2.7、数组移动作业 P181

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
//
int a[]={,,,,,,,,,},n,p=,i; //输入要插入的数
scanf("%d",&n); //确定位置
for(i=;i<;i++)
{
if(a[i]>=n)//如果数组中的当前数与n相同
{
p=i;
break;
}
} //移动
for(i=;i>=p;i--)
{
a[i]=a[i-];
} //插入
a[p]=n; //显示结果
for(i=;i<;i++)
{
printf("%d \t",a[i]);
} }

三、二维数组

一组数组是线性的,二组数组是平面的

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[][],i,j; a[][]=;
a[][]=; for(i=;i<;i++)
{
for(j=;j<;j++)
{
a[i][j]=i*j;
}
} for(i=;i<;i++)
{
for(j=;j<;j++)
{
printf("a[%d][%d]=%d \t",i,j,a[i][j]);
}
printf("\n");
}
}

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[][]={{,,},{,,},{,,}},i,j; for(i=;i<;i++)
{
for(j=;j<;j++)
{
printf("a[%d][%d]=%d \t",i,j,a[i][j]);
}
printf("\n");
}
}

四、上课示例与作业源文件下载

点击下载

C语言 第七章 数组与字符串的更多相关文章

  1. c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...

  2. [日常] C语言中的字符数组和字符串

    c语言字符数组和字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋 ...

  3. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  4. 第三章 数组与字符串 UVa1588 Kickdown

    题目要求简述:给定长度分别为n1,n2(n1,n2<=100)且每列的高度只为1或者2的长条.需要将他们放入一个高度为3的容器,问能够容纳它们的最短容器长度. 分析: 对于这样的题目显而易见有两 ...

  5. JavaScript权威指南 第七章 数组

    主要介绍一下数组方法 1.Join() Array.join()方法将数组中所有元素都转换为字符串并连接在一起,返回最后生成的字符串. 可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素.默 ...

  6. C语言中的字符数组和字符串

    在C语言中,没有字符串类型,但是可以通过字符数组来模拟字符串. 字符串可以在栈上,堆上,静态区和常量区进行分配. char buf[50]  = "abc"; char buf[] ...

  7. 关于c语言中的字符数组和字符串指针

    先看代码: #include <stdio.h> int main(void) { ] = "; char * strTmp = "abcdefg"; int ...

  8. Java - 冒泡排序的基础算法(尚学堂第七章数组)

    /** * 冒泡排序的基础算法 */ import java.util.Arrays; public class TestBubbleSort1 { public static void main(S ...

  9. 新手入门C语言第七章:C判断

    C 判断 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). C 语言把任何非零和非空的值假定为 true,把零或 null  ...

随机推荐

  1. TreeSet

    一.TreeSet中的元素比较有两种方式 1.定义一个类,实现Comparable接口  复写的是comparato方法 2.定义一个类,实现Comparator接口,覆盖compara方法(此种方法 ...

  2. MySQL选择合适的数据类型

    一.char和varchar char是固定长度的,查询速度比varchar速度快的多.char的缺点是浪费存储空间. 检索char列时,返回的结果会删除尾部空格,所以程序需要对为空格进行处理. 对于 ...

  3. 如何用js得到当前页面的url信息方法(JS获取当前网址信息)

    设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...

  4. weblogic 12c web部署注意的问题

    废话不多说下面讲介绍他的具体部署web应用,应该注意哪些问题. 准备工作: Java JDK 安装及环境配置 http://jingyan.baidu.com/article/ff41162596a7 ...

  5. html 5 canvas画布整理

    1. 创建canvas画布<canvas id="myCanvas" width="800" height="800" >< ...

  6. poj3187-Backward Digit Sums(枚举全排列)

    一,题意: 输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)  3 1 2 4 //1~n 全排列中的一个排列  4 3 6  7 ...

  7. SQL Server 2016中In-Memory OLTP继CTP3之后的新改进

    SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...

  8. CYQ.Data V5 分布式缓存MemCached应用开发介绍

    前言 今天大伙还在热议关于.NET Core的东西,我只想说一句:在.NET 跨平台叫了这么多年间,其实人们期待的是一个知名的跨平台案例,而不是一堆能跨平台的消息. 好,回头说说框架: 在框架完成数据 ...

  9. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  10. ABP理论学习之数据传输对象(DTO)

    返回总目录 本篇目录 为何需要DTO 领域层抽象 数据隐藏 序列化和懒加载问题 DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射 帮助接口 DTO用于应用层和 展现层间的数据传输. ...