例 1: 配列内の要素を順次および逆順に出力する
例 2: 配列の合計と平均を求める
例 3: 配列の最大値と最小値を見つける
例 4: 分散と標準偏差を求める
例 5: 2 次元配列の加算を計算して別の 2 次元配列を生成する
例 6: 配列の行と列を入れ替える
最後に、完全なソース コードを添付します。
実装コードは次のとおりです。
例 1: 配列内の要素を順次および逆順に出力する
最初に、配列の長さを表す main 関数の外で定数を定義します。
//切记一定不能在结尾带分号,否则会报错
#define LEN 5
次に、メイン関数で配列を宣言します。これら 3 つの例では同じ配列を使用しています。
int array1[LEN] = {1,2,3,0,-1};
次に、for ループを使用して、配列内の各要素の順次出力を実現します。
printf("示例1:正序或者逆序依次输出数组中的元素\n");
for(int i = 0; i < LEN; i++)
{
printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
}
次に、for ループを使用して、逆出力配列の各要素を実装します。
printf("\n");
for(int j = LEN; j >= 0; j--)
{
printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
}
自分で実行した後、効果を確認してください。ここにはスクリーンショットはありません。
例 2: 配列の合計と平均を求める
合計/平均を格納する 2 つの変数を宣言します。
int sum = 0;//和
float ave = 0.0;//平均值
for ループを使用して、配列を反復処理します。
printf("示例2:求数组的和以及平均值\n");
for(int i = 0; i < LEN; i++)
{
sum += array1[i];
}
ave = (float)sum / LEN;
printf("数组的和为:%d",sum);
printf("数组的平均值为:%.2f",ave);
自分で実行した後、効果を確認してください。ここにはスクリーンショットはありません。
例 3: 配列の最大値と最小値を見つける
最大値と最小値を表す 2 つの変数を宣言します。
int max,min;//最大值和最小值
次のステップは最も重要なステップです. 配列の最初の要素を一時的に最大値と最小値として指定します. 最初の要素に従って, 配列全体を走査し, この値と順番に比較することができます.
printf("示例3:求数组的最大值和最小值\n");
max = array1[0];//默认数组的最大值和最小值均为数组的第一个元素
min = array1[0];
for(int i = 0; i < LEN; i++)
{
if( max < array1[i])
{
max = array1[i];
}
if(min > array1[i])
{
min = array1[i];
}
}
printf("数组的最大值为:%d,数组的最小值为:%d",max,min);
自分で実行した後、効果を確認してください。
例 4: 分散と標準偏差を求める
分散と標準偏差の計算を実装する関数を宣言します。
float calculateSD(int arr[],float ave);
分散式がわからない場合は、Baidu https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE%E5%85%AC%E5%BC%8F/ 3638551
Baidu が不要な場合は、次の図を参照してください。
関数の実装は次のとおりです。
float calculateSD(int arr[],float ave)
{
printf("%.f\n",ave); /* 输出平均值 */
float s = 0.0; /* 方差 */
float total = 0.0; /* 平方和 */
float SD = 0.0; /* 标准偏差 */
for(int i = 0;i < LEN; i++)
{
total += pow(arr[i] - ave,2);
printf("%d\n",arr[i]); /* 输出每一项 */
}
s = (float) total / LEN; /* 方差 */
printf("方差为:%.2f\n",s);
SD = (float)sqrt(s); /* 标准偏差 */
printf("标准偏差为:%.2f\n",SD);
return s;
}
完全なコードを以下に添付します。
#include <stdio.h>
/* 需要用到数学公式,所以添加头文件 */
#include <math.h>
//定义常量,数组长度
#define LEN 5
//计算方差
float calculateSD(int arr[],float ave);
int main()
{
int array1[LEN] = {1,2,3,0,-1};
int sum = 0;//和
float ave = 0.0;//平均值
int max,min;//最大值和最小值
printf("示例1:正序或者逆序依次输出数组中的元素\n");
for(int i = 0; i < LEN; i++)
{
printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
}
printf("\n");
for(int j = LEN; j >= 0; j--)
{
printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
}
printf("***********************************************\n");
printf("示例2:求数组的和以及平均值\n");
for(int i = 0; i < LEN; i++)
{
sum += array1[i];
}
ave = (float)sum / LEN;
printf("数组的和为:%d",sum);
printf("数组的平均值为:%.2f",ave);
printf("***********************************************\n");
printf("示例3:求数组的最大值和最小值\n");
max = array1[0];//默认数组的最大值和最小值均为数组的第一个元素
min = array1[0];
for(int i = 0; i < LEN; i++)
{
if( max < array1[i])
{
max = array1[i];
}
if(min > array1[i])
{
min = array1[i];
}
}
printf("数组的最大值为:%d,数组的最小值为:%d",max,min);
printf("示例4:数学中的方差计算\n");
calculateSD(arr,ave);
return 0;
}
//函数实现
float calculateSD(int arr[],float ave)
{
printf("%.f\n",ave); /* 输出平均值 */
float s = 0.0; /* 方差 */
float total = 0.0; /* 平方和 */
float SD = 0.0; /* 标准偏差 */
for(int i = 0;i < LEN; i++)
{
total += pow(arr[i] - ave,2);
printf("%d\n",arr[i]); /* 输出每一项 */
}
s = (float) total / LEN; /* 方差 */
printf("方差为:%.2f\n",s);
SD = (float)sqrt(s); /* 标准偏差 */
printf("标准偏差为:%.2f\n",SD);
return s;
}
それは機能し、結果は正しいです。
例 5: 2 次元配列の加算を計算して別の 2 次元配列を生成する
まず、行数と列数を表す 2 つの変数を宣言します。
int r = 2, c = 3; /* r:行数,c:列数 */
次に、3 つの配列を宣言します。2 つは既知の配列で、これら 2 つの 2 桁の配列は加算に使用され、1 つは結果を保存するために使用される配列です。
int a[2][3] = {
{1,2,3},{2,2,3}}, b[2][3] = {
{1,2,3},{1,2,3}}, sum[2][3];
配列の要素を順番に出力する
for(int i = 0; i < r; ++i)
{
for(int j = 0; j< c; ++j)
{
//依次输出各数组中的元素,
printf("a[%d][%d]:%d\n",i,j,a[i][j]);
printf("\n");
printf("b[%d][%d]:%d\n",i,j,b[i][j]);
}
}
2 つの 2 次元配列の加算演算の計算を開始します。
printf("计算二维数组相加:\n");
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
sum[i][j] = a[i][j] + b[i][j]; /* */
}
}
加算の結果を表示します。
// 显示结果
printf("\n二维数组相加结果: \n\n");
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
printf("%d ",sum[i][j]);
//换行
if(j == c - 1)
{
printf("\n\n");
}
}
}
例 6: 配列の行と列を入れ替える
スワップされた配列を格納する配列を宣言する
int Reverse[3][2] ;
スワップすると、行が列になり、列が行になります。
//交换,列变成行,行变成列
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
Reverse[j][i] = sum[i][j];
}
}
スワップ後の結果を表示します。
//结果,列数变成行数,行数变成列数
for(int i = 0; i < c; ++i)
{
for(int j = 0; j < r; ++j)
{
printf("%d ", Reverse[i][j]);
//换行
if(j == r - 1)
{
printf("\n\n");
}
}
}
追加した結果:
交換の結果:
最後に、完全なコードが添付され、プロテストを実行でき、結果は正しいです!
#include <stdio.h>
int main()
{
printf("示例1:计算二维数组相加生成另外一个二维数组\n");
int r = 2, c = 3; /* r:行数,c:列数 */
int a[2][3] = {
{1,2,3},{2,2,3}}, b[2][3] = {
{1,2,3},{1,2,3}}, sum[2][3];
for(int i = 0; i < r; ++i)
{
for(int j = 0; j< c; ++j)
{
//依次输出各数组中的元素,
printf("a[%d][%d]:%d\n",i,j,a[i][j]);
printf("b[%d][%d]:%d\n",i,j,b[i][j]);
}
}
printf("计算二维数组相加:\n");
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
sum[i][j] = a[i][j] + b[i][j]; /* */
}
}
// 显示结果
printf("\n二维数组相加结果: \n\n");
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
printf("%d ",sum[i][j]);
//换行
if(j == c - 1)
{
printf("\n\n");
}
}
}
printf("示例2:交换数组的行与列\n");
int Reverse[3][2] ;
//交换,列变成行,行变成列
for(int i = 0; i < r; ++i)
{
for(int j = 0; j < c; ++j)
{
Reverse[j][i] = sum[i][j];
}
}
//结果,列数变成行数,行数变成列数
for(int i = 0; i < c; ++i)
{
for(int j = 0; j < r; ++j)
{
printf("%d ", Reverse[i][j]);
//换行
if(j == r - 1)
{
printf("\n\n");
}
}
}
return 0;
}