A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wzf2015 中级黑马   /  2015-11-13 23:17  /  783 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数组:把同一类型的一组数统一管理.
数组定义.初始化三种方法
第一种: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;
}



1 个回复

倒序浏览
几天能把排序写得这么溜
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马