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