目录
这个时候在来个小程序,输入一个字符串,使小写字母变转换为大写字母
一维数组
#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;
}
其实对于数组都是一样的,该写的一维字符型数组那里都写了.
至于越界问题实在想不到怎么写,只能自己注意这个问题了