作业
1.输入m行n列的二维数组,输出每一行的和,以及每一列的和
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int m,n,i,j,sum_m,sum_n;
printf("Please input m and n:");
scanf("%d%d",&m,&n);
int a[m][n];
printf("Please input %d number:",m*n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++){
sum_m=0;
for(j=0;j<n;j++){
sum_m+=a[i][j];
}
printf("summer of row %d is %d\n",i,sum_m);
}
for(j=0;j<n;j++){
sum_n=0;
for(i=0;i<m;i++){
sum_n+=a[i][j];
}
printf("summer of column %d is %d\n",j,sum_n);
}
return 0;
}
Please input m and n:2 3
Please input 6 number:1 2 3 4 5 6
summer of row 0 is 6
summer of row 1 is 15
summer of column 0 is 5
summer of column 1 is 7
summer of column 2 is 9
2.输入n行n列的二维数组,计算“四边上的元素之和”减去“正反对角线上的元素之和”的结果
注意:不可重复相加或相减,即
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int n,i,j,sum=0;
printf("Please input n:");
scanf("%d",&n);
int a[n][n];
printf("Please input %d number:",n*n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==0 || i==n-1 || j==0 || j==n-1)
sum+=a[i][j];
if(i==j || i+j==n-1)
sum-=a[i][j];
}
}
printf("result is %d\n",sum);
return 0;
}
Please input n:3
Please input 9 number:
1 2 1
2 2 2
1 2 1
result is 6
3.输入m行n列的二维数组,计算二维数组的第二大值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int m,n,i,j,max1,max2,min;
printf("Please input m and n:");
scanf("%d%d",&m,&n);
int a[m][n];
printf("Please input %d number:",m*n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
max1=min=a[0][0];
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(max1<a[i][j])
max1=a[i][j];
if(min>a[i][j])
min=a[i][j];
}
}
max2=min;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(max1==a[i][j])
continue;
if(max2<a[i][j])
max2=a[i][j];
}
}
printf("the second max=%d\n",max2);
return 0;
}
Please input m and n:2 3
Please input 6 number:1 2 3 4 5 6
the second max=5
4.编程实现二维数组转置
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int m,n,i,j;
printf("Please input m and n:");
scanf("%d%d",&m,&n);
int a[m][n],b[n][m];
printf("Please input %d number:",m*n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
b[j][i]=a[i][j];
}
}
printf("after transposition:\n");
for(j=0;j<n;j++){
for(i=0;i<m;i++){
printf("%-4d",b[j][i]);
}
putchar(10);
}
return 0;
}
Please input m and n:2 3
Please input 6 number:
1 2 3
4 5 6
after transposition:
1 4
2 5
3 6
5.输入一个字符串,删除字符串中的空格
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[32]="";
char b[32]="";
int i,j;
printf("Please input string:");
gets(a);
for(i=0,j=0;a[i]!='\0';i++){
if(a[i]==' ')
continue;
b[j++]=a[i];
}
b[j]='\0';
printf("after delete blank:");
puts(b);
return 0;
}
Please input string:hello world my string
after delete blank:helloworldmystring
6.输入一个字符串,实现单词逆置
eg: “good good study” ---->“study good good”
注意:单词之间的空格不仅仅只有一个,也可能有多个
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[32]="";
char t;
size_t n;
int i,j,count;
printf("Please input string:");
gets(a);
n=strlen(a);
for(i=0;i<n/2;i++){
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
i=0;
while(a[i]!='\0'){
count=0;
while(a[i]!=' ' && a[i]!='\0'){
count++;
i++;
}
n=i+i-count;
for(j=i-count;j<n/2;j++){
t=a[j];
a[j]=a[n-1-j];
a[n-1-j]=t;
}
while(a[i]==' '){
i++;
}
}
printf("inverted word:");
puts(a);
return 0;
}
Please input string:hello world my string
inverted word:string my world hello
7.自行学习下列函数的功能
char *strncpy(char *dest, const char *src, size_t n);
strncpy()与strcpy()函数类似,只是最多复制n个字节的src。
*如果src的前n个字节中没有null字节,则放置在dest中的字符串将不会以null终止。
*如果src的长度小于n,strncpy()会向dest写入额外的null字节,以确保总共写入n个字节。
char *strncat(char *dest, const char *src, size_t n);
strncat()与strcat()函数类似,只是
*它最多将使用src中的n个字节;
*如果src包含n个或更多字节,则不需要以null终止。
*与strcat()一样,dest中的结果字符串总是以null结尾。
*如果src包含n个或更多字节,strncat()将写入n+1字节到dest(来自src的n加上终止的空字节)。
*因此,dest的大小必须至少为strlen(dest)+n+1。