C语言 循环分支语句 练习题

1.计算n的阶乘 

int main()
{
	int n = 0;
    int i=0;
	int sum = 0;
    scanf("%d",&n);
	for (i = 0; i<n; i++)
	{
		sum=sum*i;
		
	}
	printf("%d\n", sum);
	return 0;
}

2.计算1!+2!+...+10!

int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <=10; n++)
	{
		for (ret=1,i = 1; i <= n; i++)
		{
			ret = i * ret;
		}
		sum = ret + sum;
		
	}
	printf("%d\n", sum);
	return 0;
}

3.折半查找

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int key = 7;
	int mid = 0;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (arr[mid] > key)
		{
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
			break;
	}
	if (left <= right)
		printf("找到了,下标是%d\n", mid);
	else
		printf("找不到\n");
}

 优化后:

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 17;
	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	int left = 0;
	int right = sz - 1;
	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			printf("下标是 %d\n", mid);
			break;
		}
		
	}
	if (left > right)
	{
		printf("找不到\n");
	}
	return 0;
}

4.多个字符从两端移动,向中间汇聚

int main() {
	char arr1[] = "welcome to bit!!!";
	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);
		system("cls");
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}

 5.猜数字游戏

#include <time.h>
void game()
{
	//1.生成数字
	int guess = 0;
	int ret = 0;
	ret = rand()%100+1;
	//2.猜数字
	
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了!\n");
			break;
		}
	}

}

void menu()
{
	printf("*******************\n");
	printf("**1.play   0.exit**\n");
	printf("*******************\n");
}

int main()
{
	srand((unsigned)time(NULL));
	int input = 0;
	do {
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入有误,请重新输入\n");
			break;
		}	
	} while (input);
	return 0;
}

6.模拟用户登录场景,只能试错三次

int main() {
	int i = 0;
	char password[20] = { 0 };
	for (i = 0; i < 3; i++) {
		printf("请输入密码:");
		scanf("%s", password);
		if (strcmp(password, "123456")==0)
		{
			printf("登陆成功\n");
			break;
		}
		else
			printf("密码错误\n");
	}
	if (i == 3)
	{
		printf("三次输入错误,退出程序\n");
	}
	return 0;
}

7.给定两个整形变量的值,将两个值的内容进行交换

int main() {
	int a = 1, b = 3;
	int c;
	c = a;
	a = b;
	b = c;
	printf("a=%d b=%d\n", a, b);
	return 0;
}

 8.不允许创建临时变量,交换两个数的内容(附加题)

int main() {
	int a = 5, b = 12;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d b=%d", a, b);
	return 0;
}

 9.求10 个整数中最大值。

int main() {
	int arr[] = { 1,2,4,34,5,64,6,211,87,9 };
	int max = 0;
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		if (arr[i] > max) {
			max = arr[i];
		}
	}
	if (i == 10)
		printf("max= %d\n", max);
	return 0;
}

10.将三个数按从大到小输出。

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d%d%d", &a, &b, &c);//2 1 3
	//算法实现
	//a中放最大值
	//b次之
	//c中放最小值
	if(a<b)
	{
		int tmp = a;
		a = b;
		b = tmp;
	}
	if(a<c)
	{
		int tmp = a;
		a = c;
		c = tmp;
	}
	if(b<c)
	{
		int tmp = b;
		b = c;
		c = tmp;
	}

	printf("%d %d %d\n", a, b, c);
	return 0;
}

11.求两个数的最大公约数

int main()
{
	int m = 0;
	int n = 0;
	int r = 0;
	scanf("%d%d", &m ,&n);
	while(r=m%n)
	{
		//r = m%n;
		m = n;
		n = r;
	}
	printf("%d\n", n);
	return 0;
}

12.判断year是否为闰年

int main()
{
	int year = 0;	
	int count = 0;
	for(year=1000; year<=2000; year++)
	{
		//判断year是否为闰年
		//1. 能被4整除并且不能被100整除是闰年
		//2. 能被400整除是闰年
		//if(year%4==0 && year%100!=0)
		//{
		//	printf("%d ", year);
		//	count++;
		//}
		//else if(year%400==0)
		//{
		//	printf("%d ", year);
		//	count++;
		//}
		if(((year%4==0)&&(year%100!=0))||(year%400==0))
		{
			printf("%d ", year);
			count++;
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

13.100-200内的素数

int main()
{
	int i = 0;
	int count = 0;
	for(i=100; i<=200; i++)
	{
		//判读i是否为素数
		//素数判断的规则
		//1. 试除法
		//产生2->i-1
		int j = 0;
		for(j=2; j<i; j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j == i)
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

14.sqrt判断素数

int main()
{
	int i = 0;
	int count = 0;
	//sqrt - 开平方的数学库函数
	for(i=100; i<=200; i++)
	{
		//判读i是否为素数
		//素数判断的规则
		//1. 试除法
		//产生2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

优化

int main()
{
	int i = 0;
	int count = 0;
	//sqrt - 开平方的数学库函数
	for(i=101; i<=200; i+=2)
	{
		//判读i是否为素数
		//素数判断的规则
		//1. 试除法
		//产生2->i-1
		int j = 0;
		for(j=2; j<=sqrt(i); j++)
		{
			if(i%j == 0)
			{
				break;
			}
		}
		if(j>sqrt(i))
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

 15.计算1/1-1/2+1/3-1/4+...+1/99-1/100

int main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for(i=1; i<=100; i++)
	{
		sum += flag*1.0/i;
		flag = -flag;
	}
	//1/1+1/2+1/3...
	//1+0+0+0.. = 1
	printf("%lf\n", sum);
	return 0;
}

16.99乘法表输出

//在屏幕上输出9*9乘法口诀表
//
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//4*1=4 .....
//....
//9*1=9 ....
//
int main()
{
	int i = 0;
	//确定打印9行
	for(i=1; i<=9; i++)
	{
		//打印一行
		int j = 1;
		for(j=1; j<=i; j++)
		{
			printf("%d*%d=%-2d ", i, j, i*j);
		}
		printf("\n");
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值