C语言程序设计编辑与调试环境初级(已更完)

C语言程序设计

写在前面的话——点 点赞,关注和收藏吧!!!

狂肝一个周终于结束了!

点 点赞和关注吧!!!
博主在尽力的补代码和思路;
里面包含了自己学习C语言,通过网站的挑战来巩固自己对C的理解;
里面的代码仅供参考,若有错误之处,欢迎提出;
大家也可以跟我一样去通过闯关来理解C的不一样;
C语言挑战网站

第1部分 熟悉C语言程序编辑与调试环境

第1关打印输出 Hello World

思路

这个比较简单,直接打印输出即可。

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


第2关:打印输出图形

思路

每一步打印就OK

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

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

思路

直接定义a为最大值,然后通过a,b,c比较找到最大值。

#include<stdio.h>
	int main(void)
	{  
	/********* Begin *********/
	int a,b,c;	//输入三个整数	//每次输入以Enter键结束
	scanf("%d,%d,%d",&a,&b,&c);	//输入变量
	int max=a;
		if(max<b)		//比较大小
			max=b;	//把数值大的那一个数
		if(max<c)		//比较大小
			max=c;	//把数值大的那一个数
		printf("max=%d\n",max);	//输出结果
	
	/********* End *********/
       return 0;
	}

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

思路

判断值是否为5是的话直接输出需要的值,不需要就输出另外一个。

#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 *********/
  }

第2部分 顺序结构程序设计

第1关:加法运算

思路

直接定义a+b=c,然后直接输出就c OK。

#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个变量,实现两个数的对调

思路

输出时直接输出就OK

#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关:用宏定义常量

思路

利用宏定义来定义P的值,然后直接用宏定义就OK

#include<stdio.h>
#define p 30
	int main(void)
	{  
	  /*********Begin*********/
	  int x;
	  scanf("%d",&x);
	  printf("%d",x*p);
	  
	  /*********End**********/ 
       return 0;
	}

第4关:数字分离

思路

第一次模输出个位,然后除以10 然后模输出十位,然后/100模输出百位。

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

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

直接将每个成绩加起来,然后除以同学数,计算平均值。

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

第6关:求三角形的面积

输入三角形的各个边长,然后用三角形的公式计算出面积。

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

第7关:立体几何计算题

计算立体几何的面积,周长,表面积,利用所学的公式直接计算输出即可。

#include<stdio.h>
#define PI 3.14
	int main(void)
	{  
	  /*********Begin*********/
	  double r,C1,Sb,Vb,h;
	  scanf("%lf,%lf",&r,&h);
	  C1=PI*r*2;
	  Sb=4*PI*r*r;
	  Vb=h*PI*r*r;
	  printf("C1=%.2f\n",C1);
	  printf("Sb=%.2f\n",Sb);
	  printf("Vb=%.2f\n",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=0,b=0;
      int tmp=0;
      scanf("%d,%d",&a,&b);
        if(a<b){
            tmp=b;
            b=a;
            a=tmp;
        }
        while(b!=0)
	  {
		  tmp=a%b;
		  a=b;
		  b=tmp;
	  }
	  printf("%d",a);
	  /*********End**********/ 
    return 0;
}

第3部分 选择结构程序设计

3-1选择结构程序设计

第1关:排序
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,b,c;
	  int tmp;
	  printf("请输入三个整数:");
	  scanf("%d%d%d",&a,&b,&c);
	  if(a>b)
	  {
		  tmp=a;
		  a=b;
		  b=tmp;
	  }
	  if(a>c)
	  {
		  tmp=a;
		  a=c;
		  c=tmp;
	  }
	  if(b>c)
	  {
		  tmp=b;
		  b=c;
		  c=tmp;
	  }
	  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)
	  {
		  printf("%d 是闰年!",year);
	  }
	  else if(year % 400 == 0)
	  {
		  printf("%d 是闰年!",year);
	  }
	  else printf("%d 不是闰年! ",year);
	  /*********End**********/ 
       return 0;
	}

第3关:选择结构-分段函数问题
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  double x;
	  double 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("%.3f",y);
	  /*********End**********/ 
       return 0;
	}

第4关:学生成绩等级换算
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int Score;
	  scanf("%d",&Score);
	  if(Score>=90 && Score <= 100)
	  {
		  printf("A");
	  }
	  else if(Score < 90 && Score >= 80)
	  {
		  printf("B");
	  }
	  else if(Score < 80 && Score >= 70)
	  {
		  printf("C");
	  }
	  else if(Score < 70 && Score >= 60)
	  {
		  printf("D");
	  }
	  else if(Score < 60 && Score >= 0)
	  {
		  printf("E");
	  }
	  else printf("Score is error!");
	  /*********End**********/ 
       return 0;
	}

3-2选择结构程序设计进阶

第1关:快递费用计算
#include<stdio.h>
#include <math.h>
int main(void)
{
  /*********Begin*********/
  int area = 0;
  float weight,start_weight,extra_weight,price = 0;
  int area_start_money[5] = {10,10,15,15,15}; // 每个区域的起重费用
  float area_extra_money[5] = {3,4,5,6.5,10}; // 每个区域的续重费用

  // printf("please input area number and weight(eg:0,10.5):\n");
  scanf("%d,%f",&area,&weight);

  //输入合法性检查
  if(area<0 || area>4){
    printf("Error in Area\n");
    price = 0;
  }
  else if(weight < 0){
    printf("Error in Weight!\n");
    price = 0;
  }
  else{
    start_weight = 1;
    extra_weight = ceil(weight - 1);	//ceil表示向上去整,不足1公斤,按1公斤计算
    price = area_start_money[area] + extra_weight * area_extra_money[area];
  }

  printf("Price: %.2f\n",price);

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


第2关:计算一元二次方程的根
#include<stdio.h>
#include<math.h>
	int main(void)
	{  
	  /*********Begin*********/
	  printf("Please enter the coefficients a,b,c:\n");
	  double a,b,c,tmp,y,x1,x2;
	  scanf("%lf,%lf,%lf",&a,&b,&c);
	  tmp=-(b/(2*a));
	  y=(b*b - 4*a*c);
	  if(y<0) printf("error!\n");
	  else
	  {
		  x1=tmp+sqrt(y)/(2*a);
	  	  x2=tmp-sqrt(y)/(2*a);
	  	  printf("x1=%.4f, x2=%.4f\n",x1,x2);
	  }
	  
	  
	  /*********End**********/ 
       return 0;
	}

第3关:产品信息格式化
#include<stdio.h>
    int main(void)
    {  
      /*********Begin*********/
      int Item,Purchase,mm,dd,yy;
      double Unit;
      printf("Enter item number:\n");
      scanf("%d",&Item);
      printf("Enter unit price:\n");
      scanf("%lf",&Unit);
      printf("Enter purchase date (mm/dd/yy):\n");
      scanf("%d/%d/%d",&mm,&dd,&yy);
      printf("Item Unit Purchase\n");
      printf("%-9d$ %-9.2f",Item,Unit,Purchase);
      printf("%d%02d%d",mm,dd,yy);
      /*********End**********/ 
       return 0;
    }

第4部分 循环结构程序设计

4-1循环结构程序设计1

第1关小球自由落体运动
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int N;
	  double M,sum;
	  scanf("%lf%d",&M,&N);
	  sum = M;
	  for(int i=2;i<=N;i++)
	  {
		  M /= 2.0;
		  sum +=M;
		  if(i>1)
		  {
			  sum += M;
		  }
		  if(i == N)
		  {
			  M /= 2.0;
		  }		  
	  }
	  printf("%.2f %.2f",M,sum);
	  /*********End**********/ 
       return 0;
	}

求解出n以内(包含n)所有能被5整除的正整数数的乘积s。
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int s=1,n;
	  scanf("%d",&n);
	  for(int i=1;i<=n;i++)
	  {
		  if(i % 5 == 0)
		  {
			  s *= i;
		  }
	  }
	  printf("%d\n", s);
	  /*********End**********/ 
       return 0;
	}

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

第4关:字符串中各类字符数的统计
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int digit=0,letter=0,space=0,other=0;
	  char c;
	  while((c=getchar()) != '\n')
	  {
		  if((c >='a' && c <= 'z') || (c <= 'Z' && c >= 'A')){
			  letter++;
		  }
		  else if(c >= '0' && c <= '9'){
			  digit++;
		  }
		  else if(' ' == c){
			  space++;
		  }
		  else 
		  	  other++;
	  }
	  printf("%d %d %d %d",letter,digit,space,other);
	  /*********End**********/ 
       return 0;
	}

第5关:求sn=a+aa+aaa+aaaa+…的值
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,n,sum=0,Sum=0,add=0;
	  scanf("%d%d",&a,&n);
	  for(int i=0,t=1;i<n;i++)
	  {
		  sum = a*t;
		  Sum += sum;
		  add += Sum;
		  t =t*10;
		  
	  }
	  printf("%d",add);
	  /*********End**********/ 
       return 0;
	}

4-2循环结构程序设计2

第1关:C循环-求平均成绩
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  double array,sum=0;
	  int n;
	  scanf("%d",&n);
	  if(n <= 0) printf("the number of students:the scores:average=0.00");
	  else
	  {
		  for(int i=0;i<n;i++)
	  	{
		  scanf(" %lf",&array);
		  sum += array;
	  	}	  
	  printf("the number of students:the scores:average=%.2f",sum/n);
	  }	  
	  /*********End**********/ 
       return 0;
	}

第2关:C循环-求各位数字之积
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int n,a,b=1,i;
	  scanf("%d",&n);
	  if(n % 10 == 0) printf("0\n");
	  else {
  		while(n)
	  {
		  i=(int) n / 10;
		  a= n % 10;		  
		  n=i;
		  b *= a;
	  }
	  printf("%d",b);
  	}	  	  
	  /*********End**********/ 
       return 0;
	}

第3关:C循环-求阶乘之和
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int n,sum=0,mul=1;
	  scanf("%d",&n);
	  if(n == 0) printf("1");
	  else if(n < 0) printf("0");
	  else
	  {
		for(int i=1;i <= n;i++)
	  	{
		  mul *= i;
		  sum += mul;
	  	}
	  	printf("%d",sum);
	  }
	  
	  /*********End**********/ 
       return 0;
	}

第4关:C循环-水仙花数
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int a,b,c,n;
	  for(int n=101;n<1000;n++)
	  {
		a = n%10;
	  	b = (n/10) % 10;
	  	c= (n/100) % 10;
	  	if((a*a*a + b*b*b + c*c*c) == n) printf("%d ",n);
	  }
 
	  /*********End**********/ 
       return 0;
	}

第5关:C循环-寻找完数
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int m,n,sum;
	  
	  for(int m=2;m<1000;m++)
	  {
		  sum = 1;
		  for(int n=2;n <= m/2;n++)
		  {
			  if(m % n==0) sum += n; 
		  }
		  if(sum == m) printf("%d\n",m);
	  }
	  
	  /*********End**********/ 
       return 0;
	}

第6关:分数求和
#include<stdio.h>
	int main(void)
	{  
	  /*********Begin*********/
	  int flag = -1;
	  double sum = 0;
	  for(int i=1;i<= 100;i++)
	  {
	  	if(i%2 != 0) sum += (1.0/i);	  	
	  	else sum += flag * (1.0/i);	  	
	  }
	  printf("%.3f",sum);
	  /*********End**********/ 
       return 0;
	}

第5部分 函数

5-1函数

第1关求和
#include<stdio.h>
//编写函数
/*********Begin*********/

/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int n,sum;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        sum += i;
    }
    printf("%d",sum);
    /*********End**********/ 
    return 0;
}

第2关:回文数计算
#include<stdio.h>
int solve(int n){   
 /*********Begin*********/  
    int i,j=0;
    i=n;
    while(i)
    {
        j = j*10 + i%10;
        i /= 10;
    }
    if(j==n) return 1;
    else return 0;
}
    /*********End**********/ 
int main(void)
{  
    for(int i=200;i<=3000;i++)
    {
        if(solve(i)) printf("%d\n",i);
    }   
   return 0;
}

第3关: 编写函数求表达式的值
#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
 
int main(void)
{  
    /*********Begin*********/
    int n;
    double sum=0,a=1,b=1;
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
    {
        if(i==0 || i==1) 
        a = 1;
        else 
        a *= i;
        b *= (2*i+1);
        sum += (double)a/b;  
    }
    printf("%.10f",sum);
    /*********End**********/ 
    return 0;
}

第4关:阶乘数列
#include<stdio.h>
//编写函数
/*********Begin*********/

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

第5关:亲密数
#include<stdio.h>
void solve(int a){
    /*********Begin*********/
    int b,n,i;
    for(b=0,i=1;i<=a/2;i++)  
            if(!(a%i))
                b=b+i;
        for(n=0,i=1;i<=b/2;i++ )  
            if(!(b%i))
                n=n+i;
        if(n==a&&a<b)           
            printf("(%d,%d)",a,b);  
    /*********End**********/ 
}
int main(void)
{  
    for(int a=1;a<3000;a++) 
    solve(a);
    return 0;
}

第6关:公约公倍数
#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
long long sum; 
long long GCD(long long x, long long y)
{
    long long i, k, m, n;
    sum = 1;
    k = x > y ? y : x;
    i = 2; 
    while (i <= k){
        m = x % i;
        n = y % i;
        if (m == 0 && n == 0){
            sum *= i;
            x /= i;
            y /= i;
            i = 2;
        }
        else
            i++;
    }    
    return sum;
}
/*********End**********/ 

//编写最小公倍数LCM函数
/*********Begin*********/
long long LCM(long long p, long long q)
{
    long long lc;
    lc = p * q / sum;
    return lc;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    long long a, b,hcf, lcm;
    scanf("%lld %lld", &a, &b);  
    if(a<0 || b<0 )  printf("Input Error");
    else
    {
        hcf = GCD(a, b);   //调用最大公约数函数
        lcm = LCM(a, b);   //调用最小公倍数函数
        printf("%lld %lld\n", hcf, lcm);   //输出最大公约数和最小公倍数
    }
    /*********End**********/ 
    return 0;
}

5-2递归函数、嵌套函数

第1关:递归求阶乘数列
#include<stdio.h>
long long solve(long long n){
    /*********Begin*********/
    long long alt = 1;
    for(int i=1;i<=n;i++){
        alt *= i;
    }    
    return alt;
   
    /*********End**********/
}
int main(void)
{
    long long n,sum;
    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>0) 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){
    int a;
    if(m==0&&n>0)
        /*********Begin*********/
    a = n + 1;
        /*********End**********/
    else if(n==0&&m>0)
        /*********Begin*********/
    a=Acm(m-1,1);
        /*********End**********/
    else
        /*********Begin*********/
    a=Acm(m-1,Acm(m,n-1));
        /*********End**********/
    return a;
}
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    printf("%d", Acm(m,n));
    return 0;
}

第6部分 数组

6-1一维数组和二维数组

第1关:排序问题
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int array[10];
    for(int i=0;i<10;i++)    
        scanf("%d",&array[i]);
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(array[i] >array[j])
            {
                int tmp = array[j];
                array[j]=array[i];
                array[i]=tmp;
            }
        }
    }
    for(int i=0;i<10;i++)
    {
        printf("%d ",array[i]);
    }
    /*********End**********/
    return 0;
}
第2关:查找整数
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int m,n;
    scanf("%d\n",&n);
    int array[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d ",&array[i]);
    }
    scanf("%d\n",&m);
    for(int i=0;i<n;i++)
    {
        if(m == array[i])
        {
            printf("%d",i+1);
            break;
        }
        if(i+1==n) printf("-1");                        
    }

    /*********End**********/
    return 0;
}
第三关:计算数组中元素的最大值
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int m=0,n=0;
    printf("Input m, n:");
    scanf("%d,%d",&m,&n);
    int array[m][n];
    printf("Input %d*%d array:\n",m,n);
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&array[i][j]);
        }
    }
    int max = array[0][0],row=1,col=1;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(max <array[i][j])
            {
                max = array[i][j];
                row = i+1;
                col = j+1;
            }
        }
    }
    printf("max=%d, row=%d, col=%d",max,row,col);
    /*********End**********/
    return 0;
}

6-2字符数组

第1关:字符逆序
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n;
    char str[100],C;
    scanf("%s",&str);
    n = strlen(str);
    for(int i=0,j=n-1;i<n/2;i++,j--)
    {
        C = str[i];
        str[i] = str[j];
        str[j] = C;
    }
    printf("%s",str);
    /*********End**********/
    return 0;
}
第2关:字符统计
#include<stdio.h>
int main(void)
{
  /*********Begin*********/
	
	char str[50][50];  
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)	
	scanf("%s",&str[i]);
	for(int i=0;i<n;i++)
	{
		int count=0;      
		for(int j=0;str[i][j]!='\0';j++){
			if(str[i][j]>='0'&&str[i][j]<='9'){
				count++; 
			}
		}   
							   
		printf("%d\n",count);
	}
    /*********End**********/
    return 0;
}
第3关:字符插入
#include <stdio.h>
#include <string.h>
int main(void)
{
    /*********Begin*********/
	int max,min,i,j;
	char a[100],b[100];
	gets(a);			
	gets(b);
	int m=strlen(a);
	int n=strlen(b);
	for(i=0;i<m;i++)
		if(a[min] > a[i])
		min = i;	
	for(i=0;i<n;i++)	
		if(b[max] < b[i])
		max = i;	
	for(j=m+1;j>min;j--)			
		a[j] = a[j-1];
		a[j+1] = b[max];	
	puts(a);
    /*********End**********/
    return 0;
}
第4关:字符串处理
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
	char s1[150],s2[150],s3[150];
	int f,m,n,i,j=0,k=0;
	gets(s1);
	gets(s2);
	scanf("%d",&f);
	m=strlen(s1);
	n=strlen(s2);
	for(i=f;i<m;i++)
	{
		s3[k++]=s1[i];
	}
	for(i=f;i<n+f+1;i++)
	{
		s1[i]=s2[j++];
	}
	strcat(s1,s3);
	s1[m+n]='\0';
	printf("%s",s1);
    /*********End**********/
    return 0;
}
第5关:字符串统计
#include<stdio.h>
#include <string.h>
#define N 1024
char s[N + 1], t[N + 1];
int main(void)
{
    /*********Begin*********/
    fgets(s, N, stdin);
    for(;;) {
        if(strncmp(s, "stop", 4) == 0 && s[4] == '\n')
            break;
        int sum = 0, maxlen = 0;
        char *p;
        p = strtok(s, " \t\n");
        while(p) {
            int len = strlen(p);
            if(len > maxlen) {
                maxlen = len;
                strcpy(t, p);
            }
            sum += len;
            p = strtok(NULL, " \t\n");
        }
        printf("%d %s\n", sum, t);
        fgets(s, N, stdin);
    }
    /*********End**********/
    return 0;
}

第6关:字符串排序
#include<stdio.h>
#include<string.h> 
int main()
{
    char a[85],b[85],c[85],t[85];         
    while(gets(a)!=NULL)
    {
        gets(b);
        gets(c);
        if(strcmp(a,b)>0)
        {
            strcpy(t,a);
            strcpy(a,b);
            strcpy(b,t);
        }
        if(strcmp(a,c)>0)
        {
            strcpy(t,a);
            strcpy(a,c);
            strcpy(c,t);
        }
        if(strcmp(b,c)>0)
        {
            strcpy(t,b);
            strcpy(b,c);
            strcpy(c,t);
       }
       puts(a);
       puts(b);
       puts(c);
   }
return 0;
}

第7部分 指针

7-1指针

第1关:用指针法输入12个整数,然后按每行4个数输出
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int a[12],n,i;
    int *p=a;
    for(n=0;n<12;n++)
    {
        scanf("%d",p++);
    }        
    p=a;
    i=1;
    for(n=0;n<12;n++){
        if((n+1)/4==i){
            printf("%d",*p);
        }
        else {
            printf("%d ", *p);
        }
        p++;
        if((n+1)/4==i){
            if (i==3){
                break;
            }
            printf("\n");
            i++;
        }
    }
    /*********End**********/
    return 0;
}
第2关:对输入的两个整数a,b,用指针变量作为函数参数,交换a和b的值。
#include<stdio.h>
/*********Begin*********/

int main(void)
{
	int a,b;
	scanf("%d%d",&a,&b);
	/*********Begin*********/
	int *p1,*p2;
	p1 = &b;
	p2 = &a;
	printf("%d ",*p1);
	printf("%d",*p2);

	/*********End**********/
    return 0;
}
第3关:报数
#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n;
    int a[1000];
    scanf("%d",&n);
    int b = n;
    int c = 0;
    for (int i = 1; i <= n; i++)
    {
        a[i] = 1;
    }
    for (int i = 1;;i++)
    {
        if (i == (n + 1))
            i = 1;
        if (a[i] == 1)
        {
            c++;
        }
        else
            continue;
        if (c % 3 == 0)
        {
            a[i] = 0;
            b--;
        }
        if (b == 1)
            break;
    }
    for (int i = 1; i <= n; i++)
    {
        if (a[i] == 1)
        printf("%d\n", i);
    }
    /*********End**********/
    return 0;
}
第4关:strcmp函数(后续跟进;代码不完整)
#include<stdio.h>
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;
}

7-2指针进阶

第一关:读入n(1 <= n <= 1000)个学生的成绩,成绩都为整数,用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数,指针作为函数返回值。
#include<stdio.h>
/*********Begin*********/
int *Max(int array[], int n){
    int max=array[0];
    int *p;
    for(int i=0;i<n;i++){
        if(max<array[i])
        max = array[i];
    }
    p = &max;
    return p;
}

/*********End**********/
int main(void)
{
    int n,s[110];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&s[i]);
    int ans;
	/*********Begin*********/
    int *p;
    p = Max(s,n);
    ans = *p;

	/*********End**********/
    printf("%d",ans );
    return 0;
}
第2关:采用指针变量表示地址的方法输入输出数组中的个元素
#include<stdio.h>
int main(void)
{
	/*********Begin*********/
	int n,*p;
	scanf("%d",&n);
	int array[n];
	for(int i=0;i<n;i++){
		scanf("%d",&array[i]);
	}
	p = &array[0];
	for(int i=0;i<n;i++){
		if(i+1 == n) printf("%d",*(p+i));
		else printf("%d ",*(p+i));
		
	}
	/*********End**********/
    return 0;
}
第3关:用指针实现数组循环移动
#include<stdio.h>
int *solve(int *s,int n,int m){
    /*********Begin*********/


    /*********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*********/

    /*********End**********/
    for(int i=0;i<n;i++){
        if(i==0)    printf("%d",*ans++ );
        else    printf(" %d",*ans++ );
    }
    return 0;
}

第8部分 结构体

8-1结构体

第1关:结构体变量的初始化和引用
#include<stdio.h>
/*********Begin*********/
struct{
    long num;
    char name[10];
    int score;
}student[2];
int main()
{
    for(int i=0;i<2;i++)
    {
        scanf("%ld %s %d",&student[i].num,&student[i].name,&student[i].score);
    }
    if(student[0].score>student[1].score)
        printf("%ld %s %d",student[0].num,student[0].name,student[0].score);
    else printf("%ld %s %d",student[1].num,student[1].name,student[1].score);
    
    return 0;
}
/*********End*********/
第2关:结构体排序
#include<stdio.h>
#include<stdlib.h>//头文件 
#define N 200
struct student 
{
  int num; 
  char name[20]; 
  int score; 
};
int main()
{
  struct student stu[N];
  struct student t;
  int i,j,k,n;
  scanf("%d",&n); 
  for(i=0;i<n;i++)
  {
  	scanf("%d%s%d\n",&stu[i].num,stu[i].name,&stu[i].score);
  }
  for(i=0;i<n;i++)
  {
    k=i;
    for(j=i+1;j<n;j++)
    {
      if(stu[j].score>stu[k].score)
      {
        k=j;
      } 
    } 
    t=stu[k];
    stu[k]=stu[i];
    stu[i]=t;
  }
  for(i=0;i<n;i++)
  {
    printf("%d %s %d\n",stu[i].num,stu[i].name,stu[i].score);
  } 
  return 0;
}
第3关:结构体存储数据
#include <stdio.h>
#include <string.h>
struct Person             //声明结构体
{
	char name[20];
	int count;
}leader[3]={"Li",0,"Zhang",0,"Sun",0};   //定义结构体数组并初值化
int main()
{
	int i,j,n;
	scanf("%d",&n);
	char leader_name[20];
	for(i=0;i<n;i++)
	{
		scanf("%s",leader_name);
		for(j=0;j<3;j++)
		{
			if(strcmp(leader_name,leader[j].name)==0)
				leader[j].count++;
		}
	}
	for(i=0;i<3;i++)
	{
		printf("%s:%d\n",leader[i].name,leader[i].count);
	}
	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*********/
	int i;
	for(i = 0;i < Count;i++)
		if(strcmp(s[i].name, name) == 0)
		{
			s[i].sum = s[i].math + s[i].english + s[i].chinese;
			print(s[i]);
		}
    /*********End**********/
}

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

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;
	}
	/*********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);
	students[i].sum = 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;
}

第9部分 文件

第1关:HelloWorld

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

第2关:文件读取和写入

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

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

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

#include<stdio.h>
void solve(){
/********** Begin *********/
    int count=0;
    char ch;
    FILE *fp = fopen("a.txt","r");   
    while(1)
    {
        ch=fgetc(fp);
        if(ch == EOF) break;
        if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
        count++;
    }
    fclose(fp);
    printf("%d",count);
    
/********** End **********/
}

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

#include<stdio.h>
void solve(char s[]){
/********** Begin *********/
    FILE *fp = fopen("a.txt", "r");
    int n;
    char line[20], a[100];
    for (n = 0; n < 9; n++) {
        fgets(line, 12, fp);
        fgets(a, 100, fp);
        if (strcmp(s, line) == 0) {
            printf("%s%s", line, a);
            fclose(fp);
            break;
        }
        if (n == 8) {
            printf("Not Found!");
        }
    }

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

结尾

博主狂肝一个周,今天终于完成了,在这里,感谢各位遇见,大家有什么想法可以在下面评论或者私信博主,希望博主自己写的对大家有所帮助!!!
最后感谢你的观看,我是北聖,大家也可以去看看博主写的剑指offer题,里面是后期面试可能会问到的算法题,里面也有许多解析思路和归纳。相信大多数看博主的这篇文章都是刚接触C语言或者博主一样重新学习C的,博主也是学C的时候没有认真学习,到现在,慢慢的弥补自己C的漏洞。说一下博主对此的理解,博主之前看小甲鱼的视频理解最深的就是认为语言知识一门工具,重要的是理解其中的思想,所以,大家把C学好了其他语言学起来也是相当快的。
博主下一节准备复习的也是大二学习的数据结构,欢迎大家一起来监督学习。
祝各位小伙伴越来越优秀,越来越好!!!

  • 67
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值