❶ 編寫一個c語言程序,判斷在100到999個樹中最大的水仙花數減去最小的水仙花數是否為素數
#include<stdio.h>int primer(int x)
{
int i;
for(i=2;i*i<x;i++)
if(x%i==0)
break;
if(i*i<x)
return 0;
else
return x;
}
int main()
{
if(primer(999-153))
printf("%d是素數! ",999-153);
else
{
printf("不是素數! ");
}
return 0;
}
你提前把
在100到999中max/min的水仙花找出來,然後用primer()函數判斷一下就行了!
編程有技巧,可以學一下的!
❷ C語言中,判斷兩個數之間的水仙花數與素數,要求輸出時每行只能有六個數字且用函數表示
#include<stdio.h>
intisprime(intn)
{for(inti=2;i*i<=n;i++)
if(n%i==0)return0;
returnn>1;
}
intisnarcissus(intn)
{inta,b,c;
if(n<100||n>999)return0;
a=n/100;
b=n/10%10;
c=n%10;
return(a*a*a+b*b*b+c*c*c==n);
}
intmain()
{inta,b,i,n=0;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
if(isprime(i)||isnarcissus(i))
{printf("%8d",i);
if(++n%6==0)printf(" ");
}
printf("%d%d",isprime(1000),isnarcissus(1000));
return0;
}
❸ c語言的問題
#include<stdio.h>
#include<math.h>
main()
{
int x,y,a,b,c,i=1,j=0,max,m=1;
char ch;
printf("1判斷一個數是否為水仙花數:\n");
printf("2判斷一個數是否為素數:\n");
printf("3求一個數的階乘:\n");
printf("4求三個數的最大值:\n");
printf("0退出:\n");
do
{
printf("\n請進行菜單選擇(0-4)");
scanf("%d",&x);
if(0>x||x>4)printf("請重新輸入");
else{
if(x==0)
{
printf("你確定退出嗎y/n");
getchar();
scanf("%c",&ch);
if(ch=='y')
{
printf("bye bye");break;
}
}
if(x!=0&&1<=x&&x<=3)
{
printf("\n請輸入一個數:");
scanf("%d",&y);
switch(x)
{
case 1:a=y%10;
b=(y/10)%10;
c=y/100;
if(a*a*a+b*b*b+c*c*c==y)
printf("該數是水仙花數"); else
printf("該數不是水仙花數");break;
case 2:for(i=1;i<=y;i++)
{
if(x%i==0)
j++;
}
if(j>2)
printf("該數不是素數");
else
printf("該數是素數");break;
case 3:for(i=1,m=1;i<=y;i++)
{
m=m*i;
}
printf("%d",m);break;
}
}
if(x==4)
{
printf("請輸入三個數");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max<b)
max=b;
if(max<c)
max=c;
printf("%d",max);
}
}
}while(x!=0||ch=='n');
}
❹ c語言:遍歷水仙花數n,判斷是否為素數,並返回結果。
LZ你好~
首先你要理解啥是水仙花數:
水仙花數是指一個 n 位數 ( n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身。(例如:1^3 + 5^3 + 3^3 = 153)
以上來自網路。
按照樓主的程序,有3層循環,姑且叫做a循環,b循環,c循環。
我們先從循環上下界和條件來看:
樓主用a循環代表個位數,用b循環代表10位數,c循環代表百位數,對嘛?假設是這種情況,讓我們先不看代碼。
事實上a循環是最外面的循環,c循環是最裡面的循環,而計數按照邏輯應該是 111,112,113這樣增長的,所以邏輯上應該反過來,a代表百位數,b代表10位數,c代表個位數。(其實您的方式也可以遍歷所有您想遍歷的數,只不過從邏輯上變成111,211,311...911,121,221...這樣了,但是不覺得很不舒服嘛~)
然後我們來分析代碼,結構很明白了:
a循環,百位數
{
b循環,十位數
{
c循環,個位數
{
驗證
}
}
}
然後我們來確定驗證:
一個水仙花數n,假設是1000以內的3位數,寫作abc也就是 n = a*100 + b*10 + c = a^3 + b^3 + c^3,這不就是驗證條件嘛?所以條件就是a*100 + b*10 + c = a*a*a + b*b*b + c*c*c;
然後來看循環上下界,百位數可以從1-9,十位數可以從0-9,個位可以從0-9,這時候程序就完成了啦。
樓主在確定上下界的時候犯了錯哦,十位數不可以當做10到99,你要單純的將她看成數字,因為十位數只可能出現0-9,這10種情況,而不會出現11,23,56這樣的情況吧?
所以關鍵的循環體應該是:
for(a=1;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(a*100 + b*10 + c == a*a*a + b*b*b + c*c*c)
{
printf("%d,%d,%d\n",a,b,c);
}
}
}
}
我把大括弧全帶上了,請養成良好的編程習慣哦~
當然你也可以把最後驗證部分(if部分)替換成三元表達式,使用某一些編譯器效率會提高一點:
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
a*100 + b*10 + c == a*a*a + b*b*b + c*c*c ? printf("%d,%d,%d\n",a,b,c):; // 注意有個':'
❺ 編寫一個求水仙花的函數和判斷整數n是否為素數的函數,求出3位正整數的全部水仙花數
第一個:
#include <stdio.h>
void f()
{
int i, j, k;
for (i = 1; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
{
for (k = 0; k <= 9; k++)
{
if (i*i*i+j*j*j+k*k*k == 100*i+10*j+k)
{
printf("%d%d%d ", i, j, k);
}
}
}
}
}
void main()
{
f();
}
第二個:
#include <stdio.h>
int isPrime(int n)
{
int i;
for (i = 2; i < n; ++i)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d", &n);
if (isPrime(n))
{
printf("素數\n");
}
else
{
printf("不是素數\n");
}
return 0;
}
❻ C語言問題兩個
判斷101-200之間有多少個素數,並輸出所有素數。
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
2.程序源代碼:
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
}
范圍應該會換吧~~
列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數
本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
2.程序源代碼:
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");
}
❼ C語言菜單程序編寫
#include
<stdio.h>
#include
<math.h>
void
armstrong(int
a)
{
int
i;
int
n
=
1;
int
b
=
a;
int
s
=
0;
while(b
/=
10)
n++;
b
=
a;
for(i
=
0;
i
<
n;
i
++){
s
+=
(int)pow(b%10,
n);
b
/=
10;
}
if(s
==
a){
printf("%d
是水仙花數!\n",
a);
}else{
printf("%d
不是水仙花數!\n",
a);
}
}
void
prime(int
a)
{
int
i;
if(a
<
2)
{
printf("%d
不是素數!\n",
a);
return
;
}
for(i
=
2;
i
<
a;
i
++){
if(a
%
i
==
0)
{
printf("%d
不是素數!\n",
a);
return
;
}
}
printf("%d
是素數!\n",
a);
}
void
max(int
a,
int
b,
int
c)
{
if(b
>
a)
a
=
b;
if(c
>
a)
a
=
c;
printf("最大值是:%d\n",
a);
}
void
factorial(int
a)
{
int
i;
int
f
=
1;
for(i
=
a;
i
>1;
i
--)
f
*=
i;
printf("%d
的階乘是:%d\n",
a,
f);
}
int
main(int
argc,
char
**argv)
{
int
a,
b,
c;
int
type
;
int
run
=
1;
printf("本程序可完成某些數學計算:\n");
printf(
"***********************************\n"
"*
1.判斷一個數是否為水仙花數。
*\n"
"*
2.判斷一個數是否為素數。
*\n"
"*
3.求三個數的最大值。
*\n"
"*
4.求一個數的階乘。
*\n"
"*
0.退出。
*\n"
"***********************************\n");
do{
printf("請按菜單進行選擇(0-4):");
scanf("%d",
&type);
switch(type){
case
0:
while(1){
getchar();
printf("你確定退出嗎?(y/n)");
a
=
getchar();
switch(a){
case
'y':
run
=
0;
break;
case
'n':
run
=
1;
break;
default:
break;
}
if((a
==
'y')
||
(a
==
'n'))
break;
}
break;
case
1:
printf("請輸入一個數:");
scanf("%d",
&a);
armstrong(a);
break;
case
2:
printf("請輸入一個數:");
scanf("%d",
&a);
prime(a);
break;
case
3:
printf("請輸入三個數:");
scanf("%d%d%d",
&a,
&b,
&c);
max(a,
b,
c);
break;
case
4:
printf("請輸入一個數:
");
scanf("%d",
&a);
factorial(a);
break;
default:
break;
}
}while(run);
return
0;
}
❽ 水仙花數的c語言實驗報告怎麼寫
#include <stdio.h>
int main(void)
{
int a,b,c,x,y,sum=0;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
x=100*a+10*b+c;
y=a*a*a+b*b*b+c*c*c;
if(x==y)
{
sum+=x;
}
}
printf("水仙花數和:%d\n",sum);
return 0;
}
❾ c語言菜鳥求救!!題目為輸入正整數n,算出0~n內的完全數,親密數,水仙花,數階乘和數,自守數孿生素數,黑洞數等
還差黑洞數。。。。。。
#include "stdio.h"
#include "math.h"
int fun(int n)
{//求n的所有因數和
int sum=1,i;
for(i=2;i<n;i++)if(n%i==0)sum=sum+i;
return sum;
}
int jiecheng(int n)
{//求n的階乘
int num=1,i;
for (i=2;i<=n;i++)num*=i;
return num;
}
int Prime(int n)
{//判斷n是否是素數
int i=3;
while(i<=sqrt(n))if(n%i++==0)return 0;
return 1;
}
void wanquanshu(int n)
{//完全數
int i,count=0;
printf("完全數:\n");
for(i=0;i<=n;i++)
{
if(i==fun(i))
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void qinmishu(int n)
{//親密數
int i,temp,count=0;
printf("親密數:\n");
for (i=0;i<=n;i++)
{
temp=fun(i);
if (temp>i&&i==fun(temp))
{
printf("(%d,%d) ",i,temp);
if (++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void shuixianhua(int n)
{//水仙花數
int i,m=3,sum,count=0,temp;
printf("水仙花數:\n");
for(i=100;i<=n;i++)
{
if(999<i&&i<10000)m=4;
if(9999<i&&i<100000)m=5;
temp=i;
sum=0;
while (temp)
{
sum+=(int)pow(temp%10,m);
temp/=10;
}
if (sum==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void jiechengheshu(int n)
{//階乘和數
int i,count=0,temp,sum;
printf("階乘和數:\n");
for(i=0;i<=n;i++)
{
sum=0;
if (i==0)sum=jiecheng(i);
else
{
temp=i;
while(temp)
{
sum+=jiecheng(temp%10);
temp/=10;
}
}
if (sum==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void zishoushu(int n)
{//自守數
int i,count=0,temp,t;
long num;
printf("自守數:\n");
for(i=0;i<=n;i++)
{
num=i*i;
t=10;
temp=i/10;
while(temp)
{
t*=10;
temp/=10;
}
if (num%t==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void luanshengsushu(int n)
{//孿生素數
int i,count=0;
printf("孿生素數:\n");
for(i=3;i<=n-2;i+=2)
{
if (Prime(i)&&Prime(i+2))
{
printf("(%d,%d) ",i,i+2);
if (++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
int main()
{
int n;
printf("輸入n:");
scanf("%d",&n);
wanquanshu(n);
qinmishu(n);
shuixianhua(n);
jiechengheshu(n);
zishoushu(n);
luanshengsushu(n);
return 0;
}