二维整形数组;字符型数组

1.选择排序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int a[5] = {0};
	int i = 0;
	int len = sizeof(a) / sizeof(a[0]);
	int min = 0;
	int temp = 0;
	int j = 0;

	//产生5个随机数 
	srand(time(NULL));
	for (i = 0; i < len; i++)
	{
		a[i] = rand() % 100;
	}

	printf("排序前:");
	for (i = 0; i < len; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	
	//选择排序 
	for (j = 0; j < len-1; j++)
	{
		min = j; 
		for (i = j+1; i < len; i++)
		{
			if (a[i] < a[min])
			{
				min = i;
			}
		}

		if (min != j)
		{
			temp = a[min];
			a[min] = a[j];
			a[j] = temp;
		}
	}	

	printf("排序后:");
	for (i = 0; i < len; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

	return 0;
}


2.二维整形数组:
    1.定义:
        数据类型 数组名[第一维数组的元素个数][第二维数组的元素个数];

        数据类型 数组名[行数][列数];

        int a[2][3];

    2.数组元素的访问:
        数组名[行下标][列下表];

        a[0][0]
        a[0][1]
        a[0][2]
        a[1][0]
        a[1][1]
        a[1][2]

    3.初始化:
        1.全部初始化
            int a[2][3] = {1, 2, 3, 4, 5, 6};
            int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
        2.局部初始化
            int a[2][3] = {1, 2, 3, 4};
            int a[2][3] = {{1, 2}, {3}};
            int a[2][3] = {0};
            int a[2][3] = {{0}};
        3.默认初始化
            行能省略,列不能省略
            int a[][3] = {1, 2, 3, 4};
            int a[][3] = {{1, 2}, {3}};

        注意:
            初始化 != 赋值 

#include <stdio.h>

int main(void)
{
	int a[2][3] = {{1, 2}, {3, 4}};
	int i = 0;
	int j = 0;

#if 0
	a[0][0] = 12;
	a[0][1] = 36;
	a[0][2] = 73;
	a[1][0] = 54;
	a[1][1] = 36;
	a[1][2] = 77;
#endif	
	printf("==================================\n");
	for (j = 0; j < 2; j++)
	{
		for (i = 0; i < 3; i++)
		{
			printf("a[%d][%d] = %d  ", j, i, a[j][i]);
		}
		printf("\n");
	}

	printf("==================================\n");
	printf("a[0][0] = %d\n", a[0][0]);
	printf("a[0][1] = %d\n", a[0][1]);
	printf("a[0][2] = %d\n", a[0][2]);
	printf("a[1][0] = %d\n", a[1][0]);
	printf("a[1][1] = %d\n", a[1][1]);
	printf("a[1][2] = %d\n", a[1][2]);

	return 0;
}

 4.二维数组的存储:
        int a[2][3];

        数组所占空间大小 = 每个元素所占字节大小 * 行数 * 列数

        连续性:数组的存储空间是连续的
        有序性:数组存放数据顺序有序   将二维数组逐行从左到右存储

        二维数组是由一维数组构成的一维数组

        N维数组:是由N-1维数组构成的一维数组

    5.二维数组的输入和输出

#include <stdio.h>

int main(void)
{
	int a[2][3] = {0};
	int i = 0;
	int j = 0;

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

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

	return 0;
}


3.字符型数组:
    在C语言中没有字符串类型,只能通过字符型数组存放字符串

    1.数组的定义:
        数据类型 数组名[元素个数];

        char str[12];

        注意:
            1.字符型数组存放字符串,必须能够存放下末尾的\0字符
            2.元素个数必须为常量

#include <stdio.h>

int main(void)
{
//	char str[6] = {"hello"};
//	char str[6] = {"hel"};
	char str[] = {"hel"};
	int i = 0;

#if 0
	str[0] = 'h';
	str[1] = 'e';
	str[2] = 'l';
	str[3] = 'l';
	str[4] = 'o';
	str[5] = '\0';
#endif

	for (i = 0; i < 6; i++)
	{
		printf("%c", str[i]);
	}
	printf("\n");

	return 0;
}


   2.数组元素的访问:
        数组名[下标];

    3.数组元素的初始化 
        1.全部初始化:
            char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};  
            char str[6] = {"hello"};
            char str[6] = "hello";
        
        2.局部初始化:
            char str[6] = {'h', 'e', 'l'};
            char str[6] = {"hel"};
            char str[6] = "hel";
            char str[6] = {0};                      //对数组中所有元素清0
            注意:
                没有给定初值的元素被赋值为0('\0') ,不是'0'

        3.默认初始化:
            char str[] = {'h', 'e', 'l', 'l', 'o'};
            char str[] = {"hello"};         
            char str[] = {"hel"}

            注意:
                初始化 != 赋值

            char str[6] = {"hello"};                //对 
            char str[6];

            str = "hello";                          //错
            str[6] = "hello";                       //错 
            
    4.数组的存储:
        char str[6] = {"hello"};

        数组所占空间大小 = 元素个数 

        连续性:数组存放空间连续
        有序性:按照顺序依次存放

    5.字符串的输入和输出:
        printf("%s\n", str);
        puts(str);

        按照字符串打印:从字符串开头到第一个\0中间的内容打印

        scanf("%s", str);
        无法接收带' '的字符串 

        gets(str);
        可以接收带' '的字符串

#include <stdio.h>

int main(void)
{
	int i = 0;
//	char str[6] = {"hel\0lo"};
	char str[32] = {'h', 'e', 'l', 'l', 'o', '\0'};

//	scanf("%s", str);
	gets(str);	

	printf("%s\n", str);
	puts(str);
	
#if 0
	for (i = 0; i < 6; i++)
	{
		printf("%c", str[i]);
	}
#endif

	return 0;
}


    6.字符串常见操作:
        1.字符串的赋值(字符串的拷贝):
            strcpy
            字符串拷贝函数 
            用法:
                strcpy(str, "hello world");
                strcpy(str, src);
            注意事项:
                目的空间必须能够存放下拷贝的字符串,否则会内存越界

            char str[32] = {"hello world"};
            char str[32] = {0};

            str = "hello world";            //错 
            strcpy(str, "hello world");     //对 

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[32] = {0};
	char dst[32] = {0};

	strcpy(str, "hello world");
	printf("str = %s\n", str);

	strcpy(dst, str);
	printf("dst = %s\n", dst);

	return 0;
}


        2.字符串的拼接:
            strcat 
            字符串拼接函数
            用法:
                strcat(str, "world");
                strcat(str1, str2);
            注意事项:
                源字符串数组必须能够存放拼接后的字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str1[32] = {0};
	char str2[32] = {0};

	strcpy(str1, "hello");
	strcpy(str2, "world");
	strcat(str1, str2);

	printf("str1 = %s\n", str1);
	printf("str2 = %s\n", str2);

	return 0;
}


        3.字符串的比较:
            strcmp 
            字符串比较函数
            用法:
                strcmp(str1, str2);
                
                结果 > 0  str1 > str2 
                结果 < 0  str1 < str2
                结果 == 0  str1 == str2

            注意事项:
                1.区分大小写
                2.两个字符串到右依次比较,不相同的ASCII码值谁大,字符串谁就大

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str1[32] = {0};
	char str2[32] = {0};
	int ret = 0;

	gets(str1);
	gets(str2);

	ret = strcmp(str1, str2);
	printf("ret = %d\n", ret);

	if (!strcmp(str1, str2))
	{
		printf("字符串相同!\n");
	}

	return 0;
}


        4.字符串的长度:
            strlen 
            获得字符串的长度(从字符串开头到\0中间元素的个数)
            用法:
                int len;
                len = strlen(str);

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[32] = {"hel\0world"};
	int len = 0;

	len = strlen(str);
	printf("len = %d\n", len);

	len = sizeof(str);
	printf("len = %d\n", len);

	return 0;
}

练习:
    1.从终端获得一个字符串,
      编写程序统计字符串长度(不能使用strlen)

#include <stdio.h>

int main(void)
{
	char str[32] = {0};
	int i = 0;

	gets(str);

	while (str[i] != '\0')
	{
		i++;
	}

	printf("%d\n", i);

	return 0;
}

2.从终端接收一个字符串,统计该字符串中大写、小写、数字和空格的个数
        "Afds 123 Agf 123"
        大写:2
        小写:5
        数字:6
        空格:3

#include <stdio.h>

int main(void)
{
	char str[256] = {0};
	int i = 0;
	int cnt_daxie = 0;
	int cnt_xiaoxie = 0;
	int cnt_shuzi = 0;
	int cnt_kongge = 0;

	gets(str);

	while (str[i] != '\0')
	{
		if (str[i] >= 'A' && str[i] <= 'Z')
		{
			cnt_daxie++;
		}
		else if (str[i] >= 'a' && str[i] <= 'z')
		{
			cnt_xiaoxie++;
		}
		else if (str[i] >= '0' && str[i] <= '9')
		{
			cnt_shuzi++;
		}
		else if (' ' == str[i])
		{
			cnt_kongge++;
		}
		i++;
	}

	printf("大写:%d\n", cnt_daxie);
	printf("小写:%d\n", cnt_xiaoxie);
	printf("数字:%d\n", cnt_shuzi);
	printf("空格:%d\n", cnt_kongge);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值