求一个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语言编出来,要源程序,最好有注释