C语言基础-作业-day-240407

1.输入m行n列的二维数组,输出每一行的和,以及每一列的和

代码:

//输入m行n列的二维数组,输出每一行、每一列的和

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        int m=0,n=0;
        printf("输入m行n列的数组:\nm=");
        scanf("%d",&m);
        printf("n=");
        scanf("%d",&n);
        int a[m][n];
        printf("请输入数组数值:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("a[%d][%d]=",i,j);
                        scanf("%d",&a[i][j]);
                }
        }
        printf("\n");

        printf("输出数组为:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",a[i][j]);
                }
                printf("\n");
        }

        int sum1=0;  //行之和
        int sum2=0;  //列之和

        for(int i=0;i<m;i++)
        {
                sum1=0;   //重置
                for(int j=0;j<n;j++)
                {
                        sum1+=a[i][j];
                }
                printf("第%d行之和=%d\n",i+1,sum1);
        }

        for(int j=0;j<n;j++)
        {
                sum2=0;   //重置
                for(int i=0;i<m;i++)
                {
                        sum2+=a[i][j];
                }
                printf("第%d列之和=%d\n",j+1,sum2);
        }
        return 0;
}

运行结果:

2.输入n行n列的二维数组,计算 四边的和 减去 正反对角线和的结果

代码:

//输入n行n列的二维数组,计算:四边的和-正反对角线的和=?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        int n=0;
        printf("输入n行n列的数组:\nn=");
        scanf("%d",&n);
        int a[n][n];
        printf("请输入数组数值:\n");
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("a[%d][%d]=",i,j);
                        scanf("%d",&a[i][j]);
                }
        }
        printf("\n");

        printf("输出数组为:\n");
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",a[i][j]);
                }
                printf("\n");
        }

        //四边之和=第一行之和+第n行之和+第一列之和+第n列之和-四角数之和
        int sum=0,sum1=0,sum2=0,sum3=0,sum4=0;

        for(int i=0;i<n;i++)
        {
                sum1+=a[0][i];       //第一行之和
                sum2+=a[n-1][i];     //第n行之和
                sum3+=a[i][0];       //第一列之和
                sum4+=a[i][n-1];     //第n列之和
        }
        printf("sum1=%d sum2=%d sum3=%d sum4=%d\n",sum1,sum2,sum3,sum4);

        sum=sum1+sum2+sum3+sum4-a[0][0]-a[0][n-1]-a[n-1][0]-a[n-1][n-1];  //四边之和
        printf("四边之和=%d\n",sum);

        //正对角线之和=a[0][0]+a[1][1]+...a[n-1][n-1]
        //反对角线之和=a[0][n-1]+a[1][n-1-1]+...a[n-1][0]
        int sum5=0,sum6=0;
        for(int i=0;i<n;i++)
        {
                sum5+=a[i][i];      //正对角线之和
                sum6+=a[i][n-1-i];   //反对角线之和
        }
        printf("正对角线之和=%d 反对角线之和=%d\n",sum5,sum6);
        int num=sum-sum5-sum6;
        printf("四边的和-正反对角线的和=%d\n",num);

        return 0;
}

运行结果:

3.输入m行n列的二维数组,计算二维数组的第二大值

代码:

//输入m行n列的二维数组,计算数组中的第二大值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        int m=0,n=0;
        printf("输入m行n列的数组:\nm=");
        scanf("%d",&m);
        printf("n=");
        scanf("%d",&n);
        int a[m][n];
        int b[n][m];

        printf("请输入数组数值:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("a[%d][%d]=",i,j);
                        scanf("%d",&a[i][j]);
                }
        }
        printf("\n");

        printf("原数组为:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                        printf("%d ",a[i][j]);
                printf("\n");
        }

        //计算最大、最小值
        int max=a[0][0];
        int min=a[0][0];
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        if(a[i][j]>=max)
                        {
                                max=a[i][j];
                        }
                        if(a[i][j]<=min)
                        {
                                min=a[i][j];
                        }
                }
        }
        printf("max=%d,min=%d\n",max,min);

        //计算第二大、第二小值
        int sec_max=min;
        int sec_min=max;
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        if(a[i][j]==max)
                                continue;
                        if(sec_max <=a[i][j])
                                sec_max=a[i][j];
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        if(a[i][j]==min)
                                continue;
                        if(sec_min >=a[i][j])
                                sec_min=a[i][j];
                }
        }
        printf("sec_max=%d,sec_min=%d\n",sec_max,sec_min);
        return 0;
}

运行结果:

4.编程实现二维数组转置

代码:

//转置二维数组

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        int m=0,n=0;
        printf("输入m行n列的数组:\nm=");
        scanf("%d",&m);
        printf("n=");
        scanf("%d",&n);
        int a[m][n];
        int b[n][m];

        printf("请输入数组数值:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("a[%d][%d]=",i,j);
                        scanf("%d",&a[i][j]);
                }
        }
        printf("\n");

        printf("原数组为:\n");
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",a[i][j]);
                }
                printf("\n");
        }


        printf("转置数组为:\n");
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<m;j++)
                {
                        b[i][j]=a[j][i];
                        printf("%d ",b[i][j]);
                }
                printf("\n");
        }
        return 0;
}

运行结果:

5.输入一个字符串,删除字符串中的空格

代码:

//输入一个字符串,删除字符串中的空格

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        char str[20]="";
        printf("请输入字符串:");
        gets(str);
        printf("输出字符串:");
        puts(str);

        int l=strlen(str);
        int count=0;
        printf("删除空格后的字符串为:");
        for(int i=0;i<l;i++)
        {
                if(str[i]==' ')
                {
                        count++;
                        for(int j=i+1;j<l;j++)
                        {
                                str[j-1]=str[j];  //前移
                        }
                        i--;
                }

        }
        str[l-count]='\0';
        puts(str);

        /*
           for(int i=0;i<l;i++)
           {
           if(str[i]==' ')
           continue;
           printf("%c",str[i]);
           }
           printf("\n");
           */
        return 0;
}

运行结果:

6.输入一个字符串,实现单词逆置

代码:

//输入字符串,实现单词逆置
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
        char a[20]="";
        printf("请输入字符串:");
        gets(a);
        printf("输入的字符串为:");
        puts(a);

        //整体逆置
        int i=0;
        int j=strlen(a)-1;
        while(i<j)
        {
                char t=a[i];a[i]=a[j];a[j]=t;
                i++;j--;
        }

        //单词逆置
        i=j=0;
        while(a[i]!='\0')
        {
                //j跨字符走到空格
                while(a[j]!=' '&&a[j]!='\0')
                        j++;
                //交换i~k之间的字符
                int k=j-1;
                while(i<k)
                {
                        char t=a[i];a[i]=a[k];a[k]=t;
                        i++;k--;
                }
                //j跨空格走到字符
                while(a[j]==' ')
                        j++;
                i=j;
        }
        printf("单词逆置后的字符串为:");
        puts(a);
        return 0;
}

运行结果:

7.函数的功能

strncpy

作用:将一个字符串复制到另一个字符串,指定复制的字符串个数。

格式:char *strncpy(char *dest, const char *src, size_t n);

dest:目标字符串
src :源字符串
n:要复制的源字符串的个数

strncat

作用:将一个字符串追加到另一个字符串的末尾,指定追加的字符串个数。

格式:char *strncat(char *dest, const char *src, size_t n);

dest:目标字符串
src:源字符串 
n:要追加的源字符串的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值