级电信C语言期末考前例题.docx
《级电信C语言期末考前例题.docx》由会员分享,可在线阅读,更多相关《级电信C语言期末考前例题.docx(20页珍藏版)》请在冰豆网上搜索。
![级电信C语言期末考前例题.docx](https://file1.bdocx.com/fileroot1/2022-12/16/0059a237-53e8-40fd-a188-55af32eaf763/0059a237-53e8-40fd-a188-55af32eaf7631.gif)
级电信C语言期末考前例题
***********************************************
P1124.6
***********************************************
根据函数写一程序,输入x值,输出y值。
解:
#include
main()
{
intx,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1)
{
y=x;
printf("x=%3d,y=x=%d\n",x,y);
}
elseif(x<10)
{
y=2*x-1;
printf("x=%3d,y=2*x-1=%d\n",x,y);
}
else
{
y=3*x-11;
printf("x=%3d,y=3*x-11=%d\n",x,y);
}
}
***********************************************
P1134.8
***********************************************
给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。
#include
main()
{
floatscore;//记录百分制成绩
chargrade;//记录等级
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{//成绩不合法
printf("\n输入有误,请重新输入:
");
scanf("%f",&score);
}
if(score>=90)
grade='A';
elseif(score>=80)
grade='B';
elseif(score>=70)
grade='C';
elseif(score>=60)
grade='D';
elsegrade='E';
printf("成绩是%5.1f,相应的等级是%c\n",score,grade);
}
***********************************************
P1405.3
***********************************************
输入两个正整数m和n,求其最大公约数和最小公倍数。
#include
main()
{
intm,n,max,min;
scanf("%d%d",&m,&n);
//最大公约数从两个数中较小的一个开始寻找
if(melsemax=n;
while(m%max!
=0||n%max!
=0)
max--;
//最小公倍数从两个数中较大的一个开始寻找
if(m>n)min=m;
elsemin=n;
while(min%m!
=0||min%n!
=0)
min++;
printf("max=%d,min=%d\n",max,min);
}
***********************************************
P1405.8
***********************************************
打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。
例如:
153是一个水仙花数,因为153=13+53+33。
#include
main()
{
intx=100,a,b,c;
while(x>=100&&x<1000)//100~999
{
a=x%10;//个位
b=x/10%10;//十位
c=x/100;//百位
if(x==a*a*a+b*b*b+c*c*c)printf("%5d",x);
x++;
}
}
***********************************************
P1415.9
***********************************************
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出1000之内的所有完数,并按下面格式输出其因子:
6itsfactorsare1、2、3
main()
{
intm,i,j,s;
for(m=6;m<1000;m++)//考虑1000以内的自然数
{
s=1;//s表示因子的和,1是所有自然数的因子
for(i=2;iif(m%i==0)s=s+i;//如果i是因子
if(m==s)//m的因子和与m相等
{
printf("%5ditsfastorsare1",m);
for(j=2;jif(m%j==0)
printf("%d",j);
printf("\n");
}
}
}
或
main()
{
intm,i,j,s;
for(m=6;m<1000;m++)
{
s=m-1;
for(i=2;iif(m%i==0)//如果i是m的因子
s=s-i;//从s中减去该因子
if(s==0)//说明m与其因子和相等
{
printf("%5ditsfastorsare1",m);
for(j=2;jif(m%j==0)
printf("%d",j);
printf("\n");
}
}
}
***********************************************
P1415-13
***********************************************
用迭代法求平方根
迭代公式为:
xn=xn-1-f(xn-1)/f'(xn-1)
#include
#include
main()
{
floatx0,x1,a;
scanf("%f",&a);//求a的平方根
x1=a/2;//迭代的初始值,可以给任意值
do
{
x0=x1;//记录前一个近似值
x1=(x0+a/x0)/2;//根据迭代公式计算新的近似值
}while(fabs(x0-x1)>=1e-5);//比较前后两个近拟值
printf("%.3f\n",x1);
}
***********************************************
P1415-14
***********************************************
用迭代法求方程的根
迭代公式为:
xn=xn-1-f(xn-1)/f'(xn-1)
#include
#include
main()
{
doublex0,x1,y;
x1=1.5;//给定一个初始近似值
do
{
x0=x1;//记录前一个近似值
y=2*x0*x0*x0-4*x0*x0+3*x0-6;//f(x0)
x1=x0-y/(6*x0*x0-8*x0+3);//计算新的近似值
}while(fabs(x1-x0)>1e-6);//比较前后两个值
printf("x=%.3f\n",x1);
}
***********************************************
P1415-15
***********************************************
用二分法求方程的根。
#include
#include
main()
{
doublem,a,b,fm,fa,fb;
a=-10;b=10;/*[-10,10]之间有一个根*/
while(fabs(b-a)>1e-3)
{
m=(a+b)/2;/*中点*/
fa=2*a*a*a-4*a*a+3*a-6;
fb=2*b*b*b-4*b*b+3*b-6;
fm=2*m*m*m-4*m*m+3*m-6;
if(fm*fa>0)/*f(m)与f(a)同号*/
a=m;
else
b=m;
}
printf("x=%.3f\n",(a+b)/2);
}
***********************************************
例题
***********************************************
编程计算级数
的近似值
#include
#include
main()
{
intn;
floatex,x,item;
x=1;//近似计算e1
ex=1;
item=1;
n=1;
while
(1)
{
item*=x/n++;//计算一项
ex+=item;//累加
if(fabs(item)<1e-6)
break;
}
printf("%f\n",ex);
}
*********************************************
例题
***********************************************
编程近似计算定积分
#include
#include
main()
{
floata,b;//定积分的上下限
floatx,dx,sfx;
a=0;
b=3.14;
dx=1e-3;//区间长度
for(x=a,sfx=0;x<=b;x+=dx)
sfx+=dx*sin(x);
printf("%f\n",sfx);
}
***********************************************
P1686-2
***********************************************
选择排序
#include
#defineN10
main()
{
inta[N],t,i,j,min;
printf("Input:
");
for(i=0;iscanf("%d",&a[i]);//输入数据
for(i=0;i{
min=i;//记录下标
for(j=i+1;jif(a[j]min=j;
t=a[min];//交换
a[min]=a[i];
a[i]=t;
}
for(i=0;iprintf("%d",a[i]);
}
***********************************************
蒙特卡洛近似计算
***********************************************
//近似计算定积分
#include
#include
#include
#include
#defineN50000
#definePI3.1415926
main()
{
doublex,y;
unsignednum,j;
srand((unsigned)time(NULL));
num=0;
for(j=0;j{
x=(double)rand()/RAND_MAX*PI;
y=(double)rand()/RAND_MAX;
if(ynum++;
}
printf("%lf\n",(double)num/N*PI);
}
//近似计算球体体积
#include
#include
#include
#defineN50000
main()
{
doublex,y,z;
unsignednum,j;
srand((unsigned)time(NULL));
num=0;
for(j=0;j{
x=(double)rand()/RAND_MAX;
y=(double)rand()/RAND_MAX;
z=(double)rand()/RAND_MAX;
if(x*x+y*y+z*z<1)
num++;
}
printf("%lf\n",(double)num/N*8);
}
***********************************************
P2187-1
***********************************************
公约数公倍数
intminmult(intm,intn)
{
intj;
if(m>n)j=m;elsej=n;
while(j%m!
=0||j%n!
=0)
j++;
returnj;
}
intmaxdivisor(intm,intn)
{
intj;
if(mwhile(m%j!
=0||n%j!
=0)
j--;
returnj;
}
main()
{
inta,b;
printf("Inputa&b:
");
scanf("%d%d",&a,&b);
printf("%d%d\n",minmult(a,b),maxdivisor(a,b));
}
***********************************************
P2187-2
***********************************************
一元二次方程求根
方法一:
#include
#include
voidgetroot(floata,floatb,floatc);//函数声明
voidmain()
{
floata,b,c;
printf("Inuta,b,c:
");
scanf("%f%f%f",&a,&b,&c);//输入系数
getroot(a,b,c);//调用函数计算方程根
}
voidgetroot(floata,floatb,floatc)
{
floatd,x1,x2;
d=b*b-4*a*c;
x1=(-b+sqrt(d))/2/a;
x2=(-b+sqrt(d))/2/a;
printf("x1=%.1fx2=%.1f\n",x1,x2);
}
方法二:
#include
#include
voidgetroot(floata,floatb,floatc,floatx[3]);//函数声明
voidmain()
{
floata,b,c,x[3];
printf("Inuta,b,c:
");
scanf("%f%f%f",&a,&b,&c);//输入系数
getroot(a,b,c,x);//调用函数计算方程根
printf("x1=%.1fx2=%.1f\n",x[1],x[2]);
}
voidgetroot(floata,floatb,floatc,floatx[3])
{
floatd;
d=b*b-4*a*c;
x[1]=(-b+sqrt(d))/2/a;
x[2]=(-b+sqrt(d))/2/a;
}
方法三:
#include
#include
voidgetroot(floata,floatb,floatc,float*px1,float*px2)
{
floatd;
d=b*b-4*a*c;
*px1=(-b+sqrt(d))/2/a;
*px2=(-b+sqrt(d))/2/a;
}
voidmain()
{
floata,b,c,x1,x2;
printf("Inuta,b,c:
");
scanf("%f%f%f",&a,&b,&c);//输入系数
getroot(a,b,c,&x1,&x2);//调用函数计算方程根
printf("x1=%.1fx2=%.1f\n",x1,x2);
}
***********************************************
P2187-3
***********************************************
质数
intprime(int);//函数声明
voidmain()
{
intx;
printf("输入一个正整数\n\n");
scanf("%d",&x);
if(prime(x))printf("\n\n此数为素数\n\n");
elseprintf("\n\n此数不是素数\n\n");
}
intprime(intn)
{
intk;
for(k=2;k if(n%k==0)//余数为0
return0;
return1;/*是质数,返回1*/
}
***********************************************
***********************************************
排序,用函数实现
***********************************************
#include
#defineN10
//选择排序
voidselectsort(inta[],intn)
{
inti,j,k,t;
for(i=0;i{
k=i;//假设
for(j=i+1;jif(a[j]k=j;//用k记录其下标
t=a[k];a[k]=a[i];a[i]=t;
}
}
//起泡排序
voidbubblesort(inta[],intn)
{
intj,i,t;
for(j=0;jfor(i=0;iif(a[i]>a[i+1])
{
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}
main()
{
inta[N],i;
printf("Input:
");
for(i=0;iscanf("%d",&a[i]);
bubblesort(a,N);//函数调用
for(i=0;iprintf("%d",a[i]);
}
***********************************************
P2197-13
***********************************************
勒德让多项式
voidmain()
{
floatp(int,float);
intn;
floatx;
printf("输入n和x\n\n");
scanf("%d%f",&n,&x);
printf("\n\n%d阶勒德让多项式的值为:
%f\n\n",n,p(n,x));
}
floatp(intn,floatx)
{
if(n==0)return1;
elseif(n==1)returnx;
elsereturn((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/