C语言数组实验
一、实验目的
1、掌握C语言数组相关知识
2、使用C语言掌握数组定义及应用。
二、实验设备与器件
PC机、头歌实践教学平台
三、实验内容
使用头歌平台编程:

(一)设计题目
1、逆序输出
任意输入5个数字,将数字逆序输出。
逆序前:1 2 3 4 5
逆序后:5 4 3 2 1
C程序1: |
#include<stdio.h> int main() { int a[5],i; for(i=0;i<5;i++) scanf("%d",&a[i]); /***********Begin**********/ printf("逆序前:"); for(i=0;i<5;i++) printf("%d ",a[i]); printf("\n"); printf("逆序后:"); for(i=4;i>=0;i--) printf("%d ",a[i]); /***********End**********/ return 0; }
 |
2、求最大值、最小值
编写程序输出11,22,15,56,78,23,45,56,87,99中的最大数和最小数。
C程序2: |
#include<stdio.h> int main() { /***********Begin**********/ int min,max,i; int a[10]={11,22,15,56,78,23,45,56,87,99}; min=max=a[0]; for(i=1;i<10;i++) { if(a[i]<min)min=a[i]; if(a[i]>max)max=a[i]; } printf("最大数为%d,最小数为%d",max,min); /***********End**********/ return 0; }
 |
3、输出二维数组的最小值
编写一个函数,找出一个整型数组中的最大值和最小值,并将其存储在指定的变量中。
C程序3: |
#include<stdio.h> int main() { /***********Begin**********/ int a[4][3]={11,23,12,45,67,45,2,56,34,78,55,34}; int i,j,min,row=0,volumn=0; min=a[0][0]; for(i=0;i<4;i++) { for(j=0;j<3;j++) if(min>a[i][j]){ min=a[i][j]; row=i; volumn=j; } } printf("最小数在%d行%d列为%d",row,volumn,min); /***********End**********/ return 0; }
 |
4、输出杨辉三角
编写程序根据输入行数n输出杨辉三角形。
C程序4: |
#include<stdio.h> int main() { int i,j,n; int a[50][50]={0}; scanf("%d",&n); for(i=0;i<n;i++) { a[i][0]=1; a[i][i]=1; } for(i=2; i<n; i++) { for(j=1; j<i; j++) a[i][j] = a[i-1][j-1] + a[i-1][j]; } for(i=0; i<n; i++) { for(j=0; j<=i; j++) { if(i==j) printf("%d", a[i][j]); else printf("%d ", a[i][j]); } printf("\n"); } return 0; }

 |
5、矩阵转置
编写程序利用二维数组实现矩阵的转置,要求输出结果如图所示。(提示:输出数字占6位)。
C程序5: |
#include<stdio.h> int main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int b[4][3]; int i,j; printf("转置前:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%6d",a[i][j]); printf("\n"); } for(i=0; i<3; i++) { for(j=0; j<4; j++) b[j][i] = a[i][j]; } printf("转置后:\n"); for(j=0; j<4; j++) { for(i=0; i<3; i++) printf("%6d", b[j][i]); printf("\n"); } /***********End**********/ return 0; }
 |
6、数组综合实验(A)
编写一个函数,输入两个长度相等的整型数组,判断它们是否相等。如果相等返回1,否则返回0。
C程序6: |
#include <stdio.h> int equal(int arr1[], int arr2[], int len){ /***********begin********/ int i; for(i=0;i<len;i++){ if(arr1[i]!=arr2[i]){ return 0; } } return 1; /**********end***********/ } int main(){ int arr1[5] = {1, 2, 3, 4, 5}; int arr2[5] = {1, 2, 3, 5, 5}; int len = 5; if(equal(arr1, arr2, len)){ printf("两个数组相等\n"); } else{ printf("两个数组不相等\n"); } return 0; }
 |
7、数组综合实验(B)
编写一个函数,输入一个整型数组和一个整数 k,找出数组中的所有 k 个元素的组合。例如,输入数组{1, 2, 3, 4, 5}和k=3,输出所有由3个元素组成的组合,即{1, 2, 3}、{1, 2, 4}、{1, 2, 5}、{1, 3, 4}、{1, 3, 5}、{1, 4, 5}、{2, 3, 4}、{2, 3, 5}、{2, 4, 5}、{3, 4, 5}。
C程序7: |
#include <stdio.h> void combination(int arr[], int len, int k, int index, int temp[], int start){ /***********begin********/ int i; if(index==k){ printf("{"); for(i=0;i<k;i++){ printf("%d ", temp[i]); } printf("}\n"); return; } for(i=start;i<len;i++){ temp[index] = arr[i]; combination(arr, len, k, index+1, temp, i+1); } /**********end***********/ } int main(){ int arr[5] = {1, 2, 3, 4, 5}; int len = 5; int k = 3; int temp[3]; combination(arr, len, k, 0, temp, 0); return 0; }
 |
8、合并数组
编写一个函数,对整型数组进行升序排序并输出。
C程序8: |
#include <stdio.h> #include <stdlib.h> void merge(int arr1[], int len1, int arr2[], int len2){ /***********begin********/ int i, j, k; int *arr3 = (int*)malloc(sizeof(int)*(len1+len2)); i = j = k = 0; while(i<len1 && j<len2){ if(arr1[i]<arr2[j]){ arr3[k++] = arr1[i++]; } else{ arr3[k++] = arr2[j++]; } } while(i<len1){ arr3[k++] = arr1[i++]; } while(j<len2){ arr3[k++] = arr2[j++]; } printf("合并后的数组是:"); for(i=0;i<k;i++){ printf("%d ", arr3[i]); } printf("\n"); free(arr3); /**********end***********/ } int main(){ int arr1[3] = {1, 3, 5}; int arr2[4] = {2, 4, 6, 8}; merge(arr1, 3, arr2, 4); return 0; }
 |
9、数组排序
编写一个函数,对整型数组进行升序排序并输出。
C程序9: |
#include <stdio.h> #include <stdlib.h> int compare(const void *a, const void *b){ /***********begin********/ return (*(int*)a - *(int*)b); /**********end***********/ } void sort(int arr[], int len){ /***********begin********/ qsort(arr, len, sizeof(int), compare); int i; printf("排序后的数组是:"); for(i=0;i<len;i++){ printf("%d ", arr[i]); } printf("\n"); /**********end***********/ } int main(){ int arr[5] = {4, 2, 5, 1, 3}; sort(arr, 5); return 0; }
 |
10、字符串连接
编写一个程序,输入两个字符串,将这两个字符串连接起来并输出。
C程序10: |
#include <stdio.h> #include <string.h> int main(){ char str1[100], str2[100]; /***********begin********/ scanf("%s", str1); scanf("%s", str2); strcat(str1, str2); printf("%s\n", str1); /**********end***********/ return 0; }


 |
11、二维数组
编写一个程序,接收一个二维数组,将其中的偶数元素乘以 2,奇数元素不变,然后输出数组。
C程序11: |
#include <stdio.h> void doubleEven(int arr[][4], int rows, int cols) { /***********begin********/ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (arr[i][j] % 2 == 0) { arr[i][j] *= 2; } } } } void printArray(int arr[][4], int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int numbers[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int rows = sizeof(numbers) / sizeof(numbers[0]); int cols = sizeof(numbers[0]) / sizeof(numbers[0][0]); doubleEven(numbers, rows, cols); printArray(numbers, rows, cols); return 0; }
 |
12、一维数组
编写一个程序,接收一个一维数组,将其中的偶数元素乘以 2,奇数元素不变,然后输出数组。
C程序12: |
#include <stdio.h> void doubleEven(int arr[], int len) { /***********begin********/ for (int i = 0; i < len; i++) { if (arr[i] % 2 == 0) { arr[i] *= 2; } } /**********end***********/ } void printArray(int arr[], int len) { for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int numbers[] = {1, 2, 3, 4, 5}; int len = sizeof(numbers) / sizeof(numbers[0]); doubleEven(numbers, len); printArray(numbers, len); return 0; }
 |