C语言期末考试.docx
《C语言期末考试.docx》由会员分享,可在线阅读,更多相关《C语言期末考试.docx(21页珍藏版)》请在冰豆网上搜索。
![C语言期末考试.docx](https://file1.bdocx.com/fileroot1/2023-1/23/e1145f70-af08-421e-8048-fe2bd862150d/e1145f70-af08-421e-8048-fe2bd862150d1.gif)
C语言期末考试
1/******计算圆的面积和周长******/
#include"stdio.h"
#definePI3.141592654
#defineR2.0
doubleF1(doubler);
doubleF2(doubler);
intmain()
{
printf("mianji=%f",F1(R));
printf("\tzhouchang=%f\n",F2(R));
return0;
}
doubleF1(doubler)
{
return(PI*r*r);
}
doubleF2(doubler)
{
return(2.0*PI*r);
}
2/*三个数最大*/
#include"stdio.h"
floatmax3(floatx,floaty,floatz)
{
floatmax=x;
if(z>y)
{
if(z>x)
max=z;
}
else
{
if(y>x)
max=y;
}
printf("Themaxis:
%f",max);
}
intmain()
{
floata,b,c;
printf("Input3realnumbers:
\n");
scanf("%f%f%f",&a,&b,&c);
max3(a,b,c);
return0;
}
3/*求一元二次方程的解*/
#include"stdio.h"
#include"math.h"
voidsolv_quadr_equa(floata,floatb,floatc)
{
if(a==0.0)
if(b==0.0)
printf("noanswerduetoinputerror\n");
else
printf("thesignglerootis%f\n",-c/b);
else
{
doubledisc,twoa,term1,term2;
disc=b*b-4*a*c;
twoa=2*a;
term1=-b/twoa;
term2=sqrt(fabs(disc))/twoa;
if(disc<0.0)
printf("complexroot:
\nrealpart=%f,imagpart=%f\n",term1,term2);
else
printf("realroot:
\nroot1=%f,root2=%f\n",term1+term2,term1-term2);
}
}
voidmain()
{
floata,b,c;
printf("Input3realsnumbers:
\n");
scanf("%f%f%f",&a,&b,&c);
solv_quadr_equa(a,b,c);
return0;
}
4/*求十年之后的人口*/
#include"stdio.h"
intmain()
{
doublem=13;
inti=1;
while(i<=10)
{
m=m*(1+0.002);
i++;
}
printf("Populationtenyearslateris:
%f\n",m);
return0;
}
5/*计算Fibonacci数*/
#include"stdio.h"
voidmain()
{
intfib1=1,fib2=1,fib,i=3;
while(i<=12)
{
fib=fib1+fib2;
fib1=fib2;
fib2=fib;
i++;
}
printf("TheFibonaccinumberafter1yearis:
%d\n",fib);
}
6/*百钱买百鸡*/
#include"stdio.h"
voidmain()
{
intcocks=0;
printf("%8s%8s%8s\n","cocks","hens","chicks");
while(cocks<=19)
{
inthens=0;
while(hens<=33)
{
intchicks;
chicks=100-cocks-hens;
if(5*cocks+3*hens+chicks/3.0==100)
printf("%8d%8d%8d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
return0;
}
7用c语言描述下列命题
(1)a小于b或a小于c.
(1)a
(2)a或b都大于c.
(2)a>c&&b>c
(3)a和b其中之一小于c.
(3)a(4)a是非正整数
(4)!
(a>0&&(int)a==a)
(5)a是奇数。
(5)a>0&&a%2==1
(6)a不能被b整除
(6)a%b!
=0
(7)角A在第一象限或者第三象限。
(7)#definePI3.1415(A>=0&&A<=PI/2)||(A>=PI&&A<=3*PI/2)
(8)a是一个带小数的正数,而b是一个带小数的负数。
(8)(a>0&&(int)a!
=a)&&(b<0&&(int)b!
=b)
8写出下列表达式的值
(1)1<4&&4<7
值为1
(2)1<4&&7<4
值为0
(3)!
(2<=5)
值为0
(4)!
(1<3)||(2<=5)
值为1
(5)!
(4<=6)&&(3<=7)
值为1
9若x=3,y=z=4,求下列表达式的值。
1)(z>=y>=x)?
1:
0
1)
z>=y为1,而1>=x为0,
表达式的值为0
2)z>=y&&y>=x
1)z>=y为1,而y>=x为1;1&&1为1.
10若x=3,y=2,z=1求下列表达式的值
1)xy:
x
1)x结果为x.
2)xx++:
y++
1)x3)z+=(xx++:
y++)
2)x12写出以下程序段的输出结果。
(1)intx=40,y=4,z=4;
x=y==z;printf("%d\n",x);
x=x==(y==z);printf("%d\n",x);
(3)intx=1,y=1,z=1;
y=y+z;
x=x+y;
printf("%d\n",xy:
x);
printf("%d\n",xx++:
y++);
printf("%d\n",x);
printf("%d\n",y);
x=3;
y=z=4;
printf("%d\n",(x>=y>=x)?
1:
0);
printf("%d\n",z>=y&&y>=x);
(4)#include"stdio.h"
intmain()
{
inta;
scanf("%d",&a);
if(a>=0)
printf("plus\n");
else
printf("minus\n");
return0;
}
(6)#include"stdio.h"
intmain()
{
intn=0;
while(n++<=1)
printf("%d\t",n);(如果没有大括号,就代表他接下来这一句是属于上面那句的)
printf("%d\n",n);(先引用后增值,所以,n不会到while语句中,直接增值。
故为3)
return0;
}
13设计c语言程序,判断所输入年份是否为闰年
/*判断所输入年份是否为闰年*/
#include"stdio.h"
voidmain()
{
charch;
intyear;
do
{
printf("entertheyear\n");
scanf("%d%",&year);
if(year%4==0)
if(year%100!
=0)
printf("%disLEAP!
\n",year);
elseif(year%4000==0)
printf("%disLEAP!
\n",year);
else
printf("%disNOTLEAP!
\n",year);
else
printf("ifContinued,pressY,otherwisepressanykeyabort\n");
scanf("%ls",&ch);
}
while(ch=='Y'||ch=='y');
}
14/*计算三角形的面积*/
#include"stdio.h"
#include"math.h"
voidmain()
{
doublea,b,c,s;
printf("input3realnumbers:
\n");
scanf("%lf%lf%lf",&a,&b,&c);
if((a+b)>c&&(b+c)>a&&(a+c)>b)
{
s=(a+b+c)*0.5;
printf("\nAreaofthetriangleis%lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));
}
else
printf("It`snotatriangle\n");
}
15/*第n年母牛数*/
#include"stdio.h"
intmain(void)
{
inti,year,oxNum,oxNum1,oxNum2,oxNum3;
printf("inputyear:
");
scanf("%d",&year);
for(i=1;i<=year;i++)
{
if(i<4)
oxNum=oxNum1=oxNum2=oxNum3=1;
else
{
oxNum=oxNum1+oxNum3;
oxNum3=oxNum2;
oxNum2=oxNum1;
oxNum1=oxNum;
}
printf("i=%2doxnumber=%3d\n",i,oxNum);
}
return0;
}
16/*递归计算n!
的函数*/
#include"stdio.h"
longrfact(intn)
{
if(n<0)
{
printf("Itisnomeaning.\n");
return(-1);
}
elseif(n<=1)
return
(1);
else
return(n*rfact(n-1));
}
intmain()
{
inta;
printf("pleaseinputanumber:
\n");
scanf("%d",&a);
rfact(a);
printf("%d\n",rfact(a));
return0;
}
17/*正序反序显示*/
#include"stdio.h"
#defineN10
intmain()
{
inti;
intstudent_age[N];
for(i=0;i<=N;i++)
{
printf("inputaage:
");
scanf("%d",&student_age[i]);
}
for(i=0;i<=N;i++)
printf("%6d",student_age[i]);
printf("\n");
for(i=N;i>=0;i--)
printf("%6d",student_age[i]);
printf("\n");
return0;
}
18/*顺序查找学生年龄*/
#include"stdio.h"
#include"stdlib.h"
intmain()
{
inti,age;
intstudent_age[]={10,15,12,14,13,11,16,19,17,18};
printf("请输入要查找的年龄:
");
scanf("%d",&age);
for(i=0;i<10;i++)
if(student_age[i]==age)
{
printf("第%d位学生的年龄是%d.\n",i+1,student_age[i]);
return0;
}
printf("找不到这个年龄的学生。
\n");
return0;
}
19/*折半查找学生年龄*/
#include"stdio.h"
#include"stdlib.h"
#defineN19
intmain()
{
inta[N]={2,5,6,7,8,13,15,17,19,21,23,25,26,27,28,35,41,52,63};
intmid,top,bot,x;
top=0;
bot=N-1;
printf("请输入要查找的元素:
");
scanf("%d",&x);
while(top<=bot)
{
mid=(top+bot)/2;
if(x==a[mid])
{
printf("\n找到的元素%d是:
a[%2d]\n",x,mid);
return0;
}
elseif(x>a[mid])
top=mid+1;
elsebot=mid-1;
}
printf("没有找到该元素.\n");
return0;
}
20/******冒泡排序******/
#include
#defineN8
intmain()
{
inta[N]={9,8,3,7,5,2,6,1};
inti,j,temp;
for(j=0;j<=N-2;j++)
{
for(i=0;i<=N-j-1;i++)
if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
}
printf("\n排序结果:
");
for(i=0;i<=N-1;i++)
printf("%3d",a[i]);
printf("\n");
return0;
}
21#include"stdio.h"
voidmain()
{
inta[2]={0},i,j,k=2;
for(i=0;ifor(j=0;ja[j]=a[i]+1;
printf("%d",a[k]);
}
#include"stdio.h"
voidmain()
{
inta[6],i;
for(i=1;i<6;i++)
{
a[i]=6*(i-1+4*(i/3))%5;
printf("%2d",a[i]);
}
}
#include"stdio.h"
voidmain()
{
inti=0,j=7,k,a[8]={6,2,11,4,5,9,7,8};
while(i{k=a[i];a[i]=a[j];a[j]=k;i++;j--;}
for(i=0;i<8;i++)
printf("%3d",a[i]);
}
22有17个人围成一圈,开始报数。
凡报3的人就退出,下一个人又从一开始报数,直到最后只剩下一个人为止。
请问此人原来的位置是多少?
#include"stdio.h"
voidmain()
{
intp[18]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
inti=1,j=1,k=1,m=17;
do
{
if(p[i])
{
if(j++>=3)
{
p[i]=0;
j=1;
m--;
}
else
k=i;
if(m<=1)break;
}
if(i>=17)
i=1;
else
i++;
}
while
(1);
printf("\n%d",k);
return0;
}
23#include"stdio.h"
voidmain()
{
inta[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{
for(j=1;j<6;j++)
printf("%2d",a[i][j]);
}
printf("\n");
}
#include"stdio.h"
voidmain()
{
inti,j,row,col,m;
intarr[3][3]={{100,200,300},{228,172,-130},{-748,42,634}};
m=arr[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(arr[i][j]{
m=arr[i][j];
row=i;
col=j;
}
printf("\n%d,%d,%d\n",m,row,col);
}
24
(1)对于说明doublex,*p;正确的表达式是:
()
A.p=&x
正确
B.p=x
错误:
x为double型,p是指向double型的指针类型
C.*p=&x
错误:
x是指针p的引用,而&x是地址
D.*p=x
错误:
P为空指针,不能赋值
(2)对于说明doublex=3.141593,*pointer&x;
均表示地址的表达式是:
()
A.&x,&*pointer,&pointer
正确
B.*&x,*(&pointer),&pointer
给出变量x的地址
C.&(&(*pointer)),&(*pointer),*pointer
给出指针变量x的地址
D.&(*&pointer),&*&pointer,*&*pointer
给出变量x的指针pointer的地址
(3)对于说明int*p1,*p2,a=5,b;均为正确的赋值语句为()
A.p1=&a;p2=&p1;
B.p1=&a;p2=&b;*p1=p2;
C.p1=&a;p2=p1;
D.*p2=b;*p2=*p1;
E.p2=p1;p1=&a;
F.*p2=a;
(4)对于说明int*p1,*p2,a=5,b;
char*q,ch;
正确的程序段是()
A.main()
{
*p=99;
}
错误:
指针没有被初始化之前不能被使用
B.main()
{
p=&ch;
s=p;
}错误:
地址类型与指针类型不一致,不可互相赋值
C.main()
{
p=&i;
q=ch;
p=q;
}
错误:
p与q的类型不一致,不可互相赋值
D.main()
{
p=&i;
q=ch;
*p=55;
*q=*p;
}正确
25阅读程序,指出程序的运行结果
(1)#include"stdio.h"
main()
{
intn=10,*p=&n;
*p=5;
printf("%d\n",n);
}
(2)#include"stdio.h"
main()
{
inta=2,b=4,c=6;
int*pa=&a,*pb=&b,*p;
*(p=&c)=*pa*(*pb);
printf("%d\n",c);
}
26从键盘输入三个整数,要求设3个指针变量p1,p2,p3,使p1指向3个数中的最大者,p2指向次大者,p3指向最小者。
按照由大到小的顺序输出这三个数。
#include"stdio.h"
intmain()
{
int*p1,*p2,*p3;
inta,b,c,t;
printf("inputthreenumbers\n");
scanf("%d%d%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
if(*p1<*p2)
{
t=*p1;*p1=*p2;*p2=t;
}
if(*p1<*p3)
{
t=*p1;*p1=*p3;*p3=t;
}
if(*p2<*p3)
{
t=*p2;*p2=*p3;*p3=t;
}
printf("%d%d%d",*p1,*p2,*p3);
return0;
}
27/*Note:
YourchoiceisCIDE*/
#include"stdio.h"
intmain()
{
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
printf("%d,%d\n",*p+2,*(p+2));
return0;
}
(2)
/*Note:
YourchoiceisCIDE*/
#include"stdio.h"
intmain()
{
inti;
inta[10],*p=a;
for(i=0;i<10;i++)*p++=2*i;
for(i=0;i<10;i++)printf("%d,",a[i]);
printf("\n");
return0;
}