C语言习题及解答Word文档下载推荐.docx
《C语言习题及解答Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言习题及解答Word文档下载推荐.docx(39页珍藏版)》请在冰点文库上搜索。
s2=4*PI*r*r;
V=4.0/3*PI*r*r*r;
L=%.2f,s1=%.2f,s2=%.2f,V=%.2f\n"
L,s1,s2,V);
5、有三个电阻r1、r2、r3并联,编写程序计算并输出并联后的电阻r。
已知电阻并联公式为:
{floatr,r1,r2,r3;
Inputr1,r2,r3:
r1,&
r2,&
r3);
r=1/(1/r1+1/r2+1/r3);
r=%.2f\n"
r);
6、由键盘输入一个10-99之间的整数,将该数分解,分别输出其个位数字和十位数字。
例如,输入85,输出:
5,8。
提示:
用算术运算中的整除和取余运算实现。
{intx,a,b;
%d"
x);
a=x%10;
b=x/10;
printf(“a=%d,b=%d\n"
a,b);
7、编写程序,输入三角形的三条边,计算并输出三角形的面积。
(注意输入的三条边必须要能构成一个三角形)求三角形的面积公式为
其中s=(a+b+c)/2。
math.h>
scanf("
c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("
8、周期为T秒的人造卫星离地面
的平均高度H的计算公式为:
其中:
M=6×
1024kg是地球质量,R=6.371×
106m是地球半径。
编写程序,输入人造卫星的周期T,计算并输出人造卫星离地面的高度H。
算法提示:
求xy结果的数学函数是pow(x,y)
{doubleM=6E24,R=6.371E6,T,H,x;
InputT:
%lf"
T);
x=6.67E-11*M*T*T/(4*PI*PI);
H=pow(x,1.0/3)-R;
H=%.2E\n"
H);
9、求任意三个整数的平均值。
要求:
输入数据与输出结果都应有相应的提示信息。
且输出数据取小数点后两位数字显示。
{floata,b,c,ave;
printf(“Input3numbers:
”);
ave=(a+b+c)/3;
printf(“average=%.2f\n"
ave);
10、输入一个字符,并输出。
其中有一个条件是如果该字符是小写的英文字母,则需把它转换成大写字母再输出。
{charch;
if(ch>
='
a'
&
ch<
z'
)
ch=ch-32;
%c\n"
ch);
11、输入年号,判断并输出该年是否为闰年。
所谓闰年,是指能被4整除,但不能被100整除;
或能被400整除的年份。
{intyear;
Inputyear:
year);
if(year%4==0&
year%100!
=0||year%400==0)
%disaleapyear.\n"
year);
else
%disnotaleapyear.\n"
12、编写程序,输入一个字符存入变量ch中,根据该字符的ASCII码值判断并输出字符的类型,即字母(alpha)、数字(numeric)或其他字符(other)
if((ch>
A'
Z'
)||(ch>
))
alpha\n"
elseif(ch>
0'
&
ch<
9'
numeric\n"
else
other\n"
13、有一个函数,编写程序,输入x的值,计算并输出y值。
{doublex,y;
Inputx:
if(x<
-1)
y=x*x*x-1;
elseif(x<
=1)y=-3*x+1;
=10)
y=3*exp(2*x-1)+5;
elsey=5*x+3*log10(2*x*x-1)-13;
y=%.2f\n"
y);
14、从键盘输入三个数,代表三条线段的长度。
请编写程序,判断这三条线段组成的三角形是什么类型(等边、等腰、不等边或不能构成三角形)。
{floata,b,c;
Inputa,b,c:
if(a+b<
=c||b+c<
=a||c+a<
=b)
Itisnotatriangle!
\n"
elseif(a==b&
b==c)
Itisaequilateraltriangle!
elseif(a==b||b==c||c==a)
Itisaisoscelestriangle!
Itisacommontriangle!
15、简单选择界面的编程,要求用switch实现多分支。
从键盘输入整数,输出不同的字符串:
输入1,输出Goodmorning;
输入2,输出Goodafternoon;
输入3,输出Goodevening;
输入4,输出Goodnight;
输入其它数字,输出Bye-bye。
{intx;
printf("
switch(x)
{case1:
Goodmorning\n"
break;
case2:
Goodafternoon\n"
case3:
Goodevening\n"
case4:
Goodnight\n"
default:
Byebye\n"
}
16、从键盘输入若干整数,以0结束,判断并输出其中的最大数。
{intx,max;
Scanf(“%d”,&
max=x;
While(x!
=0)
{if(x>
max)max=x;
max=%d\n"
max);
17、输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、空格、数字和其它字符的个数。
while(ch!
\n'
cn<
a=a+1;
b=b+1;
elseif(ch=='
'
c=c+1;
elseif(ch>
d=d+1;
e=e+1;
#include<
inta=0,b=0,c=0,d=0,e=0;
Inputastring:
while((ch=getchar())!
{if(ch>
b=b+1;
elseif(ch=='
)//ch==32
%d,%d,%d,%d,%d\n"
a,b,c,d,e);
数学表达式的写法:
x=6.67E-11*M*T*T/4*PI*PI;
×
x=6.67E-11*M*T*T/(4*PI*PI);
√
x=6.67E-11*M*T*T/4/PI/PI;
x=pow(6.67E-11*M*T*T/(4*PI*PI),1.0/3);
√2、scanf、printf函数的格式:
scanf("
//双引号间不要加其它任何符号
%lf%lf%lf"
//double型输入时应使用%lf
printf("
area);
//printf函数中常加其它说明字符
数学函数的使用方法;
同时需加上#include<
doublepow(doublex,doubley);
4、方法一:
使用scanf函数
//读入第一个字符
while(ch!
{
if(…)
┊
//读入其它字符
//循环之前读入第一个字符,以便第一次判断表达式是否成立;
循环体最后读入下一个字符,以便判断循环是否继续执行
5、5/9.0*(F-32)
5.0/9.0*(F-32)
5*(F-32)/9
18、分别用while、do-while和for语句计算(即求1!
+2!
+3!
+…+20!
),并试着简化程序。
inti;
doublefact,sum;
i=1;
sum=0;
fact=1;
while(i<
=20)
fact=fact*i;
sum+=fact;
i++;
%.0lf\n"
sum);
19.计算:
intn=1;
doublesum=0;
while(n<
{
sum+=n*n+n-2.3;
n++;
%lf\n"
20、输出所有的水仙花数。
水仙花数是指一个3位数,各位数字的立方和等于该数本身,例如153=13+53+33。
分析:
对每一个3位数来说,分解出它们的个位、十位和百位,然后判断它们的立方和是否等于该数本身。
{inti,a,b,c;
Thenarcissusnumbersare:
for(i=100;
i<
=999;
i++)
a=i/100;
b=i%100/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
%d"
i);
21.
之和。
inti;
doublea,b,sum=0;
a=2;
b=1;
for(i=1;
i<
=20;
i++)
{
sum+=a/b;
a=a+b;
b=a-b;
sum=%lf\n"
22、用循环语句编写程序,输出如下图案:
******
*****
****
***
**
*
inti,j;
=6;
i++)//输出一行
for(j=1;
j<
=i-1;
j++)//输出空格
=7-i;
j++)//输出*
*"
//*后有个空格
23.
a和n均由键盘输入。
inta,n,i;
doublex=0,sum=0;
Inputa,n:
%d%d"
n);
=n;
{x=x*10+a;
sum+=x;
sum=%.0lf\n"
24、输出3~100之间的全部素数
voidmain()
{intm,k,i;
for(m=3;
m<
=100;
m+=2)
{k=sqrt(m);
for(i=2;
=k;
{if(m%i==0)break;
if(i==k+1)
%-5d"
m);
25、从键盘输入10个整数存放在一个一维数组中,找出最大的数并输出该数及其下标。
inta[10],i,max,k;
for(i=0;
10;
a[i]);
max=a[0];
k=0;
for(i=1;
if(max<
a[i])
{max=a[i];
k=i;
a[%d]=%d\n"
k,max);
26、设有一个已按从大至小顺序排好的数列存放在一维数组中,依次为81,76,66,61,54,47,36,30,22,16。
现输入一个数,仍按原来的排序规律将其插入到数组中,试编程。
inta[11]={81,76,66,61,54,47,36,30,22,16};
intx,i;
for(i=9;
i>
=0;
i--)
if(a[i]<
x) a[i+1]=a[i];
elsebreak;
a[i+1]=x;
=10;
%5d"
a[i]);
另解
inta[11]={81,76,66,61,54,47,36,30,22,16};
intx,i,j;
Inputanumber:
for(i=0;
=9;
if(a[i]<
x)break;
for(j=9;
j>
=i;
j--)
a[j+1]=a[j];
a[i]=x;
27、从键盘输入N个数(在数组中从下标为0的位置开始存放),N由下面的符号常量定义。
用冒泡法将下标为m到下标为n的数按降序排序。
m和n通过键盘输入。
假设0≤m<N-1,m<n≤N-1
#defineN15
#defineN15
{inta[N],i,j,t,m,n;
N;
m,&
n-m;
for(j=m;
n-i;
j++)
if(a[j]<
a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
28、二分法又称为折半查找法,它用于在一个有序的序列上查找指定的数。
其基本思路是:
先确定待查元素的范围,将其分成两半,然后测试中间位置元素的值,如果相等,则找到待查元素。
如果待查元素的值大于中间元素,就缩小待查范围,只测试中间元素之后的元素;
反之,测试中间元素之前的元素,测试方法同前。
试编写程序,应用折半查找法从存有10个整数的a数组中对输入的关键字m进行查找,若找到,输出其下标值;
反之,输出提示。
#include<
#defineN10
{inta[N]={6,9,15,25,26,36,48,53,60,65};
intlow=0,high=N-1,mid,m,found=0;
请输入查找数据:
m);
if(m>
=a[low]&
=a[high])
while(!
found&
low<
=high)
{mid=(low+high)/2;
if(a[mid]==m)
found=1;
elseif(m>
a[mid])
low=mid+1;
elsehigh=mid-1;
if(found)printf("
元素值为%d的数组下标是%d。
m,mid);
elseprintf("
未找到。
29、输入一个M行M列的二维数组,计算两条对角线上的元素之和(放在一个变量中)。
M由下面的符号常量定义:
#defineM5
#defineM5
inta[M][M],i,j,sum=0;
Inputarraya:
M;
for(j=0;
j<
j++)
a[i][j]);
if(i==j||i+j==M-1)
sum+=a[i][j];
sum=%d\n"
30、输入一个M行M列的二维数组,分别计算两条对角线上的元素之和。
inta[M][M],i,j,sum1=0,sum2=0;
……//输入a
{
sum1+=a[i][i];
sum2+=a[i][M-i-1];
sum1=%d,sum2=%d\n"
sum1,sum2);
31、输入一个M行M列的二维数组,计算四周元素之和。
{scanf("
if(i==0||i==M-1||j==0||j==M-1)
32、有一个班,有4个学生,5门课。
①求各门课的平均分;
②找出有两门以上课程不及格的学生,输出它们的学号和全部课程成绩及平均成绩。
③找出平均成绩在90分以上或全部课程成绩在85分以上的学生,输出它们的学号和全部课程成绩。
#defineM4
#defineN6
inti,j,count;
floatsum,average;
inta[M