CTGU—第5章数组

第1关:求正数的个数及正数的平均值

任务:从键盘输入10个整数到数组中,求其中正数的个数及正数的平均值,并输出结果。(平均值精确到小数点后两位)。

#include <stdio.h>
void main()
{
    //*****begin********
    int a[10], i, sum = 0;
    double ping, k = 0;

    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < 10; i++)
    {
        if (a[i] > 0)
        {
            sum = sum + a[i];
            k++;
        }
    }
    ping = sum / k;
    printf("正数的个数为%.0lf、平均值为%.2lf\n", k, ping);

    //*****end********
}

第2关:求平均成绩和低于平均分的学生成绩

任务:编程从键盘输入若干个学生的成绩,输入负数时表示输入结束,输出平均成绩和低于平均分的学生成绩,其中平均值精确到小数点后两位。

#include <stdio.h>
void main()
{
	//*****begin********
    int a[100]={0};
    int i,k=0;
    double ping,zong=0;

    for(i=0;i<100;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]<0)
            break;
        zong=zong+a[i];
        k++;
    }
    ping=zong/k;
    printf("平均分为%.2lf\n",ping);
    printf("低于平均分的分数为\n");
    for(i=0;i<k;i++)
    {
        if(a[i]<ping && a[i]>0 )
            printf("%d\n",a[i]);

    }

	//*****end********
}

第3关:求方差

任务:编程从键盘输入10个数,求他们的方差, 精确到小数点后两位。求方差的公式如下:

#include <stdio.h>
#include <math.h>
void main()
{
	//*****begin********

    double a[10];
    double x, s = 0, zong = 0;
    int i;

    for (i = 0; i < 10; i++) {
        scanf("%lf", &a[i]);
        zong = zong + a[i];
    }
    x = zong / 10;
    for (i = 0; i < 10; i++) {
        s = s + pow((a[i] - x), 2);
    }
    s = s / 10;
    s=sqrt(s);
    printf("方差为%.2lf\n", s);

    return 0;

	//*****end********
}

第4关:求数组各行的平均值

任务:从键盘上输入一个M×N的二维数组,求该数组各行的平均值,将结果放到一个一维数组中,并输出,要求M和N的值用#define命令设置,平均值精确到小数点后两位。

#include <stdio.h>
//*****begin********
#define M 3
#define N 4
//*****end********
void main()
{
	//*****begin********
    double nums[M][N];
    double sum;
    double num[M];
    int i,j;

    for(i=0;i<M;i++)
     {
         sum=0;
        for (j = 0; j < N; j++) {
            scanf("%lf", &nums[i][j]);
            sum = sum + nums[i][j];
        }
        num[i]=sum/N;
    }
    for(i=0;i<M;i++)
        printf("%.2lf ",num[i]);
	//*****end********
}

第5关:求矩阵

任务:编程从键盘输入一个N×N的矩阵A,求矩阵B(B=A+A'),即将矩阵A与其转置矩阵A'相加,结果存放到矩阵B中,并输出。要求N的值用#define命令设置,输出时每个数占7位。

#include <stdio.h>
//*****begin********
#define N 3
//*****end********
void main()
{
	//*****begin********
 int A[N][N], A1[N][N], B[N][N];
        int i, j, k;

        // 读入矩阵A,并计算其转置矩阵A1
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                scanf("%d", &A[i][j]);
                A1[j][i] = A[i][j];
            }
        }

        // 计算矩阵B = A + A1,并输出结果
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                B[i][j] = A[i][j] + A1[i][j];
                printf("%7d", B[i][j]);
            }
            printf("\n");
        }

        return 0;
    

	//*****end********
}

第6关:求方阵“右上三角”的元素之和

任务:编程从键盘输入一个方阵的行数及所有元素,求该方阵“右上三角”的元素之和。提示:可将数组定义大一点,如定义为10行10列。

#include <stdio.h>
void main()
{
	//*****begin********
    int n,i,j;
    int arr[10][10]={0};
    int sum=0;
    
    scanf("%d", &n);
    
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &arr[i][j]);
        }
    }

// 计算右上三角的元素之和
    for (i = 0; i < n; i++) {
        for (j = i; j < n; j++) {
            sum += arr[i][j]; // 右上三角的元素
        }
    }

    printf("%d\n", sum);

	//*****end********
}

第7关:逆序输出

任务:从键盘输入一个字符串,将其按逆序输出。

#include <stdio.h>
//*****begin(可选填)********
#include <string.h>
//*****end********
void main()
{
    char str[100];
    int i,len=0;
    scanf("%s",str);

    while(str[len]!='\0')
    {
        len++;
    }

    for(i=len-1;i>=0;i--)
    {
        printf("%c",str[i]);
    }
    printf("\n");

	//*****end********
}

第8关:字符串连接

任务:从键盘输入两个字符串,将第二个字符串连接到第一个字符串的后面,并输出连接后的结果。要求:不能调用字符串库函数strcat()。

#include <stdio.h>
void main()
{
    //*****begin********
    char str1[100], str2[50];
    int i, j;

    gets(str1);

    gets(str2);

    i = 0;
    while (str1[i] != '\0')
    {
        i++;
    }

    j = 0;
    while (str2[j] != '\0')
    {
        str1[i] = str2[j];
        i++;
        j++;
    }
    str1[i] = '\0';

    printf("连接后的字符串为%s\n", str1);

    return 0;
    //*****end********
}

第9关:求数组中最外圈元素的平均值

任务:编程从键盘输入一个M×N的二维数组,求该数组中最外圈元素的平均值,并输出结果。 要求M和N的值用#define命令设置,平均值精确到小数点后两位。

#include <stdio.h>
//*****begin********
#define M 3
#define N 4
//*****end********
void main()
{
    int matrix[M][N];
    int i,j;
    double sum=0,count=0;
    double ave;

    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&matrix[i][j]);
        }
    }

    for(j=0;j<N;j++)
    {
        sum=sum+matrix[0][j];//第一行
        count++;
        sum=sum+matrix[M-1][j];//最后一行
        count++;
    }

    for(i=1;i<M-1;i++)
    {
        sum=sum+matrix[i][0];//第一列
        count++;
        sum=sum+matrix[i][N-1];//最后一列
        count++;
    }

    ave=sum/count;
    printf("外围元素的平均值为%.2lf\n",ave);

	//*****end********
}

第10关:求方阵

任务:编程产生一个N×N的方阵,要求该方阵副对角线上的元素均为2,其余元素均为0,输出该方阵,N的大小从键盘输入。

#include <stdio.h>
void main()
{
    //*****begin********
    int n;
    scanf("%d", &n);
    int matrix[n][n]; 
    // 遍历数组,根据副对角线上的元素为2的规律进行赋值
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (i + j == n - 1)
            { // 副对角线上的元素
                matrix[i][j] = 2;
            }
            else
            {
                matrix[i][j] = 0;
            }
            printf("%d ", matrix[i][j]); // 输出每个元素
        }
        printf("\n"); 
    }
    return 0;

    //*****end********
}

第11关:移字符串

任务:从键盘输入一个字符串和一个整数(m),编程移动字符串中的字符,移动规则如下:把第1到第m个字符,平移到字符串的后部,把第m+1到字符串末尾的字符平移到字符串的前部。提示:可借助其他字符数组。

#include <stdio.h>
void main()
{
	//*****begin********
    char str[100];
    char temp[100];
    int m;
    int len=0,i;
    scanf("%s",str);
    scanf("%d",&m);

    while(str[len]!='\0')
    {
        len++;
    }

    for(i=0;i<m;i++)
        temp[i]=str[i];

    for(i=0;i<len-m;i++)
        str[i]=str[i+m];

    for(i=0;i<m;i++)
        str[len-m+i]=temp[i];

    printf("移动后的结果为%s",str);
    return 0; 
	//*****end********
}

第12关:计算平均成绩

任务:假设某班级人数不超过100人,每位同学有3门课程的考试成绩,采用二维数组编程实现从键盘输入班级人数和每个同学的3门课程的成绩,并计算其平均成绩后输出。要求平均成绩保留1位小数,数据之间用键分开。

#include <stdio.h>
void main()
{
	//*****begin********
    int n;//学生人数
    scanf("%d",&n);
    double matrix[n][n];
    int i,j;
    double avg[n];//存储学生的平均成绩

    for(i=0;i<n;i++)//输入学生成绩
    {
        for(j=0;j<n;j++)
        {
            scanf("%lf",&matrix[i][j]);
        }
        avg[i]=(matrix[i][0]+matrix[i][1]+matrix[i][2])/3.0;
    }

    for(i=0;i<n;i++)
    {
        printf("%d ",i+1);
        for(j=0;j<n;j++)
        {
            printf("%.1lf ",matrix[i][j]);
        }
        printf("%.1lf\n",avg[i]);
    }
    return 0;
	//*****end********
}

第13关:删除字符串中的前导空格

任务:编程从键盘输入一个字符串,删除字符串中的前导空格,中间和尾部的空格不删除。

#include <stdio.h>
//*****begin(可选填)********

//*****end********
void main()
{
    char str[100];
    int i,j;
    scanf("%[^\n]",str);//[^\n]的意思是,接受除了\n换行符以外的所有符号

    //删除字符串签到空格符
    i=0;
    while(str[i]==' ')
    {
        i++;
    }

    if(i>0)
    {
        j=0;
        while(str[i]!='\0')
        {
            str[j]=str[i];
            i++;
            j++;
        }
        str[j]='\0';
    }
    printf("%s\n",str);
	//*****end********
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值