double fact(double x,int n); void main() {
double x,y; int n;
printf(“Input x n:\\n”);
scanf(“%lf%d”,&x,&n); y=fact(x,n);
printf(“%f\\n”,y); }
double fact(double x,int n) {
int i;
double t=1;
for(i=1;i<=n;i++) t=t*x; return t; }
8.输入平面上p1(x1,x2)、p2(x2,y2)两点坐标,计算两点间的距离输出。要求定义一个函数计算平面上两点间的距离。
解:#include
#include
double f(double,double,double,double); void main() {
double x1,x2,y1,y2,d;
printf(“Input (x1,y1),(x2,y2):\\n”);
scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2); d=f(x1,y1,x2,y2); printf(“%f\\n”,d); }
double f(double x1,double y1,double x2,double y2) {
double d;
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); return d; }
9.在主函数中输出1!+2!+3!+?+10!的值。要求将计算阶乘的运算写成函数。
解:#include
int fact(int k) {
int i,res=1;
for(i=1; i<=k; i++) res=res*i; return res ; }
void main( ) {
int n,sum=0;
for(n=1;n<=10;n++)
35
sum+=fact(n);
printf(“1!+2!+3!+?+10!=%d\\n”,sum); }
10.编写函数int digit(int n,int k),函数返回n中从右边开始的第k位数字的值。如:digit(231456,3)=4;digit(1456,5)=0。
解:#include
int digit(int n,int k) { long s;
if (log10(n)+1 else s=n/(int)pow(10,k-1); return s; } void main() { int n,k; printf(\输入整数n和k:\\n\ scanf(\ printf(\ } *11.输入正整数a、b,输出a、b之间所有回文数。要求定义一个函数判断正整数n是否是回文数。回文数是指正整数n的逆序数与原数相等。如121、2332、55等都是回文数。 解:#include while(m!=0) // 将n的逆序数放入k中 { k=k*10+m; m=m/10; } if(n==k) return 1; // n与k相同则n是回文数 else return 0; } void main() { int a,b,i; printf(\输入整数a和b:\\n\ scanf(\ printf(“%d、%d之间所有回文数:\\n”,a,b); for(i=a;i<=b;i++) if(huiwen(i)==1) printf(\ printf(“\\n”); } -3-n-1-212.定义函数main(),输入正整数n,当精度e分别取值为10、10、10、??、10时,分别计算并输出下列算式的值,直到最后一项的绝对值小于精度e,以比较不同精度下算出的结果。要求调用函数cal(e)计算下列算式的值。 s?1?111???.....2!3!4! 解:#include double jiecheng(int a) { double f; 36 if(a==1) f=1; else f=a*jiecheng(a-1); return f; } double cal(double e) { double s=0,t; int i=1; t=1/jiecheng(i); while(t>=e) { t=1/jiecheng(i); s=s+t; i++; } return s; } void main() { int n,e; double p; printf(\输入正整数n:\\n\ scanf(\ for(e=10;e<=pow(10,n);e=e*10) { p=cal(1.0/e); printf(\ } } *13.年份信息查询程序,输入年份,查询相应的信息。采用菜单选择功能,输入1或2其功能分别是:闰年信息查询、元旦是星期几信息查询,输入3程序结束。 要求根据结构化程序设计方法,把问题分解成四个子问题(1)输入年份,判断输入数据的合法性。(2)判断是否闰年。(3)计算元旦是星期几。(4)输出文字形式的星期几。然后再把这些子问题组合起来,完成整个大问题的求解 (仿照书上例6.7) 。 其中元旦是星期几的计算公式: w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; w值0~6,分别表示星期天、星期1,?星期六。 解:#include void leapyear(int y); int judgeweeknumber(int y); void judgeweekchinese(int y); void main() { int number,week,year; printf(“功能菜单:”); printf(“1.闰年信息查询 2.元旦是星期几信息查 3. 程序结束\\n”); printf(“请输入年份:\\n”); scanf(“%d”,&year); printf(“请选择功能:\\n”); scanf(“%d”,&number); if(number==1) { year=legal(year); leapyear(year); } if(number==2) { week=judgeweeknumber(year); 37 judgeweekchinese(week); } if(number==3) return; } int legal(int y) { if(y<0) do { printf(“请重新输入一个年份:”); scanf(“%d”,&y); } while(y<0); return y; } void leapyear(int y) { if(y%4==0&&y0!=0||y@0==0) printf(“%d是闰年\\n”,y); else printf(“%d不是闰年\\n”,y); } int judgeweeknumber(int y) { int week; week=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; return week; } void judgeweekchinese(int week) { switch(week) { case 0: printf(“星期天”); break; case 1: printf(“星期一”); break; case 2: printf(“星期二”); break; case 3: printf(“星期三”); break; case 4: printf(“星期四”); break; case 5: printf(“星期五”); break; case 6: printf(“星期六”); break; } } *14.输入n、x,计算xn 输出。要求定义一个递归函数计算xn 。 解:#include double mypow(double x,int n) { double y=1; if (n>0) return(x*mypow(x,n-1)); else if (n<0) return(1/x*mypow(x,n+1)); else return 1; } void main() { double x; int n; printf(“请输入x n:\\n”); scanf(\ printf(\} *15.数列的第1、2项为1,此后各项为前两项之和。编制求数列中任何一项值的递归 38 函数。 解:此数列为1、1、2、3、5、8、13 ??。 #include { if (n==1||n==2) return (1); else return (f(n-1)+f(n-2)); } void main() { int n; while(scanf(\ printf(\数列第%d项为:%d\ } 习 题 5 一、单项选择题 1.下列能正确定义一维数组a的语句是( )。 A.int a(10); B.int n=10,a[n]; C.int n;scanf(\,&n); D.#define n 10 int a[n]; int a[n]; 2.若有定义语句“int a[10];”则下列对a中数组元素正确引用的是( )。 A.a[10/2–5] B.a[10] C.a[4.5] D.a(1) 3.能对一维数组正确初始化的语句是( )。 A.int a[6]={6*1}; B.int a[6]={1,,,3}; C.int a[6]={}; D.int a[6]=(0,0,0); 4.以下能正确定义二维数组的语句为( )。 A.int a[][]; B.int a[][4]; C.int a[3][]; D.int a[3][4]; 5.若有数组定义语句“int a[4][5];”,则对a中数组元素的正确引用是( )。 A.a[4][1] B.a[2,1] C.a[4][5] D.a[4–1][5–5] 6.以下能对二维数组a进行正确初始化的语句为( )。 A.int a[2][]={{1},{4,5}}; B.int a[2][3]={1,2,3,4,5,6,7}; C.int a[][]={1,2,3,4,5,6}; D.int a[][3]={1,2,3,4,5}; 7.下列对字符数组s的初始化不正确的是( )。 A.char s[5]=\; B.char s[5]={'a','b','c','d','e'}; C.char s[5]=\; D.char s[]=\; 8. 下列程序段的运行结果为( )。 char s[]=\A.ab0 B.ab C.Abcd 9.下列数组s中所存放字符串的长度为( )。 char s[]=\ D.ab cd A.9 B.10 C.11 D.18 10.有数组定义语句“char a[20];”,则正确的输入语句为( )。 A.scanf(\,&a); B.scanf(\,a[]); C.gets(a[20]); D.gets(a); 11.下面程序执行后的正确输出项是( )。 39