C语言练习之数组中素数交换

目录
  • 题目要求
  • 总结

题目要求

(1)在主函数中创建数组num,使用测试数据{108 4 19 7 23 66 49 13 33 35}对其初始化;

(2)定义change函数,将num数组中的素数首尾交换,即第一个素数与最后一个素数交换,第二个素数与倒数第二个素数交换…,非素数保持位置不变;

(3)定义prime函数,用于素数的判断。

#include <stdio.h>
#include <math.h>
int prime(int num)
{
	int i,k;
	if(num>=2)
	{
		k=sqrt(num);
		for(i=2;i<=k;i++)
		{
			if(num%i==0)
				break;
		}
		if(i>=k+1)
			return 1;
		else
			return 0;
	}
	else
		return 0;
}
void change(int* a,int* b){     //定义了类型为int*的指针a,b,指针指向的类型为int
	int tmp = *a;     //将指针a所指向的地址中的内容赋值给tmp
	*a = *b;   //将指针b所指向的地址中的内容赋值给指针b所指向的地址中的内容
	*b = tmp;
}

int main()
{
	int a[10]={108,4,19,7,23,66,49,13,33,35};
	int i,j=0,t,p[10];
	printf("交换之前的数组:");
	for(i=0;i<10;i++)
	printf("%4d",a[i]);
	for(i=0;i<10;i++)
	{
		if(prime(a[i])==1)
		{
			p[j++]=i;
		}
	}
	for(i=0;i<j/2;i++)
	{
		change(a+p[i],a+p[j-i-1]);
	}
	printf("\n\n交换之后的数组:") ;
	for(i=0,j=0;i<10;i++)
	printf("%4d",a[i]);
	return 0;
}

输出结果:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言每日练习之进制转换

    目录 分析 代码实现 网上参考 总结 分析 我一开始的想法是通过输入整数形式八进制来转换成十进制输出,后来发现用字符数组输入更方便.我这里就讲讲我用整型数据输入的转换思路: 我们都知道二进制由0和1组成,3位二进制组成在一起,就可以表示0-7这八个数,所以八进制实际上就是3位二进制的组合(同理十六进制是4位二进制的组合),C语言的位运算操作的是二进制,算术运算针对的是十进制,所以,我们可以通过位运算求出八进制的每一位数(3位二进制为1位),然后通过算术运算符+,将他们加起来.和十进制运算不同的地

  • C语言练习之扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 *1.设计思路与实现要求 (1)创建两个二维数组 9x9 ,一个表示显示地图数组showMap-未翻开状态,一个内部设置雷的状态地图mineMap表示-翻开状态) (2)初始化这两个数组,使showMap数组元素全为字符 '#';使mineMap数组元素随机生成10个1表示地雷位置,其余全为0的表示安全位置. (3)打印地图 (4)用户进行扫雷(输入想翻开位置的数组下标row col) (5)判断是否踩雷(如果输入数组

  • c语言线程终止练习示例

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <pthread.h> void *t1(void *args) { return (void *) 0;} void *t2(void *args) { printf("thread 2 param[args] = %d\n", args); pthread_exit((void *) 3);} void *t3(void *args)

  • C语言每日练习之动态显示系统时间

    目录 分析 代码实现 1.简易版 2.自定义格式版 3.格式化输出版 4.精细版(毫秒+微秒) 网上参考 总结 分析 C语言的时间库函数基本都在time.h里,该头文件主要包含三种形式的时间量,一种是time_t类型(原型为long),表示当前时间到1970年1月1日的总秒数:一种是struct tm类型,里面是时间日期的数据:还有一种clock_t,这个类型本文用不到,它表示与处理器时钟有关的时间数据. 本文将介绍4种显示系统时间的方法: 第一种直接用ctime函数将time_t类型的秒数据转

  • C语言每日练习之求两个矩阵的乘积详解

    目录 分析 代码实现 总结 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中. 矩阵的乘法有以下注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和. 代码实现:只需要用矩阵乘积的公式求出新的矩阵,即为两个矩阵的乘积,程序中

  • C语言练习之数组中素数交换

    目录 题目要求 总结 题目要求 (1)在主函数中创建数组num,使用测试数据{108 4 19 7 23 66 49 13 33 35}对其初始化: (2)定义change函数,将num数组中的素数首尾交换,即第一个素数与最后一个素数交换,第二个素数与倒数第二个素数交换-,非素数保持位置不变: (3)定义prime函数,用于素数的判断. #include <stdio.h> #include <math.h> int prime(int num) { int i,k; if(num

  • C语言二维数组中的查找的实例

    C语言二维数组中的查找的实例 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路描述:一个数字的下方和右方是比它本身大的区域,而左方和上方时比它本身小的区域.选取右上角的数字进行比较,当该数大于指定的数时,舍去该列,当该数小于指定的数时,舍去该行,当相等时,则表示找到 C语言实现: #include<stdio.h> #include<stdlib.h>

  • C语言找出数组中的特定元素的算法解析

    问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现.       思路:如果能用两个辅助数组,那么相对来说简单一点,可定义数组Min和数组Max,其中Min[i]表示自a[i]之后的最小值(包括a[i]),Max[i]表示自a[i]之前元素的最大值.有了这两个辅助数组后,对于a[i],如果它大于Max[i-1]并且小于Min[i+1],那么就符合要求.       但是题目要求是只用一个

  • C语言 数组中重复的数字分析及方法

    C语言 数组中重复的数字解决方法: 题目:在一个长度为n的数组里的所有数字都在0-n-1的 范围内.数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3. 解法1:对于数组进行排序,之后对于已经排序的数组进行遍历便可知道数组中重复的数字. 时间复杂度;O(nlogn); 解法2:建立一个大小为O(N)的哈希表,遍历数组中的元素并判断是否存在于哈

  • C语言算法练习之数组求素数

    目录 一.问题描述 二.算法实例编译环境 三.算法实例实现过程 3.1.包含头文件 3.2.声明数组 3.3.声明相关变量 3.4.数组赋值 3.5. 输出数组里面元素的值 3.6.求素数.素数和.最大的素数 3.7.输出所求的素数.素数和.最大的素数 四.经典算法实例程序 4.1.main.h文件 4.2.main.c文件 五.总结 一.问题描述 数组求素数 问题的描述 如下几点所示 输出1750 到 1850 之间的素数. 计算并输出1750 到 1850 之间的素数之和 S. 并且输出最大

  • C语言变长数组 struct中char data[0]的用法详解

    今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术.下面是我在网上找到的一篇讲解很清楚的文章. 在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nLen; char data[0];}; 在结构中,data是一个数组名:但该数组没有元素:该数组的真实地址紧随结

  • C语言从txt文件中逐行读入数据存到数组中的实现方法

    首先,要知道数据的存储格式是怎样的, 65 2 722 542 691 514 644 506 588 524 565 558 608 580 648 586 696 572 482 564 第一行表示数字的个数和维数,所以要先读入这些信息: <span style="white-space:pre"> </span>FILE *fp = fopen("2D_Jesscia_keypos.txt", "r"); if (

  • c语言实现把文件中数据读取并存到数组中

    1.txt 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 2.txt 1 2 3 4 5 2 3 4 5 6 4 5 6 7 8 程序代码: // C++读取文本到数组.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int readfile1D() { char a[100]; int i; FILE *fp = fopen("1.txt","r"); if(fp =

  • 详解C语言数组中是以列优先吗

    如果我们按照C语言的方式存储它,也就是行优先存储的话,那么在内存中,它的形状是这样的: 这种存储方式又被称作C contiguous array. C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式,与行优先相比,不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief C语言 数组 列优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码存在 bug 或程序缺陷, 请留言

  • C语言strlen和sizeof在数组中的使用详解

    目录 一.前言 二.sizeof在二维数组的试题 解读: 题解: 答案验证: 64位平台下: 32位平台下: 一.前言 前面我们详细讲了sizeof和strlen中的使用,基本涉及了所有一维数组可以和常见的题目类型 那么现在我们就将一维数组告一段落了,现在我们来开始讲解在二维数组的使用了,本篇是 sizeof和strlen的最后一篇了. 二.sizeof在二维数组的试题 #include<stdio.h> int main() { int a[3][4] = { 0 }; printf(&qu

随机推荐