C语言的代码集合(2)

1,二分查找法

#include<stdio.h>
int main()
{  //二分查找法,每次找的是中间的位置
   //输入数据
	int arr[100] = { 0 };
	int count = 0;
	printf("input arr:");
	for (int i = 0; i < 100; i++)
	{
		scanf_s("%d", &arr[i]);
		if (arr[i] == -1)
			break;
		count++;
	}
	//对数据进行排序
	for (int i = 0; i < count; i++)
	{
		for (int j = 0; j < count - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = 0;
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	//数据的输出
	printf("\nafter arrange in order:");
	for (int i = 0; i < count; i++)
	{
		printf("%d\t", arr[i]);
	}
	int rignt = count - 1;
	int left = 0;
	//二分查找法-1
	int fpos = 0;
	printf("\ninput fpos:");
	scanf_s("%d", &fpos);
	while (left <= rignt)
	{
		int mid = (left + rignt) / 2;
		if (fpos == mid)
		{
			printf("find pos:%d", arr[fpos]);
			break;
		}
		else if (fpos < mid)
		{
			rignt = mid - 1;
		}
		else
		{
			left = mid + 1;
		}
	}
	//二分查找法-2
	int Posdata = 0;
	printf("\ninput Posdata:");
	scanf_s("%d", &Posdata);
	int pos = -1;
	while (left <= rignt)
	{
		int mid = (left + rignt) / 2;
		if (arr[mid] == Posdata)
		{
			pos = mid;
			break;
		}
		else if (arr[mid] < Posdata)
		{
			left = mid + 1;

		}
		else
		{
			rignt = mid - 1;
		}

	}
	printf("pos:%d", pos);
	return 0;
}

2,归并算法

#include<stdio.h>

int main()
{
	int arr1[5] = {0,2,4,6,8};
	int arr2[6] = {1,3,5,7,9,11};
	int len1 = 5;
	int len2 = 6;
	int i = 0;
	int j = 0;
	int arry [11] = {0};
	int count = 0;
	while (i < len1 && j < len2)
	{
		if (arr1[i]<arr2[j])
		{
			arry[count++] = arr1[i++];
		}
		else
		{
			arry[count++] = arr2[j++];
		}
	}
	while (i < len1)
	{
		arry[count++] = arr1[i++];
	}
	while (j < len2)
	{
		arry[count++] = arr2[j++];
	}
	for (int k = 0; k < count; k++)
	{
		printf("%d\t", arry[k]);
	}
	return 0;
}

3,字符串赋值

#include<stdio.h>

int main()
{
	char str1 [20] ="I love you";
	char str2 [20] = "I hate you!";
	int i = 0;
	char str3[20] ;
	while (str1[i]!='\0')
	{
		str2 [i] = str1 [i];
		i++;
	}
	str2[i] = '\0';//一定要处理
	printf("%s\n",str2);
	printf("str2的数组长度:%zd",sizeof(str2)/sizeof(char));
	puts("\n请输入str3:");
	gets_s(str3,20);
	puts(str3);
	return 0;
}

4,二维数组制表,制作地图

#include<stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main()
{
	char name[3][10] = {"雪豹丁真","拐零","孙笑川"};
	int score[3][3] = 
	{
		60,62,50,
	    98,95,99,
		89,84,85
	};
	printf("姓名\t\t语文\t\t数学\t\t英语\t\t总分\n");
	int rows = 3;
	int cols = 3;
	int sumrows[3] = {0};
	
	for (int i = 0;i<rows;i++)
	{
		printf("%-16s",name[i]);
		for (int j=0;j<cols;j++)
		{
			printf("%d\t\t",score[i][j]);
			sumrows[i] += score[i][j];
			//sumrows[0] += score[0][1]; 
			//sumrows[0] += score[0][2];
			//sumrows[0] += score[0][3];
		}
		printf("%d\n",sumrows[i]);
		
	}
	int map[9][9] =
	{
		1,1,1,1,1,1,1,1,1,
		1,1,1,1,1,1,1,1,1,
		1,1,1,1,1,1,1,1,1,
		1,1,0,0,1,0,0,1,1,
		1,0,0,0,0,0,0,0,1,
		1,1,0,0,0,0,0,1,1,
		1,1,1,0,0,0,1,1,1,
		1,1,1,1,0,1,1,1,1,
		1,1,1,1,1,1,1,1,1,
	};
	for (int i=0;i<9;i++)
	{
		for (int j =0;j<9;j++)
		{
			switch (map[i][j])
			{
			case 1:
				printf(" ");
				break;
			case 0:
				printf("o");
			default:
				break;

			}
		}
		printf("\n");
	}
	return 0;
}

5,一维数组的交集,奇偶,删除重复,等问题

#include<stdio.h>
#include<stdbool.h>

void scan_arr(int arr[], int arrlen);
void print_arr(int arr[], int arrlen);
int scan1_arrPos(int arr[], int arrlen);
int main()
{
	/*给定两个整型数组,要求找出两者共有的元素。--->交集问题*/
	int arr1[20] = { 0 };
	int arr2[20] = { 0 };
	int count1 = 0;
	int count2 = 0;
	printf("intput arr1:");
	for (int i = 0; i < 20; i++)
	{
		scanf_s("%d", &arr1[i]);
		if (arr1[i] == -1)
			break;
		count1++;
	}
	printf(" \nintput arr2:");
	for (int i = 0; i < 20; i++)
	{
		scanf_s("%d", &arr2[i]);
		if (arr2[i] == -1)
			break;
		count2++;
	}
	int j = 0;
	int count = 0;
	int arr3[20] = {0};
	int i = 0;
	for ( i = 0;i<count1;i++)
	{
		for (int j = 0;j<count2;j++)
		{
			if (arr1[i] == arr2[j] )
			{
				arr3[count++] = arr2[j];
				
			}
		
		}
	}
	printf("\narr3:");
	for (int i = 0; i < count; i++)
	{
		printf(" %d",arr3[i]);
	}
	

	/*创建一个长度为10的随机整数数组,调整数组中的值,将数组中所有的偶数放在数组的前部,所有的奇数放在数组的后部。
	int arr4[10] = { 0 };
	int len4 = 10 ;
	scan_arr(arr4, len4);
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			int temp = 0;
			if (arr4[j] % 2 != 0)
			{
				temp = arr4[j];
				arr4[j] = arr4[j + 1];
				arr4[j + 1] = temp;
			}	
		}
		
	}
	print_arr(arr4,len4);
	
	*/
	/*
	int num[100] = { 0 };
	int len = 100;
    int lenth = scan1_arrPos(num, 100);
	printf("befor lenth=%d\n", lenth);
	for (int i = 0; i < lenth-1; i++)
	{
		for (int j = i+1; j < lenth; j++)
		{
			if (num[i] == num[j])
			{
				for (int k = j; k < lenth - 1; k++)
				{
					num[k] = num[k + 1];
				}
				lenth--;
			}
		}
	}
	for (int i = 0; i < lenth - 1; i++)
	{
		for (int j = i + 1; j < lenth; j++)
		{
			if (num[i] == num[j])
			{
				for (int k = j; k <= lenth - 1; k++)
				{
					num[k] = num[k + 1];
				}
				lenth--;
			}
		}
	}
	for (int i = 0; i < lenth - 1; i++)
	{
		for (int j = i + 1; j < lenth; j++)
		{
			if (num[i] == num[j])
			{
				for (int k = j; k <= lenth - 1; k++)
				{
					num[k] = num[k + 1];
				}
				lenth--;
			}
		}
	}
	
	printf("later lenth=%d\n", lenth);

	print_arr(num, lenth); */
    /*
    int num1[100] = { 0 };
    int num2[100] = { 0 };
	int count1 = scan1_arrPos(num1, 100);
	int count2 = scan1_arrPos(num2, 100);
	printf("count1=%d\n",count1);
	printf("count2=%d\n", count2);

	int i = 0;
	int j = 0;
	int count = 0;
	int nums[200] = { 0 };
	while(i<count1&&j<count2)
	{
		if (num1[i] < num2[j])
		{
			nums[count++] = num1[i++];			
		}
		else
		{
			nums[count++] = num2[j++];
		}

	}
	while (i < count1)
	{
		nums[count++] = num1[i++];
	}
	while (j < count2)
	{
		nums[count++] = num1[j++];
	}
	print_arr(nums, count);
	*/
	return 0;
}

void scan_arr(int arr[], int arrlen)
{
	for (int i = 0; i < arrlen; i++)
	{
		scanf_s("%d", &arr[i]);
    }
}
void print_arr(int arr[], int arrlen)
{
	for (int i = 0;i<arrlen;i++)
	{
		printf("%-8d", arr[i]);
	}
}
int scan1_arrPos(int arr[],int arrlen)
{
	int count = 0;
	for (int i = 0; i < arrlen; i++)
	{
		scanf_s("%d", &arr[i]);
		if (arr[i] == -1)
			break;
		count++;
	}
	return count;
}

6,字符串比较,拷贝和冒泡排序

#include<stdio.h>
int compari(char str1[], char str2[]);
void copy_str(char str1[], char str2[]);
int main()
{
	char str1[100];
	gets_s(str1, 100);
	char str2[100];
	gets_s(str2, 100);
	printf("%d",compari(str1, str2));
	char str3[30] = { "I DONT WANT TO LOVE YOU" };
	char str4[30] = { "iooooooo" };
	copy_str(str3,str4);
	printf("\n%s",str4);

	return 0;
}

int compari(char str1[], char str2[])//字符串的比较
{

	int i = 0;
	int j = 0;
	while (str1[i] != '\0' && str2[j] != '\0')
	{
		if (str1[i] == str2[j])                 
		{
			i++;
			j++;
		}
		else
			break;
	}
	if (str1[i] - str2[j] == 0)
		return 0;
	else if (str1[i] - str2[j] > 0)
		return 1;
	else
		return -1;
}	

void copy_str(char str1[], char str2[])
{
	int i = 0;
	while (str1[i] != '\0')
	{
		str2[i] = str1[i];
		i++;
	}
	str2[i] = '\0';
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值