C语言经典算法(1-10)

来源:互联网 发布:短信推送软件 编辑:程序博客网 时间:2024/06/03 13:31
编程序
1.    编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。


#include <stdio.h>
double fact(int k)
{    double t=1;
     int i;
     for(i=1;i<=k;i++)
        t*=i;
     return t;
}
void main()
{   int i,n;
    double s=0;
    scanf(“%d”,&n);
    for(i=1;i<=n;i++)
       s+=1/fact(i);
    printf(“%f\n”,s);
}
2.    输入一个x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。
      
#include <stdio.h>
int f(double x)   // 函数定义
{    int y=0;
     if(x>0)
    y=1;
else if(x==0)
    y=0;
else
    y=-1;
     return y;
}
void main()
{    double x;
     int y;
     scanf(“%lf”,&x);
     y=f(x); // 函数调用
      printf("f(%g)=%d\n",x,y);
}
3.    输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。
#include <stdio.h>
int sum(int a)   
{   int s=0;
    while(a!=0){
  s+=a%10;
  a=a/10;
}
   return s;
}
void main()
{   int x;
    scanf(“%d”,&x);
    printf("%d\n",sum(x));
}
4.    输入两个正整数a和n,求a+aa+aaa+……+aa…a(最后一项为n个a)之和。例如输入2和3,输出246(即2+22+222)。要求定义并调用函数f(a,n),它的功能是返回aa…a(n个a)。例如f(2,3)返回222。
  #include <stdio.h>
  int f(int a,int n)
  {   int s=0;  
      for(;n>0;n--)
          s=s*10+a;  // s+=pow(10,n-1)*a;
      return s;
   }
  void main()
  {   int a,n,sum=0,i;
       printf(“input a n:\n”);
       scanf(“%d%d”,&a,&n);
      for(i=1;i<=n;i++)
           sum+=f(a,i);
       printf(“%d\n”,sum);
}
5.    输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。
         #include <stdio.h>
double min(double x,double y)   
{    if(x<y)
     return x;
else
        return y;
}
void main()
{    double x,y,z,t;
     scanf(“%lf%lf%lf”,&x,&y,&z);
     t=min(x,y);
     t=min(t,z);
     printf("min:%f\n",t);
}
6.    在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。
#include <stdio.h>
void prn(char,int);  // 函数声明
void main()
{    char c;
     int m;
     printf(“Input c m:\n”);
scanf(“%c%d”,&c,&m);
     prn(c,m);
}
void prn(char c,int m)   
{    int i;
     for(i=1;i<=m;i++)
        putchar(c);
     printf(“\n”);
}
7.    输入一个整数n,计算3.2n的值。要求定义函数计算xn 值。
#include <stdio.h>
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 <stdio.h>
#include <math.h>
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.    输出一张摄氏温度——华氏温度转换表。摄氏温度取[-100℃ ~150℃ ],温度间隔5℃ ,要求定义函数ctof(c),将摄氏温度转换为华氏温度,转换公式:F=32+C*9/5
#include <stdio.h>
void main()
{  float c,f, ctof(float); int i;
   for(i=0,c=-100;c<=150;c+=5)
   {  f=ctof(c);
      printf("%6.0f  %-6.0f",c,f);
      i++;
      if(i%5==0) printf("\n");
    }
}
float ctof(float c)
{   float f;
     f=32+c*9/5;
     return f;
}
10.    求11~999之间所有“回文数”之和。要求编制函数 JSValue(m)用于判断m是否为回文数。回文数是指各位数字左右对称,例如11、121、676、909等等。
#include <stdio.h>
int JSValue(int m)
{    int a=0,b;
     b=m;
while(b!=0){
        a=a*10+b%10;  
        b=b/10;
     }
     if(a==m) return 1;
     else return 0;
}
void main()
{   int s=0,i;
    for(i=11;i<=999;i++)
       if(JSValue(i)==1) s+=i;
    printf(“%d\n”,s);
}
11.    输入100个学生的数学课程成绩,计算平均分,并统计成绩在平均分数正负10%区间的学生的人数。
#include <stdio.h>
void main()
{   int a[100],i,k=0;
    float sum=0,aver;
    for(i=0;i<100;i++)
    {  scanf(“%d”,&a[i]);
       sum+=a[i];
    }
    aver=sum/100;
for(i=0;i<100;i++)
   if(0.9*aver<=a[i]&&a[i]<=1.1*aver)  // 当前成绩在平均分数正负10%区间
       k++;
  printf(“%f,%d\n”,aver,k);
}  
12.    输入两个正整数m和n(m<n),求从m到n之间(包括m和n)所有素数的和。要求定义并调用函数isprime(x)来判断x是否是素数。
#include <stdio.h>
int isprime(int x)
{   int i;
for(i=2;i<x;i++)
   if(x%i==0) return 0;
return 1;
}
void main()
{   int m,n,s=0,k;
    scanf(“%d%d”,&m,&n);
    for(k=m;k<=n;k++)
        if(isprime(k)==1) s+=k;
printf(“%d\n”,s);
}  
13.    输入一个字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数(例如:输入morning回车,再输入n,输出2)。
#include <stdio.h>
main()
{    char s[80],c;
     int i,k=0;
     printf("输入字符串:\n");
     gets(s);
     printf("输入字符:\n");
     c=getchar();
     for(i=0;s[i]!='\0';i++)
        if(s[i]==c) k++;
     printf("%s中包含%d个%c\n",s,k,c);
}
14.    输入10组数,每组数3个数,输出每组数的最大值。要求定义并调用函数max(x,y,z)求x、y、z的最大值。
#include <stdio.h>
double max(double x,double y,double z)
{   double m;
    m=x;
if(m<y) m=y;
if(m<z) m=z;
return m;
}
void main()
{   double x,y,z,i;
    for(i=1;i<=10;i++){
        scanf(“%lf%lf%lf”,&x,&y,&z);
        printf(“%f\n”,max(x,y,z));
    }
}  
15.    输入一个字符串,统计其中数字字符出现的次数。
    #include <stdio.h>
    void main()
      {    char s[80];
            int i,n=0;
            gets(s);
            for(i=0;s[i]!='\0';i++)
                 if(s[i]>='0'&&s[i]<='9')
                      n++;
             printf("%s中包含%d个字符\n",s,n);
      }
16.    将一个大小为10的数组b的值按逆序重新存放(数组的值由键盘任意输入,不使用辅助数组)。
    #include <stdio.h>
    void main()
      {    double a[10],t;
            int i,j;
            for(i=0;i<10;i++)
                 scanf("%lf",&a[i]);
            for(i=0,j=9;i<j;i++,j--)
            {   t=a[i];a[i]=a[j];a[j]=t;}
            for(i=0;i<10;i++)
                 printf("%8.2f",a[i]);
      }
17.    计算5×5数组周边元素的和。
    #include <stdio.h>
    void main()
      {    double a[5][5],sum=0;
            int i,j;
            for(i=0;i<5;i++)
         for(j=0;j<5;j++)
             scanf("%lf",&a[i][j]);
      for(i=0;i<5;i+=4)    
         for(j=0;j<5;j++)
              sum+=a[i][j];  // 第1、最后两行元素和
for(i=1;i<4;i++)    
         for(j=0;j<5;j+=4)
              sum+=a[i][j];  // 最左、右两列(不包括角上)元素和
      printf("%8.2f\n",sum);
  }
18.    输入一5行、5列的数组,将数组的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后以行列对齐格式输出数组内容。
#include <stdio.h>
void main()
{    float a[5][5],t;
int i,j;
for(i=0;i<5;i++)
       for(j=0;j<5;j++)
           scanf("%f",&a[i][j]);
for(i=0;i<5;i++)
{    t=a[i][i];           // {  for(j=0;j<5;j++)
for(j=0;j<5;j++)     // if(i!=j) a[i][j]=a[i][j]/a[i][j];
            a[i][j]=a[i][j]/t;   // a[i][i]=1; }
}             
for(i=0;i<5;i++)
         {  for(j=0;j<5;j++)
                  printf("%8.2f",a[i][j]);
             printf("\n");
   }
}
19.    输入一个字符串(字符个数少于80),判断是否为回文?若是输出YES,否则输出NO。
    解一:
    #include <stdio.h>
    void main()
      {    char s[80];
            int i,j;
            gets(s);
            for(j=0;s[j]!='\0';j++); // 求字符串长度
            for(i=0,j--;i<j;i++,j--)
                if(s[i]!=s[j])
                 {    printf("NO\n"); break; }
            if(i>=j)
                 printf("YES\n");
      }
解二:
    #include <stdio.h>
    void main()
      {    char s[80];
            int i,j,flag=1;
            gets(s);
            for(j=0;s[j]!='\0';j++);
            for(i=0,j--;i<j;i++,j--)
                if(s[i]!=s[j])  flag=0;
            if(flag==1)  printf("YES\n");
            else   printf("NO\n");
      }
20.    编写函数fun,返回一个数组(10个数)中除最大值和最小值以外的平均值。
    #include <stdio.h>
    double fun(double a[ ],int n)
    {     double sum=0,max,min;
           int i;
           max=min=a[0];
           for(i=0;i<n;i++)
           {      if(max<a[i]) max=a[i];
                   else if(min>a[i]) min=a[i];
                   sum+=a[i]; }
            return (sum-max-min)/(n-2);
     }
      void main()
      {    double b[10],v;
            int i;
            for(i=0;i<10;i++)
                scanf("%lf",&b[i]);
            v=fun(b,10);
            printf("average:%.2f\n",v);
      }
21.    在主函数中输入一个正整数x,编写函数f1,它的功能是:求出能整除x且不是偶数的各正整数,并放在数组a中,这些除数的个数返回给主函数。在主函数中输出各除数。
    #include <stdio.h>
    int f1(int a[ ],int x)
    {     int j,n=0;
           for(j=1;j<=x/2;j+=2)
                if(x%j==0)
                {   a[n]=j;
                     n++;
                 }
            return n;
     }
      void main()
      {    int a[20],i,n,x;
            scanf("%d",&x);
            n=f1(a,x);
            for(i=0;i<n;i++)
                printf("%5d",a[i]);
            printf("\n");
      }
22.    在主函数中输入6行、6列的数组和变量m的值,编写函数f2,该函数的功能是:将数组左下半三角元素中的值乘以m。在主函数中以行列对齐格式输出该数组。
    #include <stdio.h>
    void f2(int a[ ][6],int m)
    {     int i,j;
           for(i=0;i<6;i++)
                for(j=0;j<=i;j++)
                    a[i][j]*=m;
     }
      void main()
      {    int a[6][6],i,j,m;
            for(i=0;i<6;i++)
             for(j=0;j<6;j++)
                    scanf("%d",&a[i][j]);
            printf("Input m:"); scanf("%d",&m);
            f2(a,m); // 调用函数
            for(i=0;i<6;i++) {
             for(j=0;j<6;j++) printf("%5d",a[i][j]);
                printf("\n");
            }
      }
23.    编写一个函数f3,它的功能是:实现两个字符串的连接。
    #include <stdio.h>
    void main()
    {    char s1[100],s2[40];
          void f3(char s1[ ],char s2[ ]);
          gets(s1);
          gets(s2);
          f3(s1,s2);
          puts(s1);
      }
    void f3(char s1[ ],char s2[ ])
    {     int i,j;
           for(i=0;s1[i]!='\0';i++); // 找s1 中字符串结束位置
           for(j=0;s2[j]!='\0';j++,i++)
                    s1[i]=s2[j];  // 将s2 中字符串连接到s1后
           s1[i]='\0'; // 连接后加结束标志
           return ;
     }
24.    在数组x的10个数中求平均值v,找出与v相差最小的数组元素。
#include <stdio.h>
#include <math.h>
void main()
{  double x[10],v,d;
   int i;
   for(i=0,v=0;i<10;i++)
   {  scanf("%lf",&x[i]);
      v+=x[i];  }
   v=v/10;
   d=x[0];
   for(i=1;i<10;i++)
      if(fabs(d-v)>fabs(x[i]-v))
            d=x[i];
   printf("平均值:%-8.2f,与平均值最近元素:%-8.2f\n",v,d);
}
25.    输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的数交换后输出这些数。
 #include <stdio.h>
 void main()
 {     int i,k,temp,n,a[20];
      printf("Input n:\n");
      scanf("%d",&n);
      for(i=0;i<n;i++)
           scanf("%d",&a[i]);
      for(k=0,i=1;i<n;i++)
           if(a[i]<a[k]) k=i;
      temp=a[0];a[0]=a[k];a[k]=temp;
      for(i=0;i<n;i++)   printf("%d  ",a[i]);
}
26.    有n(n≤20)个数,已按从小到大顺序排列好,要求输入一个数,把它插到数列中,使数列仍有序,并输出新的数列。
#include <stdio.h>
void main()
{     int i,n,a[21],x;
      printf("Input n≤20 :"); scanf("%d",&n);
      printf("Input %d numbers:\n",n);
      for(i=0;i<n;i++) scanf("%d",&a[i]);
      printf("Input x:"); scanf("%d",&x);
      for(i=n-1;i>=0;i--)
           if(a[i]>x) a[i+1]=a[i];
           else break;
      a[i+1]=x;
      for(i=0;i<n+1;i++) printf("%-6d",a[i]);
}
27.    输入一个5行、6列的数组,找出该数组中绝对值最大的元素、输出该元素及其两个下标值。
    #include <stdio.h>
    #include <math.h>
    void main()
      {    int a[5][6],i,j,max,maxi,maxj;
           for(i=0;i<5;i++)
               for(j=0;j<6;j++) scanf("%d",&a[i][j]);
           max=abs(a[0][0]);maxi=maxj=0;  
           for(i=0;i<5;i++)
               for(j=0;j<6;j++)
                   if(abs(a[i][j])>max)
                   {    max=abs(a[i][j]); maxi=i; maxj=j; }
           printf("max: %d\n",a[maxi][maxj]);
           printf("row: %d    col: %d\n",maxi,maxj);
      }
28.    从键盘输入任意一个整数,统计该整数中出现的不同数字的个数。
#include <stdio.h>
 void main()
 {     int x,a[10]={0},i,n=0;
       printf("Input x:\n");
       scanf("%d",&x);
       while(x!=0)
       {     a[x%10]=1;
             x=x/10;       
        }
        for(i=0;i<10;i++)    
            n+=a[i];
        printf("%d\n",n);
}
29.    三角形面积公式为:
      其中  s=(a+b+c)/2
      a、b、c分别是三角形的三条边。请分别定义计算s和area的宏,写程序,在程序中用带实参的宏名来求面积。
#include <stdio.h>
#include <math.h>
#define s(a,b,c) (a+b+c)/2
#define area(a,b,c,s) sqrt(s*(s-a)*(s-b)*(s-c))
main()
{   double x,y,z,d,t;
    scanf(“%lf%lf%lf”,&x,&y,&z);
    if(x+y>z&&x+z>y&&y+z>x) {
d=s(x,y,z);
t=area(x,y,z,d);
printf(“area=%f\n”,t);
}
         else printf(“error!\n”);
}
30.    编程,输入一个正整数,将其转换成二进制数。
#include <stdio.h>
main()
{   int x,a[32],i,j;
     printf("Enter x:");
     scanf("%d",&x);
     for(i=0;x!=0;i++) {
         a[i]=x%2;
          x/=2;
      }
     for(j=i-1;j>=0;j--)
        printf("%d",a[j]);
     printf("\n");
 }
31.    输入一行字符,统计并输出其中英文字母、数字字符、空格和其他字符的个数。
#include <stdio.h>
void main()
{  char str[80];
       int zm,sz,kg,qt,i;
       zm=sz=kg=qt=0;
       gets(str);
       for(i=0;str[i]!='\0';i++)
           if(str[i]>='A'&&str[i]<='Z'|| str[i]>='a'&&str[i]<='z')zm++;
           else if(str[i]>='0'&&str[i]<='9') sz++;
           else if(str[i]==' ') kg++;
           else qt++;
        printf(" 字母=%d,数字=%d,空格=%d,其它=%d\n",zm,sz,kg,qt);
   }
32.    编制函数del_char,函数原型为 void del_char(char *a,char ch),函数的功能是删除a指向的字符串中的值为ch的字符。例如从字符串"AscADef" 中删除 'A' 后,字符串为"scDef"。
#include <stdio.h>
void del_char(char *a,char ch)
{   char *p;
    p=a;
    while(*a!=’\0’){
       if(*a!=ch)
       {   *p=*a; p++; }
       a++;
}
    *p=’\0’;
}
void main()
{  char s[80],ch;
       printf(“请输入字符串:”);
gets(s);
printf(“输入要删除字符:”);
ch=getchar();
        del_char(s,ch);
puts(s);
    }
33.    编制函数,其功能是在float类型1维数组中查找最大值、最小值并将它们返回到主函数输出。
#include <stdio.h>
void max_min(int *a,int n,int *max,int *min)
{   int *p;
    *max=*min=*a;
    for(p=a;p<a+n;p++){
        if(*p>*max) *max=*p;
        if(*p<*min) *min=*p;
    }
}
void main()
{  int a[10],i,max,min;   
for(i=0;i<10;i++)
   scanf(“%d”,a+i);
max_min(a,10,&max,&min);
printf(“max=%d,min=%d\n”,max,min);
    }
34.    输入10个数,按绝对值从小到大排序后输出。要求定义一个函数sort,完成绝对值从小到大排序。
    #include<stdio.h>
    #include<math.h>
    void sort(int *a,int n)
    {    int i,j,k,t;
          for(i=0;i<n-1;i++)
          {   k=i;
               for(j=i+1;j<n;j++)
                   if(fabs(*(a+j))<fabs(*(a+k))) k=j;
               t=*(a+i);*(a+i)=*(a+k);*(a+k)=t;
           }
    }
   void main()
    {  int a[10],i;
        for(i=0;i<10;i++)
            scanf("%d",a+i);
        sort(a,10);
        for(i=0;i<10;i++)
            printf("%d   ",*(a+i));
    }
35.    输入n和x,n和x分别表示对数组前n个元素赋初值为x。要求定义一个函数value,完成对一维整型数组的n个元素进行赋值,具体赋值x。
    #include<stdio.h>
    void value(double *a,int n,double x)
    {    int i;
          for(i=0;i<n;i++)
              *(a+i)=x;
     }
   void main()
    {  double a[10],x;
        int i,n;
        printf (“Input n x:\n");
        scanf("%d%lf",&n,&x);
        value(a,n,x);
        for(i=0;i<n;i++)
            printf("%8.2f",*(a+i));
    }
36.    定义一个函数,计算两个数的和与乘积。
    #include<stdio.h>
    void f(double x,double y,double *p,double *q)
    {       *p=x+y;
            *q=x*y;
     }
   void main()
    {  double a,b,add,mult;
        printf ("Input a b:\n");
        scanf("%lf%lf",&a,&b);
        f(a,b,&add,&mult);
        printf("add=%-8.2f mult=%-8.2f\n",add,mult);
    }
37.    定义一个函数,将一维数组中最大值及最小值交换位置。
    #include<stdio.h>
    void f(int *a,int n)
    {    int i,*p,*q,t;
          for(i=0,p=q=a;i<n;i++)
          {    if(*p<*(a+i)) p=a+i;
                if(*q>*(a+i)) q=a+i;
          }
          t=*p;*p=*q;*q=t;
    }
   void main()
    {  int a[10],i;
        for(i=0;i<10;i++)
            scanf("%d",a+i);
        f(a,10);
        for(i=0;i<10;i++)
            printf("%d   ",*(a+i));
}
38.    编写求字符串长度函数strlen,将字符串中小写字母转换成大写字母函数。
#include<stdio.h>
    int strlen(char *s)
    {    int i;
          for(i=0;*(s+i)!='\0';i++);
          return i;
    }
    void cov(char *s)
    {      for(;*s!='\0';s++)
                if(*s>='a'&&*s<='z') *s-=32;
    }
    void main()
    {  char a[100];
        gets(a);
        printf("strlen:%d\n",strlen(a));
        cov(a);
        puts(a);
    }
39.    编写函数void fun(int *a, int *n) ,它的功能是:求出1到100之内能被3或者7整除,但不能同时被3和7整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。
    #include<stdio.h>
    void fun(int *a, int *n)
    {    int i,j;
          for(i=1,j=0;i<=100;i++)
               if((i%3==0||i%7==0)&&i%21!=0)
                {    a[j]=i;  j++;  }
           *n=j;
    }
    void main()
    {  int a[100],i,n;
        fun(a,&n);
        for(i=0;i<n;i++)
            printf("%d  ",*(a+i));
    }
40.    编程,检查一个5×5二维数组a是否对称(即:对所有i和j都有a[i][j]=a[j][i])。 若是输出YES,否则输出NO
    #include<stdio.h>
    void main()
    {  double a[5][5];
       int i,j;
       for(i=0;i<5;i++)
           for(j=0;j<5;j++)
               scanf("%lf",*(a+i)+j);
       for(i=0;i<5;i++)
           for(j=0;j<i;j++)
                if(*(*(a+i)+j)!=*(*(a+j)+i))
                {     printf("NO\n");
                       return;  
                }
       printf("YES\n");
    }
41.    定义函数int strdel(char *s),删除空格字符并返回空格个数。
   #include <stdio.h>
   #include <string.h>
   int strdel(char *s)
   {   int n=0;
       for(;*s!='\0';)
            if(*s==' ') {  
               strcpy(s,s+1);
n++;
}
else s++;
       return n;
}
   void main()
   {    char str[80];  int n;
         gets(str);
         n=strdel(str);
         printf("空格数:%d,删除空格后:%s\n",n,str);
}  
42.    编写函数void fun(char *s,int b[ ]),统计在s所指向字符串中26个英文字母(不区分大小写)各自出现的次数,并依次放在b所指的数组中,在主函数中输出各字母出现的次数。
   #include <stdio.h>
   void fun(char *s,int b[ ])
   {   char *p;
       for(p=s;*p!='\0';p++)
            if(*p>='a'&&*p<='z') b[*p-'a']++;
            else if(*p>='A'&&*p<='Z') b[*p-'A']++;
   }
   void main()
   {    char str[80];  int a[26]={0},i;
         gets(str);fun(str,a);
          for(i=0;i<26;i++)
          printf("%2c",'A'+i);
          printf("\n");
          for(i=0;i<26;i++) printf("%2d",a[i]);
printf("\n");
   }  
43.    函数int fact(char *s,char *t)的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。
    #include <stdio.h>
    int fact(char *s,char *t)
    {  int n=0;
       for(;*s!='\0';s++)
            if(*s<97)  {    *t=*s; t++; n++; }
       *t='\0';
       return n;
   }
   void main()
   {    char s[80],t[80];
         gets(s);
         printf("<97:%d\n",fact(s,t));
         puts(t);
}
44.    编写程序,输入当天日期,要求输出明天日期(利用结构类型)。
#include <stdio.h>
void main()
{    int m[]={0,31,28,31,30,31,60,31,31,30,31,30,31};
     int leap;
     struct date {    int year,month,day;}d;
     printf(“year-month-day:”);
     scanf(“%d-%d-%d”,&d.year,&d.month,&d.day);
     if(d.year%4==0&&d.year%100!=0||d.year%400==0)
          m[2]=29;  // 闰年2月份有29天
     d.day++;
     if(d.day>m[d.month])
     {    d.day=1; d.month++;
          if(d.month>12)
          {    d.year++;  d.month=1; }
     }
     printf(“明天:%d-%d-%d\n”,d.year,d.month,d.day);
}
45.    将1000以内的奇数写入文件design1.dat中。
#include <stdio.h>
main()
{   int a;
    FILE *fp;
    fp=fopen(“design1.dat”,”w”);
    for(a=1;a<=1000;a++)
       if(a%2==1)  fprintf(fp,“%4d”,a);
    fclose(fp);
}
46.    求上题所建文件design1.dat中的数据和,在屏幕上输出结果。
#include <stdio.h>
main()
{   int a,sum=0;
    FILE *fp;
    fp=fopen(“design1.dat”,”r”);
    while(!feof(fp))
     {   fscanf(fp,“%d”,&a);
          sum+=a;
     }
    fclose(fp);
    printf(“sum=%d\n”,sum);
}