一维二维数组,字符数组

一:一维数组

数组:是指一系列具有相同类型的有序数据元素的集合;

一维数组:类型名 数组名 【常量表达式】

类型名:基本数据类型或者构造数据类型;

数组名:自行定义的标识符;

常量表达式:值必须大于1,表示数组的长度,即数组中包含的元素个数;

a【2】的第一个元素用a【0】表示;

例题1:依次读取数组元素值赋值给a,并将其倒序输出;

依次读取,就需要借用循环,让电脑依次读取数据并赋值给相应的数组元素,直到输入size数字(此处定义其为10);

#include<stdio.h>
#define SIZE 10
int main(){
	int i,a[SIZE];
	for(i=0;i<SIZE;i++){
		scanf("%d",&a[i]);
	}

让其倒叙输出就需要利用循环从a【SIZE-1】开始输出逐个输出直至输出a【0】(数组长度为SIZE,第一个元素从a【0】开始计数】;

for(i=SIZE-1;i>=0;i--){
		printf("%d",a[i]);
		while(i>0){
			printf(" ");
		}

二维数组:

int a[3][5]:数组a含有三个数组元素,每个数组元素含有五个int型元素

二维数组的赋值:不能整体复制(借用嵌套循环依次访问依个赋值)

int a[3][3];
for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}
	}

例题:将3*3的数组行列进行交换

先进行赋值:

int a[3][3];
int i,j;
for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}

逐个访问将交换前的数组读出:

printf("before\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%5d",a[i][j]);
		}
		printf("\n");

数组交换将a[i][j]和a[j][i]的值交换(以中间变量作为媒介),而i=j则不需要交换;

防止交换两次导致数值没有改变,可以使j<=i;

for(i=0;i<3;i++){
		
			for(j=0;j<=i;j++){
				if(i!=j){
					t=a[i][j];
					a[i][j]=a[j][i];
					a[j][i]=t;
				}
		}
    }

最后逐个读出:

printf("after\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%5d",a[i][j]);
		}
		printf("\n");
	}

字符数组

char a[3]={'a','b'},最后一个数组元素没有定位,自动赋值‘\0';

字符串的输入

(1)scanf()函数,%s可以读取字符串(注意输入内容不要过长)

  (2)gets()函数可以输入空格

字符串的输出

(1)printf()函数:输出时遇到结束符’\0'停止;

遇到“\0”时自动结束输出(以遇到的第一个“\0”为准,后面的字符不再输出)

char a[7]={'h','e','l','\0','l','o','\0'};

puts("%s",a[7]);

输出的值就是hel

(2)puts()函数:遇到空字符时停止输出

例题:输入一行字符串,统计该字符串的实际长度,并将该字符串复制到另一个数组中

先定义两个数组(不确定数组的长度,尽量定义数组长度较长)

#include <stdio.h>
#define LENGTH 100
int main(){
	char src[LENGTH],des[LENGTH];
	gets(src);

加入计数器,统计长度(利用for语句的空循环,直到遇到’\0‘时停止)

完成计数以后将数组src逐个赋值给数组des

int i=0;
	int a; 
	for(i=0;src[i]!='\0';i++);
	printf("长度是%d\n",i);
	for(a=0;a<i;a++){
		des[a]=src[a];
	}
	puts(des);

函数:

函数原型在头文件string.h中

(1)strlen()函数:统计字符串长度

strlen(str)、strlen(“abcdef”)【这两种形式都可以(str是一个已经被赋值或者定义的字符数组)】

(2)strcpy()和strncpy()函数

字符型数组和和数值型数组一样不能整体赋值和复制,只能逐个赋值或者复制

strcpy()函数可以实现复制整个字符:strcpy(字符数组1,字符串2),将字符串2整体赋值给字符数组1

strcpy()函数不会检查目标空间是否足够容纳字符串,而strncpy()可以指定复制的最大长度

strncpy()函数:strcpny(字符数组1,字符串2,最大长度)

char str[20],str2[20]="hello world";
strncpy(str.str2,5);
str[5]='\0';
puts(str);

结果就是hello(定义了复制的最大长度是5);

(3)strcat()函数:strcat(字符数组1,字符串2),将字符串2连接到字符数组1后面

该函数不会检查字符数组1连接字符串2之后空间是否足够,应保证长度足够防止越界

char str[20]="good",str2[20]="morning";
strcat(str,str2);
printf("%s",str);

结果就是good morning

(4)strcmp()函数:strcmp(字符串1,字符串2),用于比较两个字符串的大小

相同返回0;1>2返回一个正整数;1<2返回一个负整数

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值