C语言入门教程(5) CSDN花神生涯


数组

一维数组的定义和引用

数组是按序排列的同类变量的集合,数组元素当然就是组成数组的基本单元

  • 类型说明符 数组名 [常量表达式];
    例如:int arr[3]={1,2,3}

  • [ ] 数组访问操作符

  • 数组是使用下标来访问的,下标从0 开始

  • 常量表达式表示数组元素的 个数

  • 数组在创建的时候,如果不指定数组的大小就得初始化,数组的元素个数根据初始化的内容来确定
    例如:nt arr[]={“abc”};//sizeof(arr)=4, strlen(arr) =3
    例如:nt arr[]={ ‘a’,‘b’,‘c’};//sizeof(arr)=3, strlen(arr) =随机值

  • 数组在内存中是连续存放的,由低地址项高地址

  • 一维数组的使用

键盘输入10个数,输出最大值

#include <stdio.h>
main()
{
int i,max,a[10];
printf("输入10为数字")
		for(i=0;i<10;i++scanf("%d",&a[i]);
		max=a[0];
	for(i=1;i<10;i++)
		if(a[i]>max)
			max=a[i];
	printf("maxnum=%d\n"max)
	}

二维数组的定义和引用

  • 类型说明符 数组名[常量表达式1] [常量表达式2];
    例如:int a[3][4]={3,16,87,65,4,32,11,108,10,325,12,27};
    →若对全部元素初始化,则第一维的长度可以不给出
    例如:int a[ ][4]={3,16,87,65,4,32,11,108,10,325,12,27};
    →对每行第一列进行初始化
    例如 :int a[2][3]={{1},{2}}

  • 常量表达式1表示第一维下标的长度

  • 常量表达式2表示第二维下标的长度
    int a[3][4],定义了一个三行四列的数组

  • 行可以省略,列不可以
    int a[][4]={{1,2,3,4,},{5,6,7,8,}}定义了一个2行四列的数组

  • a[i][j];调用第i行,第j 列的数组元素

  • 二维数组按行排列 ,也是连续存储的,由低地址向高地址

  • 数组是一种构造类型,二维数组可以看作由一维数组的嵌套而构成的

二维数组的使用

构造并输出一个5行5列的矩阵,主对角线上的数为1,其他位置色数为0

#include <stdio.h>
man()
{
int a[5][5],i,j;
	for(i=0;i<5;i++)//外层循环控制行//矩阵的建立
 		for(j=0;j<5;j++)//内层循环控制列。
	 		if(i==j)
 				a[i][j]=1;
			else
			 	a[i][j]=0;
 	for(i=0;j<5;i++)//矩阵的输出
 	{
 		for(j=0;j<5;j++)
 		printf("%4d",a[i][j]);
 		printf("\n")
	 }
 }

字符数组

  • 例如: char c[5]={‘h’,‘l’,‘o’,‘o’,‘e’}
  • 当把一个字符串存入一个数组时,也把结束符’\0‘存入了数组
  • 用字符串方式初始化比用字符逐个进行初始化多占一个字节
  • 例如:char c[]={’C’,’ ',‘p’,‘r’,‘g’,‘r’,‘a’,‘m’};
  • 可以:char c[]={“C program”}
  • 可以:char c[]=“C program”
  • 当用scanf函数输入字符串时,字符串不能含有空格否则,将以空格作为串的结束标志
  • 曾经介绍scanf的个输入项必须以地址方式出现,如&a,&b等
  • 但scanf(“%s%s%s”arr1,arr2,arr3)却以数组名出现,原因是数组名代表数组的首地址,是个地址常量
  • 整个数组时个以首地址开头的一块连续的内存单元,
字符串输出函数puts
puts(字符数组名);

功能:把字符数组中的字符串输出到标准输出设备上,即在屏幕上显示该字符串。

字符串输入函数gets
gets(字符数组名);

功能:从键盘上输入一个字符串,本函数得到一个函数值,即为该字符数组的首地址,gets函数并不以空格作为字符串输入结束的标志

字符串连接函数strcat
strcat(字符数组1,字符数组2);

功能:把字符数组2 的字符串连接到字符数组1中字符串的后面,并删除字符串1后原有的串结束标志’\0’,
本函数的返回值是字符数组1的首地址

字符串复制函数strcpy
strcpy(字符数组名1,字符数组名2)

功能:把字符数组2的字符串复制到字符数组1中,串结束标志’\0‘也一同复制,本函数字符数组1应有足够的长度

字符串比较函数strcmp
strcmp(字符数组名1,字符数组名2)
字符串1 = 字符串2,返回值=0
字符串1 > 字符串2,返回值>0
字符串1 < 字符串2,返回值<0

功能:根据ASCII码顺序比较返回比较结果,也可以用来比较两个字符串常量,或比较数组和字符串常量

字符串长度测试函数strlen
strlen(字符数组名)   

功能: 求字符串的长度,并作为函数值返回,当碰到字符串结束标志\0停止,不包括\0

字符串所占空间函数sizeof
sizeof()   

:计算arr所占空间的大小,包括\0也算占用空间

经典案例一

在二维数组a选出各行最大的元素,组成一个一维数组b。

#include <stdio.h>
main()
{
int a{}{4}={3,16,87,65,4,32,11,108,10,325,12,27}
int b[3],i,j,m;
	for(i=0;i<3;i++)//外层循环控制行数,比较3次,0,1,2,
	{
		m=a[i][0];//行的第0列元素已经提取出来,所以下面j初始化为1
		for(j=1;j<=3;j++)//内层循环控制列数,比较三个三次
			if(a[i][j]>m)
			m=a[i][j];//将暂时比较出的大的数赋给m
			b[i]=m;//再将m赋给b[i]
	}
	printf("输出数组a:\n")
	for(i=0;i<3;i++)
	{
		for(j=1;j<=3;j++)
		printf("%5d",a[i][j]);
		printf("\n")
	}
	printf("输出数组b:\n")
		for(i=0;i<3;i++)
			printf("%5d",b[i]);
			printf("\n"]);
}

经典案例二

输入5个国家的名称,并按字母顺序排列输出

#include <indio.h>
main()
{
char cs[5][20], st[20];
int i,j,p;
printf{"请输入五个国家名称"}
	for(int i=0,i<5,i++)
		gets(cs[i]);//键盘获取五个国家名称
	printf("\n");
	for(i=0,i<5,i++)
	{
		p=i;//中间变量,将i的下标赋给p,存取当前最小值
		strcpy(st,cs[i])//将获取到的国家赋给st
		for(j=i+1;j<5;j++)//循环找出最小城市名
			if(strcmp(cs[j],st)<0)//比较函数,
			{
				p=j;//将下一个获取到的字母小的国家的下标赋给p,存取当前最小值
				strcpy(st,cs[j]);//将下一个获取到的字母小的国家赋给st
			}
			if(p!=i)//如果此时p不等于i,说明执行了上面内层循环语句,有更小的国家出现
			{
			//交换位置,将最小值提到前面
			strcpy(st,cs[j]);
			strcpy(cs[i],cs[p]);//将中间变量存取的最小值赋给cs[i]
			strcpy(cs[p],st);
			}
			puts(cs[i]);//输出字母顺序小的国家
	}
			printf("\n");
{

花神博客生涯之C语言(5)结束了哦~
接下来会持续更新(⊙o⊙)!
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值