请试著写一个函式来判断某数是否为质数汇总

合集下载

判断1到100质数的算法

判断1到100质数的算法

判断1到100质数的算法质数是指只能被1和自身整除的自然数,也就是除了1和本身之外没有其他因数的数。

在判断1到100之间的数是否为质数时,我们可以采用以下算法:1. 首先,我们需要明确的是1不是质数,因为质数定义中要求除了1和自身外没有其他因数,而1只能被1整除,不符合质数的定义。

2. 对于大于1的整数n,我们可以使用试除法来判断其是否为质数。

试除法的基本思想是从2开始,逐个将n除以小于n的数,若能整除,则n不是质数;若不能整除,则n是质数。

3. 对于1到100之间的数,我们可以逐个判断它们是否为质数。

具体步骤如下:- 从2开始遍历到100,依次取出每个数n。

- 对于每个数n,从2开始遍历到sqrt(n),依次取出每个数m。

- 判断n能否被m整除,若能整除,则n不是质数,结束判断。

- 若不能整除,继续判断下一个m。

- 若所有的m都不能整除n,则n是质数。

4. 根据以上算法,我们可以得到1到100之间的所有质数:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97。

通过试除法判断质数的算法是一种最简单直观的方法,但在处理大数时效率较低。

在实际应用中,我们可以采用更高效的算法,如埃拉托斯特尼筛法和米勒-拉宾素性测试等。

埃拉托斯特尼筛法是一种用于筛选出一定范围内所有质数的算法。

它的基本思想是从2开始,将每个质数的倍数标记为合数,直到筛选完所有数。

通过这种方法,可以快速找到某个范围内的所有质数。

米勒-拉宾素性测试是一种概率性算法,用于判断一个数是否为质数。

它基于费马小定理和二次探测定理,通过多次随机选择的底数进行测试,可以在高概率下判断一个数是否为质数。

判断1到100质数的算法可以采用试除法,逐个判断每个数是否能被小于它的数整除。

在实际应用中,我们可以采用更高效的算法来判断质数。

判断一个数是否为质数的算法

判断一个数是否为质数的算法

判断一个数是否为质数的算法在数学中,质数是指除了1和它本身以外,没有其它因数的自然数。

判断一个数是否为质数是数学中常见的问题,在实际生活中也有很多应用。

例如在密码学中,加密和解密的过程涉及到质数的筛选和生成。

本文将介绍两种判断一个数是否为质数的算法——试除法和米勒-拉宾算法。

试除法试除法是最简单的判断质数的方法之一。

其基本思路是:对于一个数n,如果它有因数p,那么p必定不大于√n。

因此,只需要从2到√n逐个试除,如果都不能整除,那么n就是质数。

否则,n 就不是质数。

核心代码如下:```pythondef is_prime(n):if n <= 1:return False #小于等于1的数不是质数for i in range(2, int(n ** 0.5) + 1):if n % i == 0:return False #存在因数return True #不存在因数,是质数```代码中,利用了Python中的for…in…循环和取整函数int()和平方根函数sqrt()。

首先判断n是否小于等于1,如果是,直接返回False,因为1不是质数。

然后从2到√n逐个试除,如果能够整除,就说明存在因数,返回False,否则返回True。

试除法的时间复杂度是O(√n),空间复杂度是O(1)。

当然,若n较大,算法的时间开销也很大。

米勒-拉宾算法米勒-拉宾算法是一种随机化算法,适用于大数的质数判断。

它的基本思路是利用费马小定理,如果n是质数,那么对于任意a∈[1,n-1],有:a^(n-1) ≡ 1 (mod n)若n不是质数,则对于大部分a∈[1,n-1],上式不成立。

米勒-拉宾算法的主要思想就是通过随机选取a来检查n是否为质数。

具体地,设n-1=2^s×d,其中d是大于等于3的奇数,a是随机选取的不大于n-1的整数。

如果a^d ≡ 1 (mod n),或者存在某个r∈[0,s-1],使得a^(2^r×d) ≡ -1 (mod n),则判定n是一个“可能的质数”(prime candidate)。

判断素数c语言程序编写 -回复

判断素数c语言程序编写 -回复

判断素数c语言程序编写-回复判断素数是一种经典的算法问题,在计算机科学中有着广泛的应用。

素数,也被称为质数,是指只能被1和自身整除的正整数。

为了判断一个数是否为素数,我们需要通过一定的算法来进行验证。

本文将介绍如何编写一个C语言程序来判断一个数是否为素数,并详细解释每个步骤的流程和原理。

首先,我们需要明确一些基本概念和知识。

在数学中,质数是指大于1的自然数中,除了1和它本身外没有其他因数的自然数。

根据这个定义,我们可以得出一个特性:质数p只能被2到√p之间的自然数整除。

这个特性可以作为判断素数的核心原理。

接下来,我们开始编写素数判断的C语言程序。

首先,我们需要定义一个函数,输入一个整数n,判断其是否为素数,并返回一个布尔值。

代码如下:c#include <stdio.h>#include <stdbool.h>bool isPrime(int n);在函数中,我们需要进行一系列的判断来验证n是否为素数。

首先,我们判断n是否小于2,若小于2,则不满足素数的定义,可以直接返回false。

代码如下:cbool isPrime(int n){if (n < 2)return false;}接下来,我们需要进行一个循环判断,从2到√n,判断n是否能被任意一个数整除。

若存在一个能整除n的数,则表明n不是素数。

如果循环结束后都没有找到能整除n的数,则可以确定n是素数。

代码如下:cbool isPrime(int n){if (n < 2)return false;for (int i = 2; i * i <= n; i++){if (n i == 0)return false;}return true;}在上面的代码中,我们使用了"i * i <= n"的判断条件,而不是"i <= √n"。

这是因为在计算机中,平方运算比开方运算更高效。

JavaScript判断数字是否为质数的方法汇总

JavaScript判断数字是否为质数的方法汇总

JavaScript判断数字是否为质数的⽅法汇总前⾔今天看到⼀个题⽬,让判断⼀个数字是否为质数.看上去好像不难.因此,我决定实现⼀下.DOM结构<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>计算500以内的质数并输出</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><script src="/libs/jquery/2.1.4/jquery.min.js"></script></head><body><div class="echo"><input type="text" id="num" value=""><input type="button" id="submit" value="提交"></div></body></html><script>$(function(){$("#submit").on('click',function(){var num = $("#num").val();if (isPrimeNum(num)) {alert(num+"是质数");}else{alert(num+"是合数");}});});</script>如上所⽰,我们通过 isPrimeNum(num) 函数,来实现判断是否为质数.下⾯我们来实现这个函数.通过FOR循环来判断是否为质数function isPrimeNum(num){for (var i = 2; i < num; i++) {if (num%i==0){return false;}};return true;}原理⽐较简单,通过2以上的数字不断和⽬标数字求余数,如果能得到0,就表⽰这是⼀个合数⽽不是质数.不过这个运算量好像有点⼤优化⼀下第⼀个⽅法很简单嘛,⼀下⼦就实现了.但是,好像可以优化⼀下.我们好像不必⼀直追到这个数字去求余数,我们好像只需要循环到这个数的⼀半,就可以计算出来这个数字是不是质数了.function isPrimeNum(num){for (var i = 2; i < num/2+1; i++) {if (num%i==0){return false;}};return true;}经过实测,速度确实⼤为提升,但是,我知道,数字尾数为双数,或者为5,那么肯定不是质数,因此没必要去计算.我们再来优化⼀下不计算数字尾数为双数或者5的数字function isPrimeNum(num){return false;}};return true;}function isDual(num){var num = num.toString();var lastNum = num.substring(num.length-1,num.length);return lastNum%2 == 0 || lastNum%5 == 0 ? false : true;}通过这样的优化,我们可以再减⼩运算量了,⾄少减少⼀⼤半数字哦.(但是实测提升性能⼀般,因为这样的数字,能够很快的判断出来不是质数)这⾥substring()函数发现,不能⽤在数字上,只能⽤在字符串上.悲催,因此先把数字变成了字符串.如果不是数字或者整数的处理如果⽤户输⼊的不是数字,或者是⼀个⼩数,怎么办呢?我迅速的写了两个⽅法来进⾏处理…function isPrimeNum(num){if (!isNum(num)){return false;}if (!isInteger(num)){return false;}if (!isDual(num)){return false;}for (var i = 2; i < num/2+1; i++) {if (num%i==0){return false;}};return true;}function isInteger(num){return num == ~~num ? true : false;}function isNum(num){return num == +num ? true : false;}function isDual(num){var num = num.toString();var lastNum = num.substring(num.length-1,num.length);return lastNum%2 == 0 || lastNum%5 == 0 ? false : true;}这⾥⽤了两个⼩技巧,⼀个是⼩数取整~~num,⼀个是字符串转数字.+num.了解更多请阅读我之前的博⽂《javascript 学习⼩结 JS装逼技巧(⼀) by FungLeo》这并没有提⾼什么效能,只是免去了计算错误输⼊.我们再想⼀下,有没有什么快速判断不是质数的⽅法呢?去除能被3整除的数字不计算function isPrimeNum(num){if (!isNum(num)){return false;}if (!isInteger(num)){return false;}if (num==2||num==3||num==5) {return true;}if (!isDual(num)){return false;}return false;}};return true;}function isInteger(num){return num == ~~num ? true : false;}function isNum(num){return num == +num ? true : false;}function isDual(num){var num = num.toString();var lastNum = num.substring(num.length-1,num.length);return lastNum%2 == 0 || lastNum%5 == 0 ? false : true;}function isThree(num){var str = num.toString();var sum = 0;for (var i = 0; i < str.length; i++) {sum += +str.substring(i,i+1);};return sum%3 == 0 ? false : true;}这⾥,我们先把数字变成字符串,然后把字符串每⼀位都分拆出来,并且相加求和,拿结果和3求余,就能得出这个数字是否能被3整除了.哈哈我真聪明…实测性能貌似并没有提⾼很多,但确实提⾼了⼀些的.有点⼩郁闷但是,如果排除了3整除的数字,那么,我们就完全没必要计算到⼀半啦,我们完全没必要计算到⼀半,只需要计算到三分之⼀就好啦.另外,我们也排除了5,那么只要计算到五分之⼀就好啦….迅速调整后,果然效率⼤⼤提升啊我威武…但是,这样在 2\3\5 三个质数,代码会判断是合数,所以,需要再补上⼀句if (num==2||num==3||num==5) {return true;}别⼈的⽅法然后我就想不到优化的⽅法啦…于是,我就搜索了⼀下,找到下⾯的解决⽅法,我惊呆了function isPrimeNum2(num){return !/^.?$|^(..+?)\1+$/.test(Array(num + 1).join('1'))}使⽤的是正则的⽅法,果然是简短啊,但是我⽑线也看看懂呀我实在是搞不懂这是啥原理,我于是实测了⼀下,发现,我的代码效率远远⾼于这段代码.由此可见,我的⽅法还是很优秀的嘛!!我的代码打印100000以内的所有质数需要1600ms ⽽这段代码需要160000ms 也就是说,我的代码只要百分之⼀的时间就可以了.不过,谁能看懂这段代码请帮我解释⼀下….补充看了⼀些相关的资料,好像我上⾯⽤num/5的⽅式貌似不太好(结果并不是错误的).有⼀个更好的⽅式,就是使⽤Math.sqrt(num)求平⽅根的⽅式.我的代码的测试结果如下如上图所⽰,我的代码的计算结果是完全正确的哦.但是⽤时是1638毫秒.经过多次测试依然是这样.求平⽅根⽅式测试结果如下如上图所⽰,⽤这个⽅式更加科学,速度更快,多次测试,⽤时在1150毫秒到1250毫秒之间.相⽐我的代码性能提升⼤约25%.我⼜是判断位数是否是双数或者5的,⼜是判断加起来能不能被3整除的,折腾半天.我肯定是期望减少运算量的.但是这些代码本⾝也是有运算量的.我把我的代码都去除掉之后再看下性能⼜得到了提升啊,看来我的那些计算全部都是负优化啊!最终,代码如下:function isPrimeNum(num){if (!isNum(num)){return false;}if (!isInteger(num)){return false;}for (var i = 2; i <= Math.sqrt(num); i++) {if (num%i==0){return false;};return true;}function isInteger(num){return num == ~~num ? true : false;}function isNum(num){return num == +num ? true : false;}⼩结:完全是我算术不好导致我在前⾯各种⾃作聪明.不过,练练⼩技巧也是好的-_-|||最后看下计算100万以内的所有质数需要多长时间以上所述是⼩编给⼤家介绍的JavaScript判断数字是否为质数的⽅法汇总,希望对⼤家有所帮助.。

【c++】三种方式查找质数

【c++】三种方式查找质数

【c++】用三种方式计算所给范围内的质数并输出:#include<math.h>#include<iostream.h>#include<iomanip.h>#include<stdio.h>int number(int a,int b,int& p) //a起始值,b结束值,n质数个数,p取余次数(此为算法1所用的函数,用于判断和打印质数){int m,i,k,n=0;for(m=a;m<=b;m++){k=int(sqrt(m));for(i=2;i<=k;i++){p+=1;if(m%i==0) break;}if(i>=k+1){n=n+1;}}return n;}bool isPrim(int num) //(此为算法2所用的函数,用于判断是否为质数){for(int i = 2; i <= num/2; i++){if( num%i == 0){return false;}else{continue;}}return true;}int prime(int a,int count,int num,int n,int& p) //(此也为算法2使用的函数,用于打印质数){for(int j =a; j<= num; j++){ p+=1;if(isPrim(j)){n++;count++;}}printf("\n");return n;}int oddnumber(int a,int b,int& p) //a起始值,b结束值,n质数个数,p取余次数(此为算法3所用的函数,只检索奇数寻找质数){int m,i,k,n=0;for(m=a;m<=b;m++){k=int(sqrt(m));for(i=3;i<=k;i+=2){p+=1;if(m%2==0) break;if(m%i==0) break;}if(i>=k+1){if(m==4||m==6) continue;if(m==8) continue;n=n+1;}}return n;}int compare(int a,int b,int c,int a1,int b1,int c1) //用于排序的函数{int t;if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}cout<<"评估次数排序(从小到大)和函数效率排序(从好到坏)分别如下:";cout<<a<<" "<<b<<" "<<c<<'\n';if (a==a1)cout<<"\n******优越程度:算法1>";if (a==b1)cout<<"\n******优越程度:算法2>";if (a==c1)cout<<"\n******优越程度:算法3>";if (b==a1)cout<<"算法1>";if (b==b1)cout<<"算法2>";if (b==c1)cout<<"算法3>";if (c==a1)cout<<"算法1******";if (c==b1)cout<<"算法2******";if (c==c1)cout<<"算法3******";cout<<'\n';return a;}void main() //进入主函数{ int mood; //mood是模式编号while(1){ int x,y,z=0,count=0,n=0;cout<<"计算所给范围内的质数个数"<<endl;cout<<"请输入起始值和结束值:";cin>>x>>y;cout<<"请选择输入1/2/3,以选择不同的模式进行运算:";cin>>mood;switch(mood){case 1: //模式1:m为起始值,依次除以2到根号m,余数均不为0判为质数{cout<<'\n'<<x<<'~'<<y<<"之间的质数数量为"<<number(x,y,z)<<endl;cout<<"本次计算中核心代码共运行"<<z<<"次"<<endl;break;}case 2: //模式2:num为结束值,一个数依次除以2到0.5*num,余数均不为0判为质数{cout<<'\n'<<x<<'~'<<y<<"之间的质数数量为"<<prime(x,count,y,n,z)<<endl;cout<<"本次计算中核心代码共运行"<<z<<"次"<<endl;break;}case 3: //模式3:与模式1大致相同,但是只在奇数中搜索质数{cout<<'\n'<<x<<'~'<<y<<"之间的质数数量为"<<oddnumber(x,y,z)<<endl;cout<<"本次计算中核心代码共运行"<<z<<"次"<<endl;break;}}cout<<"\n\n请选择是否进入算法评估?(是:1/否:0):";int choice;cin>>choice;if(choice==1){int z1=0,z2=0,z3=0;cout<<"以下为3个算法的评估过程:"<<endl;int a1=number(x,y,z1); //以下3步是为了将三个算法的核心代码运行次数分别赋值给z1,z2,z3int b1=prime(x,count,y,n,z2);int c1=oddnumber(x,y,z3);cout<<"算法1找出质数"<<number(x,y,z)<<setw(6)<<"个,其核心代码执行次数为"<<z1<<endl;cout<<"算法2找出质数"<<prime(x,count,y,n,z)<<setw(6)<<"个,其核心代码执行次数为"<<z2<<'\n'<<endl;cout<<"算法3找出质数"<<oddnumber(x,y,z)<<setw(6)<<"个,其核心代码执行次数为"<<z3<<'\n'<<endl;a1=z1;b1=z2;c1=z3;compare(z1,z2,z3,a1,b1,c1);cout<<" ----------------------------------分割线------------------------------------"<<'\n'<<endl;}if(choice==0)cout<<" ----------------------------------分割线------------------------------------"<<'\n'<<endl;}}。

c语言判断素数的函数程序,调用函数 -回复

c语言判断素数的函数程序,调用函数 -回复

c语言判断素数的函数程序,调用函数-回复如何使用C语言来判断素数、编写一个判断素数的函数并调用该函数。

在程序设计中,素数是指只能被1和自身整除的整数。

在数学中素数也被称为质数,它是数论中重要的研究对象之一。

下面将一步一步地介绍如何使用C语言来判断素数,并编写一个判断素数的函数并调用该函数。

首先,我们需要明确素数的定义:素数是一个大于1的自然数,其只能被1和自身整除,不能被其他数整除。

因此,我们可以采用划定范围的方式来判断一个数是否为素数。

接下来,我们可以编写一个判断素数的函数。

函数的输入参数为一个整数n,函数的返回值为一个布尔值true或false,表示该数是否为素数。

函数的实现逻辑如下:c#include <stdbool.h> 引入bool类型#include <math.h> 引入数学库bool isPrime(int n) {if (n <= 1) {return false; 小于等于1的数都不是素数}int squareRoot = sqrt(n); 计算输入数的平方根for (int i = 2; i <= squareRoot; i++) {if (n i == 0) {return false; 如果能整除,则不是素数}}return true; 能整除的数都判断完毕,是素数}在以上代码中,我们首先判断输入数是否小于等于1,如果小于等于1,则直接返回false,因为小于等于1的数都不是素数。

接着,我们使用平方根来减少循环的计算次数,因为一个数要判断是否为素数,只需要判断到其平方根即可。

然后,我们使用循环从2开始遍历到平方根,判断输入数是否能被循环变量整除,如果能整除,则返回false,否则继续循环检查。

最后,如果循环检查完毕都没有找到能整除的数,则返回true,说明输入数是素数。

接下来,我们可以在主函数中调用判断素数的函数,以验证函数的正确性并获取计算结果。

使用Python判断质数(素数)的简单方法讲解

使用Python判断质数(素数)的简单方法讲解

使⽤Python判断质数(素数)的简单⽅法讲解质数⼜称素数。

指在⼀个⼤于1的⾃然数中,除了1和此整数⾃⾝外,不能被其他⾃然数整除的数。

素数在数论中有着很重要的地位。

⽐1⼤但不是素数的数称为合数。

1和0既⾮素数也⾮合数。

质数是与合数相对⽴的两个概念,⼆者构成了数论当中最基础的定义之⼀。

基于质数定义的基础之上⽽建⽴的问题有很多世界级的难题,如哥德巴赫猜想等。

算术基本定理证明每个⼤于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯⼀的。

这个定理的重要⼀点是,将1排斥在素数集合以外。

如果1被认为是素数,那么这些严格的阐述就不得不加上⼀些限制条件。

前⼏天偶尔的有朋友问python怎么判断素数的⽅法,⾛⽹上查了查,总结了python脚本判断⼀个数是否为素数的⼏种⽅法:1.运⽤python的数学函数import mathdef isPrime(n):if n <= 1:return Falsefor i in range(2, int(math.sqrt(n)) + 1):if n % i == 0:return Falsereturn True2.单⾏程序扫描素数from math import sqrtN = 100[ p for p in range(2, N) if 0 not in [ p% d for d in range(2, int(sqrt(p))+1)] ]运⽤python的itertools模块from itertools import countdef isPrime(n): if n <= 1:return Falsefor i in count(2):if i * i > n:return Trueif n % i == 0:return False3.不使⽤模块的两种⽅法⽅法1:def isPrime(n):if n <= 1:return Falsei = 2while i*i <= n:if n % i == 0:return Falsei += 1return True⽅法2:def isPrime(n):if n <= 1:return Falseif n == 2:return Trueif n % 2 == 0:return Falsei = 3while i * i <= n:if n % i == 0:return Falsei += 2return Trueeg:求出20001到40001之间的质数(素数)既然只能被1或者⾃⼰整出,那说明只有2次余数为0的时候,代码如下: #!/usr/bin/pythonL1=[]for x in xrange(20001,40001):n = 0for y in xrange(1,x+1):if x % y == 0:n = n + 1if n == 2 :print xL1.append(x)print L1结果如下:2001120021200232002920047200512006320071200892010120107201132011720123201292014320147201492016120173….。

经典算法(1)判断一个数是否为素数

经典算法(1)判断一个数是否为素数

经典算法(1)判断⼀个数是否为素数质数(Prime number),⼜称素数,指在⼤于1的⾃然数中,除了1和该数⾃⾝外,⽆法被其他⾃然数整除的数(也可定义为只有1与该数本⾝两个正因数的数)。

⼤于1的⾃然数若不是质数,则称之为合数(也称为合成数)。

解法1include <stdio.h>main(){int n,i;scanf("%d",&n);for(i=2;i<=n-1;i++)if(n%i==0) break;if(i>=n) printf("%d is\n",n);else printf("%d is not\n",n);printf("a prime number.\n");}运⾏结果:思考:为什么要⽤'>=':为了后⾯那句更⽅便 T.T解法2include <stdio.h>include <math.h>main(){int n,i,k;scanf("%d",&n);k=sqrt((double)n); //求根号下x,函数原型:double sqrt(double x);for(i=2;i<=k;i++)if(n%i==0)break;if(i>=k+1)printf("%d is \n",n);else printf("%d is not\n",n);printf("a prime number.\n");}运⾏结果:思考:为什么条件是⼤于k+1 (现在不知道,后⾯知道了再补)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

也就是:void modifyArray( int [ ]
#include <stdio.h> 傳遞整個陣列的函式 #define SIZE 5 void modifyArray( int [ ], int ); 一般函式 void modifyElement( int ); int main() { int a[ SIZE ] = { 0, 1, 2, 3, 4 }, i; printf( "Effects of passing entire array call " "by reference:\n\nThe values of the " "original array are:\n" ); for ( i = 0; i <= SIZE - 1; i++ ) printf( “%3d”, a[ i ] ); printf( "\n" );
5/4 上機課 1. 請試著寫一個函式來判斷某數是否為質數
#include <stdio.h> int prime(int a); int main() { int x; printf("請輸入一整數:\n"); scanf("%d",&x); If/else敘述式 印出(Yes or No)質數 printf("\n"); return 0; }
6.5 傳遞陣列給函式
6.5 傳遞陣列給函式

傳遞整個陣列時的函式原型 void modifyArray( int b[ ] , int arraySize ); 函式原型中的引數 int b[ ] 可以寫成 int [ ] int arraySize 可以寫成 int , int );

void modifyArray( int b[], int size ) { int j;
for ( j = 0; j <= size - 1; j++ ) b[ j ] *= 2;
} void modifyElement( int e ) { printf( #34;, e *= 2 ); }
6.6 陣列的排序
#include <stdio.h> #define SIZE 10 int main() { int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }, i, pass, hold; printf( "Data items in original order\n" ); for ( i = 0; i <= SIZE - 1; i++ ) printf( "%4d", a[ i ] ); for ( pass = 1; pass <= SIZE - 1; pass++ ) 9回合以內一 for ( i = 0; i <= SIZE - 2; i++ ) if ( a[ i ] > a[ i + 1 ] ) { 定會搞定? hold = a[ i ]; a[ i ] = a[ i + 1 ]; a[ i + 1 ] = hold; } printf( "\nData items in ascending order\n" ); for ( i = 0; i <= SIZE - 1; i++ ) printf( "%4d", a[ i ] ); printf( "\n" ); return 0; }
The value of a[3] is 6 Value in modifyElement is 12 The value of a[3] is 6



排序資料 最重要的計算應用之一 幾乎每一個組織都必須排序大量的資料 氣泡排序(Bubble sort) 會對陣列處理數個回合 比較相鄰的一對元素 如果此對元素為遞增或相等則維持不變 如果為遞減順序則將他們的值對調 重複 例如: 原本: 3 4 2 6 7 第一回合: 3 2 4 6 7 第二回合: 2 3 4 6 7 較小的元素的泡泡到最上面
Effects of passing entire array call by reference: The values of the original array are: 0 1 2 3 4 The values of the modified array are: 0 2 4 6 8
Effects of passing array element call by value:
int prime(int a) { int j; for (j=2; j< a; j++){ if (a%j == 0) return 0; } return 1; }


傳遞整個陣列 只要指定陣列名稱即可,不必加任何中括號 int myArray[ 24 ]; myFunction( myArray, 24 ); 陣列大小通常也一起傳給函式 自動以傳參考呼叫方式 陣列名稱是此陣列第一個元素的位址 傳遞陣列名稱,函式即得知陣列位址 會修改到原始的陣列 傳遞陣列的值 以傳值呼叫方式 傳遞下標名給函式 (如:myArray[ 3 ])
呼叫函式 modifyArray( a, SIZE ); printf( "The values of the modified array are:\n" );
for ( i = 0; i <= SIZE - 1; i++ ) printf( "%3d", a[ i ] ); printf( "\n\n\n Effects of passing array element call " "by value:\n\nThe value of a[3] is %d\n", a[ 3 ] ); modifyElement( a[ 3 ] ); printf( "The value of a[ 3 ] is %d\n", a[ 3 ] ); return 0; 呼叫函式 }
主程式已在左邊請加入 prime函式在下面
prime函式
2. 如果以做出上題, 請印出1~10000 所有的質數
#include <stdio.h> int prime(int a); int main() { int x; printf("請輸入一整數:\n"); scanf("%d",&x); if (prime(x)==1) printf("%d 是一個質數", x); else printf("%d 不是一個質數", x); printf("\n"); return 0; }
相关文档
最新文档