C語(yǔ)言程序設(shè)計(jì)上機(jī)程序題
/* ?第一題:n為一個(gè)整數(shù)(小于10萬(wàn)),它加上100后是一
個(gè)完全平方數(shù),再加上168又是一個(gè)完全平方數(shù),請(qǐng)問該數(shù)是多少?
#include<iostream>
#include<cmath>
using namespace std;
int judge(int a)
{
int b=sqrt(a);
?if(a==b*b)
?return 1;
?else
?return 0;
}
void main()
{
int i,t;
for(i=-99;i<100000;i++)
? ? ? ?if
? (judge(i+100)&&judge(i+168))
?cout<<i<<endl;
}*/
/*第二題:求1000之內(nèi)的完全數(shù)。
說明:完全數(shù)就是:除了它本身以外所有因子之和等于其
本身,例如:6=1+2+3。
#include<iostream>
using namespace std;
void main()
{
int a,b,sum=0;
? ?for(a=1;a<=1000;a++)
? ?{
?for(b=1;b<=a/2;b++)
? ? ? ? ? ?{
? if(a%b==0)
? ? ? ? ? ?sum=sum+b;
? }
? ? ? ?if(sum==a)
? ? ? ?cout<<a<<endl;
? ? ? ?sum=0;
}
}
*/
/*第三題:求出 [900, 1000]間有偶數(shù)個(gè)因子(這里因子不
含1和自身)的數(shù)有多少個(gè),其中最小的一個(gè)?
#include<iostream>
using namespace std;
void main()
{
int a,b,c=0,d=0,min;
for(a=1000;a>=900;a--)
{
?for(b=2;b<=a/2;b++)
?{
? if(a%b==0)
? ++c;
?}
?if(c%2==0)
?{
? ++d;
?min=a;
?}
}
cout<<"min="<<min<<"一共有:"<<d<<endl;
}
*/
/*第四題:編寫一個(gè)自定義函數(shù):int f( int M, int N) ,f( )的功能是:
對(duì)給定的正整數(shù)M和N,找出滿足方程"7x+4y=M"的正整數(shù)解中x是偶數(shù)且y
是奇數(shù)的解,其中:x,y屬于[1,N]的范圍。
要求:若M和N不都是正整數(shù),則結(jié)束函數(shù)并返回-1;只有M和N都是正整數(shù)
時(shí),才繼續(xù)求解操作,用二重循環(huán)進(jìn)行求解:
(1)在函數(shù)中輸出滿足條件的正整數(shù)解x和y
(2)并且使函數(shù)值返回滿足條件的正整數(shù)解的組數(shù)
#include<iostream>
using namespace std;
int f(int M,int N)
{
int x,y,k=0;
if(M<0||N<0)
{cout<<"請(qǐng)輸入正整數(shù)";
return -1;}
{for(x=2;(M-7*x>0)&&N>=x;x+=2)
{
?for(y=1;N>y;y+=2)
?{
? if(M-7*x-4*y==0)
? ? ? ? ? ?{cout<<"x="<<x<<" ?y="<<y<<endl;
? ++k;}
?}
?cout<<"k="<<k;
?return k;}}
}
void main()
{
int M,N;
cout<<"請(qǐng)輸入整數(shù)M:";
cin>>M;
cout<<"請(qǐng)輸入整數(shù)N:";
cin>>N;
f(M,N);
}
*/
/*第五題:編寫一個(gè)自定義函數(shù):int f( char x, int N) ,f( )的功
能是:對(duì)給定的字符c和整數(shù)N,用c代表的符號(hào)打印一個(gè)N行的圖案,每
行開頭沒有任何空格。比如,當(dāng)c為"*"且N為5時(shí),打印的圖案如本題圖
所示。且函數(shù)值返回1。
#include<iostream>
using namespace std;
int f(char x,int n)
{
int i,j;
for(i=1;i<=n;i++)
{
?for(j=1;j<=i;j++)
? cout<<x;
?cout<<endl;
}
return 0;
}
int main()
{
f('*',5);
return 0;
}*/
/*第六題:編寫一個(gè)自定義函數(shù):int f( int N) ,f( )的功能是:
對(duì)給定的正整數(shù)N,打印一個(gè)N行N列的由"A"、"B"、"C"以及空格" "符
號(hào)組成的方陣圖案。比如,當(dāng)N為5時(shí),打印的圖案如本題圖所示。且
函數(shù)值返回1。
#include<iostream>
using namespace std;
int f(int N)
{
int i,j;
char a[100][100];
for(i=0;i<=2*N-1;i++)
{
?for(j=0;j<=2*N-1;j++)
?{
? if((j==0&&i%2==0)||(i==j&&i%2==0))
? a[i][j]='A';
? else if(j>i&&i%2==0&&j%2==0)
? ? ?a[i][j]='B';
? else if(j%2!=0||i%2!=0)
? a[i][j]='\t';
? else
? a[i][j]='C';
?}
?cout<<a[i][j];
}
return 1;
}
void main()
{
f(5);
}
*/
/*第七題:根據(jù)下列要求和提示,編寫一個(gè)函數(shù)f(N)判斷某數(shù)N是
否為"完全數(shù)",N由主函數(shù)給出;如果N是"完全數(shù)"則函數(shù)值返回1,
N不是"完全數(shù)"則函數(shù)值返回0。"完全數(shù)"定義如下:如果一個(gè)數(shù)恰
好等于它的因子之和(因子包括1,不包括數(shù)本身),則稱該數(shù)為
"完全數(shù)"。如:6的因子是1、2、3,而6=1+2+3,則6是個(gè)"完全數(shù)"。
#include<iostream>
using namespace std;
int f(int N);
void main()
{
int N;
cin>>N;
if(f(N)==1)
?cout<<N<<"是完全數(shù)"<<endl;
else
?cout<<N<<"不是完全數(shù)"<<endl;
}
int f(int N)
{
int a,sum=0;
? ?for(a=1;a<=N/2;a++)
{ ?
?if(N%a==0)
? ? sum+=a;
}
if(N==sum)
return 1;
else
return 0;
}
*/
/*第八題:編寫程序,求e的值,e≈1+1/1!+1/2!+1/3!+1/4!+...,
最后一項(xiàng)的值小于1e-6。
#include<iostream>
using namespace std;
int jiecheng(int N)
{
int i,c=1;
for(i=1;i<=N;i++)
?c=c*i;
return c;
}
void main()
{
double e=1.0;
int t;
for(t=1;(jiecheng(t))<=100000000;t++)
?e=e+1.0/jiecheng(t);
cout<<e<<endl;
}*/
/*第九題:有十進(jìn)制數(shù)字a,b,c,d和e,求滿足式子:abcd*e=dcba
(a非0,e非0非1)的四位數(shù)中:
(1)共有多少個(gè)?
(2)最小的abcd;
(3)與之相對(duì)應(yīng)的e。
#include<iostream>
using namespace std;
int f(int n)
{int m,sum=0;
while(n)
{
?m=n%10;
?sum=sum*10+m;
?n=n/10;
}
return sum;
}
void main()
{ ? int i,j=0,k;
for(i=4999;i>=1000;i--)
{
?if(f(i)/i*i==f(i)&&f(i)>i)
?{
? j++;
? k=i;
?}
}
cout<<j<<endl;
cout<<k<<endl;
cout<<f(k)/k;
}
*/
/*第十題:有一個(gè)7層燈塔,每層所點(diǎn)燈數(shù)都等于該層上一層
的兩
倍,燈的總數(shù)是381盞,求:塔底燈數(shù)?第幾層的燈數(shù)為48?
#include<iostream>
using namespace std;
int f(int n)
{
if(n==1)
?return 1;
else
? ? return 2*f(n-1);
}
void main()
{ ?int i,x,sum=0;
for(x=1;x<100;x++)
{
?for(i=1;i<=7;++i)
?{sum+=x*f(i);}
?if(sum!=381)
? sum=0;
?else
? ? ? ?cout<<"x="<<x<<endl;
?
}
}
*/
/*第十一題:有3個(gè)紅球,5個(gè)白球,6個(gè)黑球,從中任意取出
8個(gè)球,
且其中必須有白球,請(qǐng)求出共有多少種取法?
#include<iostream>
using namespace std;
int main()
{
int x,y,sum=0;
for(x=1;x<=5;x++)
{
?for(y=0;y<=3;y++)
?{ if((8-x-y)<=6)
? ?sum++;
?}
}
cout<<sum;
return 0;
}
*/
/*第十二題:求數(shù)列1,3,3,3,5,5,5,5,5,7,7,7
,7,7,7,7……。求:
第40項(xiàng)的值;值為17的第1個(gè)數(shù)是數(shù)列中第幾項(xiàng)?
#include<iostream>
using namespace std;
void main()
{
int i,sum=0;
for(i=1;sum<=40;i+=2)
?sum+=i;
i-=2;
cout<<i<<endl;
sum=0;
for(i=1;i<17;i+=2)
?sum+=i;
cout<<sum+1<<endl;
}
*/
/*第十三題:計(jì)算p的近似值,直到最后一項(xiàng)的絕對(duì)值小于
10-8為止,近似公式為
#include<iostream>
using namespace std;
int f(int N)
{
if(N%2==0)
?return (-1);
else
?return 1;
}
void main()
{
int i,c=0;double p=0;
for(i=1;i<100000000;i+=2)
{
?c=c+1;
?p+=1.0/i*f(c);
}
cout<<p<<endl;
}
*/
//第十四題:用牛頓迭代法求方程3x3-4x2-5x+13=0在x=1
附近的根,要求精度為10-6。
/*
#include<iostream>
#include<iomanip>
using namespace std;
double y(double x)
{
double y;
y=3*x*x*x-4*x*x-5*x+13;
return y;
}
double k(double x)
{
double y;
y=9*x*x-8*x-5;
return y;
}
void main()
{
double x=1.0;
while(1)
{
?int a=(x-y(x)/k(x))*1000000;
?int b=x*1000000;
?if(a==b)
?{
? cout<<setprecision(7)<<x;
? break;
?}
?else
? x=x-y(x)/k(x);
}
}
*/
/*第十五題:編寫一個(gè)自定義函數(shù):int f( int M, int N)
,函數(shù)f的功能是:對(duì)給定的正整數(shù)M和N,
找出滿足方程"5x+6y=M"的正整數(shù)解中x和y都是偶數(shù)的
解。要求:若M和N不都是正整數(shù),
則結(jié)束函數(shù)并返回-1;只有M和N都是正整數(shù)時(shí),且
x,y∈[1,N], 才繼續(xù)求解操作,
并用二重循環(huán)進(jìn)行求解:(1)在函數(shù)中輸出滿足條件的
正整數(shù)解x和y,
(2)使函數(shù)值返回滿足條件的正整數(shù)解的組數(shù)。
#include<iostream>
using namespace std;
int f(int M,int N)
{
int x,y,k=0;
if(M<0||N<0)
{
? ? cout<<"請(qǐng)輸入正整數(shù)";
? ? ? ?return -1;
}
{
? ? for(x=2;(M-5*x>0)&&N>=x;x+=2)
? ? {
? ? ?for(y=2;N>y;y+=2)
? {
? ?if(M-5*x-6*y==0)
? ?{
? ?cout<<"x="<<x<<" ?y="<<y<<endl;
? ?++k;
? ?}
? }
?}
?cout<<"k="<<k;
?return k;
}
}
void main()
{
int M,N;
cout<<"請(qǐng)輸入整數(shù)M:";
cin>>M;
cout<<"請(qǐng)輸入整數(shù)N:";
cin>>N;
f(M,N);
}
*/
/*第十六題:求s=2+22+222+...+222...2的和,即第n
個(gè)加數(shù)是一個(gè)n位的整數(shù),
且各數(shù)位上的數(shù)字均為2,例如當(dāng)n=4時(shí),s=2+22
+222+2222。
要求設(shè)計(jì)一個(gè)函數(shù)int f(int n)求每一個(gè)加數(shù),在main()中用累
加求和方式求出總和。
#include<iostream>
using namespace std;
int f(int N)
{
int i,p=0;
for(i=1;i<=N;i++)
?p=p*10+2;
return p;
}
int main()
{
int s=0,i,n;
cout<<"input n:";
cin>>n;
for(i=1;i<=n;i++)
? ?s=s+f(i);
cout<<"2+22+222''''''="<<s<<endl;
return 0;
}
*/
//第十七題:所有能被13整除又能被17整除且
末位不是偶數(shù)的三位數(shù)有幾個(gè)?最大的一個(gè)?
//如何處理多個(gè)數(shù)中輸出最大的
/*
#include<iostream>
using namespace std;
int main()
{
int i=100,j=0,a;
for(;i<=999;i++)
{
?if(i%13==0&&i%17==0&&i%2!=0)
?{ ? a=i;
? j++;}
}
cout<<a<<" ? "<<j<<endl;
return 0;
}
*/
//第十八題:基本解決,有兩個(gè)疑問,為何不能執(zhí)行
,為何寫1.0
/*
#include<iostream>
using namespace std;
double f(int n)
{
if(n==1)
return 1.0;
else if(n==2)
return 2.0;
else
? ?return f(n-1)+f(n-2);
}
void main()
{
double sum=0;
int i;
for(i=1;i<=20;i++)
?sum+=f(i)/f(i+1);
cout<<sum<<endl;
cout<<f(i)/f(i+1);
}*/
*/
/*第二十題:從鍵盤上輸入一個(gè)正整數(shù),判別它是否為
一回文數(shù)。如:123321
#include<iostream>
using namespace std;
void main()
{
int a,b,c=0,d;
cout<<"請(qǐng)輸入正整數(shù)"<<endl;
?cin>>d;
b=d;
while(b)
{
?a=b%10;
?c=c*10+a;
?b=b/10;
}
if(d==c)
?cout<<"yes";
else
?cout<<"NO";
}
*/