车队考核题目,自己的解题思路及一些思考

本文详细介绍了使用C语言编写的多种基本程序,包括输出Hello,World!,计算加减乘除、判断类型、交换数值、阶乘、质数检查、字符计数、斐波那契数列和水仙花数等,展示了基础编程技巧和算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纯手打,欢迎帮忙检查错误,我是说,如果有的话。

  1. 编写一个程序,输出"Hello, World!"
#include<stdio.h>
int main(void)
{
	printf("helloworld\n");
	return 0;
}

关于这道题的详解我在我的第一篇笔记里有详解,欢迎大家提出建议
2. 编写一个程序,计算并输出两个整数的和。

#include<stdio.h>
int add(int a ,int b)
{
	return a + b;
}
int main(void)
{
	int a, b;
	scanf_s("%d%d",&a,&b);
	int ret = add(a,b);
	printf("%d\n",ret);
	return 0;`
}

tips:scanf中间那两个格式控制字符串千万不要加逗号哦,别问我是怎么知道的

  1. 编写一个程序,计算并输出两个浮点数的乘积。
 `#include<stdio.h>
float mul(float a, float b)
{
	return a * b;
}
int main(void)
{
	float a, b;
	scanf_s("%f%f", &a, &b);
	float ret = mul(a,b);
	printf("%f\n",ret);
	return 0;
	}
  1. 编写一个程序,输入一个整数并判断它是否为偶数。
#include<stdio.h>
int judge(a)
{
	if (a % 2 == 0)
	{
		return 1;
	}
	else if(a % 2 == 1)
	{
		return 0;
	}
	else
	{
	return -1
	 }
}
int main(void)
{
	int a;
	scanf_s("%d",&a);
	int ret = judge(a);
	if (ret = 1)
	{
		printf("偶数\n");
	}
	else if(ret == -1)
	{
		printf("奇数\n");
	}
else
{
printf("错误\n");
}
	return 0;
}

5.编写一个程序,输入一个字符并判断它是否为大写字母。

#include<stdio.h>
int judge(char a)
{
	if (a >= 97)
	{
		return 0;
	}
	else if(a >= 65 && a < 97)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}
int main(void)
{
	char a;
	scanf_s("%c",&a);
	int ret = judge(a);
	if (ret == 1)
	{
		printf("是大写字母\n");
	}
	else if(ret == 0)
	{
		printf("是小写字母\n");
	}
	else
	{
		printf("输入错误\n");
	}
	return 0;
}

6.编写一个程序,输入一个年份并判断它是否为闰年。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int judge(int y)
{
	if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0)
	{
		return 1;
	}
	else if (y % 100 == 0 || y % 4 != 0)
	{
		return 0;
	}
}
int main(void)
{
	int year;
	scanf("%d",&year);
	int ret = judge(year);
	if (ret == 1)
	{
		printf("是闰年\n");
	}
	else if (ret == 0)
	{
		printf("是平年\n");
	}
	return 0;
}

7.编写一个程序,输入两个整数并交换它们的值。

就浅写六种方法吧

1这是用中间量的写法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swith(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}
int main(void)
{
	int a, b;
	scanf("%d%d", &a, &b);
	swith(&a, &b);
	printf("%d %d\n",a,b);
	return 0;
}

接下来是加减乘除法
2

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swith(int* a, int* b)
{
	*a = *a + *b;
	*b = *a - *b;
	*a = *a - *b;
}
int main(void)
{
	int a, b;
	scanf("%d%d", &a, &b);
	swith(&a, &b);
	printf("%d %d\n", a, b);
	return 0;
}

3

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swith(int* a, int* b)
{
	*a = *a - *b;
	*b = *a + *b;
	*a = *b - *a;
}
int main(void)
{
	int a, b;
	scanf("%d%d", &a, &b);
	swith(&a, &b);
	printf("%d %d\n", a, b);
	return 0;
}

4

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swith(int* a, int* b)
{
	*a = *a * *b;
	*b = *a / *b;
	*a = *a / *b;
}
int main(void)
{
	int a, b;
	scanf("%d%d", &a, &b);
	swith(&a, &b);
	printf("%d %d\n", a, b);
	return 0;
}

5
除法有问题,好像不太行
6最硬核的就是用这个按位异或了

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swith(int* a, int* b)
{
	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *a ^ *b;
}
int main(void)
{
	int a, b;
	scanf("%d%d", &a, &b);
	swith(&a, &b);
	printf("%d %d\n", a, b);
	return 0;
}

8.编写一个程序,输入一个正整数并计算输出它的阶乘。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int mul(int a)
{
	int i = 1;
	int ret = 1;
	for (i = 1; i <= a; i++)
	{
		ret = ret * i;

	}
	return ret;
}
int main(void)
{
	int a;
	scanf("%d",&a);
	int ret = mul(a);
	printf("%d\n",ret);
	return 0;
}

这个最厉害的地方是能算出0的阶乘为1。
当然还是有点挫
所以……上递归

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int test(int a)
{
	if (a)
	{
		return a * test(a - 1);

	}
	if (a == 0)
	{
		return 1;
	}
}
int main(void)
{
	int a;
	scanf("%d", &a);
	int ret = test(a);
	printf("%d\n", ret);
	return 0;
}

9.编写一个程序,输入一个正整数并判断它是否为质数。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int judge(int a)
{
	int i = 0;
	if (a == 2)
	{
		return 0;
	}
	else if (a == 0)
	{
		return 6;
	}
	for (i = 2; i < a; i++)
	{
		if (a % i == 0)
		{
			return 1;
	    }
	}
	return 0;
}
int main(void)
{
	int a = 0;
	scanf("%d", &a);
	int ret = judge(a);
	if (ret == 1)
	{
		printf("不为质数\n");
	}
	else if (ret == 0)
	{
		printf("为质数\n");
	}
	else
	{
		printf("都不是\n");
	}
	return 0;
}

10.编写一个程序,输入一个字符串并计算输出其中的字符个数。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int my_strlen(char arr[])
{
	int count = 0;
	while(*arr)
	{
		arr++;
		count++;
	}

	return count;
}
int main(void)
{
	char arr[1024] = { 0 };
	scanf("%s",arr);
	int ret = my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}

新手保护期到此为止喽
接下来要上强度了!!!
【程序1】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

这道题的答案和我的有些不一样,我觉得答案有问题,所以就用我的三种方法吧
第一种是用递归做,编程很奇妙吧,嘻嘻

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int febon(int a)
{
	if (a == 1 || a == 2)
	{
		return 2;
	}
	else
	{
		return febon(a - 1) + febon(a - 2);
	}
}
int main(void)
{
	int a;
	scanf("%d", &a);
	int ret = febon(a);
	printf("%d\n", ret);
	return 0;
}

第二种就用两个量来表示斐波那契数的发展

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
	int a = 2;
	int b = 2;
	int i = 0;
	for (i = 0; i < 20; i++)
	{
		printf("%d %d\n",a,b);
		a = a + b;
		b = a + b;
	}

	return 0;
}

这个其实就是答案的思路了,我愿称之为“生态系统快乐数”,其实还是巧妙的,只是不好控制,但还是能用,主要是题目没说清楚具体要求,whatever。

第三种就是用三个变量算,这个我想了好久,感觉是硬凑出来的没什么技巧,见笑了
想要一次出一个的话就把printf拿出去就行了

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void febon(int n)
{
	int a = 2;
	int b = 2;
	int i = 0;
	if (n == 1 )
	{
		printf("%d ", a);
    }
	if (n == 2)
	{
		printf("%d", a);
	}
	for(i = 0;i < n - 2;i++)
	{
		if (i == 0)
		{
			printf("2 2 ");
		}
		int mpt = a + b;
		printf("%d ", mpt);
		a = b;
		b = mpt;
	}

}
int main(void)
{
	int n;
	scanf("%d", &n);
	febon(n);
	return 0;
}

【程序2】
题目:判断101-200之间有多少个素数,并输出所有素数
tips:sqrt对无法开方的数是向下取整的

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main(void)
{
	int i = 101;
	int count = 0;
	for (i = 101; i <= 200; i++)
	{
		int j = 2;
		int num = sqrt(i);
		for (j = 2; j <= num; j++)
		{
			if (i % j == 0)
			{
				break;
			}
			if (j == num)
			{
				printf("%d ", i);
				count++;
			}
		}
	}
	printf("\n");
	printf("%d\n", count);
	return 0;
}

还行,只改了一次就对了
【程序3】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main(void)
{
	int i = 100;
	for (i = 1; i < 1000; i++)
	{
		int sum = 0;
		int a = i;
		int b = a;
		int count = 0;
		while(a)
		{
			a /= 10;
			count++;
		}
		while (b)
		{
			int c = b % 10;
			int j = 0;
			for (j = 0;j < count - 1;j++)
			{
				c *= (b % 10);
			}
			sum += c;
			b /= 10;
			
		}
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

写的心累啊,不是这错就是那错,最离谱的是,我以为一个数的三次方就是把这个数和它自己乘三次,这太扯了,而且最后那个判断不能放在里面,否则会把25这样的数也算进去,众所周知,这种类型的数是没有两位数的,等等,我去看看答案

main()
{
int i,j,k,n;
printf("'water flower'number is:");
 for(n=100;n<1000;n++)
 {
  i=n/100;/*分解出百位*/
  j=n/10%10;/*分解出十位*/
  k=n%10;/*分解出个位*/
  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
   {
   printf("%-5d",n);
   }
 }
printf("\n");
}

答案怎么说呢,有点拉,应该属于比较暴力的方法了,让我想的话应该也能写出来的吧

【程序4】
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值