1、基础篇
1.1循环
1.1.1二分法有序数组找数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
//创建一个有序数组
int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
int k = 0;
printf("请输入您要找的数字k\n");
scanf("%d", &k);
int len = sizeof(arr) / sizeof(arr[0]);
int right = len - 1;
int left = 0;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if(arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了k,下标为%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到k!\n");
}
return 0;
system("pause");
}
1.1.2 多个字符从两端移动,向中间汇集
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<Windows.h>
int main()
{
//多个字符从两端移动,向中间汇集
char arr1[] = "welcome to jlu !!!";
char arr2[] = "******************";
int left = 0;
int right = strlen(arr1)-1;
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
left++;
right--;
}
return 0;
system("pause");
}
1.1.3模拟用户登录
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<Windows.h>
int main()
{
//模拟用户登录
char password[10] = "123456";
int i = 0;
for (int i = 0; i < 3; i++)
{
char password1[10] = "123456";
printf("please input your password:\n");
scanf("%s", &password1);
if (strcmp(password,password1) == 0)
{
printf("login successfully!\n");
break;
}
else
{
printf("pelase input again!\n");
}
if (i == 2)
{
printf("please wait 10 minutes!\n");
}
}
return 0;
system("pause");
}
1.1.4猜数字游戏
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<time.h>
//打印菜单
void menu()
{
printf("*********************\n");
printf("****** 1、play ******\n");
printf("****** 0、exit ******\n");
printf("*********************\n");
}
//猜数字0-100
void game()
{
int ret = rand() % 100 + 1;//产生0-100的随机数
int guess = 0;
while (1)
{
printf("请输入您要猜的数字:\n");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了!\n");
}
else if (guess < ret)
{
printf("猜小了!\n");
}
else
{
printf("恭喜您猜对啦!\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("请重新选择!\n");
break;
}
} while (input);
return 0;
system("pause");
}
1.1.5最大公因数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Min(int a, int b)
{
int min = 0;
if (a > b)
{
min = b;
}
else
{
min = a;
}
return min;
}
int main()
{
//求最大公因数
int num1 = 0, num2 = 0;
scanf("%d%d", &num1, &num2);
int min = Min(num1, num2);
for (int i = min; i > 0; i--)
{
if (num1%i == 0 && num2%i == 0)
{
printf("%d\n", i);
break;
}
}
return 0;
system("pause");
}
1.1.6找闰年
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//1000-2000的闰年
int main()
{
int count = 0;
int a = 1000;
for (a = 1000; a <= 2000; a++)
{
if ( (a%400==0)||((a%4==0)&&(a%100!=0)) )
{
printf("%d ", a);
count++;
}
}
printf("\ncount=%d\n", count);
return 0;
system("pause");
}
1.2函数调用
1.2.1求素数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int is_prime(int n)
{
int i = 0;
for (i = 2; i < n; i++)
{
if (n%i == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0, count = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
{
printf(" %d ", i);
count++;
}
}
printf("\n %d ", count);
return 0;
system("pause");
}
1.3指针
1.3.1指针入门
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//16 数组大小
printf("%d\n", sizeof(a+0));//4/8 a+0是第一个元素的地址,sizeof(a+0)为地址大小
printf("%d\n", sizeof(*a));//4 *a为数组第一个元素,计算第一个元素的大小
printf("%d\n", sizeof(a[1]));//4 计算第二个元素的大小
printf("%d\n", sizeof(&a));//4/8 数组地址,计算地址大小
printf("%d\n", sizeof(*&a));//16 计算数组大小
//&a--int(*p)[4]=&a;
printf("%d\n", sizeof(&a+1));//4/8 数组后的空间地址大小
printf("%d\n", sizeof(&a[0]));//4/8
printf("%d\n", sizeof(&a[0]+1));//4/8
//字符数组
char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", sizeof(arr));//6 数组大小
printf("%d\n", sizeof(arr + 0));//4/8
printf("%d\n", sizeof(*arr));//1
printf("%d\n", sizeof(arr[1]));//1
printf("%d\n", sizeof(&arr));//4/8
printf("%d\n", sizeof(&arr+1));//4/8 数组后面地址大小
printf("%d\n", sizeof(&arr[0]+1));//4/8 b的地址大小
return 0;
}
1.4字符串函数仿写
1.4.1 strcmp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int my_strcmp(const char*s1, const char*s2)
{
while (*s1==*s2)
{
if (*s1 == '\0')
return 0;
s1++;
s2++;
}
if (*s1 > *s2)
return 1;
else
return -1;
}
int main()
{
char*p1 = "bcef";
char*p2 = "abcdhuisahfh";
printf("%d\n", my_strcmp(p1, p2));//1
return 0;
}
1.4.2 strstr
#include<stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
char* s1 = NULL;
char* s2 = NULL;
char* cp = str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (*s1&&*s2&&(*s1==*s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
return cp;
cp++;
}
return NULL;
}
int main()
{
char ch1[] = "abbbcdef";
char ch2[] = "bbc";
char* ret = my_strstr(ch1, ch2);
printf("%s\n", ret);
return 0;
}