一、数组
1.1 数组的概念
- 数组:一片连续的相同类型变量的内存空间。
- 数组成员:元素可以是任意类型。
二、 一维数组
2.1 一维数组的定义
一般形式是:数据类型 数组名[数组元素个数]
- 数组名字符合标识符的书写规定(数字、英文字母、下划线)
- 数组名不能与其它变量名相同,同一作用域是唯一的
- 数组定义时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量(定义时最好不要写变量)
- 数组元素的个数在定义时可以不写,但是如果不写,定义的时候必须赋值
- 如果没有给定初始值,默认是随机数
2.2 一维数组的初始化
#include <stdio.h>
int main()
{
//int a[4];
//如果不初始化,直接使用会是随机值
//int a[4] = {123, 78, 666, 476};
//初始化方式1:全部初始化
//int a[] = {10, 20, 30, 40};
//如果是全部 初始化,可以不指定数组元素的个数,系统会自动分配
//初始化方式2:局部初始化
//未初始化的位置的元素自动赋值为0
int a[3] = { 1, 2 };
printf("%d\n", a[0]);
printf("%d\n", a[1]);
printf("%d\n", a[2]);
return 0;
}
2.3 强化练习
2.3.1 求数组最大和位置
#include<stdio.h>
int main()
{
printf("输入10个数字\n");
int i, max = 0, a[10];
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 10; i++)
{
if (a[i] > a[max])
{
max = i;
}
}
printf("第%d位最大为%d\n", max + 1,a[max]);
return 0;
}
2.3.2 数组倒置
#include<stdio.h>
int main()
{
printf("输入10个数字\n");
int i,a[10],b[10];
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 10; i++)
{
b[9 - i] = a[i];
}
for (i = 0; i < 10; i++)
{
a[i] = b[i];
printf("%d\n", a[i]);
}
return 0;
}
2.3.3 冒泡排序
#include<stdio.h>
int main()
{
printf("输入10个数字\n");
int i,j,max = 0, a[10];
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 9; i++)
{
for (j = i+1; j < 10; j++)
{
if (a[i] > a[j])
{
max=a[i];
a[i] = a[j];
a[j] = max;
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d\n", a[i]);
}
return 0;
}
三、二维数组
3.1 二维数组的定义
一般形式是:类型说明符 数组名[常量表达式1][常量表达式2]
- 二维数组的下标也是可以省略的,但是在初始化时行数可以省略,但是列数不能省略。
#include <stdio.h>
int main()
{
//int a[2][3];
//二维数组的初始化
//int a[2][3] = {{10, 20, 30}, {40, 50, 60}};
//初始化方式1:按行初始化
//全部初始化
//int a[2][3] = {{10, 20}, {30}};
//局部初始化
//没有赋值的位置的元素自动为0
//int a[2][3] = {1, 2, 3, 4, 5, 6};
//初始化方式2:逐个初始化
//全部初始化
//局部初始化
//没有赋值的位置的元素自动为0
int a[2][3] = { 1, 2, 3 };
printf("%d\n", a[0][0]);
printf("%d\n", a[0][1]);
printf("%d\n", a[0][2]);
printf("%d\n", a[1][0]);
printf("%d\n", a[1][1]);
printf("%d\n", a[1][2]);
return 0;
}
3.2 数组名
数组名代表第一个元素的首地址,是常量,不能赋值。
3.3 多维数组
多维数组的定义与二维数组类似,其语法格式具体如下:
数组类型修饰符 数组名 [n1][n2]~[nn]
四、字符数组
4.1 字符数组的定义
- 字符串是特殊的字符数组,字符串有结尾符\0
- 0和'\n'一样,字符可以理解成8为整数
- 使用字符串初始化,编译器自动在后面补0
- \0后面最好不要连着数字,又可能几个数字连起来刚好是一个转义字符
#include <stdio.h>
int main()
{
//1.普通字符组
char cl[] = { 'c',' ','p','r','o','g' };
printf("c1=%s\n", cl);//printf()输出%s字符串时,会访问到\0为止。定义字符数组时,没有指定结尾符\0,则输出乱码。
//2.以‘\0’(‘\0’就是数字0)结尾的字符数组是字符串
char c2[] = { 'c',' ','p','r','o','g','\0' };
printf("c1=%s\n", c2);
char c3[10] = { 'c',' ','p','r','o','g','\0' };//其他默认数组元素是\0
printf("c1=%s\n", c3);
return 0;
}
4.2 字符串的输入
- 输入scanf 输出printf
#include <stdio.h>
int main()
{
char str[100];
printf("input:");
scanf_s("%s", str);//scanf遇到空格结束输入
printf("output:%s\n", str);
return 0;
}
- 输入gets
#include <stdio.h>
int main()
{
char str[100];
printf("input:");
gets_s(str);//gets遇到换行字符结束输入
printf("output:%s\n", str);
return 0;
}
- 输入fgets
#include <stdio.h>
int main()
{
char str[100];
printf("input:");
fgets(str,100,stdin);//fgets从文件stdin(标准输入/键盘输入)输入,存储到str中,并且可以指定接收的最大的大小
printf("output:%s\n", str);
return 0;
}
4.3 字符串的输出
- 输出puts
#include <stdio.h>
int main()
{
printf("hello world\n");
puts("hello world\n");//自动在结尾加换行
return 0;
}
- 输出fputs
#include <stdio.h>
int main()
{
printf("hello world\n");
fputs("hello world\n",stdout);//fputs向stdout(标准输出/屏幕输出)写字符串;不会自动加\n.
return 0;
}
4.4 求字符串长度strlen
#include <stdio.h>
#include<string.h>
int main()
{
char str[] = "hello\0world";
int len = strlen(str);
printf("strlen(str)=%d\n",strlen(str));
return 0;
}