首页 > 其他分享 >C语言题目要求实现方法总结(1-10)

C语言题目要求实现方法总结(1-10)

时间:2024-05-29 20:32:58浏览次数:27  
标签:10 题目 int max C语言 printf return main

目录

一、互换A, B的值

1. 1使用中间变量

1.2 使用异或^(不允许创建中间变量)

1.3 使用函数(指针传参)

二、 按降序输出A, B的值

2.1 直接实现

2.2 使用指针

三、 找出最大值

3.1 遍历数组

先输入再找(常规)

边输入边找(改进)

其实把数组优化掉也不是不可以(偷懒法,不够通用,第一个常规法最通用)

四、进行排序

4.1 暴力循环法

4.2 冒泡排序

五、逆序存储

六、斐波那契数列

递归实现(最简):

函数实现

七、公约数和公倍数:

7.1 最大公约数

函数实现

递归实现(进阶)

7.2 最小公倍数

八、闰年

九、switch语句

十、求素数


一、互换A, B的值

1. 1使用中间变量

int main() {
	int A, B;
	scanf("%d %d", &A, &B);
	int tmp = A;
	A = B;
	B = tmp;
	printf("%d %d", A, B);
	return 0;
}

1.2 使用异或^(不允许创建中间变量)

int main()
{
	int a,b;
	scanf("%d %d", &a, &b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("%d %d", a, b);
	retu

1.3 使用函数(指针传参)

int Swap(int* m, int* n)
{
	int tmp;
	tmp = *n;
	*n = *m;
	*m = tmp;
	return 0;
}

int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	Swap(a, b);
	printf("%d %d\n", a, b);
	return 0;
}

二、 按降序输出A, B的值

2.1 直接实现

int main() {
	int A, B;
	scanf("%d %d", &A, &B);
	if (A > B)
		printf("%d %d", A, B);
	if (A < B)
		printf("%d %d", B, A);
	return 0;
}

2.2 使用指针

int main() {
	int A, B,*p,*q;
	scanf("%d %d", &A, &B);
	p = &A;
	q = &B;
	if(*p>*q)
		printf("%d %d", *p, *q);
	if (*p < *q)
		printf("%d %d", *q, *p);
	return 0;
}

三、 找出最大值

背景:依次输入10个数,找出其中最大的数

3.1 遍历数组

先输入再找(常规)

int main() {
	int a[10] = { 0 };
	for (int i = 0; i < 10; i++)//遍历数组输入10个数
	{
		scanf("%d", &a[i]);
	}                        
	int max = 0;                //遍历数组找出最大值
	for (int i = 0; i < 10; i++)
	{   
		if (max < a[i])
			max = a[i];
	}
	printf("%d", max);
    return 0;
}

边输入边找(改进)

int main() {
	int a[10] = { 0 }, max = 0;;
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
		if (max < a[i])
			max = a[i];
	}
	printf("%d", max);
    return 0;
}

其实把数组优化掉也不是不可以(偷懒法,不够通用,第一个常规法最通用)

int main() {
	int n,max = 0;;
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &n);
		if (max < n)
			max = n;
	}
	printf("%d", max);
    return 0;
}

四、进行排序

背景:依次输入10个数,按降序输出

因为需要存储这10个数,所以这次一定要用数组了(不然创建10个变量不够优雅)

4.1 暴力循环法

不使用排序方法排序数组,强行按降序输出,(循环较为繁琐)

int main() {
	int a[10] = { 0 };
	int max = 0;
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);      //接收10个数
		if (max < a[i])
			max = a[i];          //得到最大值,方便后续循环建立
	}
	for (int j = max; j >= 0; j--)//从最大值开始向下遍历
	{
		for (int i = 0; i < 10; i++)//与数组内的数一一比较
		{
			if (j == a[i])        //相等则输出
			{
				printf("%d ", j);
				break;            //输出后记得跳出循环,不然可能重复输出
			}
		}
	}
	return 0;
}

4.2 冒泡排序

        冒泡排序是一种简单直观的排序算法,它重复地走访要排序的元素,依次比较相邻的两个元素,如果它们的顺序不正确就交换它们。通过多次遍历数组并比较相邻元素的大小,最大(或最小)的元素会逐渐 “浮” 到最后(或最前)的位置,最终实现整个数组的排序。

具体步骤如下:

  1. 从第一个元素开始,依次比较相邻的两个元素,如果顺序不正确就交换它们;
  2. 继续比较下一对相邻元素,执行同样的操作;
  3. 重复以上步骤,直到没有任何一对相邻元素需要交换位置。

        冒泡排序的时间复杂度为O(n^2),其中n表示待排序元素的个数。虽然冒泡排序效率较低,但由于实现简单,适用于元素数量较少的情况。

//冒泡排序
void sort(int a[10]) {
	for (int i = 0; i < 10; i++) {    //遍历数组10次,每次移动一项
		for (int j = 0; j < 9; j++)   //移动一项,每次移动一位,最多共需移动9次
			if (a[i] < a[i + 1])      //满足条件则交换两项
			{
				int tmp = a[i];
				a[i + 1] = a[i];
				a[i + 1] = tmp;
			}
	}
}

int main() {
	int a[10];
	for (int i = 0; i < 10; i++)    //通过循环接收数组
		scanf("%d", &a[i]);
	sort(a);                        //调用函数进行冒泡排序
	for (int i = 0; i < 10; i++)
		printf("%d\n", a[i]);       //打印结果
	return 0;
}

五、逆序存储

背景:用数组接收10个整数,逆序存储,然后输出

int main() {
	int a[10];
	for (int i = 0; i < 10; i++)	//接收数组
		scanf("%d", &a[i]);
	for (int i = 0; i < 5; i++)		//逆序存储
	{
		int tmp = a[i];				//对称交换5次,通过下标确定交换对象
		a[i] = a[9 - i];
		a[9 - i] = tmp;
	}
	for (int i = 0; i < 10; i++)	//输出结果
		printf("%d", a[i]);
	return 0;
}

六、斐波那契数列

递归实现(最简):

递归

int fib(int n) {
	if (n < 3)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}

三目表达式

int fib(int n) {
	return n < 3 ? 1 : fib(n - 1) + fib(n - 2);
}

函数实现

//斐波那契数列循环实现
int main() {
	int f1 = 1, f2 = 1, f3, ;
	printf("%d\n%d\n", f1,f2);
	for (int i = 1; i <= 30; i++)
	{
		f3 = f1 + f2;
		printf("%d\n", f3);
		f1 = f2;
		f2 = f3;
	}
	return 0;
}

举例是输出1-30项,稍加修改也可以得到某一项

//斐波那契数列循环实现
int main() {
	int f1 = 1, f2 = 1, f3, n;
	scanf("%d", &n);            //输入想要得到的项
	for (int i = 1; i <= n; i++)
	{
		f3 = f1 + f2;
		f1 = f2;
		f2 = f3;
	}
	printf("%d\n", f2);
	return 0;
}

七、公约数和公倍数:

7.1 最大公约数

函数实现

int gcd(int a, int b){
	while (b)
	{
		int t = b;
		b = a % b;
		a = t;
	}
	return a;
}

递归实现(进阶)

        三目表达式(最简)

int gcd(int a, int b) {
	return b > 0 ? gcd(b, a % b) : a;
}

7.2 最小公倍数

需调用最大公约数

int lcm(int a, int b) {
	return a * b / gcd(a, b);
}

输出最大公约数和最小公倍数的实例

//输出最大公约数和最小公倍数的实例
int gcd(int a, int b) {
	return b > 0 ? gcd(b, a % b) : a;
}
int lcm(int a, int b) {
	return a * b / gcd(a, b);
}

int main() {
	int m, n;
	scanf("%d %d", &m, &n);
	int a =gcd(m, n);
	int b = lcm(m, n);
	printf("gcd=%d,lcm=%d",a,b);
	return 0;
}

八、闰年

//输出1900-2000年中是闰年的年份
int main() {
	for (int i = 1900; i <= 2000; i++)
		if (i % 4 == 0 && i % 100 != 0 || i % 100 == 0 && i % 400 == 0)
			printf("%d ", i);
	return 0;
}

九、switch语句

若题目要求使用switch语句,也要牢记switch语句的用法

switch(表达式)
{
case 常量1:语句1
case 常量2:语句2
default:语句n   
    break;
}
int bonus(int n) {
	if (n > 1000)                //写一个奖金函数,判断奖金属于哪一档
		return 1;
	else if (n > 800 && n < 1000)
		return 2;
	else if (n > 600 && n < 800)
		return 3;
	else
		return 4;
}

int main() {            
	int n;
	scanf("%d", &n);
	switch (bonus(n))            //通过switch语句完成
	{
	case 1:
		printf("perfect");
		break;                   //使用Switch语句不要忘记加break;
	case 2:
		printf("well done");
		break;
	case 3:
		printf("good");
		break;
	case 4:
		printf("keep trying");
		break;
	}
	return 0;
}

十、求素数

求100-200之间的素数

#include<math.h>
#include<stdio.h>
int main()
{
	int i;
	int count = 0;
	for (i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
	{
		int j; //定义一个变量j用来表示因子
		int flag = 1;//此时定义一个flag标记,表示假设i是素数
		for (j = 2; j <= sqrt(i); j++)
        //假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
		{
			if (i % j == 0)
			{
				flag = 0; 
					break;
			}
		}
		//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
		if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
		{
			count++;
			printf("%d ", i);//打印素数
		}
	}
	printf("\ncount = %d\n", count);//所有素数求出来之后,打印素数的个数
	return 0;
}

标签:10,题目,int,max,C语言,printf,return,main
From: https://blog.csdn.net/qq_42995393/article/details/139281603

相关文章