C语言程序设计

  • 写在前面的话——点 点赞,关注和收藏吧!!!
  • 狂肝一个周终于结束了!
  • 第1部分 熟悉C语言程序编辑与调试环境
    • 第1关打印输出 Hello World
      • 思路
    • 第2关:打印输出图形
      • 思路
    • 第3关:求3个数的最大值
      • 思路
    • 第4关:熟悉C语言调试过程
      • 思路
  • 第2部分 顺序结构程序设计
    • 第1关:加法运算
      • 思路
    • 第2关:不使用第3个变量,实现两个数的对调
      • 思路
    • 第3关:用宏定义常量
      • 思路
    • 第4关:数字分离
      • 思路
    • 第5关:计算总成绩和平均成绩
    • 第6关:求三角形的面积
    • 第7关:立体几何计算题
    • 第8关:计算两个正整数的最大公约数
  • 第3部分 选择结构程序设计
    • 3-1选择结构程序设计
      • 第1关:排序
      • 第2关:选择结构-闰年判断
      • 第3关:选择结构-分段函数问题
      • 第4关:学生成绩等级换算
    • 3-2选择结构程序设计进阶
      • 第1关:快递费用计算
      • 第2关:计算一元二次方程的根
      • 第3关:产品信息格式化
  • 第4部分 循环结构程序设计
    • 4-1循环结构程序设计1
      • 第1关小球自由落体运动
      • 求解出n以内(包含n)所有能被5整除的正整数数的乘积s。
      • 第3关:最大公约数和最小公倍数
      • 第4关:字符串中各类字符数的统计
      • 第5关:求sn=a+aa+aaa+aaaa+......的值
    • 4-2循环结构程序设计2
      • 第1关:C循环-求平均成绩
      • 第2关:C循环-求各位数字之积
      • 第3关:C循环-求阶乘之和
      • 第4关:C循环-水仙花数
      • 第5关:C循环-寻找完数
      • 第6关:分数求和
  • 第5部分 函数
    • 5-1函数
      • 第1关求和
      • 第2关:回文数计算
      • 第3关: 编写函数求表达式的值
      • 第4关:阶乘数列
      • 第5关:亲密数
      • 第6关:公约公倍数
    • 5-2递归函数、嵌套函数
      • 第1关:递归求阶乘数列
      • 第2关:递归实现输出一个整数的逆序
      • 第3关:将整数递归转换成字符串
      • 第4关:递归实现Ackman函数
  • 第6部分 数组
    • 6-1一维数组和二维数组
      • 第1关:排序问题
      • 第2关:查找整数
      • 第三关:计算数组中元素的最大值
    • 6-2字符数组
      • 第1关:字符逆序
      • 第2关:字符统计
      • 第3关:字符插入
      • 第4关:字符串处理
      • 第5关:字符串统计
      • 第6关:字符串排序
  • 第7部分 指针
    • 7-1指针
      • 第1关:用指针法输入12个整数,然后按每行4个数输出
      • 第2关:对输入的两个整数a,b,用指针变量作为函数参数,交换a和b的值。
      • 第3关:报数
      • 第4关:strcmp函数(后续跟进;代码不完整)
    • 7-2指针进阶
      • 第一关:读入n(1 <= n <= 1000)个学生的成绩,成绩都为整数,用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数,指针作为函数返回值。
      • 第2关:采用指针变量表示地址的方法输入输出数组中的个元素
      • 第3关:用指针实现数组循环移动
  • 第8部分 结构体
    • 8-1结构体
      • 第1关:结构体变量的初始化和引用
      • 第2关:结构体排序
      • 第3关:结构体存储数据
      • 第4关:结构体存储学生信息
  • 第9部分 文件
    • 第1关:HelloWorld
    • 第2关:文件读取和写入
    • 第3关:统计文本字母数量
    • 第4关:读取文件中指定学生信息
  • 结尾

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

狂肝一个周终于结束了!

点 点赞和关注吧!!!
博主在尽力的补代码和思路;
里面包含了自己学习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 30int 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.14int 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;}elsei++;}    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);elseprintf("%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++;}elsecontinue;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);elseprintf("%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学好了其他语言学起来也是相当快的。
博主下一节准备复习的也是大二学习的数据结构,欢迎大家一起来监督学习。
祝各位小伙伴越来越优秀,越来越好!!!

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

  1. 第1部分 C语言程序设计编辑与调试环境

    C语言程序设计编辑与调试环境 第1关:打印输出 Hello World 任务描述 本关任务:通过运行一个C语言程序,让你初步了解程序的运行方法. 相关知识(略) 编程要求 请补充Begin-End之间 ...

  2. c语言程序设计编辑与调试环境实验报告,01程序设计基础实验报告_C语言程序设计基础.doc...

    01程序设计基础实验报告_C语言程序设计基础 程序设计基础 实验报告 题 目: C语言程序设计基础 院 (部): 管理工程学院 专 业: 信息管理与信息系统 班 级: 信管101 姓 名: 张三 学 ...

  3. java语言程序设计教程第三版答案,看完跪了

    01 如何理解高并发? 高并发意味着大流量,需要运用技术手段抵抗流量的冲击,这些手段好比操作流量,能让流量更平稳地被系统所处理,带给用户更好的体验. 我们常见的高并发场景有:淘宝的双11.春运时的抢票 ...

  4. mysql查姓名中既有a也有e的姓_mysql查询初级练习题(已更完)

    这些初级题应该算是入了sql查询的门了吧?但是很多性能问题还是不清楚,太多知识有欠缺,一点一点来吧. 第一题 create table student( Id int(10) not null aut ...

  5. 在c语言中调试作用是什么,调试技术在C语言程序设计教学中作用探讨.doc

    调试技术在C语言程序设计教学中作用探讨 调试技术在C语言程序设计教学中作用探讨 摘要:C语言程序设计是计算机相关专业的一门重要课程,但是在实际教学中该课程的教学效果并不能令人满意.本文认为学生没有掌握 ...

  6. c语言考试成绩评价规则编程,上海市高等学校计算机二级C语言程序设计考试大纲.doc...

    上海市高等学校计算机二级C语言程序设计考试大纲.doc 上海市高等学校计算机二级C语言程序设计考试大纲上海市高等学校计算机等级考试(二级)C 程序设计考试大纲上海市高等学校计算机等级考试(二级)C 程 ...

  7. java判断闰年通过多态方法_04748《Java语言程序设计》实验指导书.doc

    04748<Java语言程序设计>实验指导书.doc Java语言程序设计 实验指导书 前言 一.上机实验目的 上机实验的目的是提高学生的分析问题.解决问题的能力和动手能力,通过实践环节理 ...

  8. c语言考试编程题万能公式,C语言程序设计历年统考试题集10套含答案(可编辑)

    <C语言程序设计历年统考试题集10套含答案(可编辑)>由会员分享,可在线阅读,更多相关<C语言程序设计历年统考试题集10套含答案(可编辑)(39页珍藏版)>请在人人文库网上搜索 ...

  9. c语言程序竞赛,2015年江西理工大学C语言程序设计竞赛(初级组)

    JankTao相亲记 解法:排序 #include #include #include #include #include #include #include #include using names ...

最新文章

  1. Python3中typing模块介绍
  2. 5、python学习之变量
  3. DB1:数据库的创建和文件的修改
  4. VisualBox中增大linux硬盘空间的方法
  5. ic5141运行出现cannot compile ahdlcmi module解决方案
  6. devexpress textedit调整文字何文本框的间距_手把手教学:用PPT做效果超赞的文字效果...
  7. bigdecimal保留4位小数_四年级数学小数的加减乘法知识点汇总,带练习!
  8. 一个优秀的程序员应该如何提高工作效率?
  9. RPC failed; curl 56 SSLRead() return error -9806
  10. stm32 SSI读编码器
  11. SQL Server2012安装教程
  12. ict中的it和ct_ICT.Social – IT专业人员的社交网络
  13. 纳米软件案例之陶瓷样品测试系统,原位观察力学测试纳米压痕仪-扫描电子显微镜SEM联用...
  14. windows无法访问 计算机打印机,windows无法打开添加打印机解决方法
  15. c语言1000万位圆周率,如何设计C语言程序输出圆周率小数点后的1000位?请大侠出手啊。...
  16. Google Earth Engine(GEE)——估计未来人口密度(越南2100年人口预测)
  17. WEBI上取月的整周
  18. 前端学习笔记之——使用边框和背景
  19. 鲁大师怎么查看cpu风扇转速|用鲁大师查看cpu风扇转速的方法
  20. Android之ListView展示多类型的条目

热门文章

  1. 开关电源学习——基本元件之电容
  2. 第七天你知道TLE是什么了吗(特别感谢英雄哥友情出演
  3. 关于 pygame中,检测按键按下
  4. 你真的了解DBA这份工作吗?
  5. Java计算两个日期相差的月数
  6. 拿了北京户口!却是跌落的开始....
  7. 如何一秒明白请求转发和重定向?
  8. 计算格林函数的Lanczos算法
  9. 定时循环发送TCP消息(例如:控制设备的开关机等场景)—— 定时执行专家
  10. 【OPC UA】C# 通过OpcUaHelper建立OPC客户端访问KEPServerEx6 OPC服务器数据