C语言_经典算法_C语言代码大全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*韩信点兵*/
#include"stdio.h"
void main()
{
int i=900;
for(i=900;i<=1100;i=i++)
if(i%3==1&&i%5==1&&i%7==1)
{ printf("满足条件的值为:%d\n",i);
break;
}
}
/*两个日期之间的天数*/
#include "stdio.h"
void main()
{
int i,y,m1,m2,d1,d2;
int d=0;
printf("请输入年月日:\n如2010年1月3日和3月4日输入格式为2010 1 3 3 4\n");
scanf("%d%d%d%d%d",&y,&m1,&d1,&m2,&d2);
y=(y%4==0&&y%100!=0||y%400==0)?1:0;
for(i=m1;i
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
d+=31;
break;
case 4:
case 6:
case 9:
case 11:
d+=30;
break;
case 2:
d=d+28+y;
break;
}
printf("%d\n",d+d2-d1);
}
/* N 乘方表*/
#include"stdio.h"
void main()
{
int n,i,p=1;
printf("请输入n的值,按回车键确定!\n");
scanf("%d",&n);
do
{
i=p*p;
printf("%.0d的乘方为%.0d\n",p,i);
p=p++;
}while(p<=n);
}
/* 判断某一日期是当年的第几天*/
#include"stdio.h"
void main()
{
int n,year,month,day,month_day_sum=0,sum,
month_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入\"年月日\"\n");
scanf("%d%d%d",&year,&month,&day);
if(year%100!=0&&year%4==0||year%400==0) month_day[2]=29;
if(day>31||day<1||month>12||month<1) printf("错误");
else
{
for(n=1;n
printf("是%d年的第%d天\n",year,sum);
}
}
/*n的阶乘表*/
#include"stdio.h"
void main()
{
float n, i=1,p=1;
printf("请输入n的值:\n");
scanf("%f",&n);
do
{
i=i*p;
if(p<=15)
printf("%.2f的阶乘为%.2f\n",p,i);
else
printf("%.2f的阶乘为%4.5e\n",p,i);
p=p++;
}while(p<=n);
}
/*求一元二次方程的解*/
#include"stdio.h"
#include"math.h"
void main()
{
int m;
do
{
m=1;
float a,b,c,delta,x1,x2,realpt,imagpt;
printf("\n\n本程序可求一元二次方程的解。\n");
printf("请输入一元二次方程的三个参数。\n");
scanf("%f%f%f",&a,&b,&c);
if(a!=0)
{
delta=b*b-4*a*c;
if(delta>0)
{
x1=(-b+sqrt(delta)/2*a);
x2=(+b+sqrt(delta)/2*a);
printf("方程的两个不等实根为:x1=%8.4f x2=%8.4f\n",x1,x2);
}
else if(delta==0)
{
x1=x2=-b/(2*b);
printf("方程的两个相等实根为:x1=x2=%8.4f\n",x1);
}
else
{
delta=-delta;
realpt=-b/(2*a);
imagpt=sqrt(delta);
printf("方程的两个共轭根为:\n");
printf("x1=%8.4f+%8.4fi\n",realpt,imagpt);
printf("x2=%8.4f-%8.4fi\n",realpt,imagpt);
}
}
else
printf("这不是一元二次方程!\n");
}while(m==1);
}
/*求三角形的面积*/
#include"stdio.h"
#include"math.h"
void main()
{
float a,b,c,p,s;
printf("\n请输入三角形的三边:\n");
scanf("%f%f%f",&a,&b,&c);
if(a+b<=c||b+c<=a||a+c<=b)
printf("
输入有误,请重新输入!\n");
else
{
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("三角形的面积s=%.3f\n",s);
}
}
/*把百分制成绩转换为ABC等级制*/
#include"stdio.h"
void main()
{
int n,m;
printf("请输入分数:\n");
scanf("%d",&m);
switch(m/10)
{
case 10:
case 9:printf("A\n");
break;
case 8:printf("B\n");
break;
case 7:printf("C\n");
break;
case 6:printf("及格\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("不及格!\n");
}
}
/*其两个自然数的最大公约数和最小公倍数*/
#include"stdio.h"
void main()
{
int m,n,j,k,r;
do
{
printf("请按输入数字m,n:\n");
scanf("%d%d",&m,&n);
}while(m<0||n<0);
r=m*n;
while(m%n!=0)
{
j=m%n;
m=n;
n=j;
k=r/n;
}
printf("最大公约数是:%d\n",n);
printf("最小公倍数是:%d\n",k);
}
/*求输入n个数的平均值*/
#include"stdio.h"
void main()
{
int i=1,n,s=0;
float ave,m;
printf("请输入一个整数n:\n");
scanf("%d",&n);
while(i<=n)
{
printf("请输入数字!\n");
scanf("%f",&m);
s=s+m;
i++;
ave=s/n;
}
printf("%d个数的平均值是:%f\n",n,ave);
}
/*求一个数各个位上的数字之和*/
/*此为C++语句*/
#include
using namespace std;
int main()
{
printf("请输入一个正整数!\n");
int x,n=0;
cin>>x;
int s=0;
while (x)
{
s+=x%10;
x/=10;
n++;
}
printf("各个位上的数之和是:\n");
cout<printf("\n");
return 0;
}
/*求n个数的阶乘之和*/
#include"stdio.h"
void main()
{
int odr=1,sum=0;
int i,n;
printf("请输入一个大于0的正整数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
odr=odr*i;
sum=sum+odr;
}
printf("%d\n",sum);
}
/*求n个a的 a+aa+aaa+……的和*/
/*此为C++语句*/
#include
using namespace std;
int main()
{
int i,an=0,a,n,tn=0;
cout<<"输入 a,n:\n";
cin>>a>>n;
i=1;
an=0;
while(i<=n)
{
tn=tn+a;
a=a*10;
++i;
an=an+tn;
}
cout<<"an="<
printf("\n");
}
/*求e的近似值*/
#include"stdio.h"
void main()
{
float i,m=1;
float e=1,n;
printf("请输入正整数n:\n");
scanf("%f",&n);
for(i=1;i<=n;i++)
{
m=m*i;
e=e+1/m;
}
printf("e的值为:%f\n",e);
}
/*求2-n之间的所有素数*/
#include
#include
void main()
{
int i,j,n,m;
printf("请输入一个大于2的整数:\n");
scanf("%d",&n);
for(j=2;j<=n;j++)
{
m=(int)sqrt((double)j);
for(i=2;i<=m;i++)
{
if(j%i==0)
{
break;
}
}
if(i>m)
{
printf("%d是素数\n",j);
}
}
}
/*换钱问题*/
#include
void main()
{
int x,y,z,i=0;
for(x=1;x<100;x++)
for(y=1;y<50;y++)
for(z=1;z<20;z++)
if(x+2*y+5*z==100)
{
i++;
printf("第%d
种:%d个1角 %d个2角 %d个5角 ",i,x,y,z);
}
printf("共有%d\n种换法!\n",i);
}
/*兔子狐狸问题*/
#include "stdio.h"
int data[11];
int s(int n)
{ int nt=n%10;
if(nt==0)
return 10;
return nt;
}
void main()
{
int num=1;
data[1]=1;
for(int i=2;i<=1000;i++)
{
num+=i;
num=s(num);
if(data[num]==0)
data[num]=num;
}
for(int k=1;k<10;k++)
{
if(data[k]==0)
printf("兔子藏在第%d洞里\n",k);
}
}
/*小学生算数*/
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int main()
{
while(1)
{
int a,b,c,d,k,type,op;
printf("Please choose the lever!\n1.Easy(0--9)\n2.Hard(10--99)\n");
scanf("%d",&k);
printf("Please choose the type you want!\n");
printf("**********************\n");
printf("*\t1.plus\n*\t2.minus\n*\t3.multiply\n*\t4.divided\n*\t0.exit\n");
printf("**********************\n");
scanf("%d",&type);
if(k==1)
{
a=rand()%10;
b=rand()%10;
}
else
{
a=rand()%100;
b=rand()%100;
}
if(type==0)
{
printf("thank you for using!\n\n");
break;
}
if(type==1)
{
printf("%d+%d=?\n",a,b);
while(1)
{
scanf("%d",&op);
if(a+b==op)
{ printf("Very good! You are rigth! \n\n");
break;
}
else
printf("Sorry,you are wrong!\nPlease again!\n");
}
}
else if(type==2)
{
printf("%d-%d=?\n",a,b);
while(1)
{
scanf("%d",&op);
if(a-b==op)
{ printf("Very good! You are rigth!\n\n");
break;
}
else printf("Sorry,you are wrong!\nPlease again!\n");
}
}
else if(type==3)
{
printf("%d*%d=?\n",a,b);
while(1)
{
scanf("%d",&op);
if(a*b==op)
{
printf("Very good! You are rigth!\n\n");
break;
}
else printf("Sorry,you are wrong!\nPlease again!\n");
}
}
else if(type==4)
{
b=b+1;
printf("%d/%d=? 商几余几\n",a,b);
while(1)
{
scanf("%d%d",&c,&d);
if(c==a/b&&d==a%b)
{
printf("Very good! You are rigth!\n\n");
break;
}
else printf("Sorry,you are wrong!\nPlease again!\n");
}
}
}
return 0;
}
/*小学生算数 第二种方法*/
#include
#include
#include
int question_get1();
int question_get2();
int type;
void main( void )
{
int answer,Lever;
srand( (unsigned)time( NULL ) );
out:
printf("1.一位数运算!2.两位数运算!\n");
scanf("%d",&Lever);
printf( "请选择要测试的题目种类:" );
printf( "\n1.加法\n2.减法\n3.乘法\n4.除法\n" );
scanf( "%d", &type );
while( 1 )//实现系统循环
{
int temp;
char flag;
while(Lever==1)
{
answer = question_get1();//调用一位数运算函数
printf( "请给出你的答案:\n" );
break;//
要跳出此次while循环
}
while(Lever==2)
{
answer = question_get2();//调用二位数运算的函数
printf( "请给出你的答案:\n" );
break;//要跳出此次while循环
}
fflush( stdin );
scanf( "%d", &temp );//储存测试者输入的结果
while( temp!=answer )//判断结果的对错 错误时 实现循环 运算
{
printf( "\n笨蛋,you are wrong! again!\n" );
fflush( stdin );//继续运算
scanf( "%d", &temp );
}
printf( "\n天才!you are rigth! Very good!\n" );
printf( "press 1 to go on,press 2 to exit,press 0 to end!\n" );//选择菜单
fflush( stdin );
scanf( "%c", &flag );
while( flag!='1' && flag!='2'&&flag!='0' )//选择菜单判断
{
printf( "press 1 to go on,press 2 to exit,press 0 to end!\nelse no working!\n" );
fflush( stdin );
scanf( "%c", &flag );
}
if ( flag=='2' )
goto out;//回到out实现整个系统的循环
else if(flag=='0')
break;//结束本程序
}
}
int question_get1()//子函数 一位数运算
{
int a,b,c;
if( type==1 )
{
a=rand()%10;//在10以内产生随机数
b=rand()%10;//在10以内产生随机数
printf( "%d + %d = ?", a, b );
return(a+b);
}
else if( type==2 )
{
b=rand()%10;//在10以内产生随机数
c=rand()%10;//在10以内产生随机数
printf( "%d - %d = ?", b+c, b );
return(c);
}
else if( type==3 )
{
a=rand()%10;//在10以内产生随机数
b=rand()%10;//在10以内产生随机数
printf( "%d * %d = ?", a, b );
return(a*b);
}
else
{
b=rand()%10;
c=rand()%9+1;
printf( "%d / %d = ?", b*c, b );
return(c);
}
}
int question_get2()//子函数 二位数运算
{
int a,b,c;
if( type==1 )
{
a=rand()%100;//在100以内产生随机数
b=rand()%100;//在100以内产生随机数
printf( "%d + %d = ?", a, b );
return(a+b);
}
else if( type==2 )
{
b=rand()%100;//在100以内产生随机数
c=rand()%100;//在100以内产生随机数
printf( "%d - %d = ?", b+c, b );
return(c);
}
else if( type==3 )
{
a=rand()%100;//在100以内产生随机数
b=rand()%100;//在100以内产生随机数
printf( "%d * %d = ?", a, b );
return(a*b);
}
else
{
b=rand()%10;
c=rand()%10+1;
printf( "%d / %d = ? ", b*c , c );
return(b);
}
}
//数组合并问题
/*本程序可实现将随机产生的两个数m<10,n<100;\n将n插入随机产生的一个10元素一维数组第m个位置上*/
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int main()
{
int A[
11];
int i,m,n,c;
srand( (unsigned)time( NULL ) );
printf("*本程序可实现将随机产生的两个数m<10,n<100;\n将n插入随机产生的一个10元素一维数组第m个位置上\n");
while(1)
{
printf("\n*.按 1 运行本程序\n*.按其他任意键退出退出系统\n");
scanf("%d",&c);
if(c==1)
{
for(i=0;i<10;i++)
{
A[i]=rand()%100;
}
printf("随机产生的数组为:\n");
for(i=0;i<10;i++)
printf("%3d",A[i]);
printf("\n");
m=rand()%10;
n=rand()%100;
printf("随机产生的m=%d\n",m);
printf("随机产生的n=%d\n",n);
for(i=0;i<10;i++)
{
if(i==m-1)
{
for(i=11;i>=m;i--)
{
A[i]=A[i-1];
}
A[i]=n;
}
}
printf("插入后的数组为:\n");
for(i=0;i<=10;i++)
printf("%3d",A[i]);
printf("\n");
}
else
break;
}
return 0;
}
//选择删除X元素
#include
void main()
{
int i,n,k,m;
int a[10] = {4,21,13,34,13,6,7,10,9,10};
printf("删除前的数组为:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("请输入要删除的数字:\n");
scanf("%d",&n);
printf("删除后的数组为:\n");
m=10;
for(i=0;i<10;i++)
{
if(a[i] == n)
{
m--;
for(k=i;k<10;k++)
{
a[k] = a[k+1];
}
}
}
for(i=0;i
printf("\n");
}
//输入一个字符组,将其逆置输出
#include "stdio.h"
void main()
{
int i=0,k,temp;
char str[100]; /* */
printf("输入一个字符串:\n");
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
k=i-1;
for(i=0;i
temp=str[i];
str[i]=str[k];
str[k]=temp;
k--;
}
for(i=0;str[i]!='\0';i++)
putchar(str[i]);
printf("\n");
}
//矩阵任意两行或两列交换
#include "stdio.h"
int main()
{
int i,j,m,n,t;
int A[4][5]={{1,2,3,4,5},{6,7,8,9,10,},{11,12,13,14,15},{16,17,18,19,20}};
int B[4][5]={0};
printf("交换前的矩阵为:\n");
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
printf("%5d",A[i][j]);
printf("\n");
}
while(1)
{
printf("请选择行交换还是列交换\n*.按 1 列交换\n*.按 2 行交换\n*.其他任意数退出系统!\n");
scanf("%d",&t);
if(t==1)
{
printf("请输入要交换的两列:\n");
scanf("%d",&m);
scanf("%d",&n);
for(i=0;i<4;i++)
{
B[i][m-1]=A[i][m-1];
A[i][m-1]=A[i][n-1];
A[i][n-1]=B[i][m-1];
}
}
else if(t==2)
{
printf("请输入要交换的两行:");
scanf("%d",&m);
scanf("%d",&n);
for(j=0;j<5;j++)
{
B[m-1][j]=A[m-1][j];
A[m-1][j]=A[n-1][j];
A[n-1][j]=B[m-1][j];
}
}
else
break;
printf("交换后的数组为:\n");
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
printf("%5d",A[i][j]);
printf("\n");
}
}
return 0
;
}
/*礼炮问题*/
#include"stdio.h"
int main()
{
int t,count;
for(t=0,count=0;t<=140;t++)
if(t%3==0&&t<=60||t%5==0&&t<=100||t%7==0)
count++;
printf("所听到的炮声是:%d\n",count);
return 0;
}
//数据结构
//增加或删除学生信息
#include "stdio.h"
struct student
{
int ID;
char name[20];
struct
{
int year,month,day;
}birthday;
float scores[3];
char address[100];
};
void stud_out(struct student *a,int n);
int stud_ins(struct student *a,int n);
void stud_del(struct student *a,int *n,int j);
int main()
{
struct student stu[50]={
{1001,"李天骄",1990,12,3,87.5,93.6,79.5,"北京联合大学信息学院97号"},
{1002,"张璍萸",1991,2,13,97.5,83.6,89.5,"北京联合大学信息学院97号"},
{1003,"陈自逸",1989,10,31,77.5,88.6,79.5,"北京联合大学信息学院97号"}};
int num=3;
int n,k;
stud_out(stu,num);
while(1)
{
printf("请选择操作内容:1.增加学生;2.删除学生;0.退出系统!\n");
scanf("%d",&k);
if(k==1)
{
num=stud_ins(stu,num);
stud_out(stu,num);
}
else if(k==2)
{
printf("请选择删除第几个学生\n");
scanf("%d",&n);
stud_del(stu,&num,n);
printf("删除第%d个学生后\n",n);
stud_out(stu,num);
}
else
{
break;
}
}
return 0;
}
int stud_ins(struct student *a,int n)
{
int i;
struct student tmp;
printf("输入学号\n");
scanf("%d",&tmp.ID);
printf("输入姓名\n");
fflush(stdin);
scanf("%s",);
printf("输入生日(年月日)\n");
scanf("%d",&tmp.birthday.year);
scanf("%d",&tmp.birthday.month);
scanf("%d",&tmp.birthday.day);
printf("请输入C实验、C语言理论、C笔试成绩\n");
for(i=0;i<3;i++)
scanf("%f",&tmp.scores[i]);
printf("请输入地址\n");
fflush(stdin);
scanf("%s",&tmp.address);
a[n]=tmp;
return n+1;
}
void stud_del(struct student *a,int *n,int j)
{
int i;
for(i=j-1;i<*n-1;i++)
a[i]=a[i+1];
(*n)--;
}
void stud_out(struct student *a,int n)
{
int i,k;
printf(" 学号 姓名 生日 C实验 C理论 C笔试 地 址\n");
for(i=0;i
printf("%5d",a[i].ID);
printf("%7s",a[i].name);
printf("%5d",a[i].birthday.year);
printf("%3d",a[i].birthday.month);
printf("%3d",a[i].birthday.day);
for(k=0;k<3;k++)
printf("%7.1f",a[i].scores[k]);
printf("\t%s",a[i].address);
printf("\n");
}
}
//数组元素排序
#include"iostream"
using namespace std;
void sort(int *p,int n);
int main()
{
int a[10]={21,3,45,6,76,9,10,23,22,34};
int *p,i;
p=a; //将数组a的首地址赋予指针p
sort(p,10); //调用排序函数对数组排序
for(i=0,p=a;i<10;i++)
cout<<*(p++)<<" "; //输出排列后数组
cout<
}
void sort(int *p,int n)
{
int i,j,k,t;
for(i=0;i
k=i;
for(j=i+1;j
+j)<*(p+k))
k=j;
if(k!=i)
{
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
}
}
}