经典C语言源代码.docx
《经典C语言源代码.docx》由会员分享,可在线阅读,更多相关《经典C语言源代码.docx(24页珍藏版)》请在冰豆网上搜索。
经典C语言源代码
经典C语言源代码
1、
(1)某年某月某日是星期几
#include
intmain()
(
intyear,month,day;
while(scanf_s("%d%d%d”,&year,&month,&day)!
=EOF)
(
if(month==1||month==2)//判断month是否为1或2
(
year--;
month+=12;
}
intc=year/100;
inty=year-c*100;
intweek=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;
while(week<0)(week+=7;}
week%=7;
switch(week)
(
case1:
printf("Monday\n");break;
case2:
printf("Tuesday\n");break;
case3:
printf("Wednesday\n");break;
case4:
printf("Thursday\n");break;
case5:
printf("Friday\n");break;
case6:
printf("Saturday\n");break;
case0:
printf("Sunday\n");break;
}
}
return0;
}
1、
(2)某年某月某日是第几天(一维数组)
#include"stdio.h"
voidmain(){
inti,flag,year,month,day,dayth;
intmonth_day口={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入年/月/日:
\n");
scanf_s("%d/%d/%d”,&year,&month,&day);
dayth=day;
flag=(year%400==0)||(year%4==0&&year%100!
=0);
if(flag)
month_day[2]=29;
for(i=1;idayth=dayth+month_day[i];
printf("%d/%d/%d是第%d天\n",year,month,day,dayth);
}
2、30个数中找最小的数及其位置
#include"stdio.h"
#defineSIZE30
voidmain(){
inti;
floatdata[SIZE];
intmin;
printf("请输入%d个浮点数:
\n”,SIZE);
for(i=0;i//scanf_s("%f",&data[i]);
data[i]=rand()%30+1;
printf("%f、",data[i]);
}
min=0;
for(i=1;iif(data[i]min=i;
}
printf("最小值是%5.2f位置是%5d\n",data[min],min);
}
3、30个数从小到大排序
(1)
#include"stdio.h"
#defineSIZE30
voidmain(){
inti,j;
floatdata[SIZE],temp;
intmin;
printf("请输入%d个整型数:
\n”,SIZE);
for(i=0;iscanf_s("%f",&data[i]);
}
for(i=0;imin=i;
for(j=i+1;jif(data[j]min=j;
temp=data[min];
data[min]=data[i];
data[i]=temp;
}
printf("\n排序后的结果是:
\n");
for(i=0;iprintf("%5.2f",data[i]);
}
(2)模块化程序(数组名作为函数参数)
#include"stdio.h"
#defineSIZE5
voidaccept_array(floata[],intsize);
voidsort(floata[],intsize);
voidshow_array(floata[],intsize);
voidmain(){
floatscore[SIZE];
accept_array(score,SIZE);
printf("排序前:
");
show_array(score,SIZE);
sort(score,SIZE);
printf("排序后:
");
show_array(score,SIZE);
}
voidaccept_array(floata[],intsize){
inti;
printf("请输入%d个分数:
",size);
for(i=0;iscanf_s("%f",&a[i]);
}
voidshow_array(floata[],intsize){
inti;
for(i=0;iprintf("%5.2f”,a[i]);
printf("\n");
}
voidsort(floata[],intsize){
inti,min,j;
floattemp;
for(i=0;imin=i;
for(j=i+1;jmin=j;
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
4、
(1)指针加减:
#include"stdio.h"
#defineSIZE10
voidmain(){
inta[SIZE]={1,2,3,4,5,6,7,8,9,10};
int*pa,i;
pa=&a[0];
//pa=a;
printf("\n");
for(i=0;iprintf("%d",*pa);
//printf("%d",*(pa+1));
pa++;
(2)指针比较:
#include"stdio.h"
#defineSIZE10
voidmain()(
inta[SIZE]=(1,2,3,4,5,6,7,8,9,10};
int*pa,i;
int*qa;
pa=qa=&a[0];
printf("请输入%d整型数:
”,SIZE);
for(;pascanf_s("%d”,pa);
for(pa--;qa<=pa;pa--)
printf("%d",*pa);
}
5、两字符串相连:
#include"stdio.h"
#include"string.h"
voidstr_cat(charstr1[],charstr2[]);
voidmain()(
inti,j;
charstr1[160];
charstr2[80];
printf(-请输入第一个字符串:
");
gets(strl);
printf(-请输入第二个字符串:
");
gets(str2);
str_cat(str1,str2);
puts(str1);
}
voidstr_cat(charstr1[],charstr2[]){
inti,j;
i=0;
while(str1[i]!
='\0')
i++;
j=0;
while(str2[j]!
='\0'){
str1[i]=str2[j];
i++;j++;
}
str1[i]='\0';
6、二维数组(a,b转置)
#include"stdio.h"voidmain()(
inti,j,b[2][3];
inta[3][2]={{1,2},{3,4},{5,6}};
for(i=0;i<2;i++){
for(j=0;j<3;j++)
b[i][j]=a[j][i];
}
printf("\na:
\n");
for(i=0;i<3;i++){
for(j=0;j<2;j++)printf("%5d”,a[i][j]);
printf("\n");
}
printf("\nb:
\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++)printf("%5d",b[i][j]);
printf("\n");
7、输入一个二维数组并输出(指针)
#include"stdio.h"
voidmain()(
intx[2][3];
inti,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf_s("%d”,*(x+i)+j);
putchar('\n');
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
printf("%d",*(*(x+i)+j));
putchar('\n');
}
}
8、冒泡法排序一个数组
#include"stdio.h
#definesize10voidmaopao(inta[]);
voidmain()(
inta[10];
inti;
printf("请输入10个整数:
\n");
for(i=0;i<10;i++)
scanf_s("%d”,&a[i]);
maopao(a);
}
voidmaopao(inta[])(
inti,j,temp;
for(i=0;i<9;i++){//进行9轮排序
for(j=0;j<9-i;j++)//每轮进彳亍9-i次交换
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];//大的沉底,小的上浮
a[j+1]=temp;
}
}
printf("排序结果:
\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
9、两数组A,B,要求A
A:
4,7,9
B:
1,3,5,8,9
变换后
A:
1,3,5
B:
4,7,8,9,9
#include
voidReArranger(int*A,int*B,intm,intn)//A和B是各有m个和n个整数的非降序数组,本算法将B数组元素逐个插入到A中,使A中各元素均不大于B中各元素,且两数组仍保持非降序排列。
{
intx,j,i;
while(A[m-1]>B[0])
{
x=A[m-1];
A[m-1]=B[0];//交换A[m-1]和B[0]
j=1;
while(jB[j-1]=B[j++];//寻找A[m-1]的插入位置
B[j-1]=x;
x=A[m-1];
i=m-2;
while(i>=0&&A[i]>x)
A[i+1]=A[i--];//寻找B[0]的插入位置
A[i+1]=x;
}
}
voidmain()//这里主要介绍算法思想,主函数就简单写了
{
intA[3],B[5],i;
printf("输入第一个数组:
");
for(i=0;i<3;i++){
scanf_s("%d”,&A[i]);
}
printf("\n输入第二个数组:
");
for(i=0;i<5;i++)(
scanf_s("%d",&B[i]);
}
ReArranger(A,B,3,5);
printf("\n输出第一个数组:
");
for(i=0;i<3;i++)
printf("%d",A[i]);
printf("\n\n");
printf("输出第二个数组:
");
for(i=0;i<5;i++)
printf("%d",B[i]);
printf("\n");
}
10、符合1+6+3=3+2+5=1+4+5有哪几组
A1
BC64
DEF到325
#include
voidmain()(
inta,b,c,d,e,f;
for(a=1;a<=6;a++)
for(b=1;b<=6;b++)(
if(b==a)
continue;
for(c=1;c<=6;c++)(
if((c==a)||(c==b))
continue;
for(d=1;d<=6;d++)(
if((d==a)||(d==b)||(d==c))
continue;
for(e=1;e<=6;e++)(
if((e==a)||(e==b)||(e==c)||(e==d))continue;
f=21-(a+b+c+d+e);
if((a+b+d==d+e+f)&&(a+b+d==a+c
+f))(
printf("%d\n”,a);
printf("%d%d\n",b,c);
printf("%d%d%d\n",d,e,f);
}
}
}
}
11、输入一串字符,升序排序,折半查找其中一字符
#include
void*sortString(charunsort[],intlength)(
for(inti=0;ifor(intj=i+1;jif(unsort[i]>unsort[j])(
inttemp=unsort[j];
unsort[j]=unsort[i];
unsort[i]=temp;
}
}
}
}
voidmain()(
chars1[50];
gets(s1);
charvalue;
scanf_s("%c",&value);
printf("s1:
%s\n",s1);
printf("value:
%c\n”,value);
intlength=strlen(s1);
printf("length:
%d\n",length);
sortString(s1,length);
printf("s1:
%s\n",s1);
intstart=0,end=length-1;
intmid=(end+start)/2;
while(start<=end&&s1[mid]!
=value){
mid=(end+start)/2;
if(value>s1[mid])
start=mid+1;
else
end=mid-1;
}
if(mid)
printf("该字符在已知字符串中,即在第%d个\n",mid);
else
printf("该字符不在已知字符串中\n");
12、100-300和500-700直接索数,m不被2到根号m直接任
整除
#include
intisprime(intn)
{
if(n<2)
return0;
for(inti=2;iif(n%i==0)
return0;
return1;
}
voidmain()
{
inti,k=0;
for(i=100;i<=300;i++)
if(isprime(i))
printf("%3d",i);
k++;
if(k%10==0)printf("\n");
}
for(i=500;i<=700;i++)
if(isprime(i))
(
printf("%3d",i);
k++;
if(k%10==0)printf("\n");
}
printf("\n");
}
13、判断一个数是否是索数
#include
#include
voidmain()
(
intm,i,k;
printf("请输入一个整数:
");
scanf_s("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
printf("%d是索数。
\n",m);
else
printf("%d不是索数。
\n",m);
}
14、一个数是否含有数字5
#include
#include
boolis5Num(intnum){
inttemp=num%10;
while(temp!
=5&&num>10)(num=num/10;
temp=num%10;
}
if(temp!
=5)
returnfalse;
else
returntrue;
}
voidmain()(
intnum;
printf("输入一个数:
\n");
scanf_s("%d”,&num);
if(is5Num(num))
printf("含5\n");
else
printf("不含5\n");
}
15、一个排好序的数组,插入一个数
#include
voidmain()(
inta[11]=(1,2,3,4,5,6,7,8,9,10};
intnum;
printf("插入前数组为:
\n”);
for(inti=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
printf("请输入一个数:
\n");
scanf_s("%d",&num);
if(num>a[9])
a[10]=num;
else(
for(inti=0;i<10;i++)
if(numfor(intj=9;j>=i;j--)
a[j+1]=a[j];
a[i]=num;
break;
}
}
printf("插入后数组为:
\n");
for(inti=0;i<=10;i++)
printf("%3d",a[i]);
printf("\n");
16、牛顿迭代法:
#include
#include
doublefunc(doublex)(//函数
returnx*x*x+2.0*x*x+3.0*x+4.0;
}
doublefunc1(doublex)(//导函数
return3*x*x+4*x+3;
}
voidNewton(doublex0,doubleprecision)(//迭代次数
doublex1;
intk;
if(func1(x0)==0.0)(//若通过初值,函数返回为0
printf("迭代过程中倒数为0!
\n");
return;
}
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
while(!
(func1(x1-x0)x0=x1;//准备下一次迭代
if(func1(x0)==0.0)//若通过初值,函数返回值为0
printf("迭代过程中倒数为0!
\n");
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
}
}
voidmain()(
doublex,precision;
printf("输入初始迭代值x0:
\n");
scanf_s("%lf”,&x);
printf("迭代要求的精度:
\n");
scanf_s("%lf”,&precision);
Newton(x,precision);//若函数返回值为1
printf("该值附近的跟为:
%lf\n",x);
getchar();
getchar();
}
17、起始时间到终止时间天数
#include"stdio.h"
voidmain()(
intstart[3],end[3];
printf("请输入开始日期,如1964.2.19:
\n");
scanf_s("%d.%d.%d",&start[0],&start[1],&start[2]);
printf("请输入结束日期,如2001.10.20:
\n");
scanf_s("%d.%d.%d",&end[0],&end[1],&end[2]);
intsum=0;
for(intmid=start[0];midif((mid%400==0)||(mid%4==0&&mid%100!
=0))(sum=sum+366;
}
else
sum=sum+365;
}
sum=