编程输出杨辉三角形(其中,最左边一列和对角线上的元素全部为1,其他元素等于左上角元素和正上方元素的和,例如:10行的杨辉三角形如下图)
(1)输出10行杨辉三角形
#include <stdio.h>
#define M 10
int main(){
void fun1(int a[M][M]);
void fun2(int a[M][M]);
int arr[M][M];
fun1(arr); //给数组赋值
fun2(arr); //输出数组
return 0;
}
void fun1(int a[M][M]) {
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
a[i][j] = 1;
}
else if (i == j) {
a[i][j] = 1;
}
else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
}
void fun2(int b[M][M]) {
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
printf(" %d\t", b[i][j]);
}
printf("\n");
}
}
(2)对前面的杨辉三角形,计算其中有多少个数的值是大于M行杨辉三角形中所有数值的平均值
int fun3(int c[M][M]) {
int sum = 0; //和
int avg = 0; //平均值
int count1=0; //大于平均值的数的个数
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
sum += c[i][j];
}
}
avg = sum / (M * (M + 1) / 2);
printf("10行杨辉三角形中的所有数的平均值为:%d\n", avg);
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
if (c[i][j] > avg) {
count1 += 1;
}
}
}
return count1;
}
完整代码:
#include <stdio.h>
#define M 10
int main(){
void fun1(int a[M][M]);
void fun2(int a[M][M]);
int fun3(int a[M][M]);
int arr[M][M];
fun1(arr); //给数组赋值
fun2(arr); //输出数组
int count=fun3(arr); //计算有多少个数大于平均值
printf("共有%d个数的值大于10行杨辉三角形中的所有数的平均值\n", count);
return 0;
}
void fun1(int a[M][M]) {
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
a[i][j] = 1;
}
else if (i == j) {
a[i][j] = 1;
}
else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
}
void fun2(int b[M][M]) {
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
printf(" %d\t", b[i][j]);
}
printf("\n");
}
}
int fun3(int c[M][M]) {
int sum = 0; //和
int avg = 0; //平均值
int count1=0; //大于平均值的数的个数
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
sum += c[i][j];
}
}
avg = sum / (M * (M + 1) / 2);
printf("10行杨辉三角形中的所有数的平均值为:%d\n", avg);
for (int i = 0; i < M; i++) {
for (int j = 0; j <= i; j++) {
if (c[i][j] > avg) {
count1 += 1;
}
}
}
return count1;
}
运行结果: