C语言练习题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay-juice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值