day5
数组
定义:同种数据类型的集合,一片连续的内存空间。
一般形式:
存储类型 数据类型 数组名[元素个数];
eg:
int arr[5];
操作数组元素的方法:
下标法:
(1)下标从0开始
(2)数组名[下标]
(3)不要越界使用
1.数组的初始化
(1)完全初始化
int arr[5] = {1,2,3,4,5};
(2)部分初始化:给部分元素赋值,没有赋值的元素自动赋值为0
int arr[5] = {1,2,3};
int arr[5] = {0};
int arr[5] = {[1]=1, [3]=2};
(3)自动计数原则:
int arr[] = {1,2,3};
int arr[] = {1, [2]= 2, [4] = 5};
(4)可变数组(危险不要使用) ----- 动态内存
int n;
n = 10;
int arr[n];
不可以在定义的时候给赋初值
(2)赋值
int arr[5];
arr[0] = 10;
arr[1] = 20;
数组的遍历:
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", arr[i]);
}
练习
1.实现数组元素的累加输出。
int arr[8] = {1000, 999, 520, 10, 99, 77, 50, 20};
1.实现数组的逆序存储
int a[10] = {1,2,3,4,5,6,7,8,9,10};
#define N 6
int main(int argc, char *argv[])
{
int i;
int arr[N];
for(i = 0; i < N; i++)
{
printf("arr[%d]= ", i);
scanf("%d", &arr[i]);
}
for(i = 0; i < N; i++)
{
printf("%d\t", arr[i]);
}
puts("");
for(i = 0; i <= N / 2; i++)
{
int temp;
temp = arr[i];
arr[i] = arr[N - 1 -i];
arr[N - 1 -i] = temp;
}
for(i = 0; i < N; i++)
{
printf("%d\t", arr[i]);
}
puts("");
return 0;
}
2.冒泡排序
int arr[10] = {10, 99, 66, 77, 33, 58, 26, 25, 18, 6};
int j;
for(i = 0; i < 10 - 1; i++)
{
for(j = 0; j < 10 - 1 - i; j++)
{
if(arr[j] < arr[j+1])
{
int temp;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
char 型数组
char str[32] = {0};
char str[32] = "hello world";
char str[32] = {0};
scanf("%s", str); --- 不可以输入带空格的字符串
gets(str); --- 可以输入带空格的字符串
练习
1.终端输入字符串,将字符串中的小写字母转为大写, 大写字母转为小写
char str[32] = {0};
printf(">:");
gets(str);
int i = 0;
while(1)
{
if(str[i] == '\0')
break;
if(str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - ' ';
}
else if(str[i] >= 'A' && str[i] <= 'Z')
{
str[i] = str[i] + 32;
}
i++;
}
puts(str);
作业
编程题
1.输出数组中的最小值及其下标,最大值及其下标
2. 数组循环移位
(1)int arr[5] = {1,2,3,4,5}; 实现循环右移一位
(2)终端输入int arr[5],实现循环右移一位
(3)可变数组数组,终端输入,实现循环右移一位
(4)可变数组数组,终端输入,实现循环右移n位
3.编写程序判断一个字符串是否为回文字符串,大小写也必须一致
"abcdcba" "123321"
4.删除字符串中的空格
5.实现字符串转数字, 例如: "+123456" ---> 123456
"-128" ---> -128
"1314" ---> 1314