【C语言】C基本练习5(判断素数、判断闰年、数组逆置)

本文介绍了如何使用C语言判断素数、打印指定范围内的素数,并提供了判断闰年的方法。此外,还详细讲解了数组的初始化、清空及逆置操作,并通过实例展示了如何找出数组中唯一出现一次的数。

一、判断素数

素数定义:除了1和本身是它的因子,其余数都不它的因子。
思路:假设数a/b=c;则a/c=b;因此只需要判断从2开始数据a的开根数这样可以减少循环次数;
如果数据a不是素数那么,必定有一个因子大于数a的开根数和有一个小于数据a的开根数;
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//函数实现判断一个数是不是素数
int IsPrime(int x)
{
	double m = sqrt(x);
	int i = 0;
	for (i = 2; i <= m; i++)
	{
		if (x%i == 0)
		{
			return 0;
		}
		return 1;
	}
}
int main()
{
	int num=0;
	printf("请输入一个数");
	scanf("%d",&num);*/
	int ret = IsPrime(num);*/
	if (1 == ret)
	{
		printf("%d是素数\n",num);
	}
	else
	{
		printf("%d不是素数\n",num);
	}
	system("pause");
	return 0;
}

同理打印100~200之间的素数的代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//函数实现判断一个数是不是素数
int IsPrime(int x)
{
	double m = sqrt(x);
	int i = 0;
	for (i = 2; i <= m; i++)
	{
		if (x%i == 0)
		{
			return 0;
		}
		return 1;     //是素数返回1;
	}
}
int main()
{   
    int i = 100;
	for (i = 100; i <= 300; i++)
	{
		if (1 == IsPrime(i))
		{
			printf("%d 是素数\n", i);
		}
		/*else
		{
			printf("%d不是素数\n", i);
		}*/
	}

二、判断闰年

闰年:即能被4整除且不能被100整除或者能被400整除的年份
因此判断闰年的代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
  //实现一个函数判断year是不是闰年
void IsLeapyear(int year)
{
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
	{
		printf("%d是闰年\n",year);
	}
	else
	{
		printf("%d不是闰年\n",year);
	}
}
int main()
{
	int year = 0;
	printf("请输入一个年份\n");
	scanf("%d",&year);
	IsLeapyear(year);
	system("pause");
	return 0;
}

三、数组逆置

//1.初始化数组arr, 2.清空数组,3,数组逆质
// 数组在编译时确定大小,运行时开辟内存,在栈开辟,最多开辟1M或2M内存
遍历数组初始化,清空数组
逆置数组思路如下:
下标为0 和下标最后的数据交换,下标1和下标倒数数据第一交换,当两者相遇时则已遍历完整个数组
即:

int left=0int right=数组长度len-1for(left=0;left<=rigjht;left++)
{
    数据交换;
    right--;
}

主要代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//数组初始化
void lnit(int arr[],int len)
{
	int i = 0;
	for (; i <len; i++)    
	{
		arr[i] = i;
	}
	printf("\n");
}
//清空数组
void Empty(int arr[], int len)
{
	int i = 0;
	for (; i < len; i++)
	{
		arr[i] = 0;
	}
	printf("\n");
}
//展示数组
void Show(int arr[], int len)
{
	int i = 0;
	for (; i < len; i++)
	{
		printf("%d", arr[i]);//[]自带解引用;
	}
	printf("\n");
}
//数组逆质
void Reverse(int arr[], int len)
{
	int left = 0;
	int right = len - 1;
	for (left = 0; left <= right; left++)
	{
		int temp = 0;
		temp = arr[left];
		arr[left] = arr[right];
		arr[right] = temp;
		right--;
	}
}
int main()
{
	int arr[9];
	int len = sizeof(arr) / sizeof(arr[0]);
	lnit(arr,len);
	Show(arr, len);
	Empty(arr,len);
	Show(arr,len);
	Reverse(arr,len);
	Show(arr, len);
	system("pause");
	return 0;
}

//一个数组中其他数出现两次,而仅只有一个数出现一次,找到出现一次的数
思路:任何数异或任何数等于置0,0异或任何数等于任何数,其他数出现两次相异或等于0,与出现一次的数异或即是要找的数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
 int Fun(int arr[], int len)
  {
     int i = 0;
     int tmp=0;
     for (i = 0; i < len; i++)
     {
    		tmp^=arr[i];
     }
    	return tmp;
 }
int main()
 {
    	int arr[7] = {1,2,3,4,3,2,1};
    	int len = sizeof(arr) / sizeof(arr[0]);
    	int ret = Fun(arr, len);
    	printf("%d\n",ret);
    	system("pause");
    	return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值