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