Skip to content

1.一维数组

一维数组:存储一组相同类型的变量
数组定义
类型说明符 数组标识符[常量表达式]
数组引用
数组标识符[下标]

数组下标从0开始

plain
//反向输出数组 
#include<stdio.h>
int main()
{
    int Array[5],index,temp;              //定义数组,变量 
    printf("请输入一个数组:\n");
    for(index=0;index<5;index++)          //输入数组 
    {
        scanf("%d",&Array[index]);
     } 
    printf("原数组为:\n");
    for(index=0;index<5;index++)          //输出原数组 
    {
        printf("%d ",Array[index]);
     } 
    printf("\n");
    for(index=0;index<2;index++)          //交换两次,1和5换,2和4换 
    {
        temp = Array[index];              //中间变量暂存数组 
        Array[index]=Array[4-index];      //第一次5给1,第二次4给2 
        Array[4-index]=temp;              //第一次1给5,第二次2给4 
    }
    printf("反向数组为:\n");
    for(index=0;index<5;index++)
    {
        printf("%d ",Array[index]);
     } 
    return 0;
}


初始化
1.一一赋值,有几个数赋几个值
2.一部分赋值,未赋值为0
3.不指定数组长度赋值

plain
int a[5]={1,2,3,4,5};
int a[5]={1,2,3};
int a[]={1,2,3,4,5}

应用

plain
//数组保存姓名
#include<stdio.h>
int main()
{
    char *Name[3];          //字符指针数组
    int i;
    Name[0] = "张三"; 
    Name[1] = "李四";
    Name[2] = "王五";
    for(i=0;i<3;i++)
    {
        printf("%s\n",Name[i]);
    }
    return 0;
}

2.二维数组

二维数组:由行和列组成的两个一维数组
数组定义
数据类型 数组名[表达式1][表达式2]

先放行,再放列
下标可以是整型常量或整型表达式
数组引用
数组名[下标][下标]
初始化
1.一一赋值
2.省略行下标,不能省略列下标
3.分组分配
4.部分分配
5.对元素赋值

plain
int a[2][3]={1,2,3,4,5,6};
int a[][3]={1,2,3,4,5,6};
int a[2][3]={{1,2,3},{4,5,6}};
int a[2][3]={{1,2},{3,4}};
int a[2][3];a[0][0]=1;a[0][1]=2;

应用

plain
//输出最值并行列互换
#include<stdio.h>
int main()
{
    int a[2][3],b[3][2];
    int max,min;
    int i,j,k,l;
    printf("请输入一个二维数组:\n"); 
    for(i=0;i<2;i++)                  //输入数组 
    {
        for(j=0;j<3;j++)
        {
            printf("a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
        }
    }
    printf("二维数组为:\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");                 //分行 
    }
    /*求数组中的最大值及其下标*/
    max = a[0][0];
    k=0;l=0;
    for(i=0;i<2;i++) 
    {
        for(j=0;j<3;j++)
        {
            if(max<a[i][j])
            {
                max=a[i][j];
                k=i;
                l=j;
            }
        }
    }
    printf("数组中的最大值为:\n");
    printf("a[%d][%d]=%d",k,l,max);
    printf("\n");
    /*求数组中的最小值及其下标*/
    min = a[0][0];
    k=0;l=0;
    for(i=0;i<2;i++) 
    {
        for(j=0;j<3;j++)
        {
            if(min>a[i][j])
            {
                min=a[i][j];
                k=i;
                l=j;
            }
        }
    }
    printf("数组中的最小值为:\n");
    printf("a[%d][%d]=%d",k,l,min);
    printf("\n");
    /*求行列互换后的数组*/
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            b[j][i] = a[i][j];
        }
     } 
    printf("转换后的代码为:\n");
        for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%d\t",b[i][j]);
        }
        printf("\n");
     } 
    return 0;
}

plain
//求对角元素之和 
#include<stdio.h>
int main()
{
    int a[3][3];
    int i,j,sum=0;
    printf("请输入:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(i==j)
            {
                sum = sum + a[i][j];
            }
        }
    }
    printf("结果为:%d\n",sum);
    return 0;
}

3.字符数组

字符数组:数据元素为字符的数组
数组定义
char 数组标识符[常量表达式]
初始化
1.一一对应
2.省略数组长度
3.利用字符串

plain
char a[5]={'H','e','l','l','o'};
char a[]={'H','e','l','l','o'};
char a[5]={"Hello"};

\0为结束的标志
%c输出字符,%s输出字符串

plain
//计算单词个数 
#include<stdio.h>
int main()
{
    char a[100];
    int i,Word=1;
    char Blank;
    gets(a);
    if(a[0]=='\0')
    {
        printf("这里没有字符!\n");
     } 
    else if(a[0]==' ')
    {
        printf("第一个字符为空格!\n");
    }
    else
    {
        for(i=0;a[i]!='\0';i++)
        {
            Blank= a[i];
            if(Blank==' ')
            {
                Word++;
            }
        } 
        printf("单词数为%d",Word);
    }
    return 0;
 }

4.多维数组

多维数组:与二维数组相同,不过下标更多
数据类型 数组名[常量表达式1][常量表达式2][常量表达式3]

5.排序算法

5.1 选择排序法

选择排序法:从小到大排列时,将第一个数字与最小值换位,第二个数字与剩下的最小值换位,以此类推,直至所以数字都换过位置

plain
#include<stdio.h>
int main()
{
    int i,j;
    int a[10];
    int temp,pos;                       //定义临时变量,临时位置 
    printf("请输入数组元素值:\n");
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    /*从小到大排序*/
    for(i=0;i<9;i++)                   
    {
        temp = a[i];					//记录当前元素的值 
        pos = i;						//记录当前元素的位置 
        for(j=i+1;j<10;j++)
        {
            if(a[j]<temp)				//比较大小 
            {
                temp = a[j];			//最小值替换当前元素值 
                pos = j;				//最小值替换当前元素位置 
            }
        }
        a[pos] = a[i]; 					//交换元素 
        a[i] = temp;					//交换值 
    }
    for(i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
        if(i==4)
            printf("\n");
    }
    return 0;
}

5.2 冒泡排序法

冒泡排序法:每次比较相邻的两个数,将较小的数放在较大的数前面

plain
#include<stdio.h>
int main()
{
    int i,j,temp;
    int a[10];
    printf("请输入一个数组:\n");
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
     } 
    /*从小到大排序*/
    for(i=1;i<10;i++)
    {
        for(j=9;j>=i;j--)
        {
            if(a[j]<a[j-1])
            {
                temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
            }
        }	
    }
    for(i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
        if(i==4)
        printf("\n");
    }
    return 0;
 }

5.3 交换排序法

交换排序法:将每一个数与后面所有数一一比较,数据符合则交换位置

plain
#include<stdio.h>
int main()
{
    int i,j,temp;
    int a[10];
    printf("请输入一个数组元素:\n");
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++)
    {
        for(j=i+1;j<10;j++)
        {
            if(a[j]<a[i])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
        if(i==4)
        {
            printf("\n");
        }
    }
    return 0;
}

5.4 插入排序法

插入排序法

plain
#include<stdio.h>
int main()
{
    int i,j,temp,pos;
    int a[10];
    printf("请输入一个数组:\n");
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++)
    {
        temp = a[i];
        pos =  i-1;
        while((pos>=0)&&(temp<a[pos]))
        {
            a[pos+1] = a[pos];
            pos--;
        }
        a[pos+1] = temp;
    }
    for(i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
        if(i==4)
        printf("\n");
    }
    return 0;
}

5.5 折半排序法

plain
#include<stdio.h>
void CelerityRun(int left,int right,int array[]);
int main()
{
    int i;
    int a[10];
    printf("请输入一个数组:\n");
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    CelerityRun(0,9,a);
    for(i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
        if(i==4)
        printf("\n");
    }
    return 0;
}
void CelerityRun(int left,int right,int array[])
{
    int i,j;
    int middle,temp;
    i = left;
    j = right;
    middle = array[(left+right)];
    do
    {
        while((array[i]<middle)&&(i<right))
            i++;
        while((array[j]>middle)&&(j>left))
            j--;
        if(i<=j)
        {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;
            j--;
         }
    }while(i<=j);
    if(left<j)
        CelerityRun(left,j,array);
    if(right>i)
        CelerityRun(i,right,array);
}

6.字符串处理

6.1 字符串复制(strcpy)

strcpy函数:复制特定长度的字符串到另一个字符串中
strcpy(目的字符数组名,源字符数组名)

不能用赋值语句直接赋值

plain
#include<stdio.h>
int main()
{
    char a[30],b[30];
    printf("输入一个目的字符串:\n");
    gets(a);
    printf("输入一个源字符串:\n");
    gets(b);
    strcpy(a,b);
    printf("复制后的目的字符串:\n");
    puts(a);
    return 0;
}

6.2 字符串连接(strcat)

strcat函数:将一个字符串连接到另一个字符串的末尾,组成一个新的字符串
strcat(目的字符数组名,源字符数组名)

plain
int main()
{
    char a[30],b[30];
    printf("输入一个目的字符串:\n");
    gets(a);
    printf("输入一个源字符串:\n");
    gets(b);
    strcat(a,b);
    printf("连接后的目的字符串:\n");
    puts(a);
    return 0;
}

6.3 字符串比较(strcmp)

strcmp函数:将一个字符串与另一个字符串一一比较
strcmp(字符数组1,字符数组2)
字符串1=字符串2 ,返回0
字符串1>字符串2,返回正数
字符串1<字符串2,返回负数

plain
#include<stdio.h>
int main()
{
    char user[20]={"root"};
    char password[20]={"123456"};
    char u[20],p[20];
    int i=0;
    while(i<3)
    {
        printf("请输入用户名:\n");
        gets(u);
        printf("请输入密码:\n");
        gets(p);
        if(strcmp(user,u))
        {
            printf("用户名输入错误!\n");
        }
        else
        {
            if(strcmp(password,p))
            {
                printf("密码错误!\n");
            }
            else
            {
                printf("欢迎使用!\n");
                break;
            }
        }
        i++;
    }
    if(i==3)
    {
        printf("连续输入错误3次!\n");
    }
    return 0;
}

6.4 字符串大小写转换(strupr/strlwr)

strupr函数:将字符串中的小写字母转换为大写字母其他不变
strupr(字符串)
strlwr函数:将字符串中的大写字母转换为小写字母其他不变
strlwr(字符串)

plain
#include<stdio.h>
#include<string.h>
int main()
{
    char text[20],change[20];
    int num;
    int i=0;
    printf("(1转为大写,2转为小写,0退出)\n");
    while(1)
    {
        printf("请输入转换方式:\n");
        scanf("%d",&num);
        if(num==1)
        {
            printf("请输入一个字符串:\n");
            scanf("%s",&text);
            strcpy(change,text);
            strupr(change);
            printf("转换完的字符串为:%s\n",change);			
        }
        else if(num==2)
        {
            printf("请输入一个字符串:\n");
            scanf("%s",&text);
            strcpy(change,text);
            strlwr(change);
            printf("转换完的字符串为:%s\n",change);
        }
        else if(num==0)
        {
            break;
        }
    }
    return 0;
}

6.5 字符串长度(strlen)

strlen函数:计算字符串的实际长度,不含\0
strlen(字符数组名)

plain
#include<stdio.h>
#include<string.h>
int main()
{
    char text[50],connect[50];
    int num;
    printf("请输入一个字符串:\n");
    scanf("%s",&text);
    num = strlen(text);
    printf("字符串长度为:%d\n",num);
    printf("请再输入一个字符串:\n");
    scanf("%s",&connect);
    num=strlen(connect);
    printf("字符长度为:%d\n",num);
    strcat(text,connect);
    printf("连接后的字符串:%s\n",text);
    num = strlen(text);
    printf("连接后的字符长度为:%d",num);
    return 0;
}

7.应用

plain
//反转字符串 
#include<stdio.h>
int main()
{
    int i,size;
    char a[7]={"abcdefg"};
    char b[7]={0};
    size=sizeof(a);
    for(i=0;i<6;i++)
    {
        b[size-i-2]=a[i];
    }
    printf("输出源字符为:%s\n",a);
    printf("输出目标字符为:%s\n",b);
    return 0;
}

plain
//输出系统时间和日期 
#include<stdio.h>
#include<time.h>
int main()
{
    int command[4]={0,1,2,3};
    int num;
    struct tm *Time;
    printf("1-显示时间\n2-显示日期\n3-退出\n");
    while(1)
    {
        printf("\n请输入命令:");
        scanf("%d",&num);
        if(command[1]==num)
        {
            time_t nowTime;
            time(&nowTime);
            Time=localtime(&nowTime);
            printf("系统时间:%d:%d:%d\n",Time->tm_hour,Time->tm_min,Time->tm_sec);
        }
        else if(command[2]==num)
        {
            time_t nowTime;
            time(&nowTime);
            Time=localtime(&nowTime);
            printf("系统日期:%d/%d/%d\n",1900+Time->tm_year,Time->tm_mon+1,Time->tm_mday);
        }
        else if(command[3]==num)
        {
            return 0;
        }
    } 
    return 0;
 }

plain
//字符串加密、解密 
#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    int result = 1;
    int count = 0;
    char Text[128]={'\0'};
    char cryptograph[128]={'\0'};
    printf("(1为加密,2为解密,3为退出)\n");
    while(1)
    {
        printf("\n请输入命令:");
        scanf("%d",&result);
        if(result==1)
        {
            printf("输入要加密的明文:");
            scanf("%s",&Text);
            count = strlen(Text);
            for(i=0;i<count;i++)
            {
                cryptograph[i]=Text[i]+i+5;
            }
            cryptograph[i]='\0';
            printf("加密后的密文是:%s\n",cryptograph);
        }
        else if(result==2)
        {
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                Text[i] = cryptograph[i]-i-5;
            }
            Text[i]='\0';
            printf("解密后的明文是:%s\n",Text);
        }
        else if(result==3)
        {
            printf("运行结束!\n");
            break;
        }
        else
        {
            printf("请输入字符:\n");
        } 
    }
    return 0;
}