C基础第六天

第一题

从终端获取一个字符串,并将该字符串中的数据倒置例如str中原来存储"abcde",要求代码运行完毕后存储的是"edcba

解析:将第一个与最后一个交换,第二个与倒数第二个交换

只循环前半段,奇数的最中间那个数不换,偶数都可以换

不需要管 ' \0 ' 因为 strlen 没有把 \0 算在内

#include <stdio.h>
int main(int argc, const char *argv[])
{
	char arr1[100]={0};
	gets(arr1); \\换行符结束
	puts(arr1); \\自己会加一个换行符
	int temp;

	for(int i=0;i<strlen(arr1)/2;i++){
		temp=arr1[i];
		arr1[i]=arr1[strlen(arr1)-i-1];
		arr1[strlen(arr1)-i-1]=temp;
	}

	printf("arr1=%s\n",arr1);
	return 0;
}

运行结果:

第二题

从终端获取一个字符串str,再输入一个字符c,再输入一个插入位置n,要求将c插入到str中,且插入在n所指定的下标位置。例如: 输入 hello 在输入一个a 在输入一个1,则最后得到的结果为haello.

解析:重新定义一个字符串

1、位置n之前的 a[i]=b[i]

2、位置n的时候 b[i]=n 且 b[i+1]=a[i]  也就是说往后挤一个

3、位置n之后的 b[i+1]=a[i]

#include <stdio.h>

int main(int argc, const char *argv[])
{
	char str1[100]={0};
	char str2[100]={0};
	char c;
	int n;
	printf("请输入一个字符串\n");
	gets(str1);
	printf("请输入一个字符\n");
	scanf("%c",&c);
	printf("请输入要插入的位置\n");
	scanf("%d",&n);

	for(int i=0;i<strlen(str1);i++){
		if(n>i){
			str2[i]=str1[i];	
		}else if(n==i){
			str2[i]=c;
			str2[i+1]=str1[i];
		}else if(n<i){
			str2[i+1]=str1[i];
		}
	}
	strcpy(str1,str2);
	printf("str1=%s\n",str1);

	return 0;
}

运行结果:

第三题

改写strcmp,用自己的代码实现strcmp

解析:strcmp是比大小的函数,但是用的ASCII码的大小来比

并且是一位一位的比,从第一位开始,只要有一位比出来了就有结果

#include <stdio.h>
int main(int argc, const char *argv[])
{
	char str1[10]="12345";
	char str2[10]="127890";
	int flag=0;
	for(int i=0;i<strlen(str2);i++){
		if(str1[i]>str2[i]){
			flag=str1[i]-str2[i];
			break;
		}else if(str1[i]<str2[i]){
			flag=str1[i]-str2[i];
			break;
		}
	}
	if(flag>0){
		printf("str1>str2,flag=%d\n",flag);
	}else if(flag==0){
		printf("str1==str2,flag=%d\n",flag);
	}else if(flag<0){
		printf("str1<str2,flag=%d\n",flag);
	}
	return 0;
}

运行结果:

第四题

改写strcat,用自己的代码实现strcat

解析:strcat是拼接字符串的函数,结果 = 字符串1+字符串2

#include <stdio.h>
int main(int argc, const char *argv[])
{   char str1[20]="12345"; //脚标从0~4
	char str2[20]="67890"; //如果要拼接 脚标从5~9
	int j=0;
	int length=strlen(str1)+strlen(str2); //总长度
	for(int i=strlen(str1);i<length;i++){ //脚标i从str1结束的时候开始,一直加到总长度
		printf("str1=%c,str2=%c\n",str1[i],str2[j]); //
		str1[i]=str2[j];
		j++;
	}
    str1[i]='\0'; //末尾补\0表示字符串
	printf("str1=%s\n",str1);
	return 0;
}

运行结果:

第五题

求二维数组的最大值,并输出相应的行号,和列号

解析:和一维数组一样,遍历寻找最大值

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int arr1[2][3]={0};
	int max=arr1[0][0];
	int a=0;
	int b=0;
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&arr1[i][j]);	
		}
	}
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			printf("%d ",arr1[i][j]);
			if(max<arr1[i][j]){
				max=arr1[i][j];
				a=i;
				b=j;
			}
		}
	}
	printf("max=%d,行号:%d,列号:%d\n",max,a,b);
	return 0;
}

运行结果:

第六题

输出一个十行的杨辉三角

解析:先打印出三角形的形状

然后每个值 = 上一行的前一个 + 上一行的前两个

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int arr1[10][10]={0};
	arr1[0][0]=1; //设置开始条件	
	for(int i=1;i<10;i++){
		for(int j=0;j<=i;j++){ //必须是<=i因为要包括10
			if(j==0){
				arr1[i][j]=1; //将每一行的第0个单独处理
			}else{
				arr1[i][j]=arr1[i-1][j-1]+arr1[i-1][j];
			}
		}
	}

	for(int i=0;i<10;i++){
		for(int j=0;j<=i;j++){ //必须是<=i因为要包括10
			printf("%d\t",arr1[i][j]);
		}
		printf("\n");
	}
	return 0;
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值