头歌:C语言程序设计答案

C语言程序设计编辑与调试环境

第1关:打印输出 Hello World

#include<stdio.h>
	int main(void)
	{  
	/********* Begin *********/
		printf("Hello World\n");
	/********* End *********/
       return 0;
	}

第2关:打印输出图形

#include<stdio.h>
	int main(void)
	{  	
	/********* Begin *********/
		printf("    *\n");
		printf("   ***\n");
		printf("  OK\n");
		printf(" Hello!\n");
		printf("*********\n");
	/********* End *********/
       return 0;
	}

第3关:求3个数的最大值

#include<stdio.h>
	int main(void)
	{  
	/********* Begin *********/
		int a,b,c,z;
		scanf("%d,%d,%d",&a,&b,&c);
		z=a;
		if(b>a) z=b;
		if(c>b) z=c;
		printf("max=%d",z);
	/********* End *********/
       return 0;
	}

第4关:熟悉C语言调试过程

#include<stdio.h>
int main(void)
  {
	  /********* Begin *********/
      int  x;
      int y=2,z=3;
      scanf("%d",&x); 
      if(x==y+z)
          printf("*****");
      else  
          printf("#####" );
      return 0;
	  /********* End *********/
  }

顺序结构程序设计

第1关:加法运算

#include<stdio.h>
	int main(void)
	{  
	  int a,b,c; 
      //Please input a,b:
	  /*********Begin*********/
	  scanf("%d,%d",&a,&b);
	  c=a+b;
	  printf("%d+%d=%d\n",a,b,c);
	  /*********End**********/ 
       return 0;
	}

第2关:不使用第3个变量,实现两个数的对调

#include<stdio.h>
	int main(void)
	{  
	  int a,b;
	  //Enter a and b:
      scanf("%d%d",&a,&b); 
      printf("a=%d b=%d\n",a,b);
	  /*********Begin*********/
	  
	  /*********End**********/
	  printf("a=%d  b=%d\n",b,a);  
       return 0;
	}

第3关:用宏定义常量

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,b;
	  scanf("%d",&a);
	  b=30*a;
	  printf("%d\n",b);
	  /*********End**********/ 
       return 0;
	}

第4关:数字分离

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,ge,shi,bai;
	  scanf("%d",&a);
	  ge=a%10;
	  shi=(a/10)%10;
	  bai=a/100;
	  printf("%d %d %d",bai,shi,ge);
	  /*********End**********/ 
       return 0;
	}

第5关:计算总成绩和平均成绩

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	int a, b, c, d, e, sum;
	float aver;
	scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
	sum = a + b + c + d + e;
	aver = sum / (5.0);
	printf("%d %.2f", sum, aver); 
	  /*********End**********/ 
       return 0;
	}

第6关:求三角形的面积

#include<stdio.h>
#include <math.h>
	int main(void)
	{  
	  /*********Begin*********/
	double a, b, c;
	double s;
	double area;
	scanf("%lf %lf %lf", &a, &b, &c);
	s = (a + b + c) / 2;
	area = sqrt(s * (s - a) * (s - b) * (s - c));
	printf("%.3lf", area);
	  /*********End**********/ 
       return 0;
	}

第7关:立体几何计算题

#include<stdio.h>
#define PI 3.14
	int main(void)
	{  
	  /*********Begin*********/
	double r, h;
	double C1, Sb, Vb;
	scanf("%lf,%lf", &r, &h);
	C1 = PI * 2 * r;
	Sb = 4 * PI * r * r;
	Vb = PI * r * r * h;
	printf("C1=%.2lf\nSb=%.2lf\nVb=%.2lf\n", C1,Sb, Vb);  
	  /*********End**********/ 
       return 0;
	}

第8关:计算两个正整数的最大公约数

#include<stdio.h>
int MaxCommonFactor( int a, int b)
{ 
   int c; 
   if(a<=0||b<=0) 
      return -1; 
   while(b!=0)
   { 
     c=a%b; 
     a=b;
     b=c;
   } 
  return a; 
}   
int main(void)
	{  
	  /*********Begin*********/
	  int a,b;
    scanf("%d,%d",&a,&b);
    printf("%d",MaxCommonFactor(a,b));	  
	  /*********End**********/ 
    return 0;
}

选择结构程序设计

第1关:排序

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,b,c,d;
	  printf("请输入三个整数:");
	  scanf("%d %d %d",&a,&b,&c);
	  if(a>b)
	  {
		  d=a;
		  a=b;
		  b=d;
	  }
	  if(a>c)
	  {
		  d=a;
		  a=c;
		  c=d;
	  }
	  if(b>c)
	  {
		  d=b;
		  b=c;
		  c=d;
	  }
	  printf("从小到大排列为:%d,%d,%d",a,b,c);
	  /*********End**********/ 
       return 0;
	}

第2关:选择结构-闰年判断

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int year;
	  
	  scanf("%d",&year);
	  if((year % 4 == 0 &&year % 100 != 0)|| year % 400 ==0)
	  	printf("%d 是闰年!\n",year);
	  else
	  	printf("%d 不是闰年!",year);

	  /*********End**********/ 
       return 0;
	}

第3关:选择结构-分段函数问题

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  double x,y;
	  scanf("%lf",&x);
	  if(x<0&&x!=-3)
	  y=x*x+x-6;
	  else if(x>=0&&x<10&&x!=2&&x!=3)
	  y=x*x-5*x+6;
	  else
	  y=x*x-x-1;
	  printf("%.3lf",y);
	  
	  /*********End**********/ 
       return 0;
	}

第4关:学生成绩等级换算

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  float result;
	  int x;
	  scanf("%f",&result);
	  if(result>=0&&result<=100)
	  {
		  x=result/10;
		  switch(x)
		  {
			  case 10:
			  case 9:;printf("A");break;
			  case 8:printf("B");break;
			  case 7:printf("C");break;
			  case 6:printf("D");break;
			  default:printf("E");
		  }
	  }
	  else
	  printf("Score is error!");
	  
	  /*********End**********/ 
       return 0;
	}

选择结构程序设计进阶

第1关:快递费用计算

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int area = 0;
            float w,s,e,p = 0;
            int areastartmoney[5] = {10,10,15,15,15};
            float areaextramoney[5] = {3,4,5,6.5,10};
            scanf("%d,%f",&area,&w);
            if(area<0 || area>4)
            {
                printf("Error in Area\n");
                p = 0;
            }
            else if(w<0)
            {
                printf("Error in Weight!\n");
                p =0;
            }
            else
            {
                s =1;
                e = ceil(w - 1);
                p = areastartmoney[area] + e * areaextramoney[area];
            }
            printf("Price: %.2f\n",p);
	  
	  /*********End**********/ 
       return 0;
	}

第2关:计算一元二次方程的根

#include<stdio.h>
#include<math.h>
	int main(void)
	{  
	  /*********Begin*********/
	    float a,b,c;
  		double x1,x2,d;
  		printf("Please enter the coefficients a,b,c:\n");
  		scanf("%f,%f,%f",&a,&b,&c);
  		d = b*b-4*a*c;
  		if (b*b-4*a*c<0)
		  {
    		printf("error!");
    		return 0;
  		  }
  		else
		  {
    		x1 = (-b+sqrt(d))/(2*a);
    		x2 = (-b-sqrt(d))/(2*a);
    		printf("x1=%.4f, x2=%.4f",x1,x2);
  		  }
	  /*********End**********/ 
       return 0;
	}

第3关:产品信息格式化

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
		float unit;
    	int a,b,c,d;
    		printf ("Enter item number:\n");
    		scanf ("%d",&a);
    		printf ("Enter unit price:\n");    scanf ("%f",&unit);
    		printf ("Enter purchase date (mm/dd/yy):\n");
    		scanf ("%d/%d/%d",&b,&c,&d);
    		printf ("Item Unit Purchase\n");
    		printf ("%-9d$ %-9.2f%02d%02d%02d\n",a,unit,b,c,d);
	  /*********End**********/ 
       return 0;
	}

循环结构程序设计1

第1关:小球自由落体运动

#include<stdio.h>
int main(void)
	{  
	  /*********Begin*********/
	 int i,n;
	    float h,M;
	    scanf("%f %d",&M,&n);
	    h=M/2;
	    for (i=2;i<=n;i++)
	    {
	        M=M+2*h;
	        h=h/2;
	    }
	    printf("%.2f %.2f",h,M);
 
	  /*********End**********/ 
       return 0;
	}

第2关:求解出n以内所有能被5整除的正整数的乘积

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int n,i,s;
	  s=1;
	  scanf("%d",&n);
	  for(i=1;i<=n;i++){
		  if(i%5==0)
		  s*=i;
	  }
	  printf("%d",s);
	  /*********End**********/ 
       return 0;
	}

第3关:最大公约数和最小公倍数

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,b,i;
	  scanf("%d %d",&a,&b);
	  for(i=a;i>=1;i--){
		  if(a%i==0&&b%i==0){
			  printf("最大公约数是:%d\n",i);
			  break;
		  }
	  }
	  for(i=1;i>0;i++){
		  if(i%a==0&&i%b==0){
			  printf("最小公倍数是:%d\n",i);
			  break;
		  }
	  }  
	  /*********End**********/ 
       return 0;
	}

第4关:字符串中各类字符数的统计

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	 int e=0,n=0,t=0,p=0;
	 char c;
	 while((c=getchar())!='\n')
	 {
		 if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
		 e++;
		 else if(c==' ')
		 t++;
		 else if(c>='0'&&c<='9')
		 n++;
		 else p++;
	 }
	 printf("%d %d %d %d",e,n,t,p);
	  /*********End**********/ 
       return 0;
	}

第5关:求sn=a+aa+aaa+aaaa+…的值

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,n,s,sum,i;
	  i=0;
	  s=0;
	  sum=0;
	  scanf("%d %d",&a,&n);
	  while(n>0){
		  s=a;
		  i+=s;
		  sum+=i;
		  a=a*10;
		  n--;
	  }
	  printf("%d\n",sum);
	  /*********End**********/ 
       return 0;
	}

循环结构程序设计2

第1关:C循环-求平均成绩

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int i,num;
	  float average,sum=0,a[1000];
	  scanf("%d",&num);
	  if(num<=0)
	  {
		printf("the number of students:the scores:average=0.00");
	  	return 0;
	  } 
	  for(i=0;i<num;i++)
	  scanf("%f",&a[i]);
	  for(i=0;i<num;i++)
	  sum=sum+a[i];
	  average=sum/num;
	  printf("the number of students:the scores:average=%.2f",average);
	  /*********End**********/ 
       return 0;
	}

第2关:C循环-求各位数字之积

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	int n,a,score=1;
	  scanf("%d",&n);
	  a=n%10;
	  while(n!=0) 
	  {
		  score=score*a;
		  n=n/10;
		  a=n%10;
	  }
	  printf("%d",score);
	  
	  /*********End**********/ 
       return 0;
	}

第3关:C循环-求阶乘之和

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	int n;
    int S=1,i;
    int SUM=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        S*=i;
        SUM=SUM+S;
    }
    printf("%d",SUM);
	  
	  /*********End**********/ 
       return 0;
	}

第4关:C循环-水仙花数

#include<stdio.h>
#include<math.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int i,a,b,c;
	  for(i=100;i<1000;i++)
	  {
		  a=i%10;//个位数
		  b=(i/10)%10;//十位数
		  c=(i/10)/10;//百位数
		  if(i==a*a*a+b*b*b+c*c*c)
		  printf("%d ",i);
	  }
	  /*********End**********/ 
       return 0;
	}

第5关:C循环-寻找完数

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  	 int i,j,sum=0;
	     for(i=1;i<=1000;i++)
	     {
		 for(j=1;j<i;j++)
		     {
			  if((i%j)==0)
			  sum=sum+j;
		     }
		  if(sum==i)
		  printf("%d\n",i);
		  sum=0;
	  }
	  
	  /*********End**********/ 
       return 0;
	}

第6关:分数求和

#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  float i,j,t=1,x,sum=0;
	  for(i=1;i<=100;i++)
	     {
		  x=(1/i)*t;
		  sum=sum+x;
		  t=(-t);
	     }
	  printf("%.3f",sum);
	  
	  /*********End**********/ 
       return 0;
	}

函数

第1关:求和

#include<stdio.h>
int a(int n)
{
	return (1+n)*n/2;
}
int main(void)
{
	int m;
	scanf("%d",&m);
	printf("%d",a(m));
    return 0;
}

第2关:回文数计算

#include<stdio.h>
void solve(int n)
{
    /*********Begin*********/
    if(n<1000)
	 {
		if(n%10==n/100) printf("%d\n",n);
	 }
	 else
	 {
		if(n%10==n/1000 && n/10%10==n/100%10) printf("%d\n",n);
	 }
    /*********End**********/ 
}
int main(void)
{
	for(int i=200;i<3001;i++)
	{
		solve(i);
	}
	return 0;
}

第3关: 编写函数求表达式的值

#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
double fun(int n)
{ 
	double s, t; int i;
	s=1.0; t=1.0;
	for(i=1;i<=n;i++)
	 { 
		t=t*i/(2*i+1);
		s+=t;
	 }
	return s;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
     int x;
     scanf("%d",&x);
	 printf("%12.10lf", fun(x));
    /*********End**********/ 
    return 0;
}

第4关:阶乘数列

#include<stdio.h>
//编写函数
/*********Begin*********/
typedef int long long ll;
ll digui(int n)
{
	if(n==1) return 1;
	else return n*digui(n-1);
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int n;
	ll sum=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	 {
		sum+=digui(i);
	 }
	printf("%lld",sum);
    /*********End**********/ 
    return 0;
}

第5关:亲密数

#include<stdio.h>
void solve(){
    /*********Begin*********/
     int a,i,b=0,m=0;
	 for(a=1;a<=3000;a++)
	 {	
		for(i=1;i<a;i++)
		 {
			if(a%i==0)
				b=b+i;
		 }
		for(i=1;i<b;i++)
		 {
			if(b%i==0)
				m=m+i;
		 }
		if(m==a)
		 {
			if(a!=b&&a<b)
			printf("(%d,%d)",a,b);
		 }
		b=0,m=0;
	}
    /*********End**********/ 
}
int main(void)
{  
    solve();
    return 0;
}

第6关:公约公倍数

#include<stdio.h>
typedef int long long ll;
ll lcm(ll a,ll b)
{
	ll temp,p,r,k,l;
	k=a;
	l=b;
	if(b>a)
	{
		temp=b;
		b=a;
		a=temp;
	}
	while(b!=0)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return k/a*l;
}
int main()
{
	ll a,b;
	scanf("%lld %lld",&a,&b);
	if(a<0 || b<0) printf("Input Error");
	else
	printf("%lld %lld",(a*b)/lcm(a,b),lcm(a,b));
	return 0;
}

递归函数、嵌套函数

第1关:递归求阶乘数列

#include<stdio.h>
long long solve(long long n)
{
    /*********Begin*********/
    long long p=1,i;
    for(i=1;i<=n;i++)
    p*=i;
    return p;

    /*********End**********/
}
int main(void)
{
    long long n;
    scanf("%lld",&n);
    long long ans=0;
    for(long long i=1;i<=n;i++)
        ans+=solve(i);
    printf("%lld", ans);
    return 0;
}

第2关:递归实现输出一个整数的逆序

#include<stdio.h>
void solve(int n){
    printf("%d", n%10);
    /*********Begin*********/
    n/=10;
    /*********End**********/
    if(n>0) solve(n);
}
int main(void)
{
    int n;
    scanf("%d",&n);
    solve(n);
    return 0;
}

第3关:将整数递归转换成字符串

#include<stdio.h>
void solve(int n)
{
    int temp=n%10;
    /*********Begin*********/
    n/=10;
    if(n)
    solve(n);

    /*********End**********/
    if(n)
        printf(" %d", temp);
    else
        printf("%d", temp);
}
int main(void)
{
    int n;
    scanf("%d",&n);
    solve(n);
    return 0;
}

第4关:递归实现Ackman函数

#include<stdio.h>
int Acm(int m,int n){
    if(m==0&&n>0)
        /*********Begin*********/
        return n+1;
        /*********End**********/
    else if(n==0&&m>0)
        /*********Begin*********/
        return Acm(m-1,1);
        /*********End**********/
    else
        /*********Begin*********/
        return Acm(m-1,Acm(m,n-1));
        /*********End**********/
}
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    printf("%d", Acm(m,n));
    return 0;
}

一维数组和二维数组

第1关:排序问题

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

    /*********End**********/
    return 0;
}

第2关:查找整数

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int c[10000];
    int a,i,b;
    scanf("%d",&a);
    for(i=0;i<a;i++)
    scanf("%d",&c[i]);
    scanf("%d",&b);
    for(i=0;i<a;i++)
    if(c[i]==b)
    break;
    printf("%d\n",i==a?-1:i+1);
    /*********End**********/
    return 0;
}

第3关:计算数组中元素的最大值及其所在的行列下标值

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[5][5],max,i,j,p,q,m,n;
       printf("Input m, n:");
       scanf("%d,%d",&m,&n);
       printf("Input %d*%d array:\n",m,n);
    for(i=0;i<m;i++)
       for(j=0;j<n;j++)
          scanf("%d",&a[i][j]);
    max=a[0][0];
    p=q=0;
    for(i=0;i<m;i++)
     for(j=0;j<n;j++)
        if(a[i][j]>max)
        {
            max=a[i][j];
            p=i;
            q=j;
        }
    printf("max=%d, row=%d, col=%d",max,p+1,q+1);
    /*********End**********/
    return 0;
}

第4关:二分查找

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[100];
    int n,x,i,j,mid;
    scanf("%d", &n);
    for(i = 0; i < n; i++)
        scanf("%d", &a[i]);
    scanf("%d", &x);
    int ans = -1;
    i = 0, j = n - 1;
    while(i <= j) 
    {
        mid = (i + j) / 2;
        if(a[mid] == x) 
        {
            ans = mid;
            break;
        } 
        else if(a[mid] > x)
            j = mid - 1;
        else if(a[mid] < x)
            i = mid + 1;
    }
    if(ans == -1)
        printf("None\n");
    else
        printf("%d\n", ans + 1);
    /*********End**********/
    return 0;
}

第5关:鞍点

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[10][10], maxa[10], mina[10];
    int m, n, i, j;

    scanf("%d %d", &m, &n);
    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++)
            scanf("%d", &a[i][j]);
    for(i = 0; i < m; i++)
        maxa[i] = a[i][0];
    for(i = 0; i < n; i++)
        mina[i] = a[0][i];

    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++) {
            if(a[i][j] > maxa[i])
                maxa[i] = a[i][j];
            if(a[i][j] < mina[j])
                mina[j] = a[i][j];
        }

    int flag = 1;
    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++)
            if(maxa[i] == mina[j]) {
                flag = 0;
                printf("Array[%d][%d]=%d\n", i, j, maxa[i]);
                break;
            }
    if(flag)
        printf("None\n");
    /*********End**********/
    return 0;
}

第6关:删除最大值

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[10];
    int i;
    for(i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    int max = a[0], k = 0;
    for(i = 1; i < 10; i++)
        if(a[i] > max) max = a[i], k = i;

    for(i = 0; i < 10; i++)
        if(i != k)
            printf("%d ", a[i]);
    printf("\n");
    /*********End**********/
    return 0;
}

第7关:杨辉三角

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
int i,j,a[11][11];
  for (i=0;i<10;i++)
     {a[i][i]=1;
      a[i][0]=1;
     }
  for (i=2;i<10;i++)
    for (j=1;j<=i-1;j++)
       a[i][j]=a[i-1][j-1]+a[i-1][j];
  for (i=0;i<10;i++)
    {for (j=0;j<=i;j++)
       printf("%d",a[i][j]);
     printf("\n");
    }
  printf("\n");
    /*********End**********/
    return 0;
}

字符数组

第1关:字符逆序

#include<stdio.h>
#include<string.h>
int main(void)
{
    /*********Begin*********/
	char a[1000];
	gets(a);
	for(int i = strlen(a) - 1;i >= 0;i--)
	printf("%c", a[i]);

    /*********End**********/
    return 0;
}

第2关:字符统计

#include<stdio.h>
#include<string.h>
void function()
{
	char s[50];		
	gets(s);
	if(s[0]!='\0')
	{
		int temp=0;
		for(int i=0;i<strlen(s);i++)
		{
			if(s[i]>='0'&&s[i]<='9')
			{
				temp++;
			}
			
		}
		printf("%d\n",temp);
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	n++;
	for(int i=0;i<n;i++)
	{
		function();
	}
	return 0;
}

第3关:字符插入

#include <stdio.h>
#include <string.h>
int main(void)
{
	char a[20],b[20];
	gets(a),gets(b);
	int len=strlen(a),lenn=strlen(b);
	int min=999,max=0;
	for(int i=0;i<len;i++)
	{
		if(a[i]<min) min=a[i];
	}
	for(int i=0;i<lenn;i++)
	{
		if(b[i]>max) max=b[i];
	}
	for(int i=0;i<len;i++)
	{
		if(a[i]==min) printf("%c%c",a[i],max);
		else printf("%c",a[i]);
	}
    return 0;
}

第4关:字符串处理

#include <stdio.h>
#include <string.h>
int main(void)
{
	char a[1000],b[1000];
	gets(a),gets(b);
	int Z;
	scanf("%d",&Z);
	for(int i=0;i<strlen(a);i++)
	{
		if(i==Z) printf("%s%c",b,a[i]);
		else printf("%c",a[i]);
	}
    return 0;
}

第5关:字符串统计

#include<stdio.h>
#include <string.h>
int main(void)
{
    int sumLength = 0, partLength = 0;
    char arr[1000];
    int max = 0;
    char Temp_Arr[1000];
    gets(arr);
    int i, j;
    while (strcmp(arr, "stop") != 0)
    {
        for (i = 0; i < strlen(arr); i++)
        {
            if (arr[i] != ' ')
            {
                sumLength++;
                partLength++;
            }
            else
            {
                if (partLength > max)
                {
                    max = partLength;
                }
                partLength = 0;
            }
        }
        if (partLength > max)
        {
            max = partLength;
        }
        partLength = 0;
        for (i = 0; i < strlen(arr); i++)
        {
            if (arr[i] != ' ')
            {
                partLength++;
                if (partLength == max)
                {
                    for (j = 0; j < max; j++)
                    {
                        Temp_Arr[j] = arr[j + i - max+1];
                    }
                    Temp_Arr[max] = '\0';
                    break;
                }
            }
            else
            {             
                partLength = 0;
            }
        }
        printf("%d %s", sumLength, Temp_Arr);
        printf("\n");
        sumLength = 0;
        partLength = 0;
        max = 0;
        gets(arr);
    }
    return 0;
}

第6关:字符串排序

#include<stdio.h>
#include<string.h>
char s1[50], s2[50], s3[50];
int main(void)
{
    scanf("%s%s%s", s1, s2, s3);
    if(strcmp(s1, s2) <= 0) {
        if(strcmp(s2, s3) <= 0)
            printf("%s\n%s\n%s\n", s1, s2, s3);
        else {
            if(strcmp(s3, s1) <= 0)
                printf("%s\n%s\n%s\n", s3, s1, s2);
            else
                printf("%s\n%s\n%s\n", s1, s3, s2);
        }
    } else {
        if(strcmp(s1, s3) <= 0)
            printf("%s\n%s\n%s\n", s2, s1, s3);
        else {
            if(strcmp(s3, s2) <= 0)
                printf("%s\n%s\n%s\n", s3, s2, s1);
            else
                printf("%s\n%s\n%s\n", s2, s3, s1);
        }
    }
    return 0;
}

指针

第1关:用指针法输入12个整数,然后按每行4个数输出

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[12],*b,i;
    b=a;
    for(i=0;i<12;i++)
    {
        scanf("%d",b++);
    }
    b=a;
    for(i=0;i<12;i++)
    {
        if((i+1)%4==0)
        printf("%d\n",*b);
        else
        printf("%d ",*b);
        b++;
    }
    /*********End**********/
    return 0;
}

第2关:指针变量作为函数参数实现两变量交换值

#include<stdio.h>
/*********Begin*********/
void swap(int *a,int *b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
/*********End**********/
int main(void)
{
	int a,b;
	scanf("%d%d",&a,&b);
	/*********Begin*********/
    swap(&a,&b);
    printf("%d %d",a,b);
	/*********End**********/
    return 0;
}

第3关:报数

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n,ans,i;
    scanf("%d",&n);
    ans=0;
    if(n==0)
       return 0;
    for(i=2;i<=n;i++)
        ans=(ans+3)%i;
    printf("%d\n",ans+1);
    /*********End**********/
    return 0;
}

第4关:strcmp函数

#include<stdio.h>
int strcmp(char *p1,char *p2){
	/*********Begin*********/
	int i = 0;
	while(*(p1+i) != '\0' || *(p2+i) != '\0')
	{
		if(*(p1+i) > *(p2+i))
			return 1;
		else if(*(p1+i) < *(p2+i))
			return -1;
		else
			i++;
	}
	return 0;
	/*********End**********/
}
int main(void)
{
	char a[110],b[110];
	scanf("%s%s",a,b);
	if(strcmp(a,b)>0)
		printf("%s", a);
	else
		printf("%s", b);


    return 0;
}

指针进阶

第1关:输出若干个学生成绩中的最高分.要求用指针函数实现

#include<stdio.h>
/*********Begin*********/
int max(int s[],int n)
{
    int temp=0;
    int *p;
    p=&temp;
    for(int i=0;i<n;i++)
    {
        if(*p<s[i]) *p=s[i];
    }
    return *p;
}
/*********End**********/
int main(void)
{
    int n,s[110];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&s[i]);
    
	/*********Begin*********/
    
	/*********End**********/
    printf("%d",max(s,n) );
    return 0;
}

第2关:采用指针变量表示地址的方法输入输出数组中的个元素

#include<stdio.h>
int main(void)
{
	/*********Begin*********/
	int v[100],n;
	scanf("%d",&n);
	int *p;
	for(p=v;p<v+n;p++)
	{
		scanf("%d",p);
	}
	for(p=v;p<v+n;p++)
	{
		printf("%d ",*p);
	}

	/*********End**********/
    return 0;
}

第3关:用指针实现数组循环移动

#include<stdio.h>
int *solve(int *s, int n, int m){
    /*********Begin*********/
    int k = m % n;
    if(k == 0) return s;
	int *p = &s[n - k];
	int *q = p + m;
	for(int i = 0;i < n - k;i++)
	*q++ = *s++ ; 
	return p; 
    /*********End**********/
}
int main(void)
{
    int n, m, s[110];
    scanf("%d%d", &n, &m);
    for(int i = 0;i < n;i++)
        scanf("%d", &s[i]);
    int *ans;
    /*********Begin*********/
    ans = solve(s, n, m);
    /*********End**********/
    for(int i = 0;i < n;i++){
        if(i == 0)    printf("%d", *ans++ );
        else printf(" %d", *ans++ );
    }
    return 0;
}

结构体

第1关:结构体变量的初始化和引用

#include<stdio.h>
/*********Begin*********/
int main()
{
    struct data
	{
        char num[20];
        char name[20];
        int score;
    }s1,s2;
    scanf("%s%s%d",s1.num,s1.name,&s1.score);
    scanf("%s%s%d",s2.num,s2.name,&s2.score);
    if(s1.score>s2.score)
    {
        printf("%s %s %d\n",s1.num,s1.name,s1.score);
    }
    else
    {
        printf("%s %s %d\n",s2.num,s2.name,s2.score);
    }
    return 0;
}
/*********End*********/

第2关:结构体排序

#include<stdio.h>
/*********Begin*********/
typedef struct student
{
	char num[12];
	char name[20];
	int score;
}m;

/*********End**********/
int main(void)
{
	/*********Begin*********/
	int i,n,j;
	m s[200],temp;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].score);
	}
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(s[j].score>s[i].score)
			{	
			    temp=s[i];
			    s[i]=s[j];
			    s[j]=temp;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%s %s %d\n",s[i].num,s[i].name,s[i].score);
	}
	/*********End**********/
    return 0;
}

第3关:结构体存储数据

#include<stdio.h>
#include<string.h>
/*********Begin*********/
/*********End**********/
int main(void)
{
	/*********Begin*********/
	char str[10];
	int i,n,sum1=0,sum2=0,sum3=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",str);
		if(strcmp(str,"Li")==0) sum1++;
		else if(strcmp(str,"Zhang")==0) sum2++;
		else if(strcmp(str,"Sun")==0) sum3++;
	}
	printf("Li:%d\n",sum1);
	printf("Zhang:%d\n",sum2);
	printf("Sun:%d\n",sum3);
	/*********End**********/
    return 0;
}

第4关:结构体存储学生信息

#include<stdio.h>
#include<string.h>
int Count;
struct student
{
    char sno[20],name[20];
    int math,english,chinese,sum;
};

void print(struct student stu)
{
    printf("%s %s %d %d %d %d\n",stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum);
}

void query_stu(struct student s[],char *name)
{
    /*********Begin*********/
    for(int i=0;i<Count;i++)
    {
        if(strcmp(s[i].name,name)==0)
        {
            s[i].sum=s[i].math+s[i].english+s[i].chinese;
            printf("%s %s %d %d %d %d\n",s[i].sno,s[i].name,s[i].math,s[i].english,s[i].chinese,s[i].sum);
        }
    }

    /*********End**********/
}

void delete_stu(struct student s[],char *sno)
{
    /*********Begin*********/
    int k=0;
    for(int i=0;i<Count;i++)
    {
        if(strcmp(s[i].sno,sno)==0)
        {
            k=i;
            for(int j=k;j<Count-1;j++)
            {
                s[j]=s[j+1];
            }
        }
    }

    /*********End**********/
}

void update_stu(struct student s[],char *sno,int math,int english,int chinese)
{
    /*********Begin*********/
    for(int i=0;i<Count;i++)
    {
        if(strcmp(s[i].sno,sno) == 0)
        {
            s[i].math=math;
            s[i].english=english;
            s[i].chinese=chinese;
            s[i].sum=s[i].math+s[i].english+s[i].chinese;
        }
        else{
            s[i].sum=s[i].math+s[i].english+s[i].chinese;
        }
    }
    /*********End**********/
}

int main(void)
{
    int n,q;
    struct student students[50];
    scanf("%d%d",&n,&q);
    Count=n;
    for(int i=0;i<n;i++){
        /*********Begin*********/
        scanf("%s%s%d%d%d",students[i].sno,students[i].name,&students[i].math,&students[i].english,&students[i].chinese);
        /*********End**********/
    }
    while(q--)
    {
        int op;
        scanf("%d",&op);
        char sno[20],name[20];
        if(op==1){
            scanf("%s",name);
            query_stu(students,name);
        }
        else if(op==2){
            int a,b,c;
            scanf("%s%d%d%d",sno,&a,&b,&c);
            update_stu(students,sno,a,b,c);
            for(int i=0;i<Count;i++)
                print(students[i]);
        }
        else{
            scanf("%s",sno);
            delete_stu(students,sno);
            for(int i=0;i<Count-1;i++)
                print(students[i]);
        }
    }
    return 0;
}

文件

第1关:HelloWorld

#include<stdio.h>
void solve(){
/********** Begin *********/
    FILE * pfile = fopen("in.txt","w");
	fprintf(pfile,"HelloWorld");
	fclose(pfile);
/********** End **********/
}

第2关:文件读取和写入

#include<stdio.h>
void solve(){
/********** Begin *********/
 int a,b,c;
    FILE * r=fopen("a.txt","r");
    FILE * w=fopen("b.txt","w");
    while(fscanf(r,"%d%d%d",&a,&b,&c)!=EOF)
         fprintf(w,"%d %d %d",a,b,c);
    fclose(r);
    fclose(w);
/********** End **********/
}

第3关:统计文本字母数量

#include<stdio.h>
void solve(){
/********** Begin *********/
FILE *fp;
char word;
int num=0;
fp=fopen("a.txt","r");
while(!feof(fp))
{
    fscanf(fp,"%c",&word);
    if((word>='A'&&word<='Z')||(word>='a'&&word<='z'))
    {
        num++;
    }
}
printf("%d",num-1);
fclose(fp);
/********** End **********/
}

第4关:读取文件中指定学生信息

#include<stdio.h>
#include<string.h>
void solve(char s[]){
/********** Begin *********/
    FILE *fp=fopen("a.txt","r");
    char num[12],stu[100];
    for(int i=0;i<10;i++)
    {
        fgets(num,12,fp);
        fseek(fp,-11*sizeof(char),1);
        fgets(stu,100,fp);
        if(strcmp(num,s)==0)
        {
            printf("%s",stu);
            break;
        }
        if(i==9)
        {
            printf("Not Found!");
        }
    }
/********** End **********/
}
  • 34
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值