printf("%4d",a[i][j]);
printf("\n");
}
}
13.已知A是一个3╳4的矩阵,B是一个4╳5的矩阵,编程求A╳B得到的新矩阵C,并输出C矩阵。
答:
程序拜见文件Cprogram\xt6_3_13.c
#include"stdio.h"
main()
{intj,i,k,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
intb[4][5]={3,2,1,5,4,4,3,2,5,1,2,3,5,4,1,7,8,5,6,9},c[3][5];
printf("arrayA(3*4):
\n");
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("arrayB(4*5):
\n");
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
printf("%4d",b[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;j<5;j++)
{c[i][j]=0;
for(k=0;k<4;k++)
c[i][j]+=a[i][k]*b[k][j];
}
printf("arrayC(3*5)=A*B:
\n");
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
printf("%4d",c[i][j]);
printf("\n");
}
}
14.编程输出两个字符串中对应位置上相同的字符。
答:
程序拜见文件Cprogram\xt6_3_14.c
#include"stdio.h"
main()
{inti;
chara[81]="acbsbdvhfejbvewvkbewljbv";
charb[81]="anbdxwdbviuerkjvbfidbvuiebik";
printf("string1:
%s\n",a);
printf("string2:
%s\n",b);
printf("string3:
");
i=0;
while(a[i]!
='\0'&&b[i]!
='\0')
{if(a[i]==b[i])
printf("%c",a[i]);
i++;
}
printf("\n");
}
15.设有一字符串已按升序排列在字符数组a中,请将另一字符串b中的字符按升序的规律插到数组a中。
答:
程序拜见文件Cprogram\xt6_3_15.c
#include"stdio.h"
#include"string.h"
main()
{inti,j,k;
chara[81]="acdfhjklmopxz";
charb[81]="anbdx";
printf("string1:
%s\n",a);
printf("string2:
%s\n",b);
i=0;
while(b[i]!
='\0')
{j=0;
while(a[j]
='\0')
j++;
k=strlen(a);
while(k>=j)
{a[k+1]=a[k];k--;}
a[j]=b[i];
i++;
}
printf("string3:
%s\n",a);
}
16.将已按升序排列的两个字符串a和b中的字符按升序归并到字符数组c中。
答:
程序拜见文件Cprogram\xt6_3_16.c
#include"stdio.h"
#include"string.h"
main()
{inti,j,k;
chara[81]="acdfhjklmopxz";
charb[81]="abdnx";
charc[81];
printf("string1:
%s\n",a);
printf("string2:
%s\n",b);
i=0;j=0;k=0;
while(a[i]!
='\0'&&b[j]!
='\0')
{if(a[i]
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(a[i])
c[k++]=a[i++];
while(b[j])
c[k++]=b[j++];
c[k]='\0';
printf("string3:
%s\n",c);
}
习题七函数
一、选择题
1~10:
BDCDDBDBAC
11~20:
AABBBABAAC
21~31:
CDAACDDABBA
二、填空题
1.函数声明
2.自动将其转换为函数定义时的类型
3.10
4.1100
5.9.000000
6.i<=n、s、0、f(k)
7.0.5*(x0+a/x0)、a,x1
8.Itis
9.2721
10.0246
11.k、-1
12.2、2
13.p=j、x[i][p]
14.5
15.7
16.24
17.age(n-1)+2、age(n)
18.m%10、m/10、m或m!
=0、r(m)
三、编程题
1.编一函数,判断某年是否为闰年,若是返回1,否则返回0。
答:
程序拜见文件Cprogram\xt7_3_01.c
#include
fun(intm)
{return(m%4==0)&&(m%100!
=0)||(m%400==0);}
main()
{intn;
for(n=1987;n<2009;n++)
if(fun(n))
printf("year:
%disaleap!
\n",n);
}
2.编写计算三角形面积的程序,将计算面积定义成函数。
三角形面积公式为:
A=
式中s=(a+b+c)/2
其中A为三角形面积,a、b、c为三角形的三条边的长度。
答:
程序拜见文件Cprogram\xt7_3_02.c
#include
#include
floatfun(floata,floatb,floatc)
{floatf,s;
s=(a+b+c)/2;
if((s<=a)||(s<=b)||(s<=c))//或(a+b)>c&&(a+c)>b&&(b+c)>a
f=0;
else
f=sqrt(s*(s-a)*(s-b)*(s-c));
returnf;
}
main()
{floata,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("areais:
%f\n",fun(a,b,c));
}
3.编写两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两
个函数,并输出结果,两个整数由键盘输入。
答:
程序拜见文件Cprogram\xt7_3_03.c
#include
#include
intfmax(intm,intn)
{intr;
r=m%n;
while(r!
=0)
{m=n;n=r;r=m%n;}
returnn;
}
intfmin(intm,intn)
{returnm*n/fmax(m,n);}
main()
{inta,b;
scanf("%d%d",&a,&b);
printf("fmaxis:
%d\n",fmax(a,b));
printf("fminis:
%d\n",fmin(a,b));
}
4.编写函数,根据整型形参m的值,计算公式
t=1-
-
-…-
的值。
例如,若m=5,则应输出0.536389。
答:
程序拜见文件Cprogram\xt7_3_04.c
#include
floatfun(intm)
{floatt=1;
inti;
for(i=2;i<=m;i++)
t=t-1.0/i/i;
returnt;
}
main()
{
printf("t(5)=%f\n",fun(5));
}
5.计算s=1+
+
+…+
。
n由终端输入,将计算n!
定义成函数。
答:
程序拜见文件Cprogram\xt7_3_05.c
#include
floatfun(intm)
{inti;
floats=0,t=1;
for(i=1;i<=m;i++)
{t=t/i;s=s+t;}
returns;
}
main()
{printf("s(5)=%f\n",fun(5));}
6.编写函数,利用公式:
计算π的近似值,当某一项的值小于10-5时,认为达到精度要求。
答:
程序拜见文件Cprogram\xt7_3_06.c
#include
doublefun()
{intn;doublepi=1,t=1;
n=1;
do
{t=t*n/(2*n+1);
pi=pi+t;
n++;
}while(t>1e-5);
return2*pi;
}
main()
{printf("pi=%f\n",fun());}
7.编一函数,判断某一整数是否为回文数,若是返回1,否则返回0。
所谓回文数就是该数正读与反读是一样的。
例如12321就是一个回文数。
答:
程序拜见文件Cprogram\xt7_3_07.c
#include
#include
inthuiwen(intm)
{intt,n=0;
t=m;
while(t)
{n++;t=t/10;}//求出M是几位的数
t=m;
while(t)
{if(t/(int)pow(10,n-1)!
=t%10)//比较其最高位和最低位
return0;
else
{t=t%(int)pow(10,n-1);//去掉其最高位
t=t/10;//去掉其最低位