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';
}