求一个C++的程序,易懂的算法最好,希望能带一下注释, c程序的注释只能是一行对吗

求C语言代码,最好有注释。
【例】把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{ p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i])
{for(s=9;s>=i;s--) a[s+1]=a[s];
break;}
a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
}
本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i]即可。 如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。
程序运行时,输入数47。从结果中可以看出47已插入到54和 28之间。
求用c语言编写的程序,最好带着注释(越详细越好!!)
#include
#include
#include
#include"conio.h"
#define N 20
struct depositor
{char num[20];
char name[20];
char per[20];
float sec;
float mon;
};
void menu();
int reads(struct depositor dep[N]);
void save(struct depositor dep[N],int n);
void add();
void del();
void change();
void show();
void main()
{
int n;
while(1)
{
menu();
printf("\n 请输入您要选择的操作序号,按回车键确认:");
scanf("%d",&n);
switch(n)
{
case 1: add();break;
case 2: show();break;
case 3: del();break;
case 4: change();break;
case 5: exit(0);
default: printf("输入错误,请输入列表中存在的序号!\n ");
}
}}
void menu()
{
printf(" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");
printf("\n ************************* 银行个人账户管理系统*************************** ");
printf("\n 1 储户开户");
printf("\n 2 余额查询");
printf("\n 3 储户销户");
printf("\n 4 密码修改");
printf("\n 5 退出");
printf("\n ************************************************************************** ");
printf("\n %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ");
}
int reads(struct depositor dep[N]) // 读取储户内容
{
FILE *fp;
int i=0;
if((fp=fopen("account.dat","r"))==NULL)
{
printf("文件打开失败!\n");
return 0;
}
else
{
for(i=0;!feof(fp);i++)
fscanf(fp,"\n%s %s %s %f %f\n",dep[i].num,dep[i].name,dep[i].per,&dep[i].sec,&dep[i].mon);
}
fclose(fp);
return i;
}
void save(struct depositor dep[N],int n) // 储户保存后信息
{
FILE *fp;
int i=0;
if((fp=fopen("account.dat","w"))==NULL)
{
printf("文件打开失败!\n");
return ;
}
else
{
        for(i=0;i            fprintf(fp,"\n%s %s  %s %f  %f\n",dep[i].num,dep[i].name,dep[i].per,dep[i].sec,dep[i].mon );  }     fclose(fp); } void add()/*储户开户*/ {  FILE *fp;     struct depositor dep;     if((fp=fopen("account.dat","a"))==NULL)  //如果文件已经存在,可以追加储户信息  {      if((fp=fopen("account.dat","w"))==NULL) // 文件不存在时,创建新文件,输入储户信息   {        printf("用户不存在!\n");             return ;   }  }          printf("\n请输入储户帐号,并按回车键确认:\n");          scanf("%s",dep.num);          fprintf(fp,"\n%s\n",dep.num);           printf("\n请输入储户姓名,并用回车键确认: \n");          scanf("%s",dep.name);          fprintf(fp,"\n%s\n",dep.name);          printf("\n请输入储户身份证号,并用回车键确认: \n");          scanf("%s",dep.per);          fprintf(fp,"\n%s\n",dep.per);          printf("\n请输入储户密码,并用回车键确认: \n");          scanf("%f",&dep.sec);          fprintf(fp,"\n%f\n",dep.sec);          printf("\n请输入储户金额,并按回车键确认: \n");          scanf("%f",&dep.mon);          fprintf(fp,"\n%f\n",dep.mon);          if(dep.mon<10 )       {  printf("\n 储户金额低于十元,不予开户 \n");     return ;      }            printf("\n **********************开户成功*************************\n");       fclose(fp); } void show() //余额查询 {  struct depositor dep[N];     int i,n ;  char s[20];  float t ;    n=reads(dep);   printf("\n请用户输入账号,密码,用空格隔开,按回车键确认:\n");  scanf("%s %f",s,&t);   for(i=0;i     if (strcmp(s,dep[i].num)==0 && t==dep[i].sec) break;       if (i>=n || t!=dep[i].sec)     {    printf("\n 输入错误 \n");    return ;    }       else        { printf("*********************储户的余额如下**********************\n");       printf("     余额     \n");          printf("\n %11.2f \n", dep[i].mon);             printf("**********************************************************\n");   } } void del()  /*储户信息删除函数*/ {  struct depositor dep[N];     char number[20];  float t;     int n,i,j;     n=reads(dep);     printf("\n请输入要删除储户账号,密码,用空格隔开,按回车键确认:");     scanf("%s %f",number,&t);     for(i=0;i      if(strcmp(number,dep[i].num)==0&&t==dep[i].sec) break;     if(i>=n||t!=dep[i].sec)  {   printf("没有找到该储户信息!\n");         return;  }     else  {   for(j=i+1;j          dep[j-1]=dep[j];  }     save(dep,n-1);     printf("销户成功!\n"); } void change()  //储户密码更改 {  struct depositor dep[N];     int n,i;  float t;  char number[20];     printf("\n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:");     scanf("%s %f",number,&t);     n=reads(dep);     for(i=0;i         if(strcmp(number,dep[i].num)==0&&t==dep[i].sec)         break;   if(i>=n||t!=dep[i].sec)  {   printf("无此储户信息!");         return;  }     printf("\n请输入更改后密码,按回车键确认:\n");     scanf("%f",&dep[i].sec);     save(dep,n);     printf("\n修改成功\n"); } #include<iostream> #include<cmath> int jie(int ); using namespace std; long int main() {L: char a; cout<<"a.求幂\n"<<"b.求e的多次方\n"<<"c.开根号\n"<<"d.求对数log\n"<<"e.求对数ln\n"<<"f.求三角函数\n"<<"g.阶乘\n"<<"h.加减乘除"<<endl; cout<<"选择:"; cin.clear(); cin>>a; switch(a) { case 'a':{double b,c;cout<<"输入底数:";             cin>>b; cout<<"输入次方:";cin>>c;   cout<<b<<"^"<<c<<"="<<pow(b,c)<<endl; }break; case 'b':{double b;cout<<"输入e的次方";cin>>b; cout<<"e^"<<b<<"="<<exp(b);}break; case 'c':{double b;cout<<"输入要开平方的数:";cin>>b;  cout<<"结果是:"<<sqrt(b)<<endl;}break; case 'd':{double b,d;cout<<"输入底数:";cin>>d;       cout<<"输入真数:";cin>>b;  cout<<"log"<<d<<"("<<b<<")="<<(log(b)/log(d))<<endl;}break; case 'e':{double b;cout<<"输入真数:";cin>>b;  cout<<"ln"<<b<<"="<<log(b)<<endl;}break; case 'f':{char q;cout<<"a.sin()\n"<<"b.cos()\n"<<"c.tan()\n"<<"d.arcsin()\n"<<"e.arccos()\n"<<"f.arctan()\n"<<"g.cot()\n"<<"选择:";       cin>>q;  switch(q)    {  case 'a':{double c;cout<<"输入角度";cin>>c;   cout<<"sin"<<c<<"="<<sin(c)<<endl;}break; case 'b':{double c;cout<<"输入角度";cin>>c;   cout<<"cos"<<c<<"="<<cos(c)<<endl;}break; case 'c':{double c;cout<<"输入角度";cin>>c;        cout<<"tan"<<c<<"="<<tan(c)<<endl;}break; case 'd':{double c;cout<<"输入";cin>>c;   cout<<"arcsin"<<c<<"="<<asin(c)<<endl;}break; case 'e':{double c;cout<<"输入";cin>>c;   cout<<"arccos"<<c<<"="<<acos(c)<<endl;}break; case 'f':{double c;cout<<"输入";cin>>c;   cout<<"arctan"<<c<<"="<<atan(c)<<endl;}break; case 'g':{double c;cout<<"输入角度";cin>>c;   cout<<"cot"<<c<<"="<<(cos(c)/sin(c))<<endl;}break; default :cout<<"error"<<endl; }break;  } case 'g':{int a;cout<<"输入:";cin>>a;cout<<"结果是:"<<jie(a)<<endl;}break; case 'h':{char ch;double m,n;cout<<"输入:";cin>>m>>ch>>n; switch (ch)   {case '+':cout<<m<<"+"<<n<<"="<<m+n<<endl;break;   case '-':cout<<m<<"-"<<n<<"="<<m-n<<endl;break; case '*':cout<<m<<"*"<<n<<"="<<m*n<<endl;break;   case '/':cout<<m<<"/"<<n<<"="<<m/n<<endl;break;   default :cout<<"error"<<endl;    }break; default :cout<<"error"<<endl;     } } cout<<endl; cout<<endl; goto L; } int jie(int n) { if(n==0)return 1; else return n*jie(n-1); } 实现简单的计算器功能 #include<stdio.h>  #include<math.h>  #include "iostream"  using namespace std;  void main()      {      int b1,b2,b3,b4,b5,b6;      for( b1=8;b1<2520;b1=b1+8)      {      for(b2=1;b2<2520-b1;b2++)      {      int lao2=(b1/8+b2);      if((2520/6==lao2*6/7)&&(0==lao2%7))      for(b3=1;b3<2520-b1-b2;b3++)      {      int lao3=lao2/7+b3;      if((2520/6==lao3*5/6)&&(0==lao3%6))      for (b4=1;b4<2520-b1-b2-b3;b4++)      {      int lao4=lao3/6+b4;      if ((2520/6==lao4*4/5)&&(0==lao4%5))      for(b5=1;b5<2520-b1-b2-b3-b4;b5++)      {      int lao5=lao4/5+b5;      if ((2520/6==lao5*3/4)&&(0==lao5%4))      {      b6=2520-b1-b2-b3-b4-b5;        int lao6=lao5/4+b6;      if((2520/6==lao6*2/3) &&(0==lao6%3))      if (2520/6==(b1*7/8+lao6/3))        {      cout<<"***分2520个橘子***"<<endl;      cout<<"老大:"<<b1<<endl;      cout<<"老二:"<<b2<<endl;      cout<<"老三:"<<b3<<endl;      cout<<"老四:"<<b4<<endl;      cout<<"老五:"<<b5<<endl;      cout<<"老六:"<<b6<<endl;      cout<<"******************"<<endl;      }      }        }        }      }      }      }      system("pause");      }  求一个简单的C++程序,最好带注释,什么都行
一道编程题,用C语言编出来,要源程序,最好有注释
