c语言的编译和运行
打开终端输入
$ touch arr.c
$ open arr.c
在打开的文件中输入
include <stdio.h>
int main(int argc,const char * argv[]){
printf("hello world\n");
return 0;
}
command+s保存
$ gcc -o arr arr.c
$ ./arr
终端输出hello world
数组
一、一维数组
1.数组的初始化
数组的完全初始化:数组的完全初始化,就是初始化数组的每一个元素。
int num[] = {1,2,3,4,5};
printf("num[0] = %d\n",num[0]);
printf("num[1] = %d\n",num[1]);
printf("num[2] = %d\n",num[2]);
printf("num[3] = %d\n",num[3]);
printf("num[4] = %d\n”,num[4]);
数组的部分初始化:数组的部分初始化,初始化了这个数组里面的部分元素,其他没有初始化的元素默认值为0
int num[5] = {};
printf("num[0] = %d\n",num[0]);
printf("num[1] = %d\n",num[1]);
printf("num[2] = %d\n",num[2]);
printf("num[3] = %d\n",num[3]);
printf("num[4] = %d\n”,num[4]);
数组未初始化:数组未初始化,其值为随机数
int num[3];
num[0]= 1; //num[1]和num[2]未被赋值,其值为随机值。
printf("b[0]=%d\tb[1]=%d\tb[2]=%d\n", b[0], b[1],b[2]);
2.数组越界
数组越界分为堆上的数组越界和栈上的数组越界(网上有很多知识写的都不错,在此不多叙述)。在编程中有很大一部分bug是由数组越界问题引起的,程序员在编程时应提起注意。
for (int i = 0; i < 5; i++) {
a[i+1] = 1;
}
二、二维数组
二维数组完全初始化:
int a[4][5] = {
{},
{6,7,8,9},
{1,2,5},
{6,7}
};
二维数组部分初始化:
int b[4][5] = {
{1,2,3,4,5},
{2,3,4,5,6},
{3,4,5,6,7}
};
小练习:
1.一位数组小练习
手动输入10个学生的身高,检查有没有身高为173cm的同学,若有,输出他是第几个同学。
2.二维数组小练习
打印下述图形
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
参考答案(一万个读者有一万个哈姆雷特,一万个程序员有一万种编码风格,答案仅供参考):
1.手动输入10个学生的身高,检查有没有身高为173cm的同学,若有,输出他是第几个同学。
int a[10];
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
printf("\n");
for(int i=0;i<10;i++){
if(a[i] == 173)
printf("%d的同学是第%d个\n",a[i],i+1);
}
2.打印下述图形
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
int picture[4][4] = {};
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (i == j) {
picture[i][j] = 1;
}
printf("%2d",picture[i][j]);
}
printf("\n");
}