1.输入m行n列的二维数组,输出每一行的和,以及每一列的和
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,n,m,sum;
printf("please input m n:");
scanf("%d %d",&m,&n);
int arr[m][n];
getchar();
printf("please input arr:");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&arr[i][j]);
}
for(i=0;i<m;i++)
{
sum=0;
for(j=0;j<n;j++)
sum+=arr[i][j];
printf("arr[%d][] = %d\n",i,sum);
}
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
sum+=arr[j][i];
printf("arr[][%d] = %d\n",i,sum);
}
return 0;
}
2.输入n行n列的二维数组,计算 四边的和 减去 正反对角线的和 的结果
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,n,sum1=0,sum2=0;
printf("please input n:");
scanf("%d",&n);
int arr[n][n];
getchar();
printf("please input arr:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&arr[i][j]);
getchar();
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==1||j==1||i==n-1||j==n-1)
sum1+=arr[i][j];
if(i==j||(i+j)==n-1)
sum2+=arr[i][j];
}
}
printf("%d - %d = %d\n",sum1,sum2,sum1-sum2);
return 0;
}
3.输入m行n列的二维数组,计算二维数组的第二大值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,n,m,max,min,max2;
printf("please input m n:");
scanf("%d %d",&m,&n);
int arr[m][n];
getchar();
printf("please input arr:");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&arr[i][j]);
}
min=max=arr[0][0];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(max<arr[i][j])
max=arr[i][j];
if(min>arr[i][j])
min=arr[i][j];
}
}
max2=min;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(max2<arr[i][j]&&arr[i][j]!=max)
max2=arr[i][j];
}
printf("second max = %d\n",max2);
return 0;
}
4.编程实现二维数组转置
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,n,m;
printf("please input n,m:");
scanf("%d %d",&n,&m);
int a1[n][m];
int a2[m][n];
printf("a1 = ");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a1[i][j]);
a2[j][i]=a1[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%d ",a1[i][j]);
}
printf("\n");
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a2[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]="";
gets(str);
int i,j;
for(i=0;i<strlen(str);i++)
{
if(str[i]==' ')
{
for(j=i;j<strlen(str);j++)
str[j]=str[j+1];
i--;
}
}
puts(str);
return 0;
}
6.输入一个字符串,实现单词逆置
eg: "good good study" ---->"study good good"
//先整体逆置 --》“yduts doog doog”
//单词逆置 study good good
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char str[30]="";
char temp;
gets(str);
int i,j,k=0,t;
for(i=0;i<strlen(str)/2;i++)
{
temp=str[i];
str[i]=str[strlen(str)-i-1];
str[strlen(str)-i-1]=temp;
}
for(i=0;i<=strlen(str);i++)
{
if(str[i]==' '||str[i]=='\0')
{ for(j=k,t=1;j<k+(i-k)/2;j++,t++)
{
temp=str[j];
str[j]=str[i-t];
str[i-t]=temp;
}
k=i+1;
}
}
puts(str);
return 0;
}
7.自行学习该函数的功能
char *strncpy(char *dest, const char *src, size_t n);
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
char *strncat(char *dest, const char *src, size_t n);
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。