c语言初阶作业01

请注意任何代码的实现方式都不止一种,所以这里的题目的答案只是提供一种思路,也就是编程思维,希望通过这些题目能帮助到您!

第一题(3个数排列输出)

要求用程序实现输入三个整数,并且将这三个整数从大到小输出

例:输入:1 3 2

       输出:3 2 1

答案参考

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//交换函数
void Swap(int* x,int* y)
{
	int num = *x;
	*x = *y;
	*y = num;
}

int main()
{
	int a = 0, b = 0, c = 0;
	scanf("%d %d %d",&a,&b,&c);
	//调整a和b的值
	if (a < b)
	{
		Swap(&a,&b);//将a和b的值交换
	}
	if (a < c)
	{
		Swap(&a,&c);
	}
	if (b < c)
	{
		Swap(&b,&c);
	}
	printf("%d %d %d", a, b, c);
	return 0;
}

第二题(100内的3个倍数)

写一个代码打印1-100之间的所有3的倍数的数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int count = 0;
	for (int i = 0; i <=100; i+=3)
	{
		if (i % 3 == 0)
		{
			count++;
			printf("%d ",i);
		}
	}
	printf("\n%d",count);

	return 0;
}

第三题(最大公约数)

假设提供了两个数,用程序求这两个数的最大公约数,并输出

例:24  18

最大公约数为:6

代码实现:

方法一(暴力求解):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//这种方法是暴力求解,最直接的方式
int main()
{
	int a = 0, b = 0;
	static int max = 0;
	scanf("%d %d",&a,&b);
	for (int i = 1; i <= a; i++)
	{
		if (a % i == 0)
		{
			if (b % i == 0)
			{
				if (max < i)
				{
					max = i;
				}
			}
		}
	}
	printf("%d",max);

	return 0;
}

方法二(暴力求解)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0, b = 0;
	scanf("%d %d",&a,&b);
	int i = 0;
	for (i=(a < b ? a : b);i>0; i--)//从两个数中较小的数开始,递减,找出两个数的公约数
	{
		if ((a % i == 0) && (b % i == 0))
		{
			printf("%d", i);
			break;
		}
	}
	return 0;
}

注意上面两种方法都是暴力求解,需要运算多次(不够高效)

方法三(辗转相除法):这个是数学的概念,感兴趣可以去百度一下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0, b = 0;
	int c = 0;
	scanf("%d %d",&a,&b);
	//求最大公约数
	while (c = a % b)
	{
		a = b;
		b = c;
	}
	printf("%d\n",b);

	return 0;
}

第四题(判断闰年)

写一个函数判断一年是不是闰年,打印1000~2000年之间的闰年

闰年判断的规则:
1、能被4整除,并且不能被100整除是闰年
2、能被400整除是闰年

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//是闰年返回1
//不是闰年放回0
int is_leap_year(int y)
{
	if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
		return 1;
	else
		return 0;
}
int main()
{
	int cout = 0;
	int year = 0;
	for (year = 1000; year <= 2000; year++)
	{
		//判断year是否为闰年
		if (is_leap_year(year))
		{
			printf("%d ", year);
			cout++;
		}
	}
	printf("\n%d", cout);
	return 0;
}

第五题(判断素数)

打印100-200之间的素数,素数是只能被1和它本身整除的数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

//是素数返回1
//不是素数返回0
int is_prime(int n)
{
	int j = 0;
	for (j = 2; j <= sqrt(n); j++)
	{
		if (n%j==0)
			return 0;
	}
	return 1;

}
int main()
{
	int i = 0;
	int cout = 0;
	for (i = 101; i <= 200; i += 2)
	{
		if (is_prime(i))
		{
			cout++;
			printf("%d ", i);
		}
	}
	printf("素数的个数为:%d\n", cout);

	return 0;
}

第六题(是否含数字9)

编写程序数一下1到100的所有整数中出现多少个数字9

1~100的整数中包含9的数字有:

9 19 29 39 49 59 69 79 89 99

90 91 92 93 94 95 96 97 98 99

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int cout = 0;
	for (int i =1;i<=100;i++)
	{
		//判断个位是不是9
		if (i % 10 == 9)
			cout++;
		//判断十位是不是9
		if (i / 10 == 9)
			cout++;
	}
	printf("%d",cout);
	return 0;
}

第七题(交替加减)

用程序计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100


方法一(判断分母的奇偶性决定加减):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	float sum = 0.0f;
	for (int i = 1; i <= 100; i++)
	{
		if (i % 2 != 0)//i为奇数相加
		{
			sum = sum + 1.0 / i;
		}
		if (i % 2 == 0)//i为偶数相减
		{
			sum = sum - 1.0 / i;
		}
	}
	printf("%f",sum);
	return 0;
}

方法二(用标志位实现加减交替)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	float sum = 0.0f;
	int flag = 1;
	for (int i = 1; i <= 100; i++)
	{
		sum = sum + flag * (1.0 / i);
		flag = -flag;
	}
	printf("%f", sum);
	return 0;
}

第八题(十个数求最大值)

用程序求给定的十个整数中的最大值

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	//准备十个数
	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	//找出最大值
	int max = arr[0];
	for (int i = 1; i <= 10; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	printf("%d",max);
	return 0;
}

第九题(输入十个数求其最大值)

要求输出十个整数,求出这十个数之间的最大值并输出

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int arr[10] = {0};
	//输出十个整数
	for (int i = 0; i < 10; i++)
	{
		scanf("%d",&arr[i]);
	}
	//找最大值
	int max = arr[0];
	for (int j = 0; j < 10; j++)
	{
		if (arr[j] > max)
			max = arr[j];
	}
	printf("%d\n",max);
	return 0;
}

第十题(传址调用)

实现一个函数来交换两个整数的内容

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void Swap(int* x, int* y)
{
	int m = *x;
	*x = *y;
	*y = m;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	printf("交换前,a = %d,b = %d",a,b);
	Swap(&a,&b);
	printf("交换后, a = %d,b =%d",a,b);
	return 0;
}

第十一题(九九乘法口诀表)

要求在屏幕上输出9*9乘法口诀表

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <=i; j++)
		{
			printf("%d x %d = %2d   ",j,i,i*j);//%2d两位整数右对齐  %-2d两位左对齐  
		}
		printf("\n");
	}
	return 0;
}

第十二题(九九乘法口诀表的变形)

在屏幕上输出乘法口诀表,口诀表的行数和列数自己决定

如输入9就打印9*9乘法口诀表,输入12就打印12*12乘法口诀表

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int h = 0;
	//int l = 0;
	printf("请输入要打印乘法口诀表的行数和列数->");
	scanf("%d", &h);

	for (int i = 1; i <= h; i++)
	{
		for (int j = 1; j <=i; j++)
		{
			printf("%2dx%2d = %2d ",j,i,i*j);//%2d两位整数右对齐  %-2d两位左对齐  
		}
		printf("\n");
	}
	return 0;
}

第十三题(二分查找)

用程序实现在一个有序数组中查找具体的某个数字。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;//最左的元素的下标
	int right = sz - 1;//最右的元素的下标

	while (left<=right)
	{
		int mid = (left + right) / 2;//二分
		//int mid = left +(right -left)/2; 数学模型自行理解
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标是%d\n",mid);
			break;
		}
	}
	if (left > right)
		printf("找不到了!");

	return 0;
}

第十四题(猜数字游戏)

猜数字游戏:让电脑产生一个随机数(1-100)我们来猜这个数字(输出),猜的过程要反馈,猜大了或者猜小了,直到猜到了就结束

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
	printf("***************************\n");
	printf("********* 1.玩一把 ********\n");
	printf("********* 2.退出   ********\n");
	printf("***************************\n");

}
//time()函数,返回整数型,时间戳
//0-32767
void game()
{
	int num = 0;
	//生成随机数
	//0-99 (%取模100得到的余数)
	int ret = rand()%100 + 1;
	//rand()生成随机数的函数,返回的是整型,使用rand函数前要用srand设置生成起点(在mian函数里只需要设置一篇)
	//printf("%d\n",ret);
	//2.猜数字
	while (1)
	{
		printf("请猜数字: >");
		scanf("%d", &num);
		if (num < ret)
		{
			printf("猜小了\n");
		}
		else if (num > ret)
		{

			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}

}

//空指针
//int *p = NULL;//相当于初始化了个空指针,就是赋给指针变量p一个地址编号为0的指针
//int a =0;
int main()
{
	srand((unsigned int)time(NULL));//给time传入一个NULL就是暂时不需要time的参数

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值