C语言笔记第四天

目录

一维数组

这个时候是不是应该写一个数组的最大值,最小值,平均值了

二维数组

一维字符数组

这个时候在来个小程序,输入一个字符串,使小写字母变转换为大写字母

二维字符型数组


一维数组

#include <stdio.h>

int main(int argc,char * argv[])
{
	//一维数组
	//定义数组大小时只能用常量,不过据说c99支持变量了,一直也没有试过,代码嘛可读性可移植性都是首要的
	//定义
	int arr[5] = { 1,2,3,4,5 };
	int arr2[] = { 1,2,3,4,5 };	//这种也不推荐
	int arr3[5] = { [0] = 1,[1] = 2,[2] = 3,[3] = 4,[4] = 5 };	//这不是精神病嘛
	int arr4[5] = { 1 };	//这个数组存储的时 {1,0,0,0,0} 初始化一个其他自动初始化为 0 
	int arr5[5] = { 0 };	//一般初始化这么写

	//数组元素个数
	printf("sizeof(arr) = %d\n", sizeof(arr));	//20 是整个数组的大小 5个int 5*4
	printf("sizeof(arr[0]) = %d\n", sizeof(arr[0])); //4 一个int的大小
	int array_length = sizeof(arr) / sizeof(arr[0]);
	printf("array_length = %d\n", array_length);	//数组元素个数为5

	//遍历
	for (int i = 0; i < array_length; ++i)
	{
		printf("%d\t", arr[i]);
	}
	printf("\n");

	return 0;
}

这个时候是不是应该写一个数组的最大值,最小值,平均值了

#include <stdio.h>

int main(int argc,char * argv[])
{
	int arr[] = { 4,5,3,35,6,657,45,2,5245,6,456,54 };
	
	//假设最小值和最大值都为数组的第一个元素
	int max = arr[0], min = arr[0];
	
	//平均值需要总和还有平均值
	int sum = 0;
	double average = 0.0;

	//遍历数组需要长度
	int len = sizeof(arr) / sizeof(arr[0]);

	for (int i = 0; i < len; ++i)
	{
		//如果数组中的元素比max大,就把这个元素赋值给max
		if (arr[i] > max)
		{
			max = arr[i];
		}

		if (arr[i] < min)
		{
			min = arr[i];
		}

		sum += arr[i];
	}

	//得到总和计算平均值
	average = sum / len;

	printf("max = %d,min = %d,average = %lf\n", max, min, average);

	return 0;
}

二维数组

#include <stdio.h>

int main(int argc,char * argv[])
{
	//二维数组
	//定义
	int arr[2][3] = { 1,2,3,4,5,6 };
	int arr2[2][3] = { {1,2,3},{4,5,6} };
	int arr3[][3] = { 1,2,3,4,5,6 };

	//正常初始化
	int arr4[2][3] = { 0 };

	//遍历
	//其实实际上二维数组就是一个一维数组,数组中的每个元素都是一个一维数组
	for (int i = 0; i < 2; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	//(arr[0])就是一个数组 (arr[0])[2]就是这个一维数组中的第三个元素3
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", arr[0][i]);
	}
	printf("\n");

	return 0;
}

一维字符数组

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main2(int argc,char * argv[])
{
	//一维字符型数组
	//初始化
	char str[5] = { 'h','e','l','l','o' };
	char str2[5] = "hello";
	//遍历
	for (int i = 0; i < 5; ++i)
	{
		printf("%c", str[i]);	//hello
	}
	printf("\n");
	for (int i = 0; i < 5; ++i)
	{
		printf("%c", str2[i]);	//hello
	}
	printf("\n");

	printf("str = %s\n", str);	//hello和一堆乱码
	printf("str2 = %s\n", str2);	//hello和一堆乱码

	char str3[6] = { 'h','e','l','l','o' };
	char str4[6] = "hello";

	for (int i = 0; i < 5; ++i)
	{
		printf("%c", str3[i]);	//hello
	}
	printf("\n");
	for (int i = 0; i < 5; ++i)
	{
		printf("%c", str4[i]);	//hello
	}
	printf("\n");

	printf("str3 = %s\n", str3);	//hello
	printf("str4 = %s\n", str4);	//hello

	//实际上就是差一个'\0',可以理解成为全部初始化默认初始化为0
	char str5[6] = { 'h','e','l','l','o',0 };
	char str6[6] = { 'h','e','l','l','o',NULL };
	char str7[6] = { 'h','e','l','l','o','\0' };

	//这里不能{ 'h','e','l','l','o','0' }字符0对应的ASCII码是48
	printf("str5 = %s\n", str5);	//输出的也是hello
	printf("str6 = %s\n", str6);	//输出的也是hello
	printf("str7 = %s\n", str7);	//输出的也是hello

	//字符类型对应的解析是ASCII码 0,null,'\0'都是0
	printf("0 = %d\n", 0);	//0
	printf("NULL = %d\n", NULL);	//0
	printf("\'\\0\' = %d\n", '\0');	//0

	return 0;
}

int main1(int argc,char * argv[])
{
	//正常初始化
	char str[4] = "";

	//字符数组读写
	printf("enter str:\n");

	//scanf("%s", str);	//输入超过四个字符程序会直接崩掉

	scanf_s("%s", str, 4);	//输入超过四个字符程序正常,但是不接受输入

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

	return 0;
}

int main(int argc,char * argv[])
{
	//读取输入空格
	char str[20] = "";

	printf("enter str:\n");

	//scanf_s("%s", str, 20);	//输入hello world只会输出hello

	//gets(str);	//输入30个a(a a a a) 输出30个a(a a a a)然后程序会崩 

	//gets_s(str, 20);	//输入30个a(a a a a) 不会得到接受,然后程序会崩 

	//stdin 标准输入 这个函数多用于文件读写,但是此情况下他是最优的解决方案
	fgets(str, 20, stdin);	//输入30个a(a a a a) 会截断在前19个字符

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

	return 0;
}

这个时候在来个小程序,输入一个字符串,使小写字母变转换为大写字母

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

int main(int argc,char * argv[])
{
	//字符串中小写字母转换为大写字母,其他字符不变
	//定义数组
	char str[1024] = "";

	//提示用户输入
	printf("enter str:\n");

	//scanf_s("%s", str, 1024);	//因为无法接收空格这里使用它并不合适

	fgets(str, 1024, stdin);

	//strlen字符串中元素实际个数不包括'\0',在头文件string.h中
	//遍历数组
	for (int i = 0; i < strlen(str); ++i)
	{
		//判断字符是否为字母
		//a的ASCII码对应97 A的ASCII码对应65 所以小写转大写是减32 大写转小写是加32
		//会发生自动类型转换 char 到 int
		if (str[i] >= 97 && str[i] <= 122)
		{
			str[i] -= 32;
		}
	}

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

	return 0;
}

二维字符型数组

#include <stdio.h>

int main(int argc,char * argv[])
{
	//二维字符型数组
	//和二维数组一样,每个元素都是一个一维字符型数组
	//初始化
	char str[3][4] = { "111","222","333" };

	//正常初始化
	char str2[3][4] = { "" };

	return 0;
}

其实对于数组都是一样的,该写的一维字符型数组那里都写了.

至于越界问题实在想不到怎么写,只能自己注意这个问题了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值