数组:把同一类型的一组数统一管理.
数组定义.初始化三种方法
第一种:int arr[7] ={1,2,3,}
数组名就是数组的地址,代表的是数组第一个的元素的地址.数组不是变量,但可以这样理解
当数组名被当作参数传时,
%s格式控制符接收的是一个地址
strlen的应用
中文字符占三个字符(等于三个字符)
数组定义.初始化三种方法
/*
数组的定义与使用
计算一个数组的字节数和长度
*/
//注意越界问题
//定义数组的长度必须是正整数
//初始化了一部分数组,另外的数组元素会被赋值为0,没有给任何元素初始化,那么数组元素的初始值随机分配;
//数组名当做参数传递的时候,传入的是地址,
#include <stdio.h>
int main(){
//数据类型 数组名[长度]
int arr[2]={1,2};//方法一
int arr1[]={1,3,5,6,3};//这种批量定义时,系统自己扫描了数组长度.方法二
int arr2[4];//方法三
arr2[0] = 2;
arr2[1] = 3;
arr2[2] =8;
//如果要用变量定义,只能这样int count;int arr[count];arr[0]=2;(单独初始化)
printf("%lu\n",sizeof(arr1));//计算数组字节数,
int a=sizeof(arr)/sizeof(int);//计算数组的长度
printf("%d\n",a);
//注意越界问题
//二维数组
int arr4[3][2]={{1,2},{3,4},{5,6}};//定义的方法一
int arr5[2][3];
arr5[0][0]=2;
.......
return 0;
}
//用二维数组打印星星
#include <stdio.h>
int main(){
int arr[4][7]={{0,0,0,1,0,0,0},{0,0,1,1,1,0,0},{0,1,1,1,1,1,0},{1,1,1,1,1,1,1}};
for(int i=0;i<4;i++)
{
for(int j=0;j<7;j++)
{
if(0==arr[i][j]){
printf(" ");
}else
{
printf("*");
}
}
printf("\n");
}
return 0;
}
选择排序
/*从大到小排序
1.确定一个需要排序的数组int arr[]={5,9,0,2,29};
2.选择出最值放在首位,然后就循环选择出最值放在前面
3.用最值的下标表示最值,这里就需要定义代表下标的变量 int tempIndexMax
*/
#include <stdio.h>
int main(){
int tempIndexMax =0;
int arr[]={5,9,0,2,29};
int size=sizeof(arr)/sizeof(int);
for(int i=0;i<size-1;i++){
int tempIndexMax =i;//循环但第几轮时,下标就进几
for (int j=1+i;j<size-i;j++){
if(arr[tempIndexMax]<arr[j]){
tempIndexMax=j;
}//重新排序了
int temp=arr[i];
arr[i] =arr[tempIndexMax];
arr[tempIndexMax]=temp;
}
}
for (int i=0; i<5; i++) {
printf("%d\t",arr[i]);
}
return 0;
}
冒泡排序
/*
冒泡排序思路
1.你要有个数组,数组的长度sizeof(arr)/sizeof(数据的类型)
2.进行每轮比较吧,把每一轮的大数往前放(这里你需要一个表示轮数的变量和可以交换值的变量)
3.每轮比较多少次?
*/
#include <stdio.h>
int main()
{
int arr[]={1,20,2,6,9};
int n=sizeof(arr)/sizeof(int);
int a=0;//用来交换值的
for(int i=0;i<n;i++)//这个就是轮数
{
for(int j=0;j<n-1-i;j++)//每轮比较的次数
{
if(arr[j]<arr[j+1])
{
a=arr[j];//交换值,把大的放在前面,把小的往后排
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
for(int i=0;i<n;i++)
printf("%d\t",arr[ i]);
return 0;
}
字符串
/*
1.字符串的定义 调用 及修改
2.strlen函数计算字符串长度时遇到\0就会停止,且不会计算\0(空字符)
3.字符串一定是字符数组,字符数组不一定是字符串,字符串是以\0结尾的字符数组
4.格式化控制符%s只有遇到'\0'时才结束,且它接收的是一个地址
5.当把数组当作参数提供给函数时,函数接收的是一个地址
*/
//'\0'的ASCII码值为0
#include <stdio>
int main()
{
//字符串的定义
char arr[]={'d','g','f','\0'};//方式一,这里的'\0',可以为0(ASCII)
char arr2[] ="wuzhongfeng"//方式二:编译器自动生成\0
//字符串的修改
//错误一:arr[]={'1','2','3,};
arr[0]='3';//这是正确的改法一
strcpy(arr2,"zhangsanfeng");//法二
printf("%s",arr);
return 0;
}
/*
通过scanf函数生成一个长度为5的int数组,并打印里面的每一个值,最后把数组里面的每一个值改为0
*/
#include <stdio.h>
void arrDaYin(int arr[])
{
for (int i=0; i<5; i++)
{
printf("%d\t",arr[i]);
}
}
void arrDaYin();
int main()
{
int a=0;
int arr[5];
for (int i=0;i<5;i++)
{
scanf("%d",&a);
arr[i]=a;
}
for (int i=0; i<5; i++) {
arr[i]=0;
}
arrDaYin(arr);
return 0;
}
|
|