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:要追加的源字符串的个数