學習C語言時候的代碼

有點多

/*
已知 s=1!+2!+3!+…+n!,編程求解並依次輸出
符合條件s<m的最大n和s值,m從鍵盤輸入。例如:
輸入:100000                輸出:n=8  s=46233


*/
#include<stdio.h>
#define N 3
void main()
{
	int i;
	long sum=0,n=1;
	for(i=1;i<=N;i++)
	{
		n=n*i;
		sum=sum+n;
	}
	printf("1!+2!=%d",sum);
}
/*
  最大公約數:利用輾轉相除法,相減法,窮舉法三種
  最小公倍數:兩數之積除以最大公約數
*/
#include<stdio.h>

int fun1(int a,int b) // 利用輾轉相除法
{
	int temp;
	if(a<b)
	{
	    temp=a;
		a=b;
		b=temp;
	}
	while(b!=0)
	{
		temp=a%b;
		a=b;
		b=temp;
	}
	return a;

}

int fun2(int a,int b)  //相減法
{
	while (a!=b)
	{
		if(a>b) a=a-b;
		else b=b-a;
	}
	return a;
}
int fun3(int a,int b)   //窮舉法
{
	int t,i;
	for(i=1;i<=a;i++)
		if(a%i==0 && b%i==0)  t=i;
	return t;
}
void main()
{
	int a,b,max;
	scanf("%d %d",&a,&b);
	max=fun3(a,b);
	
	printf("最大公約數: %d\n",max);

	int qrt=a*b/max;

	printf("最小公倍數:%d\n",qrt);
}

#include<math.h>
#include<stdio.h>
void main()
{
	float PI=0,m=1,i=1;
	//int j=-1;
	int j=1;
     do 
	 { 
		 PI=PI+j/i;
         i=i+2;  j= -j;
     }
     while (1/i>= 0.000001);

	PI=4*PI;
	printf("PI=%f",PI);
}

/*
編程實現:計算1到100之間的奇數之和  偶數之和
*/
#include<stdio.h>
void main()
{
	int i,even=0,odd=0;
	for(i=0;i<=50;i++)
	{
		even+=2*i;
		odd+=2*i-1;
	}
	printf("1到100間的偶數的和爲%d:\n",even);
    printf("1到100間的奇數的和爲%d:\n",odd);

}
/*
用                                           公式求    
的近似值,直到餘項的首項絕對值小於10-6爲止
*/
#include<stdio.h>
#include <math.h>
main ( )
{   float PI=0., m=1., i=1.;  int j= -1;
	  do {  PI=PI+m;
		    i=i+2; m=j/i; j= - j;
  		  }
     while (fabs (m)>= 0.000001);
	  PI=4*PI;
	  printf("PI=%f\n", PI);	
}

/*
百錢買白雞
*/
#include<stdio.h>
void main()
{
	int x,y,z,j=1;
	printf("Possible solutions to buy 100 fowls whith 100 wen:\n");
	for(x=0;x<=20;x++)
		for(y=0;y<=33;y++)
		{
			z=100-x-y;
			if(z%3==0 && 5*x+3*y+z/3==100)
			{
				printf("%2d:cock=%-2d  hen=%-2d  chicken=%-2d\n",j,x,y,z);
				j++;
			}

		}
}

/*
判斷輸入的正整數是否既是5又是7的整倍數。若是,則輸出yes;否則輸出no.
*/
#include <stdio.h>
void main()
{
 int a;
 printf("請輸入要驗證的數:\n");
 scanf("%d",&a);
 if(a%5==0&&a%7==0)
  printf("Yes\n");
 else
  printf("No\n");
}

/*
編程實現:計算1到100之間的奇數之和及偶數之和
*/
#include <stdio.h>
void main ()
{
 int n,even=0,odd=0;
 for(n=1;n<=50;n++)
 {
  even+=2*n;
  odd+=2*n-1;
 }
 printf("1到100間的偶數的和爲%d:\n",even);
 printf("1到100間的奇數的和爲%d:\n",odd);
}

/*
求Sn=a+aa+aaa+…+aa…a之值,n,a由鍵盤輸入。
*/
#include<stdio.h>
void main()
{
 int a,n,i=1,sn=0,tn=0;
 printf("a,n=:");
 scanf("%d,%d",&a,&n);
 while(i<=n)
 {
  tn=tn+a;
  sn=sn+tn;
  a=a*10;
  ++i;
 }
 printf("a+aa+aaa+…+aa…a=%d\n",sn);
}

//求下列試子的值:1-1/2+1/3-1/4+……+1/99-1/100,將結果輸出
#include<stdio.h>
void main()
{
	float sum=1.0,t,s=1;
	int i;
	for(i=1;i<=100;i++)
	{
		t=s/i;
		sum=sum+t;
		s=-s;
	}
	printf("===%5.4f\n",sum);

}
/*
  求素數的子函數
*/
#include<stdio.h>
#include<math.h>
void main()
{
	int i,k,m;
	scanf("%d",&m);
	k=sqrt(float(m));
	for(i=1;i<m;i++)
		if(m%i==0) break;
	if(i>k) printf("%d is prime number!",m);
	else  printf("%d is not a prime number!",m);
}

*
 test2:素數
*/
#include<stdio.h>  
#include<math.h>  
void main()  
{   
       double m;
	   int i, k;  
       for(m=301; m<=330; m=m+2)  
       {    
           k=sqrt(m);  
           for(i=2; i<=k; i++)  
			   if((int)m%i==0) break;  
           if(i>k) printf("%d is a prime number\n", m);  
   }  
}

/*
打印出所有的“水仙花數”。所謂“水仙花
   數”是指一個三位正整數,其各位數字的立方和
   等於該數本身,例如:153=13+53+33
*/
#include<stdio.h>
void main()
{
	int n,i,j,k;
	for(n=100;n<=999;n++)
	{
		i=n/100;
		j=(n/10)%10;
		k=n%10;
		if ( n== i*i*i + j*j*j + k*k*k )
          printf("%d = %d^3 + %d^3 + %d^3\n", n, i, j, k);
	}
}
 
/*
利用一維整型數組可以實現超長整數的加法,編程實現;從鍵盤輸入兩個
40位正整數,輸出其和
*/
#include<stdio.h>
#define N 2
void main()
{
	int a[N],b[N],s[N+1],i,t=0;
	for(i=N-1;i>=0;i--)       /*輸入數組a*/
		scanf("%d",&a[i]);

	for(i=N-1;i>=0;i--)       /*輸入數組b*/
		scanf("%d",&b[i]);
	for(i=0;i<N-1;i++)
	{
		s[i]=a[i]+b[i]+t;
		if(s[i]>10)
		{
			t=s[i]/10;
			s[i]=s[i]%10;
		}
		else  t=0;
	}

	if(t==0)
		for(i=N-1;i>=0;i--)
			printf("%d",s[i]);
	else
	{
		s[i]=t;
		for(i=N;i>=0;i--)
			printf("%d",a[i]);
	}
}

/*
將二維數組的行和列進行互換,存到另一個二維數組中
*/
#include<stdio.h>
void main()
{
	int a[2][3]={{1,2,3},{4,5,6}};
	int b[3][2],i,j;
	printf("The array a:\n");
	for(i=0;i<2;i++)
		for(j=0;j<3;j++)
		{
			printf("%5d",a[i][j]);
			b[j][i]=a[i][j];
		}
		printf("\n");
	printf("The array b:\n");
	for(j=0;j<3;j++)
		for(i=0;i<2;i++)
			printf("%5d",a[i][j]);
	printf("\n");

}

/*
已有一個已排好的數組今輸入一個數要求原來排序的規律將它插入數組中
*/
#include<stdio.h>
void main()
{
	static int a[10]={1,7,8,17,23,24,59,62,101};
	int i,j,t;
	scanf("%d",&a[9]);
	for(i=9;i>0;i--)
		if(a[i]<a[i-1])
		{
			t=a[i-1];
			a[i-1]=a[i];
			a[i]=t;
		}
		for(i=0;i<10;i++)
			printf("%5d",a[i]);
		printf(" ");
}

/*
將一個數組的值按逆序重新存放
*/
#include<stdio.h>
void main()
{
	int i,b[10];
	for(i=0;i<10;++i)
		scanf("%d",&b[i]);
	for(i=9;i>=0;i--)
		printf("%5d",b[i]);

}

/*
打印一下楊輝三角形(要求打印出10行)
*/
#include<stdio.h>
void main()
{
	static int m,n,k,b[15][15];
	b[0][1]=1;
	for(m=1;m<15;m++)
	{
		for(n=1;n<=m;n++)
		{
			b[m][n]=b[m-1][n-1]+b[m-1][n];
			printf("%-5d",b[m][n]);
		
		}
		printf("\n");

	}

}

/*
將數組a中的n個整數按照相反的方向存放
*/
#include<stdio.h>
void fun(int a[],int n)     //傳遞數組的首元素的地址
{
	int i,j,t=(n-1)/2;
	int temp;
	for(i=0;i<t;i++)
	{
		j=n-1-i;
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	//return;
}
void inv(int *x,int n)    //利用指針
{
	int *p,temp,*i,*j,m=(n-1)/2;

	i=x;j=x+n-1;p=x+m;
	for(;i<=p;i++,j--)
	{
		temp=*i;
		*i=*j;
		*j=temp;
	}
	//return ;
}
void main()
{
	int i;
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	int *p=a;
	
	fun(a,10);
	printf("逆序後的數組是:\n");
	for(i=0;i<10;i++,p++)
		printf("->%d",*p);
	printf("\n");
}

/*
1.建立一個11行5列數組名爲stu的二維數組,存儲學生的學號和成績
2.輸入10個學號及三門考試成績
3.統計三門課程的總分,存放在最後一列
4.統計1每門課程10個學生的總分,存放在最後一行
5.輸出成績表
*/
#include<stdio.h>
void main()
{
	int stu[11][5];
	int i,j;
	for(i=0;i<10;i++)                /*輸入10個學號及三門考試成績*/
		for(j=0;j<4;j++)
			scanf("%d",&stu[i][j]);  
	for(i=0;i<10;i++)               /*統計三門考試成績的總分,放在第5列*/
	{
		stu[i][4]=0;
		for(j=1;j<=3;j++)
			stu[i][4]+=stu[i][j];
	}

	for(j=1;j<4;j++)                   /*統計各門成績的總分,放在最後一行*/
	{
		stu[10][j]=0;
		for(i=0;i<10;i++)
			stu[10][j]+=stu[i][j];

	}
	for(i=0;i<11;i++)                     /*輸出成績表*/
	{
		for(j=0;j<5;j++)
		{
			if(i==10&&(j==0||j==4))
			{
				printf(" ");
				continue;
			}
			printf("%d   ",stu[i][j]);
		}
		printf("\n");
	}
}

/*
從鍵盤輸入日期(yyyy-mm-dd)計算輸出該日期那天是該年的第幾天
基本算法:將1月至m-1月的各月天數累加,再加上給定的日
每月的天數可有一個一位數組存放初始化爲平
    年的天數,然後再根據y年是否爲閏年來修正2月
    份的天數。
 •  閏年的條件是符合下面兩條件之一:
  ⑴ 能被4整除,但不能被100整除;
  ⑵ 能被400整除 ;
*/
#include<stdio.h>
void main()
{
	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int y,m,d,i,days;
	do
	{
		printf("input the date(yyyy-mm-dd):\n");
		scanf("%d-%d-%d",&y,&m,&d);
		a[2]=28+(y%4==0 && y%100!=0 || y%400==0);
	} while (m<1||m>12||d<1||d>a[m]);
	for(i=1,days=d;i<m;i++)
		days+=a[i];
	printf("%d\n",days);
}

/*
給出年、月、日,問是星期幾(星期日~六用0~6表示)
*/
int isleap( int y )             /* 是閏年返回1,否則爲0 */
{  return ((y%4==0 && y%100!=0) || y%400==0); }

int days_pm(int y, int m)      /* 返回y年m月的天數 */
{  int dpm[13]={ 0, 31, 28, 31, 30, 31, 30, 31, 
                            31, 30, 31, 30, 31}; 
    return dpm[m]+( m==2 ? isleap(y) : 0 );
}
int lastyear ( int y )       /*  返回y-1年12月31日是星期幾*/
{  int  i,  n=y-1;               /*  每年365天爲52個星期多1天 */
    for(i=1; i<y; i++)    n+=isleap(i);    /* 加上閏年天數 */
    return  n%7;
}
main( )
{  int y, m, d, n, i; 
    printf("\nInput date (yyyy-mm-dd):");
    scanf ("%d-%d-%d",&y, &m, &d);
    for(n= d+lastyear(y), i=1; i<m; i++) 
       n+=days_pm(y, i); 
    printf("%d\n", n%7);
}

/*
給數組的下三角置數,
4
3  7
2  6  9
1  5  8  10
*/
#include<stdio.h>
void main()
{
	int x[4][4],n=0,i,j;
	for(j=0;j<4;j++)        //列指針
		for(i=3;i>=j;i--)   //行指針
		{
			n++;
			x[i][j]=n;
		}
	for(i=0;i<4;i++)
		{for(j=0;j<=i;j++)
			printf("%d  ",x[i][j]);
	printf("\n");}
}

/*
編程計算矩陣5*4整數矩陣周邊各元素之和,矩陣的各元素從鍵盤輸入
*/
#include<stdio.h>
void main()
{
	int a[5][4],i,j,sum=0;
	for(i=0;i<5;i++)
		for(j=0;j<4;j++)
			scanf("%d",a[i][j]);
	sum+=a[i][j];

	for(i=0;i<4;i++)
		for(j=0;j<3;j++)
			sum-=a[i][j];

	printf("sum=%d\n",sum);
}

/*
編寫函數實現計算任意N*4整型矩陣上的周邊元素之和
假設輸入的數值
1  2  3  4
5  6  7  8
9  10 11 12
13 14 15 16
*/
#include<stdio.h>
#define N 3
int fun(int a[][4],int n)
{
	int i,sum=0;
	for(i=0;i<4;i++)
		sum+=a[0][i]+a[n-1][i];   //第一行和最後一行的和,此時的i代表的是列數
	for(i=1;i<n-1;i++)
		sum+=a[i][0]+a[i][3];       //第一列的的第二行開始到 n-1行的     和最後一列的的第二行開始到 n-1行的,此時的i代表的是行數
	return sum;
}
void main()
{
	int i,j;
	int a[N][4];
	for(i=0;i<N;i++)
		for(j=0;j<4;j++)
			scanf("%d",&a[i][j]);
	int s=fun(a,N);
	printf("矩陣N*4周邊的元素之和爲:%d",s);
	printf("\n");
}
/*
編程找出一個M*N矩陣中的鞍點
由鍵盤輸入一個3行4列的矩陣,輸出矩陣中的鞍點
(即在矩陣行中最大,列中最小的數)。若沒有鞍點,輸出“NO”字樣。

*/
#include<stdio.h>
#include<stdlib.h>
#define M 3
#define N 4
void main()
{
	int a[M][N],i,j,k;
	int max,t;
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]);
	for(i=0;i<M;i++)
	{
		max=0;                        //此時假設每一行的最大值是第一個數即a[i][0]
		for(j=i+1;j<N;j++)            //找出列中的最大值
		{
			if(a[i][j]>a[i][max])
				max=j;
		}
		for(t=1,k=0;k<M&&t;k++)      //判斷是否在列中是不是最小值
		{
			if(a[k][max]<a[i][max])  //如果還存在數比a[k][max]的值還小,則置t=0,
				t=0;                 //t是一個標識,t=0  表示不存在,
		}
	}
	if(t) printf("yes,%d\n",a[i][max]);
	else  printf("no");
}

/*
編寫一個函數convert ,求一個方陣的轉置矩陣;
主函數中輸入方陣的階數和方陣,在主函數中將原矩陣和轉置矩陣按原格式輸出
---------使用嵌套循環,將二維數組的元素a[i][j]和a[j][i]交換即可。
注意矩陣對角線右上角的所有元素和矩陣對角線左下角的元素交換,對角線元素不用交換。因此,只需要n(n-1)/2次對調
*/
#include<stdio.h>
void main()
{
	void convert(int [10][10]);//函數聲明
	int a[10][10],p,q,i,j;
	printf("請輸入矩陣的行和列:\n");
	scanf("%d",&p);
	scanf("%d",&q);
	printf("請輸入矩陣的元素值:\n");
	for(i=0;i<p;i++)
		for(j=0;j<q;j++)
			scanf("%d",&a[i][j]);
	printf("原矩陣爲:\n");
	for(i=0;i<p;i++)
	{
		for(j=0;j<q;j++)
			printf("%d",a[i][j]);
		printf("\n");
	}
	convert(a);
	printf("轉置矩陣後爲:\n");
	for(i=0;i<p;i++)
	{
		for(j=0;j<q;j++)
			printf("%d",a[i][j]);
		printf("\n");
	}


}
void convert(int a[10][10])//轉置就是互換
{
	int i,j,t;
	for(i=0;i<10;i++)
		for(j=0;j<10;j++)
		{
			t=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=t;
		}
}

/*
有一個3*4的矩陣,要求編程序求出其中值最大的那個元素的值,以及所在的行號和列號
*/
#include<stdio.h>
void main()
{
	int a[3][4],i,j;
	int colum,row;
	printf("please input the array:\n");
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			scanf("%d",a[i][j]);
	printf("\n");
	int max=a[0][0];    //設定最大值是第一個數
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			if(a[i][j]>max)
			{
				max=a[i][j];
				colum=j;
				row=i;
			}
	printf("max=%d,colum=%d,row=%d",max,colum,row);


}
/*
根據主函數,編寫一下兩個函數
1:求數組a[4][4]主對角線上元素的和 ----區分主對角線和次對角線的區別
2:實現對數組a[4][4]的矩陣轉置處理
*/
#include<stdio.h>
void convert(int *p)     //數組轉置
{
	int i,j,t;
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
		{
			t=*(p+4*i+j);
			*(p+4*i+j)=*(p+4*j+i);
			*(p+4*j+i)=t;
		}
}

int total(int a[][4],int n)       //主對角線上元素的和
{
	int i,sum=0;
	for(i=0;i<4;++i)
		if(a[i][i]!=0)
			sum+=a[i][i];
	return sum;
}
int total1(int a[][4],int n)     //次對角線上元素之和
{
	int i,j,sum=0;
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
		{
			if((i+j)==3) sum+=a[i][j];     //此時僅當i+j=n-1的時候纔是次對角線上的點
		}
		return sum;
}

void main()
{
	static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
	int *p,i,sum,sum1;
	sum=total(a,4);
	sum1=total1(a,4);
	printf("主對角線之和:%d\n",sum);
	printf("次對角線之和:%d\n",sum1);
	p=*a;
	convert(p);
	printf("轉置後的數組是:\n");
	for(i=0;i<4;++i)
		printf("%d %d %d %d \n",a[i][0],a[i][1],a[i][2],a[i][3]);

}

/*
求一個3*3矩陣對角線元素之和
*/
#include<stdio.h>
void main()
{
	int i=0,j=0,a[3][3],s1,s2;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%d",&a[i][j]);
	s1=a[0][0]+a[1][1]+a[2][2];
	s2=a[0][2]+a[1][1]+a[2][0];
	printf("s1=%d,s2=%d",s1,s2);

}

/*
計算並輸出整型矩陣A(2*3)和整形矩陣B(3*4)的乘積,矩陣A和B的各元從鍵盤輸入
根據矩陣相乘規則,若有矩陣A和B ,滿足條件A的列數等於B的行數,則可相乘得矩陣C,C的行數和列數分別等於A的行數和B的
列數,設A爲m*n矩陣,B爲n*p矩陣,則C爲m*p矩陣,且其元素的數學表達式爲
*/
#define M 2
#define N 3 
#define P 4
#include<stdio.h>
void main()
{
	int a[M][N],b[N][P],c[M][P],i,j,k;
	printf("please input A:\n");
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]);
	printf("Please input B:\n");
	for(i=0;i<N;i++)
		for(j=0;j<P;j++)
			scanf("%d",&b[i][j]);


	for(i=0;i<M;i++)     /*計算C*/
		for(j=0;j<P;j++)
		{
			c[i][j]=0;
			for(k=0;k<N;k++)
				c[i][j]=a[i][k]*b[k][j];
		}


    printf("Result C:");
	for(i=0;i<M;i++)
	{
		printf("\n");
		for(j=0;j<P;j++)
			printf("%5d\t",c[i][j]);
	}


}
#include<stdio.h>   
#define N 10
void main()  
{  
 int a[N][N],i,j,k,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)  
  for(j=0;j<n;j++)
   scanf("%d",&a[i][j]);
  for(i=0;i<n;i++)  
  {
   for(j=i+1;j<n;j++)
   {
    if(a[i][j]==a[j][i])
     k=1;
    else
     k=0;
   }
  }
  if(k=0)
   printf("bushi");
  else 
   printf("shi\n");
  for(i=0;i<n;i++)  
   for(j=0;j<n;j++)
    printf("%d",a[i][j]);
}

//求一個3*3的整型矩陣對角線元素之和。將原矩陣和求出的和輸出
#include<stdio.h>
void main()
{
	float a[3][3],sum=0;
	int i,j;
	printf("please input the element:\n");
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%f",&a[i][j]);
	for(i=0;i<3;i++)
		sum+=a[i][j];
	printf("對角線之和是:%6.2f\n",sum);
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
			printf("%5.2f",a[i][j]);
		printf("\n");
	}
}

/*fibonacci數列問題*/
#include<stdio.h>
static long fibonacci(int n)  //內部函數
{
	if(n==1||n==2)
		return 1;
	else
	{
		return fibonacci(n-2)+fibonacci(n-1);
	}
}
void main()
{
	int n,i;
	printf("Input n.");
	scanf("%d",&n);
	for(i=1;i<=n;++i)/*列出每一項的值*/
	{
		printf("%ld",fibonacci(i));
	}
}

#include<stdio.h>
int max(int x,int y)
{
	int z;
	if(x>y)
		z=x;
	else
	{
		z=y;
	}
	return z;
}
int main()
{
	int (*p)(int ,int);
	int a,b,c;
	p=max;
	printf("input:\n");
	scanf("%d %d",&a,b);

}


#include<stdio.h>

void  aust (int i)
{  static int  j = 0;
    j += i++;
    printf ("i= %d, j= %d\n", i, j); 
}
void main( )
{  int i= 0;                                          
   for (; i<4; i+ +) aust (i);
 }


/*
將字符串a複製爲字符串b
*/
#include<stdio.h>
void main()
{
	char a[]="i love yingying!",b[20];
	int i;
	for(i=0;*(a+i)!='\0';i++)  //如果不等於'\0',表示字符串尚未處理完
		*(b+i)=*(a+i);
	*(b+i)='\0';    //最後應將'\0'複製過去

	printf("The string a is: %s\n",a);
	printf("The string b is: ");
	for(i=0;*(b+i)!='\0';i++)
		printf("%c",b[i]);
	printf("\n");
}

#include<stdio.h>
void main()
{
	char a[]="I love yingying!",b[20],*p1,*p2;
	p1=a;p2=b;

	for(;*p1!='\0';p1++,p2++)
		*p2=*p1;
	*p2='\0';

	printf("The string a is: %s\n",a);
	printf("The string b is: ");
	for(int i=0;b[i]!='\0';i++)
		printf("%c",b[i]);
	printf("\n");
	
}
#include<stdio.h>
void copy_string(char a[],char b[])
{
	int i=0;
	while(a[i]!='\0')
	{
		b[i]=a[i];
		i++;
	}
	b[i]='\0';
}
void copy_string1(char *a,char *b)
{
	for(;*a!='\0';a++,b++)
		*b=*a;
	*b='\0';
}
void copy_string4(char *a,char *b)
{
	while((*b=*a)!='\0')
	{
		a++;b++;
	}
}
void copy_string5(char *a,char *b)
{
	while(*a!='\0')
	   *b++=*a++;
	*b='\0';
}
void copy_string6(char *a,char *b)
{
	while(*a)
	   *b++=*a++;
	*b='\0';
}
void copy_string2(char *a,char *b)
{
	while(*b++=*a++);
}
void copy_string3(char *a,char *b)   //建議使用這一種
{
	while((*b++=*a++)!='\0');
}
void main()
{
	char a[]="I am wangma!";
	char b[]="I love yingying!";

	copy_string6(a,b);
	printf("copy string a to b:\nstring a=%s\nstrng b=%s\n",a,b);
	
}

/*
編一個程序:用結構體描述60位學生的信息,包括學號,姓名和三門課的成績和總成績,並以函數形式實現以下的功能
1:輸入學生的前5項信息,並計算每個學生的總成績
2:按總成績的遞減順序對成績表排序
3:輸出排序後的成績
*/
#include<stdio.h>
#define N 60

struct student
{
	int num;
	char name[10];
	int score[4];   //三門課的成績和總成績,定義長度爲4的一位數組

};
void main()
{
	struct student stu[N];
	void read(struct student *p,int n);    //輸入學生成績,計算
	void sort(struct student s[],int n);  //排序
	void print(struct student *p,int n);   //打印
	read(stu,N); sort(stu,N);print(stu,N);
}
void read(struct student *p,int n)
{
	int i,j,sum=0;
	for(i=0;i<n;i++,p++)    //輸入學號和姓名
		scanf("%d %s",&p->num,&p->name);
	  for(j=0;j<3;j++)
	  {
		  scanf("%d %d %d",&p->score[j]);
		  sum+=p->score[j];  //計算三門課的總成績
	  }
	  p->score[3]=sum;  //把總成績放到score[4】中
}
void sort(struct student s[],int n)   //選擇排序法
{
	int i,j,k;
	struct student temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(s[k].score[3]<s[j].score[3])      k=j;
		}
		if(k!=i)
		{
			temp=s[i];
			s[i]=s[k];
			s[k]=temp;
		}
	}
}
void print(struct student *p,int n)
{
	int i,j;
	for(i=0;i<n;i++,p++)
	{
		printf("%6d %16s",p->num,p->name);
	    for(j=0;j<4;j++)
		   printf("%d",p->score[j]);
	    printf("\n");
	}
}
/*
從鍵盤任意輸入某班20個學生的成績,打印最高分,並統計不及格學生的人數。
*/
#include<stdio.h>
int FindMax(float score[],int n)
{
	int i;
	float max;
	max=score[0];
	for(i=0;i<n;i++)
	{
		if(score[i]>max)  max=score[i];
	}
	return max;
}
int countFail(float score[],int n)
{
	int count=0,i;
	for(i=0;i<n;i++)
	{
		if(score[i]<60) count++;
	}
	return count;
}
void main()
{
	int i;
	float score[20];
	for(i=0;i<20;i++)
		scanf("%f",&score[i]);
	float MAX=FindMax(score,20);
	int  COUNT=countFail(score,20);
	printf("MAX=%f,COUNT=%d\n",MAX,COUNT);


}

/*
輸入20個學生的成績,求出其中大於平均成績學生的人數,並對20名學生成績按從高到低進行排序
*/
#include<stdio.h>
int count1(float score[],int n)   //求大於平均成績的學生的人數
{
	int i,count=0;                //注意count計數一定要初始化,sum也是
	float sum=0,avg;
	for(i=0;i<n;i++)
		sum+=score[i];
	avg=sum/n;
	for(i=0;i<n;i++)
		if(score[i]>avg) count++;
	return count;
}
void sort(float score[],int n)       //冒泡排序
{
	int i,j;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-1-i;j++)
			if(score[j]>score[j+1])
			{
				float temp=score[j];
				score[j]=score[j+1];
				score[j+1]=temp;
			}
}
void main()
{
	int i;
	float score[20];
	for(i=0;i<20;i++)
		scanf("%f",&score[i]);
	int COUNT=count1(score,20);
	printf("大於平均成績學生的人數:%d",COUNT);
	sort(score,20);
	for(i=0;i<20;i++)
		printf("%f",score[i]);
}

//編寫一個統計學生成績程序,完成以下功能:輸入4個學生的2門課成績;求出全班的總平均分,將結果輸出。
#include<stdio.h>
#define N 4
struct student
{
	char num[3];
	char name[4];
	float score[2];
	float ave;
}stu[N];
void main()
{
	int i,j;
	float sum,average;
	for(i=0;i<N;i++)
	{
		printf("input score of student:%d\n",i+1);
		printf("name:");
		scanf("%s",stu[i].name);
		for(j=0;j<2;j++)
		{
			printf("score %d:",j+1);
			scanf("%f",&stu[i].score[j]);
		}
		average=0;
		for(i=0;i<N;i++)
		{
			sum=0;
			for(j=0;j<2;j++)
				sum+=stu[i].score[j];
			stu[i].ave=sum/2;
			average+=stu[i].ave;
		}
		average/=N;
		printf("   Name    score1  score2   average\n");
		for(i=0;i<N;i++)
		{
			printf("%5s%10s",stu[i].num,stu[i].name);
			for(j=0;j<2;j++)
				printf("%9.2f",stu[i].score[j]);
			printf("    %8.2f\n",stu[i].ave);
		}
		printf("agerage=%5.2f\n",average);
	}
}

/*
有一個班,3個學生,各學4門課,計算總平均分,以及第n個學生的成績
在上道題的基礎上,查找有一門以上課程不及格的學生,輸出他們的全部課程的成績
*/
#include<stdio.h>
void main()
{
	void average(int *score,int n);
	void search(int (*p)[4],int n);
	void search1(int (*p)[4],int n);
	int score[4][4]={{65,66,67,78},{58,69,70,90},{71,72,73,100},{100,99,59,100}};
	average(*score,12);
	search(score,2);
	search1(score,4);

}
//計算總平均分啊
void average(int *p,int n)
{
	//int *p;
	int *p_end;
	int sum=0,aver;
	p_end=p+n-1;
	for(;p<p_end;p++)
		sum+=(*p);
	aver=sum/n;
	printf("The total aver is %d\n",aver);
}

//輸出第n個學生的成績
void search(int (*p)[4],int n)
{
	int i;
	printf("第%d個學生的成績是:\n",n+1);
	for(i=0;i<4;i++)
		printf("%d  ",*(*(p+n)+i));
	printf("\n");

}

//查找有一門以上課程不及格的學生,輸出他們的全部課程的成績
void search1(int (*p)[4],int n)
{
	int i,j,flag;    //flag是一個標記, 0代表及格,1 代表不及格
	for(j=0;j<n;j++)
	{
		flag=0;
		for(i=0;i<4;i++)
			if((*(*(p+j)+i))<60) 
				flag=1;
		if(flag==1)
		{
			printf("No.%d fails his scores are:\n",j+1);
			for(i=0;i<4;i++)
				printf("%d  ",*(*(p+j)+i));
			printf("\n");
			//printf("親,還有哦!\n");
		}

	}
}

/*
有10個學生,每個學生的數據包括,學號,姓名,3門課的成績,從鍵盤輸入10個學生的數據
要求打印出3門課的總平均成績,以及最高分的學生的數據(包括學號,姓名,三門課的成績,平均分數)
*/
#include<stdio.h>
#define N 2

struct student 
{
	int num;
	char name[10];
	int score[3];
	float aver;
}stu[N];

void main()
{
	int i,j,max=0,maxi=0,sum=0;  //maxi最高分學生的序號
	float average=0;

	for(i=0;i<N;++i)
	{
		scanf("%d %s",&stu[i].num,&stu[i].name);
		for(j=0;j<3;j++)
		{
			scanf("%d ",&stu[i].score[j]);
		}
	}

	for(i=0;i<N;i++)
	{
		for(j=0;j<3;j++)
			sum+=stu[i].score[j];
		stu[i].aver=sum/3.0;       //每個學生的平均分
		average+=stu[i].aver;      //學生的平均分之和

		if(sum>max)               //判斷最高分學生的序號  
		{
			max=sum;
			maxi=i;
		}

	}
	average/=N;                   //親,這纔是總平均分哦,
	printf("No.  name   score1  score2  score3 average\n");
	
	for(i=0;i<N;++i)
	{
		printf("%d,%s",stu[i].num,stu[i].name);
		for(j=0;j<3;j++)
		{
			printf("%9d",stu[i].score[j]);
			printf("%8.2f\n",stu[i].aver);
		}

	}
	printf("average=%6.2f\n",average);
	printf("The highest score is %d,score total:%d.",stu[maxi].name,max);

}

/*
編程先輸入某班30個學生某門課的成績,對全班30個學生成績進行由高到低排序,並打印輸出排序結果,要求用函數編程實現排序功能。
*/
#include<stdio.h>
void sort(float score[],int n)       //冒泡排序
{
	int i,j;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-1-i;j++)
			if(score[j]>score[j+1])
			{
				float temp=score[j];
				score[j]=score[j+1];
				score[j+1]=temp;
			}
}
void Sort2(float score[],int n)       //選擇排序  
{
int i,j,k; float temp;          
	for (i=0; i<n-1; i++)            
  	{
		k = i;                          
  		for (j=i+1; j<n; j++)   
       {
			if (score[j] > score[k])	k = j; 
              if (k != i)                       
               {            
				temp = score[i];              
				score[i] = score[k]; 
				score[k] = temp; 				 
               }  
		}  
	}   
}

void main()
{
	float score[30];
	int i;
	printf("Please enter the number and score:\n");
	for(i=0;i<30;i++)
		scanf("%f",&score[i]);
	sort(score,30);
	printf("Sorted results:\n");
	for(i=0;i<30;i++)
     	printf("%f",score[i]);
	
}
/*
用選擇法對10個數進行排序
*/
#include<stdio.h>
void main()
{
	int i,j,a[10];
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);

	for(i=0;i<9;i++)  
		{//n個數要進行n-1趟比較
		for(j=0;j<=9-i;j++)          //每趟比較n-i次
			if(a[j]>a[j+1])          //依次比較兩個相鄰的數,將小數放在前面,大數放在後面
			{
				int t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
	}

	for(i=0;i<10;++i)               //輸出比較之後的數組
		printf(" %d",a[i]);
}

/*
選擇排序法的基本思想
*/
#include<stdio.h>
void SelectSort(int a[],int n)
{
	int i,j;
	for(i=0;i<n-1;i++)              //n個數要進行n-1趟比較,每次確定一個最小數放在a[i]中
	{
		int k=i;                    //假設a[0]是最小的數,把下標0放在變量K裏面,
		for(j=i+1;j<n;j++)          
			if(a[k]>a[j])  k=j;     //如果a[k]>a[j] 前面的數比後面的數大,交換下標,此時k指向小的數
		if(k!=i)
		{
			int temp=a[i];
			a[i]=a[k];
			a[k]=temp;
		}
	}

}
void main()
{
	int a[10],i;
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	SelectSort(a,10);
	printf("排序後的數組:\n");
	for(i=0;i<10;i++)
		printf(" %d",a[i]);
}

/*
典型例題:建立鏈表,統計鏈表中所有結點的數據域N之和
*/
#include<stdio.h>
#include<malloc.h>
struct node{
   int n;
   struct node *next;
};
struct node *create()      //建立鏈表
{
	struct node *head,*p1,*p2;     //定義三個結構體變量
	//head=NULL;                     //設置頭指針指向空值,什麼也不指向
	head=p1=p2=(struct node *)malloc(sizeof(struct node )) ;   //分配內存空間使p1和p2同時指向這個空間的起始地址
	scanf("%d",&p1->n);            //從終端輸入數據域要存入的 值
	while(p1->n!=0)                //輸入的值不是空,一直循環下去
	{
		//if(head=NULL)              //第一次頭指針什麼內容也不指向
		//	head=p1;                
		//else
			p2->next=p1;
		p2=p1;                     //p1始終指向開闢的結點,p2->next=p1,把p1指向的賦給p2
		p1=(struct node *)malloc(sizeof(struct node));
		scanf("%d",&p1->n);
	}

	p2->next=NULL;   //直到p2的指針域指向空值的時候
	return  head;    //返回鏈表的頭指針   
}

int  add(struct node *head)     //把結點加入鏈表中
{
	struct node *p;
	int sum=0;                   //定義sum變量存放數據域n的和
	p=head;                     
	while(p!=NULL)
	{
		sum+=p->n;
		p=p->next;
	}
	return sum;    //向主調函數返回sum的值,即數據域n的和

}

void main()
{
	struct node *head;
	int m;
	head=create();
	m=add(head);
	printf("%d\n",m);
}

/*
   單鏈表的創建,插入,刪除,輸出,定義一個學生的結點,有學號,姓名,三門成績組成
*/
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define  LEN  sizeof(struct student) 
#define N 2
struct student
{
	int num;
	char name[10];
	int score[4];
	struct student *next;
};


struct student *create()
{
	int i;
	struct student *head,*p1,*p2;
	head=p1=p2=(struct student *)malloc(LEN);
    for(i=0;i<10;i++)
	{
		scanf("%d,%s",&p1->num,&p1->name);
		for(i=0;i<4;i++)
			scanf("%d",&p1->score[i]);
	}
	while (p1->num!=0);
	{
	   p2->next=p1;
	   p1=p2;
	   p1=(struct student *)malloc(LEN);
	   for(i=0;i<10;i++)
	   {
		scanf("%d,%s",&p1->num,&p1->name);
		for(i=0;i<4;i++)
			scanf("%d",&p1->score[i]);
	   }
	   p2->next=NULL;
	   return head;
	} 
	
}


int print(struct student *head)
{
	int i,j;
	struct student *p;
	p=head;
	while (p!=NULL)
	{
		for(i=0;i<N;i++)
			printf("%d %s",p->num,p->name);
		for(j=0;j<4;j++)
			printf("%d",p->score[j]);
		p=p->next;

	}
}

void main()
{
	struct student *head;
	head=create();
	print(head);


}
/*
已知正文有文件abc.txt,
1:統計該文件中詞的個數,
2:並求出最長詞的長度,
一個詞與另外一個詞之間由空格符,製表符,換行符分隔
*/
#include<stdio.h>
#include<process.h>
#include<string.h>
void main()
{
	FILE *fp;
	char ch;
	int word=0,maxlen=0,length=0,flag=0;  //word存放詞的個數,maxlen存放最大詞的長度,length存放當前詞的長度,flag爲狀態標記,(1表示當前字符在單詞中,0表示當前字符不再某詞中)
	if((fp=fopen("f:\\file.txt","r"))==NULL)   //打開文件
	{
		printf("can not open the file!\n");
		return ;
	}
	ch=fgetc(fp);       
	while(ch!=EOF)
	{
		if(ch==' '||ch=='\t' || ch=='\n')   //判斷單詞的分隔,即此時單詞結束
		{
			if(flag==1)
			{
				flag=0;
				if(length>maxlen) maxlen=length;
			}
		}
		else if(flag==0)   //單詞沒有結束,還有字符呢,親
		{
			flag=1;
			length=1;   //計數
			word++;     
		}
		else  length++;
		ch=fgetc(fp);
	}
	fclose(fp);
	printf("word=%d,maxlen=%d\n",word,maxlen);
}
/*
輸入一行字符,將此字符串中的最長的單詞輸出
*/
#include<stdio.h>
#include<string.h>
void LongWord(char str1[100],char word[15])
{
	int i,j=0,t=0;
	static char word1[15];
	for(i=0;str1[i]!='\0';i++)
	{
		if(!(str1[i]>'a' &&str1[i]<'z'|| str1[i]>=65 &&str1[i]<=90))  //檢測單詞是
		{
			t=j;   
			j=0;
			continue;
		}
		word1[j]=str1[i];
		j++;
		if(j>=t) strcpy(word,word1);
	}
}
void main()
{
	char str0[100],longword[15];
	gets(str0);
	LongWord(str0,longword);
	puts(longword);
}

#include <iostream>
void main()
{
 int word(char c);
 int longest(char str[]);
 int i;
 char str[80];
 printf("輸入一行字符串\n\n");
 gets(str);
 printf("\n\n最長的單詞爲:\n\n");
 for(i=longest(str);word(str[i]);i++)
  printf("%c",str[i]);
 printf("\n");
}
int word(char c)
{
 if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1;
 else return 0;
}
 
int longest(char str[])//【這個函數幾乎完全看不懂 望逐句詳細解釋其邏輯】
{
 int i,flag=1,len=0,point,max_len=0,max_point;
 for(i=0;i<=strlen(str);i++)//解析每個字符
 {
  if(word(str[i]))    //是英文字母的話
  {
   if(flag==1)       //成立的話說明這個英文字母是單詞的第一個
   {
    point=i;        //單詞第一個找到後改變標誌
    flag=0;
   }
   else len++;      //開始對這個單詞長度進行累加
  }
  else           //非英文字母的話
  {
   flag=1;       //等待第一個英文字母的出現,所以flag=1(要是下一個是英文字母的話就能執行上面的if)
   if(len>max_len)//之前累加的單詞長度是否比上一個單詞更長(第一次的話max_len初始化爲0,len必大於max_len)
   {
    max_len=len;//將單詞長度保存下來
    max_point=point;//將最長單詞的第一個英文字母在字符串中的位置保存下來
   }
   len=0;
  }
 }
 return (max_point);
}
/*
打印九九乘法表
*/
#include<stdio.h>
void main()
{
	int i,j;
	for(i=1;i<=9;i++)
	{
		for(j=1;j<=i;j++)
			printf("%d*%d=%-4d",j,i,i*j);
		printf("\n");
	}
}

/*
打印星號圖形
*******
 *****
  ***
   *
設:行數爲n
    行號爲i,依次取值:1,2,3,4,5,,,n

則:第一行第1~2n-1列打印*號,其他打印空格
    第二行第2~2n-2列打印*號,其他打印空格
	第三行第1~2n-3列打印*號,其他打印空格
	......
	第n行第n~2n-n列打印*號,其他打印空格
     分析行號i與*號和空格的關係得出: 
     第i行第i~2n-i列打印*號,其他打印空格

*/
#include<stdio.h>
void main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=2*n-1;j++)
			if(j>=i&& j<=2*n-i)
				printf("*");
			else printf(" ");
			printf("\n");
	}
}

/*
打印圖形
*******
 *****
  ***
   *
方法1:
設:行數爲n
    行號爲i,依次取值:1,2,3......n
則:第一行打印空格0個,*爲2n-1個
    第二行打印空格1個,*爲2n-3個
	第三行打印空格2個,*爲2n-5個
	.......
第n行打印空格打印空格n-1個,*爲2n-(2n-1)個即1個
   分析行號i與空格和*號的關係得出: 
   第i行打印空格i-1個,打印*號2n-(2i-1)個

*/
#include<stdio.h>
void main()
{
	int n,m,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i-1;j++)
			putchar(' ');
		for(j=1;j<=2*(n-i)+1;j++)
			putchar('*');
		printf("\n");
	}
}

#include "stdio.h"      /* 空心方法2 */
void main()
{   int  n, i, j;
     scanf("%d", &n);
     for( i=1; i<=n; i++ )
     {   for( j=1; j<=2*n-1; j++ )
              if(j==i || j==2*n-i || i==1&&j%2==1)
                  printf("*");
              else  printf(" ");
          printf("\n");
     }
}

/*
打印星號圖形
* * * * *
 *     *
  *   *
   * *
    *
1,左邊的空格數相同,即i-1個
2,*號加*號減的空格總數,與實心的*好數相同,即2(n-i)+1
3,不同的是:設每行的*號和*號間的空格的編號爲j,依次取值1,2,,,,,2(n-i)+1
則第1行,當j%2==1時打印*號,其他打空格
     其餘行,當j==1和j==2(n-i)+1時打印*號,其他打
     空格

*/
#include<stdio.h>
void main()
{
	int i,j,n;
	printf("input n=");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=i-1;j++)
			putchar(' ');
		for(j=1;j<=2*(n-i)+1;j++)
			if(i==1 &&j%2 ||j==1||j==2*(n-i)+1)
				putchar('*');
			else putchar(' ');
			printf("\n");
	}
}

/*
輸出星號圖形
    *
   ***
  *****
 *******
  *****
   ***
    *
*/
#include<stdio.h>
void main()
{
	int i,j,n;
	printf("input n:");
	scanf("%d",&n);
	for(i=1;i<=n;i++)   /*控制輸出前n行*/
	{
		for(j=1;j<=10;j++)
			putchar(' ');
		for(j=1;j<=n-i;j++)
		{
			putchar(' ');putchar(' ');       /*每行的起始空格越來越少*/
		}
		for(j=1;j<i*2;j++)
		{
			putchar('*');putchar(' ');       /*每行的'*'越來越多*/
		}
		putchar('\n');
	}

	for(i=1;i<=n-1;i++)   /*控制輸出後n行*/
	{
		for(j=1;j<=10;j++)
			putchar(' ');
		for(j=1;j<=i;j++)
		{
			putchar(' ');putchar(' ');       /*每行的起始空格越來越多*/
		}
		for(j=1;j<(n-i)*2;j++)
		{
			putchar('*');putchar(' ');       /*每行的'*'越來越少*/
		}
		putchar('\n');
	}

}
/*
    *
   ***
  *****
 *******
*********
*/
#include<stdio.h>
void main()
{
	int i,j;
	for(i=0;i<5;i++)
	{
		for(j=0;j<=4-i;j++)
			printf(" ");
		for(j=0;j<=2*i-1;j++)
			printf("*");
		printf("\n");
	}
}
/*
有兩個磁盤文件A和B 各存放一行字母,要求把這兩個文件中的信息合併
按照字母順序排列,輸出到一個新文件c中
*/
#include<stdio.h>
void main()
{
	FILE *fp;
	int i,j,n,k;
	char c[100],t,ch;
	if((fp=fopen("d:\\file\\test1.txt","r"))==NULL)
	{
		printf("can't open the file!\n");
		return;
	}
	printf("File A:\n");
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		c[i]=ch;
		putchar(c[i]);
	}
	fclose(fp);

	k=i;

	if((fp=fopen("d:\\file\\test2.txt","r"))==NULL)
	{
		printf("can't open the file!\n");
		return;
	}
	printf("\nFile B:\n");
	for(i=0;(ch=fgetc(fp))!=EOF;i++)
	{
		c[k+i]=ch;
		putchar(c[k+i]);
	}
	fclose(fp);

	n=k+i;
	
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
			if(c[i]>c[j])
			{
				t=c[i];
				c[i]=c[j];
				c[j]=t;
			}
	printf("\n連接在一起然後根據字母排序");
	printf("\nFile c:\n");
	for(i=0;i<n;i++)
	{
		putc(c[i],fp);
	    putchar(c[i]);
	}
	fclose(fp);

}

/*
從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁從鍵盤 輸入一個字符串,將其中的小寫母全部轉換成大然後出到磁文件 “test” “test” “test” “test” “test” 中保存。輸入的字符串以 中保存。輸入的字符串以 中保存。輸入的字符串以 中保存。輸入的字符串以 中保存。輸入的字符串以 中保存。輸入的字符串以 “!”結
*/
#include<stdio.h>
#include<string.h>
void main()
{
	FILE *fp;
	char str[100];
	int i=0;
	if((fp=fopen("d:\\file\\test.txt","w"))==NULL)
	{
		printf("can't open the file!\n");
		return;
	}

	printf("input a string:\n");
	gets(str);
	while(str[i]!='!')
	{
		if(str[i]>='a' && str[i]<='z')
			str[i]=str[i]-32;
		fputc(str[i],fp);
		i++;
	}

	fclose(fp);
	fp=fopen("d:\\file\\test.txt","r");
	fgets(str,strlen(str)+1,fp);
	printf("%s\n",str);
	
	fclose(fp);

}
/*
將文件a1的內容複製到文件a2中
*/
#include<stdio.h>
void main()
{
	FILE *fp1;
	FILE *fp2;
	char c;
	fp1=fopen("d:\\file\\a.txt","r");
	fp2=fopen("d:\\file\\b.txt","w");
	do
	{
		c=fgetc(fp1);
		fputc(c,fp2);
	} while(c!=EOF);    //直到char c中木有任何值

	fclose(fp1);
	fclose(fp2);
}
void filecopy(FILE *fp1,FILE *fp2)
{
	char ch;
	ch=getc(fp1);//先讀一次文件再去半段文件是否結束
	while(!feof(fp1))  //當未到文件末尾時進行循環
	{
		putc(ch,fp2);
		ch=getc(fp1);//逐個字符進行復制
	}
}

/*
在文件wm.txt中存放了若干個字符串,要求編寫程序統計出其中大寫字母的個數
*/
#include<stdio.h>
void main()
{
	FILE *fp;
	int count=0;
	char c;
	fp=fopen("d:\\file\\wm.txt","r");
	c=fgetc(fp);
	while(c!=EOF)
	{
		if(c>='A' && c<='Z') 
			count++;
		c=fgetc(fp);
	}
	printf("the count is %d",count);
	fclose(fp);
}

/*
在磁盤文件上存有10個學生的數據,要求將第1,3,5,7,9個學生數據輸入計算機
,並在屏幕上顯示出來
*/
#include<stdio.h>
#include<stdlib.h>
struct student
{
	char name[10];
	int num;
	int age;
	char sex;
}stu[10];

void main()
{
	int i;
	FILE *fp;
	if((fp=fopen("d:\\file\\student.txt","rb+"))==NULL)
	{
		printf("can not open the file\n");
		return;
	}

	for(i=0;i<10;i=i+2)    //注意i的增量 i+=2
	{
		fseek(fp,i*sizeof(struct student),0);
		fread(&stu[i],sizeof(struct student),1,fp);
		printf("%s %d %d %c\n",stu[i].name,stu[i].num,stu[i].age,stu[i].sex);

	}
	fclose(fp);

}

/*
統計當前目錄文件file.txt中子串read出現的次數
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
	FILE *fp;
	int t,ch,num=0;   //num記錄出現的次數
	char str[5]="read",buf[5];
	if((fp=fopen("d:\\file\\file.txt","r+"))==NULL)
	{
		printf("cnanot open the file\n");
		return;
	}

	for(t=0;t<4;t++)
		buf[t]=fgetc(fp);     //分別取4個字符存放在buf[t]中與str進行比較
	buf[t]='\0';              //補字符串結尾標記

	if(strcmp(str,buf)==0)  num++;

	while((ch=fgetc(fp))!=EOF)
	{
		for(t=0;t<3;t++)
			buf[t]=fgetc(fp);
		buf[t]='\0';
		if(strcmp(str,buf)==0)  num++;
	}

	fclose(fp);
	printf("The number of read is %d\n",num);
}

/*
在a1.txt文件存放了100個整數,要求編寫程序,程序的功能是
將這100個數按升序排列,將排列結果保存到a2.txt中
*/
#include<stdio.h>
void main()
{
	FILE *fp1,*fp2;
	int a[100],i,j;
	fp1=fopen("d:\\file\\a1.txt","w");
	fp2=fopen("d:\\file\\a2.txt","w");
	                        //輸入
	for(i=0;i<100;i++)
		fscanf(fp1,"%d",&a[i]);

	for(i=0;i<99;i++)       //冒泡排序法
		for(j=0;j<99-i;j++)
			if(a[j]>a[j+1])
			{
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
			            //輸出
	for(i=0;i<100;i++)
		fprintf(fp2,"%d",a[i]);
	fclose(fp1);
	fclose(fp2);


}

/*
設職工數據爲:工號,姓名,性別,年齡,工資,將6名職工的數據從鍵盤輸入
然後送入磁盤文件worker.txt中保存,再讀此文件並輸出這些數據,依次打印出來
*/
#include<stdio.h>
#define SIZE 6

struct woker_type
{
	int num;
	int age;
	char name[10];
	char sex;
	float pay;
}worker[SIZE];

void save()
{
	FILE  *fp;
	int i;
	if((fp=fopen("d:\\file\worker.txt","rb"))==NULL)
	{
		printf("can not open the file!\n");
		return;
	}
	for(i=0;i<SIZE;i++)
	{
		if(fwrite(&worker[i],sizeof(struct worker_type),1,fp)!=1)
			printf("file write error!\n");
	}
	fclose(fp);
}

void main()
{
	int i;
	FILE *fp;
	for(i=0;i<SIZE;i++)
		scanf("%d %d %c %d %f",&worker[i].num,&worker[i].name,&worker[i].sex,&worker[i].age,&worker[i].pay);
	save();
	printf("\n No  Name  Sex  Age  Pay\n");
	fp=fopen("d:\\file\\worker.txt","rb");
	for(i=0;i<SIZE;i++)
	{
		fread(&worker[i],sizeof(struct worker_type worker[SIZE]),1,fp);
		printf("%5d  %-8s  %-5c  %-5d  %6.2f\n",worker[i].num,worker[i].name,worker[i].sex,worker[i].age,worker[i].pay);

	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章