c语言3-数组练习

136 阅读1分钟

1.数组内容反向输出

2.交换数组,将两个数组内容交换

*3.打印杨辉三角

4.输入一个值,要求按照原来的规律插入数组中

5.打印菱形


1.1数组内容反向输出

 #include<stdio.h>
 ​
 void print(int arr[], int sz)
 {
     int i;
     for (i = 0; i < sz; i++)
     {
         printf("%d ", arr[i]);
     }
 ​
 }
 void rev(int arr[], int sz)
 {
     int left = 0;
     int right = sz - 1;//数组下标从0开始,元素个数从1开始
     while(left<right)//判断直到左右交换完
     {
         int tmp = arr[left];//交换经典3步骤
         arr[left] = arr[right];
         arr[right] = tmp;
         left++;//向右移动一位
         right--;//向左移动一位
     }
     printf("\n");
 }
 ​
 int main()
 {
     int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
     int sz = sizeof(arr) / sizeof(arr[0]);
     print(arr, sz);//打印原始数据
     rev(arr, sz);
     print(arr, sz);//打印交换完后的数据
     return 0;
 }
 //结果:
 0123456789
 9876543210
     
 //打印数组内容需要用到for循环,自定义一个函数用来打印数组内容

2.1交换数组,将两个数组内容交换

 #include<stdio.h>
 void rev(char arr1[], char arr2[], int sz)
 {
     int i = 0;
     for (i = 0; i < sz; i++)//交换数组内容
     {
         int tmp = arr1[i];
         arr1[i] = arr2[i];
         arr2[i] = tmp;
     }
 }
 int main()
 {
     char arr1[] = "abcd" ;
     char arr2[] = "efgh" ;
     int sz = sizeof(arr1) / sizeof(arr1[0]);
     printf("%s\n%s", arr1, arr2);
     rev(arr1, arr2, sz);
     printf("\n%s\n%s", arr1, arr2);
     return 0;
 }
 //结果:
 abcd
 efgh
 efgh
 abcd
 ​

*3.1打印杨辉三角

 /杨辉三角规律
 //1.每一个数等于它上方两数之和
 //2.每行数字左右对称
 //3.第n行有n项
 ​
 #include<stdio.h>
 #define line 10//方便更改行和列数
 ​
 int main()
 {
     int i,j,k=0;
     int arr[line][line] = { 0 };
     //对二维数组赋值
     for (i = 0; i < line; i++)//行数
     {
         for (j = 0; j <=i; j++)//每一行含有的列数
         {
             if(j==0||j==i)//每行第一列和最后一列
             {
                 arr[i][j] = 1;
             }
             else//每一个数等于它上面两个数之和
             {
                 arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
             }
         }
     }
     //打印杨辉三角
     //i决定行数,j决定列数
     for (i = 0; i < line; i++)
     {
         for (k = 1; k < line-i; k++)//打印空格数,每下一行,就少一个空格
         {
             printf("  ");
         }
         for (j = 0; j <= i; j++)//打印数字
         {
             printf("%3d ", arr[i][j]);//%3d用来排版数字
         }
         printf("\n");
     }
 ​
     return 0;
 }

4.1输入一个值,要求按照升序插入数组中

 #include<stdio.h>
 void Sort(int arr[],int n)
 {
     int j,k;
     for (j =10; j >= 0; j--)//从后往前寻找
     {
         k = j + 1;//需要用来比较的下标j的后一位
         if(n>arr[j])
         {
             arr[k] = n;//下标j的后一位的内容变成了n
             break;
         }
         else
         {
             arr[k]=arr[j];
         }
     }
 ​
 }
 int main()
 {
     int num,i;
     int arr[12] = { 1,3,5,7,9,11,13,15,17,19,21,0 };//不存放多一个数,会出现arr周围栈空间破坏
     int sz = sizeof(arr) / sizeof(arr[0]);
     printf("原来的排序\n");
     for (i = 0; i < 11; i++)//不打印最后一个0
     {
         printf("%d ", arr[i]);
     }
     printf("\n");
     scanf_s("%d", &num);
     
     Sort(arr,num);
 ​
     printf("\n插入后的排序\n");
     for (i = 0; i <=11; i++)
     {
         printf("%d ", arr[i]);
     }
 ​
     return 0;
 }
 //结果:
 输入10
 输出1 3 5 7 9 10 11 13 15 17 19 21

5.1打印菱形

 #include<stdio.h>
 #define line 7//方便改菱形行数
 int main()
 {
     int i,j,k = 0;
     //上三角
     for (k = 0; k < line; k++)
     {
         for (i = 0; i <line-k; i++)//打印空格,每下一行则少一个空格
         {
             printf(" ");
         }
         for (j = 0; j <=k; j++)//打印*,每下一行则多一个*
         {
             printf(" *");// *前面的空格用于排版
         }
         printf("\n");
     }
     //下三角
     for (k = 0; k < line; k++)
     {
         for (i = 0; i <k+2; i++)//打印空格,每下一行则多一个空格
     //k+2是因为需要多两个空格,用来排版
         {
             printf(" ");
         }
         for (j = 0; j < line - k-1; j++)//打印*,每下一行则少一个*
         {
     //line-k-1是保证下三角始终比上三角少一行(即少一颗*)
             printf(" *");
         }
         
             printf("\n");
     }
 ​
     return 0;
 }