C语言基础-day6

文章介绍了C语言编程中对二维数组的操作,包括计算行和列的和、四边和对角线差值、寻找第二大值、数组转置、删除字符串中的空格以及单词逆置。还提到了strncpy和strncat两个字符串处理函数的用法。
摘要由CSDN通过智能技术生成

在这里插入图片描述

作业
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。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值