2021-07-20

C语言数据结构

main函数

#include<stdio.h>
#include"hahahaha.h"
int main()
{
	int loop;
	int arr[]={3,2,5,8,4,7,6,9};
	//寻找和为定值的两个数字
	//find_sum_array(arr,sizeof(arr)/sizeof(arr[0]));


	//将数组输出k圈,第三个参数1和2是两种不同的输出方法
	//print_array(arr,sizeof(arr)/sizeof(arr[0]),2);


	//求最大值最小值
	//find_max_min(arr,sizeof(arr)/sizeof(arr[0]));


	//数组中含有重复值,求出最大值以及最大值的个数
	//find_max_num(arr,sizeof(arr)/sizeof(arr[0]));



	//求出数组中的最大值和次大值
	//find_max_nextmax(arr,sizeof(arr)/sizeof(arr[0]));

	

	//字符串的相关操作
	//char_string();


	//将一串字符串中小写字母变为大写字母
	//a_A_invert();

	//将M进制数字字符串变化为一个数字
	//str_num();


	//计算两个字符串之和(直接进行字符串相加,不要先转化为数字在进行相加)
	//str1_add_str2();


	//计算输入一个数的二进制中1的个数
	//find_num_bin_1();



	//间断点
	scanf("%d",&loop);
}

h文件

#ifndef _HAHAHAHA_H_
#define _HAHAHAHA_H_
#include<stdio.h>
#include<stdlib.h>
//查找数组中元素和为定值的两个元素,参数为数组长度,查找的和
int find_sum_array(int arr[],int length)
{
	int num,loop1,loop2,flag;
	flag=1;
	printf("请输入您的数字:\n");
	scanf("%d",&num);
	for(loop1=0;loop1!=length&&flag;loop1=loop1+1)
	{
		for(loop2=loop1+1;loop2!=length&&flag;loop2=loop2+1)
		{
			if(arr[loop1]+arr[loop2]==num)
			{
				printf("索引为%d的数%d   ,%d的数%d      之和为%d\n",loop1,arr[loop1],loop2,arr[loop2],num);
				//仅仅输出一组值
				flag=0;
			}
		}
	}
	if(flag==1)
	{
		printf("没有找到和为%d的两个数",num);
	}
	return 0;
}

void print_array(int arr[],int length,int mod)
{
	int k;
	printf("请输入您的输出圈数");
	scanf("%d",&k);
	if(mod==1)
	{
		for (int loop1=0;loop1!=k;loop1=loop1+1)
		{
			for(int loop2=0;loop2!=length;loop2=loop2+1)
			{
				printf("%d ",arr[loop2]);
			}
			printf("\n");
		}
	}
	if(mod==2)
	{
		for(int loop3=0;loop3!=k*length;loop3=loop3+1)
		{
			printf("%d",arr[loop3%length]);
			if((loop3+1)%length==0)
			{
				printf("\n");
			}
		}
	}

}



//求最大值最小值
void find_max_min(int arr[],int length)
{
	int index_max,index_min;
	index_max=index_min=0;
	for(int loop=0;loop!=length;loop=loop+1)
	{
		if(arr[loop]>arr[index_max])
		{
			index_max=loop;
		}
		if(arr[loop]<arr[index_min])
		{
			index_min=loop;
		}
	}
	printf("最大值,最小值分别为%d,%d",arr[index_max],arr[index_min]);
}


//数组中含有重复值,求出最大值以及最大值的个数
void find_max_num(int arr[],int length)
{
	int index_max=0;
	int num_max=0;
	for(int loop=0;loop!=length;loop=loop+1)
	{
		
		if(arr[loop]==arr[index_max])
		{
			num_max=num_max+1;
		}
		else if(arr[loop]>arr[index_max])
		{
			index_max=loop;
			num_max=1;
		}

	}
	printf("最大值为%d,最大值出现了%d次",arr[index_max],num_max);
}




//求出数组中的最大值和次大值
void find_max_nextmax(int arr[],int length)//假设数组中前两个元素值不同
{
	int max,max_next;
	max=0,max_next=1;
	if(arr[0]<arr[1])
	{
		max=1;
		max_next=0;
	}
	for(int loop=2;loop<length;loop=loop+1)
	{
		if(arr[loop]>arr[max])
		{
			max_next=max;
			max=loop;
		}
		else if(arr[loop]>arr[max_next])
		{
			max_next=loop;
		}
	}
	printf("最大值是%d,次大值是%d\n",arr[max],arr[max_next]);

 }


//字符串的相关操作
void char_string()
{
	//char str[8]="abcdefg";//八个字符只有7个字母,因为字符串默认结尾有一个\0,占用一个字节
	//printf("%s",str);
	char str1[8];
	gets(str1);
	printf("%s\n\n",str1);
	puts(str1);
}




//将一串字符串中小写字母变为大写字母
#define N 88
void a_A_invert()
{
	char str1[N];
	printf("请输入您的字符串:\n");
	gets(str1);
	for(int loop=0;str1[loop];loop++)
	{
		if(str1[loop]>='a'&&str1[loop]<='z')
		{
			str1[loop]=str1[loop]-32;
		}
	}
	printf("输出字符大小写转换后的字符串:\n");
	puts(str1);
}

//将M进制数字字符串变化为一个数字   本程序没有检测这个M进制数据的合理性
#define M 10     //M是指的进制数字
void str_num()
{
	char str[N];
	printf("请输入您的数字字符串:\n");
	gets(str);
	int num=0;
	for(int loop=0;str[loop];loop++)
	{
		num=num*M+str[loop]-'0';
	}
	printf("这个%d进制数字的值是%d",M,num);
}

//计算两个字符串之和(直接进行字符串相加,不要先转化为数字在进行相加)     这段也写的太恶心了
#define length1 20
#define length2 30
void str1_add_str2()
{
	char str1[length1];
	char str2[length2];
	char str3[666];
	printf("请分别输入您的字符串1和字符串2\n");
	gets(str1);
	gets(str2);

	//分别计算两个字符串的长度
	int len1,len2;
	len1=len2=0;
	for(int loop=0;str1[loop];loop++)
	{
		len1++;
	}
	for(int loop=0;str2[loop];loop++)
	{
		len2++;
	}
	int max_length=len2;
	if(len1>len2)
	{
		max_length=len1;
	}
	int end_=max_length;
	int flag=0;
	int num1,num2;
	while(len1>=0||len2>=0)
	{
		if(str1[len1-1]-'0'&&len1>0)
		{
			num1=str1[len1-1]-'0';
		}
		else
		{
			num1=0;
		}
		if(str2[len2-1]-'0'&&len2>0)
		{
			num2=str2[len2-1]-'0';
		}
		else
		{
			num2=0;
		}
		str3[max_length]=(num1+num2)%10+flag+'0';
		flag=(num1+num2)/10;
		len1--,len2--,max_length--;

	}
	str3[++end_]='\0';
	printf("输出相加后的字符串%s\n",str3);
	printf("将这个字符串转化为数字\n");
	int sum_num=0;
	for(int loop=0;str3[loop];loop++)
	{
		sum_num=sum_num*10+(str3[loop]-'0');
	}
	printf("\n%d\n",sum_num);

}


//计算输入一个数的二进制中1的个数
#define N 6666
void find_num_bin_1()
{
	int num;
	printf("请输入您的数字\n");
	scanf("%d",&num);
	//将这个数字转化为二进制
	char str[N];
	int loop=0;
	int cnt=0;
	while(num)
	{
		if(num%2)
		{
			cnt++;
		}
		str[loop++]=num%2+'0';
		num=num/2;
	}
	str[loop]='\0';


	printf("没有进行字符串逆序的字符串是%s\n",str);
	//进制字符串的逆序
	int length=0,invert;
	for (int loop=0;str[loop];loop++)
	{
		length++;
	}
	for(int loop=0;loop<length/2;loop++)
	{
		invert=str[loop];
		str[loop]=str[length-loop-1];
		str[length-loop-1]=invert;
	}
	printf("这个数字转化为二进制是%s\n",str);
	printf("其中1出现的次数是%d次\n",cnt);

}












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值