c语言数组复习-创新互联
·
成都创新互联公司是一家专注于成都网站设计、网站制作与策划设计,哈密网站建设哪家好?成都创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:哈密等地区。哈密做网站价格咨询:189820811081、一维数组 ----------(1)、键盘输入 10 个数,求大值和最小值(最简单的方法)#includevoid test01() {int arr[10] = {0 };
int n = sizeof(arr) / sizeof(arr[0]);
int i;
printf("请输入 %d 个数:", n);
for (i = 0; i< n; i++) {scanf_s("%d", &arr[i]);
}
int low = 0;
int high = n - 1;
int temp; //中间变量
while (low< high) { //交换数组
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
low++;
high--;
}
printf("交换后的数组打印如下:");
for (i = 0; i< n; i++) {printf("%d\t", arr[i]);
}
}
int main() {test01();
return 0;
}
2、二维数组
----------(1)、二维数组概述二维数组本身就是数组的数组(站在编译器的角度分析问题)
int arr[3][4]
二维数组的总大小:行数 * 列数 * 每个元素的大小
数组的总大小:sizeof(arr)
行数:sizeof(arr)/sizeof(arr[0]) //总大小除以每一行的大小就是行数,sizeof(arr[0]) 每一行的大小,arr[0]行的数组名
列数:sizeof(arr[0)/sizeof(arr[0][0]) //一行的大小,除以每一个元素的大小,就是列数
----------(2)、二维数值数组的初始化
------------------、分段初始化//完全初始化
int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//如果完全初始化。,可以省略行数
int arr[][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//部分初始化
int arr[3][4] = {{1,2},{5,6},{9,10,11}};
------------------、连续初始化//完全初始化
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//如果完全初始化。,可以省略行数
int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//部分初始化
int arr[3][4] = {1,2,5,6,9,10,11};
3、一维字符数组
----------(1)、一维字符数组初始化
------------------、追个元素初始化(不推荐)int arr[5] = {'h','e','l','l','o'}; //使用这种方式系统在编译的时候不会自动加'\0'
------------------、使用字符串的方式初始化一维数组(推荐)int arr[6] = "hello"; //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出
----------(2)、字符数组遍历
------------------、使用 for 循环遍历(逐个字符遍历)int arr[6] = "hello"; //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出
int i;
for(i = 0;iprintf("%c",arr[i]);
}
------------------、直接使用 %s 输出字符串,需要字符串的首元地址,遇见 '\0’会停止int arr[6] = "hello"; //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出
printf("%s",arr); //arr是数组名,代表的是首元地址,一个一个输出直到遇见 '\0'停止
------------------、使用printf(“%s”,arr)可以输出int arr[5] = {‘h’,‘e’,‘l’,‘l’,‘o’}; 定义的数组嘛?(面试问题)不能,由于逐个元素初始化没有’\0’,所以使用 %s 容易造成非法访问内存!!!!!!!!!!
解决方法是:如果硬要使用printf(“%s”,arr)输出int arr[5] = {‘h’,‘e’,‘l’,‘l’,‘o’}; 定义的数组,就要这样定义:int arr[6] = {‘h’,‘e’,‘l’,‘l’,‘o’};,使用这种方式定义字符数组(数组的长度大于字符串的长度),那么arr[5] = 0,等价于 arr[5] = ‘\0’,因为‘\0’的ASCII值就是 0,所以就不会造成非法访问!!!!!!!!!!!
gets可以看获取字符串的空格 ,但是不会获取回车
------------------、fgets 可以获取带空格的字符串而且安全------------------、fgets 的结束条件:fgets会获取带空格的字符串,遇到回车(达到空间大值之前)会结束获取,但是同时也会提取回车换行符!!!!!!!!!!!------------------、消除获取的回车char str[128] = "";
printf("请输入字符串:");
fgets(str, sizeof(str),stdin); //stdin终端输入
str[strlen(str) - 1] = 0; //消除回车,将回车的地方获取回车元素并且赋值为'\0'
printf("输出结果:##%s##", str);
----------(4)、字符串的追加void test06() {char str1[128] = "hello";
char str2[128] = "world";
int i = 0;
while(str1[i] && ++i); //str[i] == '\0'的话,即为 str[i] == 0 是假,i++的时候当 i = 0的时候 i++为false,所以要为++i修改值为1,再判断循循环
//将str2的每一个字符复制到
int j = 0;
while (str2[j] != '\0') {str1[i] = str2[j];
i++;
j++;
}
str2[i] = '\0'; //str2[i] = '\0';是赋值结束符
printf("将str2复制str1的末尾是:%s", str1);
}
int main() {test06();
return 0;
}
----------(5)、字符串的查找void test09() {char str[128] = "";
printf("请输入字符串:");
fgets(str, sizeof(str), stdin); //stdin终端输入
str[strlen(str) - 1] = 0; //消除回车,将回车的地方获取回车元素并且赋值为'\0'
printf("请输入要查找的字符串:");
char ch = getchar();
int i = 0;
while (str[i] != '\0') {if (str[i] == ch) { printf("查找成功:%d", i);
break;
}
i++;
}
if (str[i] == '\0') {printf("查找失败!!!\n");
}
}
int main() {test09();
return 0;
}
#include#includevoid test10() {char str1[128] = "";
printf("请输入字符串str1:");
fgets(str1, sizeof(str1), stdin); //stdin终端输入
str1[strlen(str1) - 1] = 0; //消除回车,将回车的地方获取回车元素并且赋值为'\0'
char str2[128] = "";
printf("请输入字符串str2:");
fgets(str2, sizeof(str2), stdin); //stdin终端输入
str2[strlen(str2) - 1] = 0; //消除回车,将回车的地方获取回车元素并且赋值为'\0'
int pos = 0; //插入位置
printf("请输入要插入的位置:");
scanf_s("%d", &pos);
int str2_len = 0; //定义str2字符串的长度标识符
while(str2[str2_len] && ++str2_len);//计算str2的长度
int i = 0; //将 i 定位到str1的尾部
while (str1[i] && ++i);
int j = 0; //str2的下标
if (pos< 0 || pos >i) {printf("输入插入位置 %d 不合法\n",pos);
return; //结束函数
}
else {while (i >= pos)
{ str1[i + str2_len] = str1[i]; //从pos位置移动str2长度的字符串1
i--;
}
while (str2[j] != '\0') { //从pos位置将str2插入到str1中
str1[pos] = str2[j];
pos++;
j++;
}
}
printf("将str2插入到str1之后的结果是:%s", str1);
}
int main() {test10();
return 0;
}
4、二维字符数组
----------(1)、输出二维字符数组#include#includevoid test00()
{char arr[5][128] = {"hello", "ml", "hhh", "nnn", "tttt"};
int row = sizeof(arr) / sizeof(arr[0]);
int i = 0;
// 遍历二维数组
for (i = 0; i< row; i++)
{// 其中arr[row]代表的是每一行字符串的首地址
printf("打印的字符串如下:%s\n", arr[i]);
}
}
int main()
{test00();
return 0;
}
----------(2)、控制台输入输出二维字符数组void test01()
{char arr[5][128] = {""}; // 第一个赋值为'\0,其余为0
int row = sizeof(arr) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
// 控制台输入二维字符数组
int i = 0;
printf("请输入 %d 字符串:", row);
for (i = 0; i< row; i++)
{scanf("%s", arr[i]);
}
// 遍历二维数组
for (i = 0; i< row; i++)
{// 其中arr[row]代表的是每一行字符串的首地址
printf("打印的字符串如下:%s\n", arr[i]);
}
}
int main()
{test01();
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:c语言数组复习-创新互联
文章来源:http://cdiso.cn/article/dhpjoc.html