#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//函数的声明
void changeSalar(int x);
void changeArray(int arr[5]);
int main(int argc, const char * argv[])
{
/*
C语言的数组:
1.数组的概念及定义
2.访问数组
3.操作数组
4.字符数组 和 字符串数组
5.数组作为函数参数
6.二位数组
7.结构体的定义及使用
*/
/*
数组的概念
数组是一个集合,它在计算机内存空间中是一串连续的地址空间,它可以存储多个同类型的 变量
数组是一个存储多个 同类型 变量 连续的 集合
数组的定义:
数组的类型 数组名[长度] = {元素1,元素2,...};
*/
//基本数据类型数组
int array1[4] = {1,4,5,7};
int array2[] = {1,5};
int array3[10] = {1,3,6,7};//剩下的6个是零
float array6[] = {3.9,45};
float array5[] = {3.4,4,5};
//字符数组
char str[] = {'b','o','k','a','n'};
//字符串数组
char str1[] = "bokan";
/*
访问数组的元素,下标访问
在C语言中,下标是从0开始的,因为数组的元素是顺序存储的,所以后面的元素下标依次累甲一,数组最后一个元素的下标为数组个数减去一
*/
int element = array1[2];
printf("element = %d\n",element);
//求数组元素的个数 sizeof
int count = sizeof(array1)/sizeof(int);
printf("count = %d\n",count);
for (int i = 0; i<count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
//操作数组
int array[] = {1,5,6,8,9,10};
int a = sizeof(array)/sizeof(int);
printf("a = %d\n",a);
//求数组里面元素的和
int array[] = {1,5,6,8,9,10};
int a = sizeof(array)/sizeof(int);
printf("a = %d\n",a);
int sum = 0;
for (int i = 0; i<a; i++)
{
sum += array[i];
}
printf("sum = %d\n",sum);
//将数组倒序排序
int tmp;
for (int i = 0; i<count/2; i++)
{
tmp = array1[i];
array1[i] = array1[count-1 - i];
array1[count -1-i] = tmp;
}
for (int i = 0; i < count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
/*
注意:
1.数组的定义必须要由大小
2.数组只能存放同一类型的变量
3.数组的元素是用下标访问,且下标从0开始
4.数组的长度 = sizeof(数组变量名)/sizeof(数组的类型)
*/
/*练习
随机产生20个在[1,100]的数,且此20个数不相同,存放到数组中,求和,求最大值,求最小值,求平均数
arc4random() //随机产生数
#include<stdlib.h>
*/
int arrayNum[20];
int i = 0;
do {
int num = arc4random()%100+1;
if (i == 0)
{
arrayNum[0] = num;
i++;
}
int j =0;
for (j = 0; j<i; j++)
{
if (arrayNum[j] == num)
{
break;
}
}
if (j == i)
{
arrayNum[i] = num;
i++;
}
} while (i<20);
for(int i = 0; i<20; i++)
{
printf("arrayNum[%d] = %d\n",i,arrayNum[i]);
}
//求和 求最大值 求最小值 求平均值
int Sum = 0,Max,Min,par;
for (i = 0; i < 20; i++)
{
Sum += arrayNum[i];
}
printf("Sum = %d\n",Sum);
Max = arrayNum[0];
for (i = 1; i<20; i++)
{
if (Max<arrayNum[i])
{
Max = arrayNum[i];
}
}
printf("Max = %d\n",Max);
Min = arrayNum[0];
for (i = 1; i<20; i++)
{
if (Min>arrayNum[i])
{
Min = arrayNum[i];
}
}
printf("Min = %d\n",Min);
par = Sum/20;
printf("par = %d\n",par);
//冒泡排序算法
int array1[] = {1,11,4,3,2,9,10,15,5,6,7,8};
int count = sizeof(array1)/sizeof(int);
printf("排序前的顺序:");
for (int i = 0; i<count; i++)
{
printf("%d ",array1[i]);
}
printf("\n");
//排序开始,外层循环为趟数,比数组元素个数少一
for (int i = 0; i<count-1; i++)
{
//每趟排序所用循环
for (int j = 0; j<count-1-i; j++)
{
if (array1[j]>array1[j+1])
{
int temp = array1[j];
array1[j] = array1[j+1];
array1[j+1] = temp;
}
}
printf("第%d趟循环排序的结果为: ",i+1);
for (int k = 0; k<count; k++)
{
printf("%d ",array1[k]);
}
printf("\n");
}
printf("冒泡排序后的值为:\n");
for (int i = 0; i<count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
//字符数组 和 字符串数组
char c1[] = {'i','b','k','a','n'};
char c2[] = {'w','i','s','d','o','m'};
/*
字符数组:
如果花括号提供的字符个数大于数组长度,按语法错误处理;
如果小于数组长度,则只将这些字符数组中前面那些元素算上,其余的元素自动定位为空字符(即'\0')
*/
//字符数组初始化的另一种方式--既可以用字符串常量来初始化字符数组
char newC1[] = "ibokan"; //长度为7,末端有个'\0';
/*
什么是字符串?
字符串是一组字符的组合,可以用来描述文本信息.但是,在C语言中,无法将一个字符串作为一个整体存储到一个变量中.所以,将字符串拆分为多个字符,然后存储到一个字符数组中.
注意:
1.在C语言中,使用双引号引起来的字符序列为字符串.字符串也为字符常量,在存储字符串的时候,结尾加上一个末端字符'\0'作为结束标志.
2.上述这种字符数组的整体赋值只能在字符数组 初始化时 使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素--赋值,
*/
char st1[13] = "Hello world!";
//等价于
char st2[13] = {'H','e','l','l','o',' ','w','o','r','l','d','!','\0'};
//注意:数组名就是我们的数组元素首地址,所以在scanf()函数中,只需要使用数组名即可
char st3[10];
scanf("%s",st3);
printf("%s\n",st3);
//gets 与 puts函数(书p142)
gets(st3);
puts(st3);
/*
字符串的一些函数,包含在 #include<string.h>头文件中
strcpy(str1,str2); //str1复制变成str2,str1的长度要长过str2
strcat(str1,str2); //把str1末端字符'\0'去掉,str2再拼接到str1,str1长度要足够长
strlen(str1); //读取字符长度 , 不包括末端字符
*/
char st5[100] = "ibokan";
char st6[] = "wisdom";
strcpy(st5, st6);
puts(st5);
strcat(st5, st6);
puts(st5);
//strlen返回的是无符号整型,所以需要强制转换
int length = (int)strlen(st5);
printf("length = %d\n",length);
//数组作为函数参数与基本数据类型作为函数参数的区别
//基本数据类型作为函数参数时
int x = 10;
printf("调用函数前x的值是:%d\n",x);
changeSalar(x);
printf("调用函数后x的值是:%d\n",x);
//数组作为函数参数
int myArray[] = {1,2,3,4,5};
printf("调用函数之前的myArray数组中各个元素的值为:\n");
int count1 = sizeof(myArray)/sizeof(int);
for (int i = 0; i<count1; i++)
{
printf("myArray[%d] = %d\n",i,myArray[i]);
}
//函数的调用
changeArray(myArray);
for (int i = 0; i<count1; i++)
{
printf("myArray[%d] = %d\n",i,myArray[i]);
}
/*
注意:C语言中将数组作为参数进行数据传递时,无论数据量大小,不将数组进行复制,而是将该数组本身传入函数内部.而函数内部所操作的数据就是函数外部所定义的那个数组.
*/
//数组里面的元素能否是数组?
int theArray1[] = {1,2,3};
int theArray2[] = {4,5,6};
int resultArray1[][3] = {{1,2,3},{4,5,6}}; //二维数组
/*
对于 int float double
int 数组名[][n] = {{},{},...};
*/
int arr1[][3] = {1,4,5,1,5,7};
//等价于
//int arr1[2][3] = {{1,4,5},{1,5,7}};
int arr2[][3] = {1};
//等价于
//int arr2[1][3]= {1,0,0};
//访问二维数组的所有元素
for (int i = 0; i<2; i++)
{
for (int j = 0; j<3; j++)
{
int r =arr1[i][j];
printf("%d ",r);
}
}
char R[][2] = {{'s','s'},{'x','x'}};
// puts(R);
for (int i = 0; i<2; i++)
{
for (int j = 0; j<2; j++)
{
char a = R[i][j];
printf("%c ",a);
}
}
return 0;
}
void changeSalar(int x)
{
//实现函数
x = 1000;
}
void changeArray(int arr[5])
{ //函数实现
for (int i = 0; i<5; i++)
{
arr[i] +=10;
}
}
#include <stdlib.h>
#include <string.h>
//函数的声明
void changeSalar(int x);
void changeArray(int arr[5]);
int main(int argc, const char * argv[])
{
/*
C语言的数组:
1.数组的概念及定义
2.访问数组
3.操作数组
4.字符数组 和 字符串数组
5.数组作为函数参数
6.二位数组
7.结构体的定义及使用
*/
/*
数组的概念
数组是一个集合,它在计算机内存空间中是一串连续的地址空间,它可以存储多个同类型的 变量
数组是一个存储多个 同类型 变量 连续的 集合
数组的定义:
数组的类型 数组名[长度] = {元素1,元素2,...};
*/
//基本数据类型数组
int array1[4] = {1,4,5,7};
int array2[] = {1,5};
int array3[10] = {1,3,6,7};//剩下的6个是零
float array6[] = {3.9,45};
float array5[] = {3.4,4,5};
//字符数组
char str[] = {'b','o','k','a','n'};
//字符串数组
char str1[] = "bokan";
/*
访问数组的元素,下标访问
在C语言中,下标是从0开始的,因为数组的元素是顺序存储的,所以后面的元素下标依次累甲一,数组最后一个元素的下标为数组个数减去一
*/
int element = array1[2];
printf("element = %d\n",element);
//求数组元素的个数 sizeof
int count = sizeof(array1)/sizeof(int);
printf("count = %d\n",count);
for (int i = 0; i<count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
//操作数组
int array[] = {1,5,6,8,9,10};
int a = sizeof(array)/sizeof(int);
printf("a = %d\n",a);
//求数组里面元素的和
int array[] = {1,5,6,8,9,10};
int a = sizeof(array)/sizeof(int);
printf("a = %d\n",a);
int sum = 0;
for (int i = 0; i<a; i++)
{
sum += array[i];
}
printf("sum = %d\n",sum);
//将数组倒序排序
int tmp;
for (int i = 0; i<count/2; i++)
{
tmp = array1[i];
array1[i] = array1[count-1 - i];
array1[count -1-i] = tmp;
}
for (int i = 0; i < count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
/*
注意:
1.数组的定义必须要由大小
2.数组只能存放同一类型的变量
3.数组的元素是用下标访问,且下标从0开始
4.数组的长度 = sizeof(数组变量名)/sizeof(数组的类型)
*/
/*练习
随机产生20个在[1,100]的数,且此20个数不相同,存放到数组中,求和,求最大值,求最小值,求平均数
arc4random() //随机产生数
#include<stdlib.h>
*/
int arrayNum[20];
int i = 0;
do {
int num = arc4random()%100+1;
if (i == 0)
{
arrayNum[0] = num;
i++;
}
int j =0;
for (j = 0; j<i; j++)
{
if (arrayNum[j] == num)
{
break;
}
}
if (j == i)
{
arrayNum[i] = num;
i++;
}
} while (i<20);
for(int i = 0; i<20; i++)
{
printf("arrayNum[%d] = %d\n",i,arrayNum[i]);
}
//求和 求最大值 求最小值 求平均值
int Sum = 0,Max,Min,par;
for (i = 0; i < 20; i++)
{
Sum += arrayNum[i];
}
printf("Sum = %d\n",Sum);
Max = arrayNum[0];
for (i = 1; i<20; i++)
{
if (Max<arrayNum[i])
{
Max = arrayNum[i];
}
}
printf("Max = %d\n",Max);
Min = arrayNum[0];
for (i = 1; i<20; i++)
{
if (Min>arrayNum[i])
{
Min = arrayNum[i];
}
}
printf("Min = %d\n",Min);
par = Sum/20;
printf("par = %d\n",par);
//冒泡排序算法
int array1[] = {1,11,4,3,2,9,10,15,5,6,7,8};
int count = sizeof(array1)/sizeof(int);
printf("排序前的顺序:");
for (int i = 0; i<count; i++)
{
printf("%d ",array1[i]);
}
printf("\n");
//排序开始,外层循环为趟数,比数组元素个数少一
for (int i = 0; i<count-1; i++)
{
//每趟排序所用循环
for (int j = 0; j<count-1-i; j++)
{
if (array1[j]>array1[j+1])
{
int temp = array1[j];
array1[j] = array1[j+1];
array1[j+1] = temp;
}
}
printf("第%d趟循环排序的结果为: ",i+1);
for (int k = 0; k<count; k++)
{
printf("%d ",array1[k]);
}
printf("\n");
}
printf("冒泡排序后的值为:\n");
for (int i = 0; i<count; i++)
{
printf("array1[%d] = %d\n",i,array1[i]);
}
//字符数组 和 字符串数组
char c1[] = {'i','b','k','a','n'};
char c2[] = {'w','i','s','d','o','m'};
/*
字符数组:
如果花括号提供的字符个数大于数组长度,按语法错误处理;
如果小于数组长度,则只将这些字符数组中前面那些元素算上,其余的元素自动定位为空字符(即'\0')
*/
//字符数组初始化的另一种方式--既可以用字符串常量来初始化字符数组
char newC1[] = "ibokan"; //长度为7,末端有个'\0';
/*
什么是字符串?
字符串是一组字符的组合,可以用来描述文本信息.但是,在C语言中,无法将一个字符串作为一个整体存储到一个变量中.所以,将字符串拆分为多个字符,然后存储到一个字符数组中.
注意:
1.在C语言中,使用双引号引起来的字符序列为字符串.字符串也为字符常量,在存储字符串的时候,结尾加上一个末端字符'\0'作为结束标志.
2.上述这种字符数组的整体赋值只能在字符数组 初始化时 使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素--赋值,
*/
char st1[13] = "Hello world!";
//等价于
char st2[13] = {'H','e','l','l','o',' ','w','o','r','l','d','!','\0'};
//注意:数组名就是我们的数组元素首地址,所以在scanf()函数中,只需要使用数组名即可
char st3[10];
scanf("%s",st3);
printf("%s\n",st3);
//gets 与 puts函数(书p142)
gets(st3);
puts(st3);
/*
字符串的一些函数,包含在 #include<string.h>头文件中
strcpy(str1,str2); //str1复制变成str2,str1的长度要长过str2
strcat(str1,str2); //把str1末端字符'\0'去掉,str2再拼接到str1,str1长度要足够长
strlen(str1); //读取字符长度 , 不包括末端字符
*/
char st5[100] = "ibokan";
char st6[] = "wisdom";
strcpy(st5, st6);
puts(st5);
strcat(st5, st6);
puts(st5);
//strlen返回的是无符号整型,所以需要强制转换
int length = (int)strlen(st5);
printf("length = %d\n",length);
//数组作为函数参数与基本数据类型作为函数参数的区别
//基本数据类型作为函数参数时
int x = 10;
printf("调用函数前x的值是:%d\n",x);
changeSalar(x);
printf("调用函数后x的值是:%d\n",x);
//数组作为函数参数
int myArray[] = {1,2,3,4,5};
printf("调用函数之前的myArray数组中各个元素的值为:\n");
int count1 = sizeof(myArray)/sizeof(int);
for (int i = 0; i<count1; i++)
{
printf("myArray[%d] = %d\n",i,myArray[i]);
}
//函数的调用
changeArray(myArray);
for (int i = 0; i<count1; i++)
{
printf("myArray[%d] = %d\n",i,myArray[i]);
}
/*
注意:C语言中将数组作为参数进行数据传递时,无论数据量大小,不将数组进行复制,而是将该数组本身传入函数内部.而函数内部所操作的数据就是函数外部所定义的那个数组.
*/
//数组里面的元素能否是数组?
int theArray1[] = {1,2,3};
int theArray2[] = {4,5,6};
int resultArray1[][3] = {{1,2,3},{4,5,6}}; //二维数组
/*
对于 int float double
int 数组名[][n] = {{},{},...};
*/
int arr1[][3] = {1,4,5,1,5,7};
//等价于
//int arr1[2][3] = {{1,4,5},{1,5,7}};
int arr2[][3] = {1};
//等价于
//int arr2[1][3]= {1,0,0};
//访问二维数组的所有元素
for (int i = 0; i<2; i++)
{
for (int j = 0; j<3; j++)
{
int r =arr1[i][j];
printf("%d ",r);
}
}
char R[][2] = {{'s','s'},{'x','x'}};
// puts(R);
for (int i = 0; i<2; i++)
{
for (int j = 0; j<2; j++)
{
char a = R[i][j];
printf("%c ",a);
}
}
return 0;
}
void changeSalar(int x)
{
//实现函数
x = 1000;
}
void changeArray(int arr[5])
{ //函数实现
for (int i = 0; i<5; i++)
{
arr[i] +=10;
}
}