华电(华北电力大学)C语言题库全集~C语言入门

小编是一个进阶中的程序菜狗,第一篇在CSDN发布的文章希望可以作为一个start。程序里的很多算法不一定是最佳的,但小编希望给刚开始学习的小伙伴们提供一下可参考的答案,如果小伙伴们发现了bug还希望及时告诉小编,蟹蟹啦~(我记得好像有一两道题目有bug但忘记是否订正过来了)

//第二章
/*1.已知整型变量a、b 和c 的值(a=250, b=85, c=25),编写程序,用来计算并显示x =a/(b-c)的值(保留2位小数),其中*/
#include<stdio.h>
int main()
{
    int a,b,c;
    float x;
    a=250;
    b=85;
    c=25;
    x=a*1.0/(b-c);
    printf("x=%.2f\n",x);
}
/*2.下面程序要求计算由键盘输入的任意两个整数的平均值,输出结果保留两位小数。

找出并改正以下源程序中错误,得出正确的运行结果。

源程序如下:

#include <stdio.h>

void main()

{

int x,y,a;

scanf("%f%f",x,y);

a=(x+y)/2;

Printf("平均数是"a);

}*/
#include <stdio.h>

int main()

{

float x,y,a;

scanf("%f%f",&x,&y);

a=(x+y)/2;

printf("平均数是%.2f",a);

}

//第三章 选择结构
/*1.从键盘上输入直角坐标系上一个点的坐标(x,y),编程实现判断该点属于第几象限。
请注意在x坐标轴上、y坐标轴上和原点上的数据。*/
#include<stdio.h>
int main()
{
    float x,y;
    scanf("%f%f",&x,&y);
    if(x>0)
    {
        if(y>0)
          printf("(%.2f,%.2f)在第一象限",x,y);
          else if(y==0)
            printf("(%.2f,%.2f)在x坐标轴上",x,y);
            else
              printf("(%.2f,%.2f)在第四象限",x,y);
    }
    else if(x==0)
    {
        if(y>0||y<0)
          printf("(%.2f,%.2f)在y坐标轴上",x,y);
        else
          printf("(%.2f,%.2f)在原点上",x,y);
    }
    else
    {
        if(y>0)
          printf("(%.2f,%.2f)在第二象限",x,y);
          else if(y==0)
            printf("(%.2f,%.2f)在x坐标轴上",x,y);
            else
              printf("(%.2f,%.2f)在第三象限",x,y);
    }
    return 0;
}

/*2.输入三角形的三边(整数),计算三角形的面积(保留2位小数),如果不能构成三角形,则输出“不是三角形”。*/
#include<math.h>
#include<stdio.h>
int main()
{
    int a,b,c;
    float s,p;
    scanf("%d%d%d",&a,&b,&c);
    if(a+b>c  && b+c>a && a+c>b )
    {
        p=(a+b+c)*1.0/2;
        s=sqrt(p*(p-a)*(p-b)*(p-c));
        printf("%.2f",s);
    }
    else
      printf("不是三角形");
    return 0;
}

/*3&4.编写程序。从键盘输入一个整数x,如果x是偶数,输出“x是个偶数”的提示;否则,输出“x是个奇数”的提示信息。
提示:偶数的判断方法x%2 == 0*/ 
#include<stdio.h>
int main()
{
  int x;
  scanf("%d",&x);
  if(x%2==0)
    printf("%d是个偶数",x);
  else 
    printf("%d是个奇数",x);
  return 0;
}

/*5.企业发放的奖金(实数)根据利润(整数)提成。
(1)利润≤10万元时,奖金可提成10% ;
(2)10万元<利润≤20万元时,其中10万元以下部分仍按10%提成,高于10万元(含10万元)的部分,可提成7.5% ;
(3)20万元<利润≤40万元时,其中20万元以下部分仍按上述办法提成,高于20万元的部分按5%提成;
(4)40万元<利润≤60万元时,其中40万元以下部分仍按上述办法提成,高于40万元的部分按3%提成;
(5)60万元<利润≤100万元时,其中60万元以下部分仍按上述办法提成,高于60万的部分按1.5%提成;
(6)100万元<利润时,其中100万元以下部分仍按上述办法提成,超过100万元的部分按1%提成。
从键盘输入当月利润(整数),求应发放奖金(实数)总数。
要求:用switch语句编程序。
调试数据为 第1组 输入 156890  输出  奖金是14266.75   
       第2组 输入 150000  输出  奖金是13750.00 */
#include<stdio.h>
int main()
{
    int p,s,t;
    float a=0;
    scanf("%d",&p);
    t=p/10000;
    if(t<=10)
      s=1;
      else if(t<=20)
        s=2;
        else if(t<=40)
          s=3;
          else if(t<=60)
            s=4;
            else if(t<=100)
              s=5;
              else 
                s=6;
    switch (s)
    {
        case 1: a=s*0.1;break;
        case 2: a=100000*0.1+(p-10*10000)*0.075;break;
        case 3: a=100000*(0.1+0.075)+(p-20*10000)*0.05;break;
        case 4: a=100000*(0.1+0.075+2*0.05)+(p-40*10000)*0.03;break;
        case 5: a=100000*(0.1+0.075+2*0.05+2*0.03)+(p-60*10000)*0.015;break;
        case 6: a=100000*(0.1+0.075+2*0.05+2*0.03+4*0.015)+(p-100*10000)*0.01;break;
    }
    printf("奖金是%.2f",a);
}

/*6.有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。
这4个塔的高度都是10米。塔以外无建筑物(即塔外的高度为零)。
输入任一点的坐标,求该点的建筑高度。 
(提示:在塔内的点高度为10米,不在任何塔内的点高度都为0米) 
调试数据   第1组:输入 1.5,1.5  输出  该点高度为10米
          第2组:输入 -1,-1  输出  该点高度为0米*/
//注意浮点型的比较大小!!!
#include<stdio.h>
int main()
{
	float x,y;
	scanf("%f,%f",&x,&y);
	if((x-2)*(x-2)+(y-2)*(y-2)-1<=1e-6||(x+2)*(x+2)+(y-2)*(y-2)-1<=1e-6||(x+2)*(x+2)+(y+2)*(y+2)-1<=1e-6||(x-2)*(x-2)+(y+2)*(y+2)-1<=1e-6)
	  printf("该点高度为10米");
	else
	  printf("该点高度为0米");
	return 0;
}

/*7.输入4个整数,要求按由小到大的顺序输出。 
解:此题使用if语句采用依次比较的方法排出其大小顺序。
在学习了循环和数组以后,可以有更多的排序方法。 
调试数据:
第1组    输入  2,5,9,3    输出   排序结果如下: 2, 3, 5, 9
第2组    输入 10,-4,-10,9  输出   排序结果如下: -10, -4, 9, 10
注意:输入数据的格式,4个整数用逗号分隔;
输出中的分号为英文分号,四个排序后的整数用英文逗号分隔*/
#include<stdio.h>
int main()
{
	int a,b,c,d,t;
	scanf("%d,%d,%d,%d",&a,&b,&c,&d);
	if(a>b)
    {
    	t=a;
    	a=b;
    	b=t;
    }
    if(a>c)
	{
        t=a;
		a=c;
		c=t;	
    }
    if(a>d)
    {
    	t=a;
    	a=d;
    	d=t;
    }
    if(b>c)
    {
        t=b;
        b=c;
        c=t;
    }
    if(b>d)
    {
        t=b;
        b=d;
        d=t;
    }
    if(c>d)
    {
        t=c;
        c=d;
        d=t;
    }
    printf("排序结果如下:%d,%d,%d,%d",a,b,c,d);
	return 0;
}

/*8给定一个不多于5位的正整数,要求:
① 求它是几位数;
② 分别打印出每一位数字;
③ 按逆序打印出各位数字。例如原数为213,应输出312。
调试数据:
第1组  输入  213  
输出 
位数:3
每位数字为:2,1,3
逆序数字为:312
第2组  输入  98423  
输出 
位数:5
每位数字为:9,8,4,2,3
逆序数字为:32489*/
#include<stdio.h>
int main()
{
    int x,n=0,a[10],i;
    scanf("%d",&x);
    while(x)
    {
        a[n++]=x%10;
        x=x/10;
    }
    printf("位数:%d\n",n);
    printf("每位数字为:%d",a[n-1]);
    for(i=n-2;i>=0;i--)
    {
        printf(",%d",a[i]);
    }
    printf("\n逆序数字为:");
    for(i=0;i<n;i++)
    {
        printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

/*9.给一个百分制成绩,要求输出等级'A'、'B'、'C'、'D'、'E'。
100>=成绩>=90为'A',90>成绩>=80为'B',80>成绩>=70为'C',70>成绩>=60为'D',60>成绩>=0为'E'。  
成绩不在0~100分之间,要给出输入有误的提示。
测试数据:
第1组:输入 85 输出  成绩是 85.0,相应的等级是B
第2组 输入 190 输出 成绩是 输入成绩有误
注意:输入的成绩为实数,输出的成绩保留一位小数,注意输出的格式。
注意错误提示信息要同样例一致*/
#include<stdio.h>
int main()
{
	float a;
	scanf("%f",&a);
	if(a>=0&&a<=100)
	{
		switch((int)a/10)
		{
			case 10:
			case 9: printf("成绩是%.1f,相应的等级是A",a);break;
			case 8: printf("成绩是%.1f,相应的等级是B",a);break;
			case 7: printf("成绩是%.1f,相应的等级是C",a);break;
			case 6: printf("成绩是%.1f,相应的等级是D",a);break;
			default: printf("成绩是%.1f,相应的等级是E",a);break;
		}
	}
	else 
	    printf("输入成绩有误"); 
	return 0;
}

/*10.编写一个程序,输入a、b、c三个值,输出其中最大值。
调试数据:
输入 1,5,3  输出 最大数是 5
解题要求
编写一个程序,输入a、b、c三个值,输出其中最大值。
注意:输入3个整数,用逗号分隔。输出数据的格式如样例所示。*/
#include<stdio.h>
int main()
{
    int a,b,c,max;
    scanf("%d,%d,%d",&a,&b,&c);
    max=0;
    if(a>max)
      max=a;
    if(b>max)
      max=b;
    if(c>max)
      max=c;
    printf("最大数是%d",max);
}

//第四章 循环结构
/*1.编写程序利用公式:ex=1+x+x2/2!+x3/3!+......+xn/n!求的近似值。

找出并改正以下源程序中错误,得出正确的运行结果。

源程序如下:

#include <stdio.h>

#include <math.h>

void main()

{

    int i;

    float a,e,x;

    printf("请输入x的值:");

    scanf("%d",&x);

    e=0;

    i=0;

    a=1;

    while(a>1e-6);

    {

        a=a*x/i;

        e=e+a;

        i++;

    }

    printf("exp(x)=%f\n",exp(x));

    printf("循环次数为:%d次\ne的x次方为:%f\n",i,e);

}

程序正确的运行结果为:

1.0

exp(x)=2.718282

循环次数为:11次

e的x次方为:2.718282

Press any key to continue*/
#include <stdio.h>

#include <math.h>

int main()

{

    int i;

    float a,e,x;

    printf("请输入x的值:");

    scanf("%f",&x);

    e=1;

    i=1;

    a=1;

    while((exp(x)-e)>1e-6)

    {

        a=a*x/i;

        e=e+a;

        i++;

    }

    printf("exp(x)=%f\n",exp(x));

    printf("循环次数为:%d次\ne的x次方为:%f\n",i+1,e);

}

/*2.编程输出n行*组成的图形。n值由用户输入。
第一行n个*,第二行n-1个*,依此类推,第n行1个*。*/
#include<stdio.h>
int main()
{
	int n,i;
	scanf("%d",&n);
	while(n>0)
	{
		for(i=0;i<n;i++)
          printf("*");
        n--;
        printf("\n");
	}
	
	return 0;
}

/*3.输出所有大于100小于等于200的3位偶数,且该偶数的各位数字两两不相同。要求每行输出10个数,每个数字占6位宽度*/
#include<stdio.h>
int main()
{
	int a,x,y,z,i;
	for(i=0,a=101;a<=200;a++)
	{
		x=a/100;
		y=a/10%10;
		z=a%10;
		if(a%2==0&&x!=y&&x!=z&&y!=z)
		{
			printf("%-6d",a);
			i++;
			if(i%10==0)
			{
			  printf("\n");	
			}
		}
	}
	return 0;
}

/*4.输出m--n间的全部素数。要求每个数输出字宽为5个字符,每输出5个素数换一行。*/
#include<stdio.h>
int main()
{
	int m,n,x,i,j=0;
	scanf("%d%d",&m,&n);
	for(x=m+1;x<n;x++)
	{
		for(i=2;i<x;i++)
		{
			if(x%i==0)
		  		break;
		}
        if(i==x)
        {
          	printf("%-5d",x);
        	j++;  
        } 
        if(j%5==0)
        {
        	printf("\n");
        }
	}
	return 0;
}

/*5.求1!+2!+…+n!,其中n(1<=n<=10)值由用户输入*/
#include<stdio.h>
int main()
{
	int n,sum=0,i,t;
	scanf("%d",&n);
	for(i=1,t=1;i<=n;i++)
	{
		t=t*i;
		sum=sum+t;
	}
	printf("%d",sum);
	return 0;
}

/*6.编程输出n行*组成的图形。n值由用户输入。第一行1个*,第二行2个*,依此类推。*/
#include<stdio.h>
int main()
{
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<=i;j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

/*7.统计输入的一串字符中每个元音字母(a,e,i,o,u)出现的次数,输入#以作为结束。*/
#include<stdio.h>
int main()
{
	int time1=0,time2=0,time3=0,time4=0,time5=0;
	char ch;
	while((ch=getchar())!='#')
	{
		if(ch=='a')
		{
			time1++;
		}
		if(ch=='e')
		{
			time2++;
		}
		if(ch=='i')
		{
			time3++;
		}
		if(ch=='o')
		{
			time4++;
		}
		if(ch=='u')
		{
			time5++;
		}
	}
	printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",time1,time2,time3,time4,time5);
	return 0;
}

/*8.从键盘输入一个大于1的正整数x,打印所有小于x的斐波那契数列(数列的第一项、第二项为1,数列从第三项开始,每一项都等于前两项的和)。
打印所有小于x的斐波那契数列(数列的第一项、第二项为1,数列从第三项开始,每一项都等于前两项的和)。*/
#include<stdio.h>
int main()
{
	int x,f1=1,f2=1;
	scanf("%d",&x);
	printf("%d ",f1);
	while(f1<x)
	{
	   printf("%d ",f1);
	   f1=f1+f2;
	   f2=f1-f2;
	   	
	}
	return 0;
}

/*9.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?要求这些三位数由小到大输出。*/
#include<stdio.h>
int main()
{
	int a,b,c;
	for(a=1;a<5;a++)
	{
		for(b=1;b<5;b++)
		{
			if(a==b)
			  continue;
	        for(c=1;c<5;c++)
	        {
        		if(c==a||c==b)
        		  continue;
                printf("%d%d%d\n",a,b,c);
        	}
		}
	}
	return 0;
}

/*10.有4名专家对4款赛车进行评论。
A说:2号赛车是最好的。
B说:4号赛车是最好的。
C说:3号赛车不是最好的。
D说:B说错了。
事实上只有一款赛车是最好的,且只有一名专家说对了,其他3人都说错了,编程输出最好的赛车编号。*/
#include<stdio.h>
int main()
{
	int car,a[4];
	for(car=1;car<5;car++)
	{
		a[0]=(car==2);
		a[1]=(car==4);
		a[2]=(car!=3);
		a[3]=(car!=4);
		if(a[0]+a[1]+a[2]+a[3]==1)
		{
			printf("最好的赛车编号为%d\n",car);
		}
	}
	return 0;
}
//或者下面的程序
#include<stdio.h>
int main( )
{
int bestcar;
for(bestcar=1;bestcar<=4;bestcar++)
if((bestcar==2)+(bestcar==4)+(bestcar!=3)+(bestcar!=4)==1)
printf("最好的赛车编号为%d",bestcar);
return 0; 
} 

/*11.编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如:5是25的右边的数,25是625右边的数,5和25都是同构数。
要求:这些同构数由小到大输出。*/
#include<stdio.h>
int main()
{
	int x;
	for(x=1;x<=99;x++)
	{
		if(x<10)
		{
			if(x==(x*x%10))
            {
            	printf("%d\n",x);
            }
		}
		else
		{
			if(x==(x*x%100))
			{
				printf("%d\n",x);
			}
		}
	}
	return 0;
}

/*12.一个小于10000的正整数,它加上100后是一个完全平方数,它加上268又是一个完全平方数,请问该数是多少?输出所有这样的数字。要求用for循环完成。
注:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数,例如4=2*2,9=3*3,25=5*5*/
#include<stdio.h>
#include<math.h>
int main()
{
	int x;
	double a,b;
	for(x=1;x<10000;x++)
	{
		a=(int)sqrt(x+100);//此题重点在如何验证上面!!
		b=(int)sqrt(x+268);
		if((a*b)==sqrt(x+100)*sqrt(x+268))
		   printf("%d\n",x);
	}
	return 0;
}

/*13.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。
以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。*/
#include<stdio.h>
int main()
{
	int left=1,i;
	for(i=10;i>1;i--)
	{
		left=2*(left+1);
	}
	printf("猴子第一天摘了%d个桃子",left);
	return 0;
}

/*14.一球从n米高度*下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米(包括第10次反弹的高度)?第10次反弹多高?要求 n (n>=100)由键盘输入*/
#include<stdio.h>
int main()
{
	int i;
	float n,h,sum;
	scanf("%f",&n);
	h=n;
	sum=n;
	for(i=2;i<=11;i++)
	{
		h=h/2.0;
		sum=sum+h*2;
		
	}
	printf("第10次落地时共经过%f米\n",sum-h);
	printf("第10次反弹%f米\n",h); 
	return 0;
}

/*15.一个正整数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程输出1000以内的所有完数。*/
#include <stdio.h>
int main()
{    int n,temp,sum;  
    for(n=1;n<1000;n++) 
    {
        sum= 0;
        for(temp=1;temp<n;temp++)
        {
            if(n%temp==0)
            {
                sum=sum+temp; 
            }
        }
        if(sum==n)  
        {
            printf("%d\n",n);
        }
    }
    return 0;
}

/*16.打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=13+53+33。*/
#include<stdio.h>
int main()
{
	int x,a,b,c;
	for(x=100;x<1000;x++)
	{
		a=x/100;
		b=x/10%10;
		c=x%10;
		if(x==a*a*a+b*b*b+c*c*c)
		  printf("%d ",x);
	}
	return 0;
}

/*17.求Sn(a)=a+aa+aaa+…+aa…aaa(有n个a,n<=7)之值,其中a是某一个数字。例如:2+22+222+2222+22222(n=5),a和n由键盘输入。
要求输入语句为:scanf("%d%d",&a,&n); */
#include<stdio.h>
int main()
{
	int a,n,S,i,t;
	scanf("%d%d",&a,&n); 
	S=a;
	t=a;
	for(i=1;i<n;i++)
	{
		t=t*10+a;
		S=S+t;
	}
	printf("S%d(%d)=%d",n,a,S);
	return 0;
}

/*18.输入两个正整数m和n,求其最大公约数和最小公倍数。*/
#include<stdio.h>
int main()
{
    int m,n,a,b,r;
    scanf("%d,%d",&m,&n);
    a=m*n;
    if(m<n)
    {
    	r=m;
    	m=n;
    	n=r;
    }
    r=m%n;
    while(r!=0)
    {
    	m=n;
    	n=r;
    	r=m%n;
    }
    b=a/n;
    printf("最大公约数是%d\n",n);
    printf("最小公倍数是%d\n",b);//最小公倍数=m*n/最大公约数 
	return 0;
}

/*19.输入一行字符(以换行符结束),分别统计出其中英文字母、空格、数字和其他字符的个数。 */ 
#include<stdio.h>
int main()
{
	char ch,a=0,b=0,c=0,d=0;
	while((ch=getchar())!=0)
	{
		if(ch>='A'||ch<='z')
		{
			a++;
		}
		else if(ch==' ')
		{
			b++;
		}
		else if(ch>='0'||ch<='9')
		{
			c++;
		}
		else
		{
			d++;
		}
	}
	printf("字母数:%d\n空格数:%d\n数字数:%d\n其它字符数:%d",a,b,c,d);
	return 0;
}

/*20.找出输入的10个数的数组中出现频次最高的数*/
#include<stdio.h>
int main()
{
	int i,j,a[10],count[10]={0},max;
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++)
	{
		for(j=i;j<10;j++)
		{
			if(a[j]==a[i])
			{
				count[i]++;
			}
		}
	}
	max=count[0];
	for(i=0;i<10;i++)
	{
		if(count[i]>max)
        {
  			max=count[i];
  		}
	}
	for(i=0;i<10;i++)
	{
		if(count[i]==max)
		  printf("%d ",a[i]); 
	}
	return 0;
} 

/*21.键盘上输入直角坐标系上一个点的坐标(x,y),编程实现判断该点属于第几象限。
测试数据为 (1,0);(0,1);(1,1);(1,-1) (-1,1) (-1,-1)*/
//以下写法并非最优!!
#include<stdio.h>
int main( )
{
	float x,y;
	scanf("%f%f",&x,&y);
	if(x>0&&y>0)
	printf("(%.2f,%.2f)在第一象限!\n",x,y);
	else if(x<0&&y>0)
	printf("(%.2f,%.2f)在第二象限!\n",x,y);
	else if(x<0&&y<0)
	printf("(%.2f,%.2f)在第三象限!\n",x,y);
	else if(x>0&&y<0)
	printf("(%.2f,%.2f)在第四象限!\n",x,y);
	else if(x==0&&y!=0)
	printf("(%.2f,%.2f)在y坐标轴上!\n",x,y);
	else if(x!=0&&y==0)
	printf("(%.2f,%.2f)在x坐标轴上!\n",x,y);
	else
	printf("(%.2f,%.2f)在坐标原点上!\n",x,y);
}

/*22.企业发放的奖金(实数)根据利润(整数)提成。
(1)利润≤10万元时,奖金可提成10% ;
(2)10万元<利润≤20万元时,其中10万元以下部分仍按10%提成,高于10万元(含10万元)的部分,可提成7.5% ;
(3)20万元<利润≤40万元时,其中20万元以下部分仍按上述办法提成,高于20万元的部分按5%提成;
(4)40万元<利润≤60万元时,其中40万元以下部分仍按上述办法提成,高于40万元的部分按3%提成;
(5)60万元<利润≤100万元时,其中60万元以下部分仍按上述办法提成,高于60万的部分按1.5%提成;
(6)100万元<利润时,其中100万元以下部分仍按上述办法提成,超过100万元的部分按1%提成。
从键盘输入当月利润(整数),求应发放奖金(实数)总数。
要求:用switch语句编程序。
调试数据为 第1组 输入 156890  输出  奖金是14266.75   
          第2组 输入 150000  输出  奖金是13750.00 */
 #include<stdio.h>
 int main( )
 {
 	int award;
 	float salary;
 	scanf("%d",&award);
 	switch (award/100000){
	 	case 0:salary=(float)award*0.1;break;
		case 1:salary=10000+(award-100000)*0.075;break;
		case 2:case 3:salary=17500+(award-200000)*0.05;break;
		case 4:case 5:salary=27500+(award-400000)*0.03;break;
		case 6:case 7:case 8:case 9:salary=33500+(award-600000)*0.015;break;
		default :salary=39500+(award-1000000)*0.01;break; 
	 }
	 
	 printf("奖金是%.2f\n",salary);

 }

 /*23.如何不用数组输入n组数,计算两点间的距离 */
 #include<stdio.h>
 #include<math.h> 
 int main()
 {
 	int x1,y1,x2,y2,i,n;
 	scanf("%d",&n);
 	for(i=0;i<n;i++)
 	{
	 	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//弊端就是不可以像数组那样连续输入 
	 	printf("%.2f/n",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
    }
 	return 0;
 } 
 
/*24.输入一个数并对其进行分解(6=2*3),并以2*3的形式输出*/
#include<stdio.h>
int main()
{
	int x,i;
	scanf("%d",&x);
	printf("%d=",x);
	for(i=2;i!=x;i++)
	{
		if(x%i==0)
		{
			printf("%d*",i);
			x=x/i;
		}
	}
	printf("%d\n",i);
	return 0;
}

/*25.用数组输出斐波那契数列的第n项 */
 #include<stdio.h> 
 int main()
 {
 	int a[21]={0,1,1},i,n;//为了方便计数我们常常把数组大小设大一个!!
	scanf("%d",&n);
	for(i=3;i<=n;i++)
	{
		a[i]=a[i-2]+a[i-1];
	}
	printf("%d",a[n]);
 	return 0;
 }
 
/*26.进阶版输出金字塔型星号*/
 #include<stdio.h>
 int main()
 {
 	int n,i,j;
 	scanf("%d",&n);
 	for(i=1;i<=n;i++)
 	{
	 	for(j=n-i;j>0;j--)
	 	{
	 		printf(" ");
	 	}
	 	for(j=1;j<=i;j++)
	 	{
	 		printf("*");
	 	}
	 	printf("\n");
    }
 	return 0;
 } 

/*27.倒序后输出 eg:输入123 输出321*/
 #include<stdio.h>
 int mian()
 {
 	int x,y=0;
 	scanf("%d",&x);
 	while(x!=0)
 	{
	 	y=y*10+x%10;
	 	x=x/10;
    }
    printf("%d\n",y);
 	return 0;
 } 
 
/*28.将n中的偶数倒叙后输出*/
 #include<stdio.h>
 int main()
 {
 	int x,y=0;
 	scanf("%d",&x);
 	while(x!=0)
 	{
	 	if(x%2==0)
	 	{
	 		y=y*10+x%10;
	 		x/=10;
	 	}
	 	else
	 	  x=x/10;
    }
    printf("%d",y);
 	return 0;
 } 

 //第五章 数据类型和表达式
 /*1、请编写程序: 有36 块砖,36 人搬。男人搬4块,女人搬3块,两个小孩抬一砖。要求一次全搬完。问需男人、女人、小孩各若干?(穷举法)。*/
#include<stdio.h>
int main()
{
    int male,female,child;
    for(male=0;male<=9;male++)
    {
        for(female=0;female<=12;female++)
        {
            for(child=0;child<=72;child++)
            {
                if(child*1.0/2+male*4+female*3==36&&(male+female+child)==36)
                {
                    printf("需要%d个男人,%d个女人,%d个小孩\n",male,female,child);
                }
            }
        }
    }
    return 0;
}

/*2.输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积,结果都保留两位小数。

要求:将pi定义为符号常量,取值3.1416

注意:输入数据的格式(圆半径在前,圆柱高在后,用逗号分隔),输出的格式和文字(冒号和等号为英文字符)。*/
#include<stdio.h>
#include<math.h>
#define pi 3.1416
int main()
{
    float r,h,c,s,sq,v,vz;
    scanf("%f,%f",&r,&h);
    c=2*pi*r;
    s=pi*r*r;
    sq=4*pi*r*r;
    v=4.0/3*pi*r*r*r;
    vz=s*h;
    printf("圆周长为:c=%.2f\n圆面积为:s=%.2f\n圆球表面积为:sq=%.2f\n圆球体积为:v=%.2f\n圆柱体积为:vz=%.2f\n",c,s,sq,v,vz);
    return 0;
}

/*3.要将"China"译成密码,密码规律是:用原来字母后面的第n个字母代替原来的字母(n的取值从1到10)。例如,n=4,则字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,输入n的值,输出经过变换后的密码字符。 */
#include<stdio.h>
int main()
{
    int n;
    char c1='C',c2='h',c3='i',c4='n',c5='a';
    scanf("%d",&n);
    printf("%c%c%c%c%c\n",c1+n,c2+n,c3+n,c4+n,c5+n);
    return 0;
}

/*4.假如我国国民生产总值的年增长率为9%,计算n年后我国国民生产总值与现在相比增长多少百分比。

计算公式为

    p=(1+r)n

r为年增长率,n为年数,p为与现在相比的倍数

要求:n的值需要输入,输出的倍数以百分比的形式输出,保留两位小数(以上公式求的是倍数,需要转换成百分比的格式,例如p的值是2.5678,需要输出256.78%)。*/
#include<stdio.h>
int main()
{
    int n,i;
    float r=0.09,p;
    scanf("%d",&n);
    for(i=0,p=1+r;i<n-1;i++)
    {
        p*=(1+r);
    }
    printf("%.2f%%\n",p*100);
    return 0;
}

//第六章 数组
/*1.任意读入10个整数存放到数组a中,统计数组中出现频率最高的数,输出该数及其出现次数。

如果数组中没有重复出现的数,则输出"没有重复出现的数";

如果有多个频率最好的数字,按照输入的先后顺序全部输出,参考下面的程序运行示例。*/
#include<stdio.h>
int main()
{
    int a[10],i,time[10]={0},j,max;
    printf("a数组元素为:");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
        printf("%d ",a[i]);
    }
    printf("\n");
    for(i=0;i<10;i++)
    {
        for(j=i;j<10;j++)
        {
            if(a[i]==a[j])
            {
                time[i]++;
            }
        }
    }
    max=time[0];
    for(i=0;i<10;i++)
    {
        if(time[i]>=max)
        {
            max=time[i];
        }
    }
    if (max == 1)
        printf("没有重复出现的数");
    for(i=0;i<10;i++)
    {
        if(time[i]==max&&max!=1)
        {
            printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[i],max);
        }
    }
    return 0;
}

/*2.任意读入10个整数存放到数组a中,在main()中完成如下功能:

找出其中最大的数,给出其在数组中的位置,如果不止有一个最大数,则需要给出所有的最大数在数组中的位置(位置编号由小到大输出)*/
#include<stdio.h>
int main()
{
    int a[10],i,max;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    max=a[0];
    for(i=0;i<10;i++)
    {
        if(a[i]>=max)
        {
            max=a[i];
        }
    }
    printf("最大值是%d,其在数组中位置是",max);
    for(i=0;i<10;i++)
    {
        if(a[i]==max)
          printf("%d ",i);
    }
    return 0;
}

/*3.输入一个长度为8的整型数组,输出该数组的平均值(保留1位小数),输出数组中大于等于平均值的数组元素。

注意:输出按照输入的顺序,如果有相同的元素都输出,请参考下面的运行结果。*/
#include<stdio.h>
int main()
{
    int a[8],i;
    float ave,sum=0;
    for(i=0;i<8;i++)
    {
        scanf("%d",&a[i]);
        sum=sum+a[i];
    }
    ave=sum/8;
    printf("平均值是%.1f\n大于等于平均值的元素是",ave);
    for(i=0;i<8;i++)
    {
        if(a[i]>=ave)
          printf("%d ",a[i]);
    }
    return 0;
}

/*4.分别输入两个长度为5的从小到大排好序的整数数组,将这两个数组合并到第三个数组中,保持从小到大的排序,并输出。*/
#include <stdio.h>
int main()
{
	int a[5],b[5],c[5];
	int i,j,k,min,index;
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
		c[i]=a[i];
	}
	for(i=0;i<5;i++)
	{
		scanf("%d",&b[i]);
		c[i+5]=b[i];
	}
	for(i=0;i<9;i++)
	{
		min=c[i];
		index=i;
		for(j=i;j<10;j++)
		{
			if(c[j]<min)
			{
				min=c[j];
				index=j;
			}
		}
		c[index]=c[i];
		c[i]=min;
	}
	for(i=0;i<10;i++)
	{
         printf("%d ",c[i]);
    }
}

/*5.输入一个4行4列的单精度数组,计算主对角线元素之和,保留1位小数输出。*/
#include<stdio.h>
int main()
{
    float a[4][4],sum=0;
    int i,j;
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%f",&a[i][j]);
        }
    }
    for(i=0;i<4;i++)
    {
        sum+=a[i][i];
    }
    printf("%.1f",sum);
    return 0;
}

/*6.输入一个2行3列的整数数组,将其进行转置(行和列元素交换)并输出。*/
#include<stdio.h>
int main()
{
    int a[2][3],b[3][2],i,j;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            b[j][i]=a[i][j];
        }
    }
    for(j=0;j<3;j++)
    {
        for(i=0;i<2;i++)
        {
            printf("%d ",b[j][i]);
        }
        printf("\n");
    }
    return 0;
}

/*7.输入一个3行2列的数组,找出最大的元素值以及最大元素的行下标和列下标,并输出。*/
#include<stdio.h>
int main()
{
    int a[3][2],i,j,max;
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    max=a[0][0];
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            if(max<a[i][j])
            {
                max=a[i][j];
            }
        }
    }
    printf("max=");
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            if(max==a[i][j])
            {
                printf("a[%d][%d]=",i,j);
            }
        }
    }
    printf("%d",max);
    return 0;
}

/*8.输入一个2×3的矩阵,求每列的和*/
#include<stdio.h>
int main()
{
    int a[2][3],i,j,sum;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(j=0;j<3;j++)
    {
        sum=0;
        for(i=0;i<2;i++)
        {
            sum+=a[i][j];
        }
        printf("%d",sum);
    }
    return 0;
}

/*9.编写程序,从输入的一行字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。n>0且n<=字符串的长度,否则打印起始位置-n-越界

要求:n和m都由用户输入。

如果抽取的字符串长度不够,则按照实际长度抽取,例如,字符串为“abcde”,若n=2,m=3,则抽取结果为“bcd”;若n=3,m=5,则抽取结果为“cde”;若n=0,m=4 则输出:起始位置0越界  ;若n=6,m=2 则输出:起始位置6越界  */
#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,l,i;
    char s[100],cpy[100];
    gets(s);
    scanf_s("%d%d",&n,&m);
    l=strlen(s);
    if(n>0&&n<=l)
    {
        if(m+n>l)
        {
            for(i=n-1;i<l;i++)
            {
                cpy[i-n+1]=s[i];
            }
            s[l-n]='\0';
        }
        if(m+n<l)
        {
            for(i=n-1;i<m+n;i++)
            {
                cpy[i-n+1]=s[i];
            }
            s[m]='\0';
        }
        puts(cpy);
    }
    else
      printf("起始位置%d越界",n);
    return 0;
}

//10.输入一个字符串和一个特定字符,在字符串中删除从该特定字符开始的所有字符。例如输入字符串为"abcdefg",特定字符为'd',删除后的字符串为"abc";输入字符串为"abcdefg",特定字符为'x',则输出“特定字符不存在”
#include<stdio.h>
#include<string.h>
int main()
{
    char s[100],ch;
    int i,l1,l2;
    gets(s);
    l1=strlen(s);
    scanf_s("%c",&ch);
    printf("特定字符是%c\n",ch);
    for(i=0;s[i];i++)
    {
        if(s[i]==ch)
          s[i]='\0';
    }
    l2=strlen(s);
    if(l1==l2)
    {
        printf("特定字符不存在\n");
    }
    else
    {
        printf("删除特定字符%c后的字符串是",ch);
        puts(s);
    }
    return 0;

}

//11.任意输入一行字符串保存在一维字符数组中,判断里面数字字符的个数。
#include<string.h>
#include<stdio.h>
int main()
{
    char s[100];
    int i,cnt=0;
    gets(s);
    for(i=0;s[i];i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            cnt++;
        }
    }
    printf("%d",cnt);
    return 0;
}

//12.任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。
#include<stdio.h>
#include<string.h>
int main()
{
    char s1[1000],s2[1000];
    int i,l;
    gets(s1);
    gets(s2);
    l=strlen(s1);
    for(i=0;s2[i];i++)
    {
        s1[i+l]=s2[i];
    }
    s1[i + l] = '\0';
    puts(s1);
    return 0;
}

//13.任意输一行字符串(包括空格),求其长度(不用strlen函数)。
#include<stdio.h>
int main()
{
    char s[100];
    int i;
    gets(s);
    for(i=0;s[i];i++)
      ;
    printf("%d\n",i);
    return 0;
}

//14.输入m,n 和一个m*n矩阵 (最大为10 x 10),求他们的各行元素之和。
#include<stdio.h>
int main()
{
    int a[10][10],m,n,i,j,sum;
    scanf_s("%d%d",&m,&n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf_s("%d",&a[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        sum=0;
        for(j=0;j<n;j++)
        {
            sum+=a[i][j];
        }
        printf("第%d行元素之和是%d\n",i,sum);
    }
}

/*15.青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分,保留2位小数)。*/
#include<stdio.h>
int main()
{
    float a[10],ave,max,min,sum;
    int i;
    for(i=0;i<10;i++)
    {
        scanf_s("%f",&a[i]);
    }
    for(i=0,max=a[0],min=a[0],sum=0;i<10;i++)
    {
        if(a[i]>max)
          max=a[i];
        if(a[i]<min)
          min=a[i];
        sum+=a[i];
    }
    ave=(sum-max-min)/8;
    printf("最高分%.2f\n最低分%.2f\n最后得分%.2f",max,min,ave);
    return 0;
}

/*16.输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值(保留2位小数),以及最大值、最小值在数组中的下标分别是多少。

输入

输入2行

第1行输入整数的个数n

第2行输入n个整数,用空格分隔

输出

需要输出5行

第1行输出最大值

第2行输出最大值的下标

第3行输出最小值

第4行输出最小值的下标

第5行输出平均值*/
#include<stdio.h>
int main()
{
    int n,max,min,a[10],i;
    float sum,ave;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    max=0;
    min=0;
    for(i=0,sum=0;i<n;i++)
    {
        if(a[i]>a[max])
          max=i;
        if(a[i]<a[min])
          min=i;
        sum+=a[i];
    }
    ave=sum/n;
    printf("最大值%d\n最大值下标%d\n最小值%d\n最小值下标%d\n",a[max],max,a[min],min);
    printf("平均值%.2f\n",ave);
    return 0;
}

/*17.将n个数输入到一维数组,将值最大的数组元素与值最小的数组元素的位置对调后输出。*/
#include<stdio.h>
int main()
{
    int a[100],i,max,min,n,temp1,temp2;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    max=a[0];//这里在赋初值的的时候最好不要max=min=0!!可能导致逻辑有问题!
    min=a[0];
    for(i=0;i<n;i++)
    {
        if(a[i]>max)
        {
        	max=a[i];
        	temp1=i;
        }
        if(a[i]<min)
        {
        	min=a[i];
        	temp2=i;
        }
    }
    a[temp1]=min;
    a[temp2]=max;
    for(i=0;i<n;i++)
    {
    	printf("%d ",a[i]);
    }
    return 0;
}

/*18.从键盘输入10个整数并保存到数组,要求找出最小的数,把它和数组中最前面的元素对换位置后输出。*/
#include<stdio.h>
int main()
{
    int a[10],i,min;
    for(i=0;i<10;i++)
    {
        scanf_s("%d",&a[i]);
    }
    for(i=0,min=0;i<10;i++)
    {
        if(a[i]<a[min])
          min=i;
    }
    for(i=0;i<10;i++)
    {
        if(i==0)
          printf("%d ",a[min]);
        else if(i==min)
          printf("%d ",a[0]);
        else
          printf("%d ",a[i]);
          
    }
    return 0;
}

/*19.给定一系列正整数,对每个正整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。
输入:是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值*/
#include <stdio.h>
int main()
{
    char str[100];
    int a,b,n,max=0;
    int q[10]={0};
    scanf("%d",&n);
    for(a=0;a<n;a++)
    {
        scanf("%s",str);
        for(b=0;str[b]!='\0';b++)
        {
            if(str[b]>='0'&&str[b]<='9')
            {
                q[str[b]-'0']++;
            }
        }
 
    }
    for(a=0;a<10;a++)
    {
        if(q[a]>max)
            max=q[a];
    }
    printf("出现次数最多%d次的数字是",max);
    for(a=0;a<10;a++)
    {
        if(q[a]==max)
            printf("%d " ,a);
    }
}

/*20.从键盘上读入一个数,从一个已知的数组中删除这个数。

要求使用数组初始化语句为:  int a[15]={1,4,6,9,9,6,19,4,4,8,12,1,9,18,19};

n为数组元素的个数,初始值n=15。 程序的输出语句为必要代码:

for(i=0;i<n;i++)

    printf("%d ",a[i]);*/
#include<stdio.h>
int main()
{
    int a[15]={1,4,6,9,9,6,19,4,4,8,12,1,9,18,19},n=15,i,j,x;
    scanf("%d",&x);
    for(i=0,j=0;i<n;i++)
    {
        if(a[i]!=x)
          a[j++]=a[i];
    }
    n=j;
    for(i=0;i<n;i++)
      printf("%d ",a[i]);
    return 0;
}

/*21.用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 "stop" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。单词数量不包括"stop" 。*/
#include <stdio.h>
#include <string.h>
int main()
{
    char str[80];
    int n=0;
    scanf("%s",str);
    while(strcmp(str,"stop")!=0)
    {
        n++;
        scanf("%s",str);
    }
    printf("%d",n);
}

/*22.任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。*/
#include<stdio.h>
int main()
{
    int n,i,j,z,a[20],max=0,index;
    scanf("%d",&n);
    for(i=0;n!=0;i++)
    {
        a[i]=n%10;
        n=n/10;
    }
    for(j=0;j<i-1;j++)
    {
        index=j;
        for(z=j;z<i;z++)
        {
            if(a[z]>max)
            {
                max=a[z];
                index=z;
            }
        }
        a[index]=a[j];
        a[j]=max;
        max=0;
    }
    for(j=0;j<i;j++)
    {
        printf("%d",a[j]);
    }
    return 0;
}

/*23.题目:输入一个小于8位数的正整数,判断它是不是回文数。即12321是回文数。*/
#include <stdio.h>
int main()
{
    int a,b,n,i,x=0;
    int q[8];
    scanf("%d",&n);
    for(a=0;n!=0;a++)
    {
        q[a]=n%10;
        n/=10;
    }
    b=(a+1)/2;
    for(i=0;i<b;i++)
    {
        if(q[i]==q[a-1-i])
        {
            x++;
        }
 
    }
    if(x==b&&b!=1||b==1&&x==1)
        printf("这是个回文数");
    else
        printf("这不是回文数"); 
}
//23题的另法
#include<stdio.h>
int main()
{
	int a[8],x,n,i=0,j;
	scanf("%d",&x);
	while(x)
	{
		a[i++]=x%10;
		x/=10;
	}
	n=i;
	for(i=0,j=n-1;i<j;i++,j--)
	{
		if(a[i]==a[j])
		  continue;
        else
		{
        	printf("这不是回文数\n");
			break; 
        }
	}
	if(i==j||i-1==j)
	  printf("这是个回文数\n"); 
	return 0;
}

/*24.有一篇文章,共有多行文字(不超过10行), 最后一行为end。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。统计结果不包括最后一行的end。*/
//与21为同类型题
#include <stdio.h>
#include <string.h>
int main()
{
    char str[80];
    int i,b=0,s=0,num=0,space=0,others=0;
    gets(str);
    while(strcmp(str,"end")!=0)
    {
        for(i=0;str[i];i++)
        {
            if(str[i]>='a'&&str[i]<='z')
              s++;
            else if(str[i]>='A'&&str[i]<='Z')
              b++;
            else if(str[i]>='0'&&str[i]<='9')
              num++;
            else if(str[i]==' ')
              space++;
            else
              others++;
        }
        gets(str);
    }
    printf("大写字母有%d个\n小写字母有%d个\n数字有%d个\n空格有%d个\n其他字符有%d个\n",b,s,num,space,others);
}

/*25.用选择法对10个整数从小到大排序,这10个整数需要输入。

要求选择法排序由以下语句实现,其中黄色的为必要代码

  for (i=0;i<9;i++)

    { for (min=i,j=i+1;j<10;j++)

      。。。

     }*/
#include<stdio.h>
int main()
{
    int a[10],i,j,t,min;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<9;i++)
    {
        for (min=i,j=i+1;j<10;j++)
        {
            if(a[j]<a[min])
            {
                 min=j;
            }
        }
        t=a[min];
        a[min]=a[i];
        a[i]=t;
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

/*26.已有一个已从小到大排好序的数组,要求输入一个数要求按原来排序的规律将它插入数组中。

要求使用数组初始化语句为:   int a[11]={1,4,6,9,13,16,19,28,40,100}*/
#include <stdio.h>
int main()
{
    int a[11]={1,4,6,9,13,16,19,28,40,100};
    int i,j,k,n;
    scanf("%d",&n);
    for(i=0;i<10;i++)
    {
        if(a[i]>n)
        {
            for(j=11;j>i;j--)
            {
                a[j]=a[j-1];
            }
            a[i]=n;
            break;
        }
    }
    if(n>a[10])
    {
        a[10]=n;
    }
    for(i=0;i<11;i++)
    {
        printf("%d ",a[i]);
    }
}
//26题的另法
#include<stdio.h>
int main()
{
    int a[11]={1,4,6,9,13,16,19,28,40,100},i,x;
    scanf("%d",&x);
    if(x>1&&x<100)
    {
    for(i=0;i<10;i++)
    {
   	     if(a[i]<x||a[i]>x)
 	        printf("%d ",a[i]);
   	     if(a[i]<x&&a[i+1]>x&&i<10)
            printf("%d ",x);
    }    	
    }

    else if(x<1)
    {
   	     printf("%d ",x);
   	     for(i=0;i<10;i++)
        	printf("%d ",a[i]); 
    }
    else
    {
    	for(i=0;i<10;i++)
        	printf("%d ",a[i]);
    	printf("%d ",x);
    }
	return 0;
}

/*27.打印出n行杨辉三角形(要求输入n的值,n<=10)。  
1  
1  1  
1  2  1  
1  3  3  1  
1  4  6  4  1  
1  5  10 10  5  1  

∶  ∶  ∶  ∶  ∶  ∶*/
#include<stdio.h>
int main()
{
    int n,i,j;
    scanf("%d",&n);
    int a[100][100];
    for(i=0;i<n;i++)
    {
        a[i][0]=1;
    }
    a[1][1]=1;
    for(i=2;i<n;i++)
    {
        for(j=1;j<=i;j++)
          a[i][j]=a[i-1][j]+a[i-1][j-1];
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}

/*28.将不多于10个的正整数输入到数组a[ ]中,以-1作为结束符, 要求数组的值按逆序重新存放并输出(不包含-1)。

输出语句必须是:

 for(i=0;i<n;i++) printf("%d ",a[i]);

例如,输入: 8 6 5 4 1 -1

输出 1 4 5 6 8。*/
#include<stdio.h>
int main()
{
    int a[10],i,j,t,n;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==-1)
          break;
    }
    n=i;
    for(i=0,j=n-1;i<j;i++,j--)
    {
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

//第七章 函数
/*1.编写函数,完成下面的程序,将一个字符串中的字母排序后输出。输出要求:字母从小到大排序(包括大小写)后的字符串。例如:

输入:Hello World!  

输出:!HWdellloor

程序中的必要代码为:

main()
{
    char s[80];
    gets(s);
    sortchar(s);

    puts(s);

}*/
#include <stdio.h>
#include <string.h>
int sortchar(char s[]);
int main()
{
    char s[80];
    gets(s);
    sortchar(s);
    puts(s);
 
}
int sortchar(char s[])
{
    int a,b,k;
    int i=strlen(s);
    char t; 
    for(a=0;a<i-1;a++)
    {
        for(b=a;b<i;b++)
        {
            if(s[a]>s[b])
            {
                t=s[a];
                s[a]=s[b];
                s[b]=t;
            }
        }
    }
    s[b]='\0';
}

/*2.请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。

程序的必要代码为:

int main()

{      int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;

       scanf("%d",&y);

       n = fun(aa, n, y);

       for(k=0; k<n; k++ )

              printf("%d ",aa[k]);

         printf("\n");

return(0);

}*/
#include<stdio.h>
#define M 15  
int fun(int aa[],int n,int y);
int main()
{      
       int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1},n=15,y,k;

       scanf("%d",&y);

       n = fun(aa, n, y);

       for(k=0; k<n; k++ )

              printf("%d ",aa[k]);

       printf("\n");

       return(0);

}
int fun(int aa[],int n,int y)
{
     int i,j;
     for(i=0,j=0;i<n;i++)
     {
          if(aa[i]!=y)
            aa[j++]=aa[i];
     }
     return j;
}

/*3.编写函数 int  substring(char s[], char sub[]),查找sub串在字符串s中第一次出现的位置,若找到,函数返回对应位置,否则返回-1。注意主串第1个字符的位置为1。例如s串为“abcdefg”,sub串为“def”,则返回值为4。在main函数中输入主串和子串,调用该函数并输出结果。

输入要求:需要2行。第1行输入主串s,第2行输入子串sub。

示例如下:

abcdefgdefg

def

输出要求:根据实际情况输出子串的位置或提示“***子串没有找到!”(其中***要用实际的子串替代)

示例如下:

子串def在主串abcdefgdefg中第一次出现的位置是4

程序的必要代码为:

void  main(void)

{

    char s[99],sub[99];

    gets(s);

    gets(sub);

    if(substring(s,sub)==-1)

           printf("%s子串没有找到!",sub);

    else

           printf("子串%s在主串%s中第一次出现的位置是%d",sub,s,substring(s,sub));

}*/
#include<stdio.h>
#include<string.h>
int  substring(char s[],char sub[]);
int  main()
{

    char s[99],sub[99];

    gets(s);

    gets(sub);

    if(substring(s,sub)==-1)

           printf("%s子串没有找到!\n",sub);

    else

           printf("子串%s在主串%s中第一次出现的位置是%d\n",sub,s,substring(s,sub));

}
int  substring(char s[], char sub[])
{
     int i,j,pos,l;
     l=strlen(sub);
     char s2[l];
     for(j=0;j<strlen(s);j++)
     {
   		if(sub[0]==s[j])
     	{
      		pos=j;
        	break;
      	}
     }
     for(i=0;i<l;i++)
     {
          s2[i]=s[pos+i];
     }
     s2[i]='\0';
     if(strcmp(sub,s2)==0)
     {
          return pos+1;
     }
     else
       return -1;

}

/*4. 编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果。

输入要求:任意一个字符串。

程序的必要代码为:

main()

{    char str[255];

     int count[26]={0};

     int i;

     gets(str);

     counta_z(str,count);

     for(i=0;i<26;i++)

     if(count[i])

          printf("%c出现的次数为:%d\n",i+'a',count[i]);

}*/
#include<stdio.h>
#include<string.h>
void counta_z(char str[],int count[26]);
int main()
{
     char str[255];

     int count[26]={0};

     int i;

     gets(str);

     counta_z(str,count);

     for(i=0;i<26;i++)

     if(count[i])

          printf("%c出现的次数为:%d\n",i+'a',count[i]);

}
void counta_z(char str[],int count[26])
{
     int i,j;
     for(i=0;i<strlen(str);i++)
     {
          for(j=0;j<26;j++)
          {
          	if(str[i]==j+'a'||str[i]==j+'A')
            {
               count[j]++;
            }
          }		    
     }
}

/*5.程序题章节:第七章 函数知识点:无所属语言:C试题难度:中等
编写函数void find_max( int a[][4], int n, int b[2]) 求出二维整型数组中元素的最大值及其下标号。在main函数中输入一个二维数组,调用函数find_max()求出最大值及其下标号,在主函数中输出。其中:二维数组行数由用户确定(不超过10),列数固定为4列。

输入要求:第1行输入二维数组的行数,然后分m行输入二维数组,元素之间用空格分隔。示例如下:

3

18   2    3    4

8    7    6    18

9    10  11  12

输出要求:第一个最大值及下标。示例如下:

最大值array[0][0]=18

 提示:这里至少需要返回二维数组元素的行,列两个值,而函数只能返回1个值(无法返回2个值),所以只能通过数组作为参数的方法将值带回来。在main函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号。

程序的必要代码为:

main()

{

      int array[10][4],m[2],n,i,j;

      scanf("%d",&n);

      for(i=0;i<n;i++)

           for(j=0;j<4;j++)

               scanf("%d",&array[i][j]);

      find_max(array,n,m);

      printf("最大值array[%d][%d]=%d",m[0],m[1],array[m[0]][m[1]]);

}*/
#include<stdio.h>
void find_max(int array[][4],int n,int m[2]);
int main()
{
	int array[10][4],m[2],n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	  for(j=0;j<4;j++)
	    scanf("%d",&array[i][j]);
    find_max(array,n,m);
    printf("最大值array[%d][%d]=%d",m[0],m[1],array[m[0]][m[1]]);
}
void find_max(int array[][4],int n,int m[2])
{
	int i,j;
	for(i=0,m[0]=0,m[1]=0;i<n;i++)
	{
		for(j=0;j<4;j++)
		{
			if(array[m[0]][m[1]]<array[i][j])
			{
				m[0]=i;
				m[1]=j;
			}
		}
	}
}

/*6.编写一个函数void sort(int a[],int n),实现整型数组元素的升序排列。在main函数中输入数组元素个数和各个元素(不超过10个整数),之后调用sort函数进行排序,在主函数中输出排序后的结果。

输入要求:需要输入2行。第1行输入数组元素的个数n;第2行输入n个数组元素。

输入示例:

5

1  9  4  5  7

输出要求:输出2行。第1行为未排序的数组,每个数值之后都用1个空格分隔;第2行为升序排序后的数组,每个数值之后都用1个空格分隔。

输出示例:

排序之前的数组:1 9 4 5 7

排序之后的数组:1 4 5 7 9 

程序的必要代码为:

main()

{

    int a[10],i,n;

    scanf("%d",&n);

    for(i=0;i<n;i++)

          scanf("%d",&a[i]);

    printf("排序之前的数组:");

    for(i=0;i<n;i++)

          printf("%d ",a[i]);

    sort(a,n);

    printf("\n排序之后的数组:");

    for(i=0;i<n;i++)

         printf("%d ",a[i]);

}*/
#include<stdio.h>
void sort(int a[],int n);
int main()
{
	int a[10],i,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("排序之前的数组:");
	for(i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	} 
	sort(a,n);
	printf("\n排序之后的数组:");
	for(i=0;i<n;i++)
	  printf("%d ",a[i]);
}
void sort(int a[],int n)
{
	int i,j,t;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>a[j])
			{
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
}

/*7.编写函数long compose(long number)完成如下功能:将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,假设长整型数为:87653142时,则返回的数为:8642。

然后在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果。

程序的必要代码为:

int main()

{

   long int n ;

   scanf("%ld",&n);

   printf("%ld\n",compose(n));

   return 0;

}*/
#include<stdio.h>
long compose(long number);
int main()
{
   long int n ;

   scanf("%ld",&n);

   printf("%ld\n",compose(n));

   return 0;	
}
long compose(long number)
{
	int a[100],i,n,s;
	for(i=0;number!=0;i++)
	{
		a[i]=number%10;
		number=number/10;
	}
	n=i;
	for(i=n-1,s=0;i>=0;i--)
	{
		if(a[i]%2==0)
		{
			s=s*10+a[i];
		}
	}
	return s;
}

/*8.编写函数int reverse(int  number),它的功能是将number逆序,在main函数中输入一个整数,调用该函数得到逆序的数并输出。例如reverse(11233)的返回值为33211。

程序的必要代码为:

void main()

{

    int number;

    scanf("%d",&number);

    printf("%d", reverse(number) );

}*/
#include<stdio.h>
int reverse(int number);
int main()
{
    int number;

    scanf("%d",&number);

    printf("%d", reverse(number) );	
}
int reverse(int number)
{
	int i,a[100],n,s;
	for(i=0;number;i++)
	{
		a[i]=number%10;
		number=number/10;
	}
	n=i;
	for(i=0,s=0;i<n;i++)
	{
		s=s*10+a[i];
	}
	return s;
}

/*9.编写一个函数char my_toupper(char ch),其功能是判断输入字符是否为小写字母,若是,返回其对应的大写字母,否则返回原字符。然后在main函数中输入一个字符,调用该函数得到其大写字母或原字符并输出。

程序的必要代码为:

void main()

{    char ch;

     ch=getchar();

     putchar(my_toupper(ch));

}*/
#include<stdio.h>
char my_toupper(char ch);
int main()

{    char ch;

     ch=getchar();

     putchar(my_toupper(ch));

}
char my_toupper(char ch)
{
	if(ch-'A'<26)
	  return ch;
    else
      return (ch-32);
}

/*10.输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a的每一行的最大元素值都相等, 输出"YES", 否则, 输出"NO"。

例:输入:

3   

1  2  3

3  3  3  

3  0  0  

输出:

YES*/
#include<stdio.h>
int max(int a[][6],int n);
int main()
{
	int n,i,j,a[6][6];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	if(max(a,n)==-1)
	  printf("NO");
    else
      printf("YES");
}
int max(int a[][6],int n)
{
	int i,j,m,max;
	for(m=a[0][0],i=0;i<n;i++)
	{
		if(m<a[0][i])
		  m=a[0][i];
	}
	max=m;
	for(i=1;i<n;i++)
	{
		m=a[i][0];
		for(j=0;j<n;j++)
		{
			if(m<a[i][j])
			  m=a[i][j];
		}
		if(max!=m)
          return -1;
	}
	return 1;
}

/*11.已知两个整数20和10,编写程序,自定义函数add( )计算这两个数的和,自定义函数sub( )计算这两个数的差,20和10作为参数传递给这两个函数。

程序的必要代码为:

main()

{     int a,b; 

     scanf("%d%d",&a,&b);

      printf("%d+%d = %d\n", a, b, add(a, b));

      printf("%d-%d = %d\n", a, b, sub(a, b));

}*/
#include<stdio.h>
int add(int a,int b);
int sub(int a,int b);
int main()

{     int a,b; 

      scanf("%d%d",&a,&b);

      printf("%d+%d = %d\n", a, b, add(a, b));

      printf("%d-%d = %d\n", a, b, sub(a, b));

}
int add(int a,int b)
{
	return (a+b);
}
int sub(int a,int b)
{
	return (a-b);
}

/*12.对每个字符串做如下处理:删除字符串所有连续相同的字符,然后输出该字符串。

要求:使用函数void del_samechar(char str[])实现对字符串str中所有连续相同的字符的删除。

例:输入:room    输出:rm

      输入:aabaaama    输出:bma

程序的必要代码为:

main()

{   char str[100];

    gets(str);

     del_samechar(str);

     puts(str);

}*/
#include<stdio.h>
void del_samechar(char str[]);
int main()

{    char str[100];

     gets(str);

     del_samechar(str);

     puts(str);

}
void del_samechar(char str[])
{
	int i,j;
	for(i=0,j=0;str[i]!=0;i++)
	{
		if(i==0&&str[i]!=str[i+1])
		{
			str[j++]=str[i];
		}
		if(i>0&&str[i]!=str[i-1]&&str[i]!=str[i+1])
		{
			str[j++]=str[i];
		}
	}
	str[j]='\0';
}

/*13.编写1个函数判断一个整数是否左右对称数。 要求函数为:  fun(long n)

要求在主程序中输入一个整数,如果该数对称,输出"YES";否则,输出"NO"。

例如 输入:1235321   输出:YES

     输入: 1210        输出:NO

程序的必要代码为:

main(  )

{   long in; 

    scanf("%ld",&in);

     if(fun(in))  

            printf("YES\n");

    else

          printf("NO\n");

 }*/
 #include<stdio.h>
 int fun(long n);
 int main(  )

{   long in; 

    scanf("%ld",&in);

    if(fun(in))  

          printf("YES\n");

    else

          printf("NO\n");

 }
 int fun(long n)
 {
 	int i,j,a[100],all;
 	for(i=0;n!=0;i++)
 	{
	    a[i]=n%10;
		n=n/10;	
    }
    all=i;
    for(i=0,j=all-1;i<j;i++,j--)
    {
    	if(a[i]!=a[j])
    	  return 0;
    }
    return 1;
 }

/*14.输入一个大于等于6的偶数,将它表示为两个素数之和(输出所有的组合)。

要求:用自定义函数int prime(int n)来判断n是否为素数。

例如:输入10

 输出:10=3+7

        10=5+5*/
#include<stdio.h>
int prime(int n);
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=2;i<=n/2;i++)
	{
		if(prime(i)&&prime(n-i))
		   printf("%d=%d+%d\n",n,i,n-i);
	}
}
int prime(int n)
{
	int i;
	for(i=2;i<n;i++)
	{
		if(n%i==0)
		  return 0;
	}
	return 1;
}
        
/*15.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

程序的必要代码为:

main( )

{   int u,v,h,x;

  scanf("%d%d",&u,&v);

  h=hcf(u,v);

  printf("H.C.F=%d\n",h);

  x=lcd(u,v,h);

  printf("L.C.D=%d\n",x);

  }*/
#include<stdio.h>
int hcf(int u,int v);
int lcd(int u,int v,int h);
int main( )
{   int u,v,h,x;

  scanf("%d%d",&u,&v);

  h=hcf(u,v);

  printf("H.C.F=%d\n",h);

  x=lcd(u,v,h);

  printf("L.C.D=%d\n",x);

}
int hcf(int u,int v)
{
  	int r;
    if(u<v)
  	{
	  	r=u;
	  	u=v;
	  	v=r;
    }
    r=u%v;
  	while(r!=0)
  	{
	  	u=v;
	  	v=r;
	  	r=u%v;
    }
	return v; 
}
int lcd(int u,int v,int h)
{
  	return (u*v/h);
}

//第八章 指针
/*1.输入多行字符串(有可能有空格),最后一行为#号作为结束,按照由小到大的顺序将字符串分行输出(不输出"#")。

例如输入:

I study very hard.

C language is very interesting

He is a professfor.

#

输出:

C language is very interesting

He is a professfor.

I study very hard.*/
#include<stdio.h>
#include<string.h>
int main()
{
	char s[10][100],t[100]; 
	int i=0,n,j;
    while(1)
	{
		gets(s[i]);
		if(strcmp(s[i],"#")==0)
		  break;
        i++;
	}
    n=i;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(s[i],s[j])>0)
			{	
				strcpy(t,s[i]);
				strcpy(s[i],s[j]);
				strcpy(s[j],t);
			}
		}
	}
	for(i=0;i<n;i++)
	{
		puts(s[i]);
	}
}

/*2.指针实现:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。*/
#include<stdio.h>
int main()
{
	int a[10],*max,*min,i,t;
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
	}
	max=a;
	min=a;
	for(i=0;i<10;i++)
	{
		if(a[i]>*max)
		  max=a+i;
        if(a[i]<*min)
          min=a+i;
	}
	if(a[0]!=*max&&a[9]!=*min)
	{  
	  t=a[9];
	  a[9]=*max;
	  *max=t;
	  t=a[0];
	  a[0]=*min;
	  *min=t;
	}
	if(a[0]==*max&&a[9]==*min)
	{
		t=a[0];
		a[0]=a[9];
		a[9]=t;
	}
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
}
//以下是更简便地写法(5个数的)
#include<stdio.h>
int main()
{
	int a[5],t,*p,*max,*min;
    for(p=a;p<a+5;p++)
	{
		scanf("%d",p);
	}
	max=min=a;
	for(p=a;p<a+5;p++)
	{
		if(*p>*max)
		  max=p;
		if(*p<*min)
		  min=p;
	}
	if(max=a)
	{
		max=min;
	}
	t=a[0];
	a[0]=*min;
	*min=t;
	t=a[4];
	a[4]=*max;
	*max=t;
	for(p=a;p<a+5;p++)
	{
		printf("%d ",*p);
	}
}

/*3.请用指针实现程序:n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来的第几号的那位。*/
#include<stdio.h>
int main()
{
	int a[100],i,n,*p,left,cnt;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		a[i]=i+1;
	}
	p=a+n-1;
	left=n;
	while(1)
	{
		if(p==a+n-1)
		   p=a;
		else
		   p++;
		if(*p==0)
		  continue;
		cnt++;
		if(cnt==3)
		{
			left--;
			if(left==0)
			{
				printf("%d",*p);
				break;
			}
			cnt=0;
			*p=0;
		}
	}
}
//学校的网只可以编译通过下面的程序
#include <stdio.h>
  int main()
{
  int n,a[100]={0},i,j,m,t=0,*p=a+1;
  scanf("%d",&n);
  for(i=1;;i++)
  {
	  m=0;
    if(i>n)
      i=1;
	if(a[i]==0)
	{
		t++;
      if(t%3==0)
        a[i]=1;
	}
     for(j=1;j<=n;j++)
        m=m+a[j];
     if(m==n-1)
		 break;
  }
  for(;p<=n+a;p++)
    if(*p==0)
    printf("最后留下来的是第%d号\n",p-a);
  
}

/*4.用指针实现:输入3个整数,按由小到大的顺序输出。*/
#include<stdio.h>
int main()
{
	int *x,*y,*z,*t,a,b,c;
	scanf("%d,%d,%d",&a,&b,&c);
	x=&a;
	y=&b;
	z=&c;
	if(*x>*y)
	{
		t=x;
		x=y;
		y=t;
	}
	if(*x>*z)
	{
		t=x;
		x=z;
		z=t;
	}
	if(*y>*z)
	{
		t=y;
		y=z;
		z=t;
	}
	printf("%d,%d,%d",*x,*y,*z);
	return 0;
}

//第九章 结构体
/*1.一次投票后,统计了n位候选人的得票数(n<10)。

定义一个结构体类型,包括姓名和票数两个成员;并声明一个足够大的结构体数组,用来存放各个候选人的姓名和得票数。

结构体类型的定义和数组声明请使用:

struct  person

{    char name[20];

     int count;

}   leader[10];

要求:输入n的值,再依次输出每位候选人及其票数,按照每位候选人的得票数进行由大到小的排序,然后将候选人的姓名和得票数按照由大到小的顺序输出。

有关数据的输入和输出请参照解题要求的示例。*/
#include<stdio.h>
struct  person

{    char name[20];

     int count;

}   leader[10];

int main()
{
	int i,j,n;
	struct person t;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s%d",leader[i].name,&leader[i].count);
	}
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(leader[i].count<leader[j].count)
			{
				t=leader[i];
				leader[i]=leader[j];
				leader[j]=t;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%s:%d\n",leader[i].name,leader[i].count);
	}
}

/*2.定义一个结构体datetime,包含7个成员:year, month, day, hour, minute, second,week。其中week是字符串,其他6个成员均为整数。
编写程序,输入一个时间(时间格式为:yyyy-mm-dd hh:mm:ss,例如 2019-01-04 11:04:06),由程序给该时间的week属性赋值(已知1919年1月1日是星期三),并输出该日期是星期几。请注意闰年。

注意星期日不要写成星期天。*/
#include<stdio.h>
struct datetime
{
	int year;
	int month;
	int day;
	int hour;
	int minute;
	int second;
	char week[20]; 
};
struct datetime dt={1919,1,1,0,0,0,"星期三"};
int main()
{
	struct datetime date;
	int week=0,year=dt.year,month=1;
	scanf("%d-%d-%d %d:%d:%d",&date.year,&date.month,&date.day,&date.hour,&date.minute,&date.second);
	while(year!=date.year)
	{
			year++;
			if((year%4==0&&year%100!=0)||year%400==0)
			{
				week+=2;
			}
			else
			{
				week++;
			}
	}
	while(month<date.month)
	{
		if(month==2&&(date.year%4==0&&date.year%100!=0)||date.year%400==0)
		{
			week+=29;
		}
		else if(month%2==1)
		{
			week+=31;
		}
		else if(month%2==0&&month!=2)
		{
			week+=30;
		}
		else
		{
			week+=28;
		}
	}
	week=(week+date.day-1)%7;
	if(week==0)
	  printf("星期三\n");
	if(week==1)
	  printf("星期四\n"); 
    if(week==2)
      printf("星期五\n");
	if(week==3)
	  printf("星期六\n");
	if(week==4)
	  printf("星期日\n");
	if(week==5)
	  printf("星期一\n");
	if(week==6)
	  printf("星期二\n"); 
}

上一篇:C语言 结构体函数之传址调用


下一篇:模拟散列表开放寻址法