C基础第七天

冒泡排序

解析:i < 5 - 1:5 个数比循环比 4 趟,序号从0开始,0~4 共5个数

j < 5 - 1 - i :5 个数只比四次,序号从 0 开始,并且要防止 j + 1 数据溢出,并每次递减

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int a[5]={2,68,17,52,41};
	int temp;
	for(int i=0;i<5-1;i++){ //5个数比4趟,最后一个数不需要比,直接固定了位置
		printf("%d:\n",i);
		for(int j=0;j<5-1-i;j++){ //每个数从最开始比4次,每一趟都递减
			if(a[j]<a[j+1]){ //如果前一个数小于后一个数就交换
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
			for(int i=0;i<5;i++){
				printf("%d\t",a[i]);
			}
			printf("\n");
		}
	}
	return 0;
}

运行结果:

选择排序

解析:设定一个 index 值,默认为最前面的那个数的脚标

由于每个数排好序了之后就不动了,所以最前面的那个数的脚标不可能一直为0

将每个数(index脚标的数除外)跟index比大小,方法类似找最大值

将最大的或最小的脚标赋值给index,每个数比完一圈出来再判断index值有没有变

变了就和原来那个位置进行交换

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int a[5]={12,34,22,91,3};
	int index;
	int temp;
	for(int i=0;i<5-1;i++){
		index=i; //设定的值 一开始index=0
		for(int j=i+1;j<5;j++){ //一开始index和1比
			if(a[index]<a[j]){
				index=j;
			}
		}
		if(index!=i){
			temp=a[i];
			a[i]=a[index];
			a[index]=temp;
		}
	}
	for(int k=0;k<5;k++){
		printf("%d\t",a[k]);
	}
    printf("\n");
	return 0;
}

运行结果:

输入字符串排序

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{   char str[100]={0};
	scanf("%s",str);
	puts(str);
	int temp;
	int index;
	for(int i=0;i<strlen(str)-1;i++){
		index=i;
		for(int j=i+1;j<strlen(str);j++){
			if(str[index]>str[j]){
				index=j;
			}
		}
		if(index!=i){
			temp=str[i];
			str[i]=str[index];
			str[index]=temp;
		}
	}

	puts(str);
	return 0;
}

运行结果:

四则运算函数封装

#include <stdio.h>
int jia(int a,int b){
	int data=a+b;
	printf("%d+%d=%d\n",a,b,a+b);
	return data;
}
int jian(int a,int b){
	int data=a-b;
	printf("%d-%d=%d\n",a,b,a-b);
	return data;
}
int cheng(int a,int b){
	int data=a*b;
	printf("%dx%d=%d\n",a,b,a*b);
	return data;
}
int chu(int a,int b){
	int data=a/b;
	printf("%d/%d=%d\n",a,b,a/b);
	return data;
}
int main(int argc, const char *argv[])
{
	int a,b;
	char c;
	scanf("%d%c%d",&a,&c,&b);
	if('+'==c){
		jia(a,b);
	}else if('-'==c){
		jian(a,b);
	}else if('*'==c){
		cheng(a,b);
	}else if('/'==c){
		chu(a,b);
	}

	return 0;
}

封装杨辉三角

#include <stdio.h>
void sanjiao(int num){
	int arr1[100][100]={0};

	for(int i=1;i<num;i++){
		arr1[0][0]=1;
		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<num;i++){
		for(int j=0;j<=i;j++){ //必须是<=i因为要包括10
			printf("%d\t",arr1[i][j]);
		}
		printf("\n");
	}
}

int main(int argc, const char *argv[])
{
	int data;
	scanf("%d",&data);
	sanjiao(data);
	return 0;
}

封装strlen

#include <stdio.h>
void length(char str[]){

	int num=0;
	for(int i=0;'\0'!=str[i];i++){
		num++;
	}
	printf("length=%d\n",num);
	return;
}

int main(int argc, const char *argv[])
{
	char str[100]={0};
	scanf("%s",str);
	length(str);
	return 0;
}

运行结果:

封装strcpy

#include <stdio.h>
void strcopy(char str2[],char str1[]){
	for(int i=0;'\0'!=str1[i];i++){
		str2[i]=str1[i];
	}
	printf("%s\n",str2);
} 

int main(int argc, const char *argv[])
{
	char str1[100]="hello ";
	char str2[100]="12345 yangruixue!";
	strcopy(str2,str1); //str1 复制给 str2
	return 0;
}

运行结果:

封装strncpy

#include <stdio.h>
void strcopy(char str2[],char str1[],int n){
	for(int i=0;'\0'!=str1[i];i++){
		if(i==n){
			break;
		}
		str2[i]=str1[i];
	}
	printf("%s\n",str2);
} 

int main(int argc, const char *argv[])
{
	char str1[100]="hello ";
	char str2[100]="12345 yangruixue!";
	strcopy(str2,str1,3); //str1 复制给 str2
	return 0;
}

运行结果:

封装strcmp

#include <stdio.h>
#include <string.h>
void strcompare(char str1[],char str2[]){
	int res=0;
	for(int i=0;i<strlen(str2);i++){
		res=str1[i]-str2[i];
		if(res>0||res<0){
			break;
		}
	}
	printf("%d\n",res);
} 

int main(int argc, const char *argv[])
{
	char str1[10]="23459";
	char str2[10]="2345987";
	strcompare(str1,str2);
	return 0;
}

运行结果:

封装strcat

#include <stdio.h>
#include <string.h>
void strjoin(char str1[],char str2[]){
	int j=0;
	int i=0;
	int	length=(strlen(str1)+strlen(str2));
	for(i=strlen(str1);i<length;i++){
		str1[i]=str2[j];
		j++;
		
	}
	str1[i]='\0';
	printf("%s\n",str1);
}

int main(int argc, const char *argv[])
{
	char str1[10]="hello ";
	char str2[10]="world";
	strjoin(str1,str2);
	return 0;
}

运行结果:

封装memset

#include <stdio.h>
#include <string.h>
void strset(char str1[],char a,int num){
	int i=0;
	for(i=0;i<num;i++){
		str1[i]=a;
	}
	printf("%s\n",str1);
}
int main(int argc, const char *argv[])
{
	char str1[10]="12345678";
	strset(str1,'a',4);
	return 0;
}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值