main( ) {
int i; long s=0;
for(i=1;i<=10;i++) s=s+fun(i); printf(\}
long fun(int n) {
int j; long t=1;
for(j=1;j<=n;j++) t=t*j; return t; }
参考程序2(递归算法): #include
int i; long s=0;
for(i=1;i<=10;i++) s=s+fun(i); printf(\}
long fun(int n) {
long t;
if(n==1)t=1;
else t=n*fun(n-1); return t; }
5.已知y =
f(x,n),其中,f(x, n) = 1 ? x2 / 2! + x4 / 4! ? ?
f(x?2.3,n)?f(x?3.2,n?3)(?1)nx2n / (2n)!(n≥0),当x = 5.6,n = 7时,求y的值。 解:0.007802
#include
double fun(double x,int n) {
int i,t=1,m=1;
double s=1.0,w=1.0;
for(i=1;i<=2*n;i++) { w=w*x; t=t*i; if(i%2==0) { m=-m;s=s+m*w/t;} }
return s; }
main() { double x=5.6; int n=7; double p,q,t,s; p=fun(x,n); q=fun(x+2.3,n); t=fun(x-3.2,n+3); s=p/(q+t); printf(\}
6.编写程序,求三个数的最小公倍数。 #include
main() { int x1,x2,x3,j; printf(\ x2 x3: \ scanf(\ printf(\ j=fun(x1,x2,x3); printf(\
}
?2k?22427.已知:S?,编写程序,求S的值。 ????1?33?5?2k?1???2k?1?例如,当k为10时,S的值应为:1.533852。
2#include
main() { printf(\}
习题7答案
一、选择题
1.C 2.A 3.C 4.D 8.A 9.A 10.B 11.A 15.C 16.D 17.D 18.D 22.D 23.B 24.C 25.D
二、写出下列程序的运行结果
1.abcdabcdabcdabcdbcdabcdabcdcdabcdd 3.1,2,3,8,7,6,5,4,9,10,
三、程序填空
1. (1) k 5.D 6.C 12.D 13.D 19.B 20.A 26.D 27.D 2.4 4.9,8 (2) -1
7.A .C 21.B
28.D 29.C 14 2. (1) nose (2)[d] 3. (1) x[i++]或y[i++] (2)i++ 4. (1) ‘a’+h-10 (2)s[i]= ’\\0’ 5. (1)s[i]!=’\\0’ (2)s[j++]=s[i] 6. (1)s[j]!=’\\0’&& t[k]!=’\\0’ (2)t[k]==’\\0’
四、编程题(每个程序的数据结构均用数组)
1.编写程序:从键盘上输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。若该字符不在a中则输出**。 #include
2.编写程序:输出某数列的前20项,该数列第1、2项分别为0和1,以后每个奇数编号的项是前两项之和,每个偶数编号的项是前两项之差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。 #include
x[i+1]=fabs((double)(x[i-1]-x[i])); i=i+2; }while(i<=20); for(i=1;i<=20;i++) { printf(\ if(i%4==0) printf(\ } }
3.编写程序:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。 例如:若s所指字符串中的内容为:“ABCDEFG12345”,则最后t所指的数组中的内容应是:“135”。
#include
void fun(char *s,char t[]) { int i,j=0; for(i=1;i main() { char s[100],t[100]; printf(\ scanf(\ fun(s,t); printf(\} 4.编写程序:一个自然数平方的末几位与该数相同时,称此数为自同构数。例如,因252=625,故25为自同构数。求出[1,700]之间的:① 最大的自同构数;② 自同构数数目。 (1)最大的自同构数:625 (2)自同构数数目:7个(1、5、6、25、76、376、625) #include