admin管理员组文章数量:1530845
2023年12月26日发(作者:)
C语言程序设计(第三版)习题库
1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
#include
main(){
floatr,h,C1,Sa,Sb,Va,Vb;
scanf(__”%f”__,&r);
scanf(”%d”,__&h_);;
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,Cl,Sa,Sb,Va,Vb);
}
2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9
输出要求有文字说明,取位2小数。
#include
main(){
floatF,c;
scanf("%f",&F);
____c=5*(F-32)/9______;
printf("c=%.2f",c);
}
x1x3、有一函数:y2x11x10写一程序,输入3x11x10x值,输出y值。
#include
main(){
intx,y;
printf("输入x:");
scanf("%d",&x);
if(x<1){/*x<1*/
y=x;
printf("x=%3d,y=x=%dn",x,y);
}elseif(____x<10_______){/*1≤x-10*/
_____y=2*x-1_______;
printf("x=%3d,y=2*x-1=%dn",x,y);
}else{/*x≥10*/
y=3*x-11;
printf("x=%3d,y=3*x-11=%dn",x#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%d",y);
}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%dn",y);
}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%d",y);
}scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
y=x;
elseif(x>=1&&x<10)
y=2*x-1;
else
y=3*x-11;
printf("%d",y);
},y);
}
}
4、给定一个不多于5位的正整数,要求:①求它是几位数;②按逆序打印出各位数字。例如原数为321,应输出123。
#include
main(){
longintnum,m=0;
inti=0;
scanf("%ld",&num);
while(num>0){
i++;/*统计长度*/
m=m*10+num%10;
num=num/10;
}
printf("数字长度为:%d",i);
printf("逆序数字为:%dn",m);
}
5、以下程序实现的功能:求三个数的最大值
#include
main(){
inta,b,c,max;
scanf("%d%d%d",&a,&b,&c);
if(a>b){
if(a>c)max=a;
else max=c;
}else{
if(b>c) max=b;
else
max=c;
}
printf("max=%d",max);
}
#include
main(){
intx,y,z,t=0;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=y;y=x;x=t;}
if(x>z)
{t=z;z=x;x=t;}
if(y>z)
{t=z;z=y;y=t;}
printf("%dn",z);
}
6、输入两个正整数m和n,求其最大公约数和最小公倍数。
/*枚举法*/
#include
main(){
longm,n,i=1,j,s;
scanf("%ld,%ld",&m,&n);
for(;i<=m&&i<=n;i++){
if(m%i==0&&n%i==0)s=i;
}
if(m>=n)j=m;
elsej=n;
for(;!(j%m==0&&j%n==0);j++);
printf("s=%ld,j=%ldn",s,j);
}
#include
main(){
inta,b,k,temp,i,p;
scanf("%d,%d",&a,&b);
if(a>b)
temp=b;
else
temp=a;
for(i=2;i<=temp;i++)
{if(a%i==0&&b%i==0)
k=i;
}
printf("%dn",k);
p=a*b/k;
printf("%dn",p);
}
/*辗转相除*/
#include
main(){
intm,n,k,j,p,r=1;
scanf("%d,%d",&m,&n);
k=m>n?m:n;
j=m>n?n:m;
do{
r=k%j;
k=j;
j=r;
}while(r!=0);
printf("%d,%d",k,m*n/k);
}
/*反复减法*/
#include
main(){
intm,n,k,j,p,r=1;
scanf("%d,%d",&m,&n);
k=m>n?m:n;
j=m>n?n:m;
do{
p=k-j;
if(j>p){k=j;j=p;}
elsek=p;
}while(p!=0);
printf("%d,%d",k,m*n/k);
}
7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include"stdio.h"
main(){
charc;inti=0,j=0,k=0,l=0;
while((c=getchar())!=’n’){
if(c>=’A’&&c<=’Z’||c>=’a’&&c<=’z’)
i++;//英文字母统计
elseif(c>=’0’&&c<=’9’)
j++;//数字统计
elseif(c==’’)
k++;//空格统计
elsel++;
}
printf("i=%d,j=%d,k=%d,l=%dn",i,j,k,l);
}
8、求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。
#include
main(){
inta,n;
longb=0,sum=0;
scanf(“%d%d”,&a,&n);
for(i=1;i<=n;i++){
b=b*10+a;
sum=sum+b;
}
printf(“%ld”,sum);
}
9、打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1+5+3。
【程序1】
#include
main(){
inti,m,n,k;
for(i=100;i<1000;i++){
m=__i%10__;
n=_i/10%10__;
k=i/100;
if(__m*m*m+n*n*n+k*k*k==i__)
printf("%5d",i);
333
}
}
【程序2】
#include
main(){
inti,a,n,s;
for(i=100;i<=999;i++){
n=i;s=0;
while(n>0){
a=__n%10__;
s+=a*a*a;
n/=__10__;
}
if(__s==i__)printf(“%d”,i);
}
10、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:6
its factors are 1、2、3
#include
main(){
inta,i,m;
for(a=1;a<=1000;a++){
for(__i=1,m=0__;i<=a/2;i++)
if(!(a%i))__m+=i__;
if(m==a)printf(“%4d”,a);
}
}
11、利用:/4=1-1/3+1/5-1/7+….级数求的值,直到最后一项的绝对值小于10-6为止。求绝对值的函数为fabs()。
#__include
#include
main(){
inti=1,flag=1;
doublesum=0.0,s;
do{
s=__1.0/(2*i-1)__;
sum+=s*flag;
i++;
__flag=-flag__;
}while(__fabs(s)>1e-6__);/**/
printf("pi=%f",__4*sum__);
}
11、有一分数序列:2/1,3/2,5/3,求出这个数列的前20项之和。
#include
#defineN20
main(){
inti=1;
doublex=1,y=2,sum=0;
while(__i<=20__){
sum=sum+__y/x__;
y=___x+y__;
x=__y-x__;
i++;
}
printf("%fn",sum);
}
12、一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?
#include
main(){
inti,n=10;
doubleh=100,s=100;
for(i=2;i<=n;i++){
h*=__0.5__;
s=__s+h*2__;
}
printf("s=%f,h=%fn",s,h);
}
13、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
#include
#defineN10
main(){
inti=1,sum=1;
while(i++ sum=__(sum+1)*2__; printf("sum=%dn",sum); } 14、用迭代法求。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include #include main(){ floatx0,x1,a; scanf("%f",&a); x1=a/2; do{ x0=x1; x1=__(x0+a/x0)/2__; }while(__x1>1e-5__); printf("%gn",x1); } 15、用牛顿迭代法求方程2x34x23x60在1.5附近的根。 #include #include__ #definef(x)2*x*x*x-4*x*x+3*x-6 main(){ doublex,y;x=__1.5__; do{ y=f(x); x=x-y/(6*x*x-8*x+3); }while(fabs(y)>1e-6); printf("x=%.3fn",x); } 16、用二分法求方程2x34x23x60在(-10,10)之间的根 #include #include #definef(x)2x*x*x-4*x*x+3*x-6 main(){ doublex1=-10,x2=10,x,y; do{ x=(x1+x2)/2; y=f(x); if(y<0)x1=x; elsex2=x; }while(fabs(y)>1e-6); printf("x=%gn",x); } 17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如输入75,输出C。请完成填空 #include main(){ intscore; scanf("__%d__",&score); switch(__score/10__){ case1:case2:case3:case4:case5: printf(“gradeEn”);___break__; case6:printf(“gradeDn”);break; case7:printf(“gradeCn”);break; case8:printf(“gradeBn”);break; case9:printf(“gradeAn”);break; __default__:printf("Errorinput!n"); } } 18、该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。 #include #include #definef(x)x*x-5*x+sin(x) voidmain(){ intx;floatmax; __max=f(1)__; for(x=2;x<=10;x++) __if(max printf("%fn",max); } 19、程序功能:输入整数a和b的值,若a+b大于100,则输出a+b百位以上的数字,否则输出两数之和。 #include 2222 main(){ inta,b,s; scanf("%d%d",&a,&b); s=__a*a+b*b__; if(s>100)printf("%d",__s/100__); elseprintf("%d",___a+b__); } 20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。 #include main(){ intday,x1,x2; day=0;x1=1020; while(__x1>0__){ x2=__x1/2-2__;x1=x2;day++} printf(“day=%d”,day); } 21、找出整数的所有因子 #include main(){ inti,x; scanf(“%d”,&x); i=1; for(;__i<=x/2__;){ if(x%i==0)printf(%d”,i); i++; } } 22、统计用数字0-9可以组成多少个各位上的数字没有重复的3位偶数。 #include main(){ intn=0,i,j,k; for(i=1;i<=9;i++) for(k=0;k<=8;__k+=2__) if(k!=i) for(j=0;j<=9;j++) if(__j!=i&&j!=k__)n++; printf(“n=%dn”,n); } 23、用100元换成1、2、5元的所有兑换方案。 #include main(){ inti,j,k,l=0; for(i=0;i<=20;i++) for(j=0;j<=50;j++){ k=__(100-i-2*j)/5__; if(__i+j*2+k*5==100__){ printf(“%2d%2d%2d”,i,j,k); l=l+1; if(l%5==0)printf(“n”); } } } 24、输出1-100之间满足每位数的乘积大于每位数的和的数 #include main(){ intn,k=1,s=0,m; for(n=1;n<=100;n++){ k=1;s=0; __m=n__; while(__m>0__){ k*=m%10; s+=m%10; ___m/=10__; } if(k>s)printf(“%d”,n); } 25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。 #include main(){ inti,j,k; for(i=0;i<=3;i++) for(__j=1__;j<=5;j++){ k=8–i–j; if(__k>=0__) printf(“%3d%3d%3dn”,i,j,k); } } 26、以下程序的功能是:判断一个四位数是否满足这样的条件:它的9倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。 #include main(){ inti,a,b,c,d,m; for(i=1000;;i++){ a=__i%10__; b=i/10%10; c=i/100%10; d=i/1000; m=__a*1000+b*100+c*10+d__; if(___m==i*9__)__break__; } printf("i=%d",i); } 27、以下程序完成两整数的交换。 #include main(){ inta,b; printf(“请依次输入a,b的值:”); scanf(“%d,%d”,__&a,&b__); a=a+b; __b=a-b__; __a=a-b__; printf(“交换后:a=%d,b=%d”,a,b); } 28、以下程序的功能是判断输入的年份是否为闰年,若是则输出”yes”,否则输出”No”。 #include main(){ intyear?; scanf(“%d”,&year); if(__year%400==0||year%4==0&&year%100!=0__)printf(“yes”); elseprintf(“No”); } 29、以下程序利用冒泡排序法对输入的10个数进行排序。 #include #defineN10 voidmain(){ inta[N]; inti,j,t; printf(″input10numbers:n″); for(i=0;i scanf("%d",__&a[i]__); printf("n"); for(j=0;j for(i=0;i<__N-j-1__;i++) if(__a[i]>a[i+1]__){ t=a[i];a[i]=a[i+1]; a[i+1]=t; } printf(″thesortednumbers:n″); for(i=0;i printf(″%d″,a[i]); printf(″n″); } 30、用筛法求100之内的素数。筛法素数的思想是:1、取最小的数2,并声明它是素数,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及它的倍数。3、重复步骤2至筛中无数,得到所有的素数。 #include #defineM100//范围 #defineN((M+1)/2)//奇数的个数 voidmain(){ ????inti,j,a[N]; ????a[0]=2; ????for(i=1;i ?????????a[i]=2*i+1; ????for(i=1;i ?????????if(__a[i]!=0__) ??????????????for(j=i+1;j ???????????????????if(__a[j]%a[i]==0__)/*倍数时置 零筛去*/ ????????????????????????a[j]=0; ????printf("nTheprimerare[2-%d]:n",M); ????for(i=0,j=0;i ?????????if(__a[i]!=0__)?{ ??????????????printf("%5d",a[i]); ??????????????if((++j)%10==0)?/*十个数换行*/ ???????????????????printf("n"); ?????????} ????} ????getch(); } 31、用选择法对10个整数从小到大排序。 #include #defineN10 main(){ inta[N],i,j,k,t; for(i=0;i for(i=0;i k=__i__; for(j=i+1;j if(a[j] if(__a[i]>a[k]__){ t=a[k];a[k]=a[i];a[i]=t;} } for(i=0;i } 32、求一个N×N矩阵主对角线元素、次对角线之和。 #defineN3 #include main(){ inti=0,j=0,a[N][N],s1=0,s2=0; for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i for(j=0;j if(__i==j__)s1+=a[i][j];//主对角线 if(__i+j==N-1__)s2+=a[i][j];//次对角线 } printf("s1=%d,s2=%dn",s1,s2); } 33、已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 #defineN10 #include main(){ inti,t,a[N]={1,7,8,17,23,24,59,62,101}; scanf("%d",&t); for(i=N-2;i>0;i--){ if(t elsebreak; a[i+1]=__t__; for(i=0;i<10;i++) printf("%5d",a[i]); } 34、将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 #include #defineN11 main(){ inti,a[N],tmp; for(i=0;i scanf("%d",&a[i]); for(i=0;__i tmp=a[i]; a[i]=__a[N-i-1]__; __a[N-i-1]__=tmp;} for(i=0;i printf("%5d",a[i]); } 35、打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 816 357 492 要求打印出由1~n的自然数构成的魔方阵。 #defineN3 #include main(){ ??inti,j,k,a[N][N]; /*初始化魔方阵——置为0,作为有无数字的判断*/ for(i=0;i ????for(j=0;j ??????????a[i][j]=__0__; j=N/2; a[0][j]=1;/*存放第一个数字*/ /*存放2——n*n*/ 2 for(k=2;k<=N*N;k++)???{ ????i--;//数存放前一数行数减1、列数加1????????? __j+=1__; if(i<0&&j>N-1){//到达右上角的位置 i=i+2;j--; }else{ ????? if(i<0) ?????????? i=__n-1__;//上一数的行数为0,下一数的行数为n-1 if(j>N-1) ?????????? j=0;//上一数的列数为n-1时,下一数的列数为0 }????????? if(__a[i][j]!=0__){//若下一数的位置上已经有数字, //则下一数存到上一个数行数加1的位置 i=(i+2)%N; ?????? j=(j-1+N)%N; ? } a[i][j]=__k__;//填数 } for(i=0;i ??printf(""); ??for(j=0;j ?????printf("%4d",a[i][j]); ??printf("nn"); } } 36、找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 #include #defineM5 #defineN4 main(){ ?inta[M][N],i,j,x,y,k,max,min;//x,y分别是用来记录鞍点的位置 intflag=0;//用于指示是否存在鞍点 for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i max=a[i][0];y=0;//先默认第一个数是最大值 for(k=1;k ?????if(max ?min=a[i][y];x=i;//先默认第一个数是最小值 ?for(k=0;k<5;k++) ??????if(min>a[k][y]){x=k;__min=a[k][y]__;} if(__i==k__){ printf("a[%d][%d]=%dn",x,y,a[x][y]); flag=1; } } if(flag==0)printf(“不存在鞍点n”); } 37、有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出"无此数" #include #defineN15 main(){ intlow,high,mid,x; inta[N]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812}; low=0,high=N-1; scanf("%d",&x); 是鞍点 do{ mid=__(low+high)/2__; if(a[mid]==x)break; elseif(a[mid] elsehigh=__mid-1__; }while(low<=high); if(low<=high)printf("xisthe%dthnumbern",mid+1); elseprintf("xnotexistinthearrayn"); } 38、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 #include voidmain(){ charstring[81]; inti,num=0,word=0; charc; gets(string); for(i=0;(c=string[i])__!=’0’__;i++) if(c==′′)word=0; elseif(word==0){ word=__1__; num++; } printf(″Thereare%dwordsintheline.\n″,num); } 39、输出10行的杨辉三角形。 1 11 121 1331 …… #include #defineN10 main(){ inti,n,k,a[N]={1}; printf(“%5dn”,a[0]); for(i=1;i for(j=i;j>=1;j--)a[j]=__a[j]+a[j-1]__; for(j=0;__j<=i__;j++)printf(“%5d”,a[j]); printf(“n”); } } 40、以下程序的功能是:从键盘输入一个整数n(n≤10)和n 个整数,存入数组a中,先依次输出各个数组元素的值,然后找出最大值,并输出。 #include main(){ inta[10],n,i,j,__max__; printf("输入n="); scanf("%d",&n); printf("输入各数组元素:"); for(i=0;i scanf("%d",__&a[i]__); printf("输出各数组元素:"); for(__i=0;i printf("%d",__a[i]__); printf("n"); max=__a[0]__; for(j=1;j if(a[i]>max)__max=a[i]__; printf("最大值:%dn",max); } 41、以下程序实现的功能是:将字符串s中所有的字符c删除。请完成程序填充 #include #include main(){ chars[80]; inti,j; gets(s); for(i=j=0;__s[i]!=’0’__;i++) if(s[i]!='c'){ s[j]=s[i]; __j++__; } s[j]='0'; puts(s); } 42、以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,请完成程序填充。 #include #defineN10 main(){ intn,k; floatscore,sum,ave; for(n=1;n<=N;n++){ __sum=0__; for(k=1;k<=4;k++){ scanf("%f",&score); __sum+=score__; } __sum/=4__; printf("NO.%d:%fn",n,ave); } } 43、本程序的功能是:输入一串字符,将字符串中的字符反序输出。 #include #include<__string.h__> main(){ inti,j,k; charstr[80]; gets(str); for(i=0,j=__n-1__;i k=str[i]; str[i]=str[j]; str[j]=k; } puts(__str__); } 44、求方程ax+bx+c=0的根,用三个函数分别求当b-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include #include voiddoubleRoots(doublea,doubleb,doublec){ doublex1,x2,delta; delta=__b*b-4*a*c__; x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("Equationhastwodifferentroots:n"); printf("x1=%g,x2=%g",x1,x2); } voidSingleRoot(doublea,doubleb,doublec){ doublex1; x1=__-b/2/a__; printf("Equationhastwoequalroots:n"); printf("x1=x2=%g",x1); } voidNoRoot(void){ printf("Norealrootfoundfortheequationn"); 22 } main(){ doublea,b,c,delta; scanf("%lf%lf%lf",&a,&b,&c); delta=b*b-4*a*c; if(delta>0)__doubleRoots(a,b,c)__; elseif(delta<0)_NoRoot()__; else__SingleRoot(a,b,c)__; } 45、写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 #include #include voidIsPrime(__intn__){ inti; intk=sqrt(n); for(i=2;__i<=k__;i++) if(n%i==0)break; if(i>=k+1)printf("%disPrimenumbern",n); elseprintf("%disnotPrimenumbern",n); } main(){ intn; scanf("%d",&n);; IsPrime(__n__); } 46、用牛顿迭代法求根。方程为ax+bx+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出后由主函数输出。 #include #include doubleEquationRoot(doublea,doubleb,doublec,doubled){ doublex,y; x=1; do{ y=a*x*x*x+b*x*x+c*x+d; x=x-y/(3*a*x*x+2*b*x+c); }while(__fabs(y)>1e-6__); return__x__; } main(){ doublea,b,c,d,x; scanf("%lf%lf%lf%lf",&a,&b,&c,&d); 32 x=__EquationRoot(a,b,c,d)__; printf("x=%g",x); } 47、输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高分所对应的学生和课程;xi212),其中④求平均分方差:xi(nnxi为一学生的平均分。 #include #defineM5 #defineN10 voidEachStudentEverageMark(floata[][],intm,intn){ /*求每个学生的平均分。m-学生数,n-课程数*/ inti,j; floatsum; for(i=0;i sum=0.0; for(j=0;j sum+=a[j][i]; printf("averagemarkofthe%dthstuis%gn",i+1,sum/n); } } voidEachCourseEverageMark(__floata[][]__,intm,intn){ /*每门课的平均分*/ inti,j; floatsum; for(i=0;i sum=0.0; for(j=0;j sum+=a[i][j]; printf("averagemarkofthe%dthstuis%gn",i+1,sum/n); } } voidMaxScore(floata[][],intm,intn){ /*找出最高分所对应的学生和课程*/ inti,j,s,t; floatmax=a[0][0];s=0,t=0; for(i=0;i for(j=0;j if(max max=a[i][j]; s=i; t=__j__; } } printf("the%dthcourseandthe%dthstuhasthemaxn",s,t); } voidAverageVariance(floata[][],intm,intn){ /*求平均分方差*/ floatdelta,ave,avesq=0,avesum=0; inti,j; for(i=0;i ave=0; for(j=0;j ave+=a[j][i]; } ave/=n; avesq+=ave*ave; avesum+=ave; } delta=__avesq/n-avesum*avesum/n/n__; printf("varianceofthe%dthstuis%gn",i+1,delta); } main(){ floata[M][N]; inti,j; for(i=0;i for(j=0;j scanf("%f",&a[i][j]); EachStudentEverageMark(a,M,N); EachCourseEverageMark(a,M,N); MaxScore(a,M,N); AverageVariance(a,M,N); } 48、写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 #include intnum[100];//职工号 charname[100][100];//职工姓名 intcount=0; voidinformationInput(void){//职工信息输入 inti,n; printf("howmanydoyouwanttoinput:n"); scanf("%d",&n); printf("pleaseenterthenameandnumbers:n"); for(i=count;i printf("%d:",i-count); scanf("%s",name[i]); scanf("%d",&num[i]); } count+=n; } voidsorting(){//按职工号进行排序 inti,j,t; charstr[100]; for(i=0;i for(j=0;j if(num[j]>num[j+1]){ t=num[j]; strcpy(str,__name[j]__); num[j]=num[j+1]; strcpy(name[j],__name[j+1]__); num[j+1]=t; strcpy(name[j+1],str); } } } voidsearch(intnb){//用职工号找出该职工的姓名 intlow,high,mid; low=0;high=count-1; do{ mid=(low+high)/2; if(num[mid]>nb) high=mid-1; elseif(num[mid] low=mid+1; elsebreak; }while(__low<=high__); if(low>high)printf("employeenotexistn"); elseprintf("%sisfoundn",name[mid]); } main(){ intk; informationInput(); sorting(); printf("numtofind:"); scanf("%d",&k); search(k); } 49、写一函数,输入一个十六进制数,输出相应的十进制数。 #include intHexToDecimal(char*hex){ intlen,i,dec; if(hex==NULL)return0; len=strlen(hex); for(i=0,dec=0;i if(hex[i]>='0'&&hex[i]<='9') dec=__dec*16+(hex[i]-48)__; elseif(hex[i]>='a'&&hex[i]<='f') dec=__dec*16+hex[i]-‘a’+10__; elseif(hex[i]>='A'&&hex[i]<='F') dec=__dec*16+hex[i]-‘A’+10___; } returndec; } main(){ charhex[100]; gets(hex); printf("hextodecimalis%d",HexToDecimal(hex)); } 50、将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n的位数不确定,可以是任意位数的整数。 #include voidDigitToString(intn){ inti=0,j; charch[80]={'0'},t; while(n){ ch[i++]=__n%10+’0’__; n/=10; } for(j=0;j<__i/2__;j++){/*orderinverse*/ t=ch[j]; ch[j]=ch[i-j-1]; ch[i-j-1]=t; } printf("%s",ch); } main(){ intk; scanf("%d",&k); DigitToString(k); } 51、给出年、月、日,计算该日是该年的第几天。 #include intfind(inty,intm,intd){ intleap=0,i,s,days=0; if(y%400==0||__y%4==0&&y%100!=0__)leap=1; for(i=1;i if(i==2)s=2-leap; elses=0; if(i<8) days=days+__30__+i%2-s; else days+=30+(__i%2__); } days+=d; returndays; } main(){ intyear,month,date; scanf("%d%d%d",&year,&month,&date); printf("the%dthdayinthisyear",find(year,month,
版权声明:本文标题:C语言程序设计(第三版)习题库答案 内容由热心网友自发贡献,该文观点仅代表作者本人,
转载请联系作者并注明出处:https://m.elefans.com/xitong/1703524485a59110.html,
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论