鱼C论坛

 找回密码
 立即注册
查看: 3026|回复: 3

[学习笔记] 学习记录,从0开始

[复制链接]
发表于 2015-11-10 17:15:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  今年9月中旬接触C语言,计算机专业学生。
  说来也是缘分。高考分数很理想,却因为报考的大学太热门没进到学校的王牌专业“建筑规划”。
  九月前几乎没接触过编程(高二的时候玩网游用过按键精灵...)。自认为为0基础的自己会跟不上学校的学习节奏,就百度了入门经验,晚上捧着网友推荐的《C Primer Plus》看(那时学校还没发教材)。看是看书实在太枯燥了进度几乎为0,直到后来机缘巧合之下发现了小甲鱼的C语言教学视屏,又通过视屏了解到论坛。
      看视屏学习进度飞快,现在已经能做出贪吃蛇了,哈哈。到了程序设计课都想翘掉,觉得学校课太慢了。(学校也有视屏,但是学校的MOOC视屏简直就是惨不忍睹...和有声教材读物没啥区别)
      我会把我每天的进度放在这,同时还有问题和笔记等。
      ps.不知道会不会放错板块。板块中没发现长期的记录贴,这不算水贴吧?楼下补上11.10之前的学习记录。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
Minhal + 5 + 5 + 2 加油!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-11-10 17:28:32 | 显示全部楼层
本帖最后由 小墨hacker 于 2015-11-10 17:31 编辑

已经记不得什么了,全是翻文件看看,所以这一部分应该会比较模糊。
9月中旬下旬熟悉输入输出等,练习有单位转换,计算面积,字符串输入输出……
9月下旬接触选择结构。
十月上旬接触简单的子函数及调用(...没按顺序学,我比较贪心,总是翻看后面部分的内容看到不懂就度娘。所以学习的内容基本都是零碎的...到了后来总有东西看不懂,没办法又系统得看了一遍小甲鱼的视屏。希望和我一样刚刚开始学的朋友引以为戒。)
十月中旬看到网友发在贴吧的OX棋思路,也开始边学边做。(其中学了数组、循环等)一个程序边学边做整整做了5天...
  1. #include<stdio.h>
  2. const int KONG=0;
  3. const int PLAYER1=1;
  4. const int PLAYER2=2;
  5. const int *game[3][3]={&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG,&KONG};
  6. int luoZi_hang;
  7. int luoZi_lie;
  8. void QiPan()
  9. {
  10.         int hang;
  11.         int lie;
  12.         for(hang=1;hang<=3;hang++)
  13.         {
  14.                 for(lie=1;lie<=3;lie++)
  15.                 {
  16.                         if(*game[hang-1][lie-1]==KONG)
  17.                         {
  18.                                 printf("*");
  19.                         }
  20.                         else if(*game[hang-1][lie-1]==PLAYER1)
  21.                         {
  22.                                 printf("O");
  23.                         }
  24.                         else if(*game[hang-1][lie-1]==PLAYER2)

  25.                         {
  26.                                 printf("X");
  27.                         }
  28.                         if(lie==3)
  29.                         {
  30.                                 printf("\n");
  31.                         }
  32.                 }
  33.         }
  34. }
  35. void player(const int &per)
  36. {
  37.         int luoJi;
  38.         printf("请玩家%d落子,请输入:\n",per);
  39.         printf("行:");
  40.         luoJi=scanf("%d",&luoZi_hang);
  41.         for(;luoJi!=1||luoZi_hang>3;)
  42.         {
  43.                 printf("输入错误,请重新输入:");
  44.                 scanf("%d",&luoZi_hang);
  45.         }
  46.         printf("列:");
  47.         luoJi=scanf("%d",&luoZi_lie);
  48.         for(;luoJi!=1||luoZi_lie>3;)
  49.         {
  50.                 printf("输入错误,请重新输入:");
  51.                 scanf("%d",&luoZi_lie);
  52.         }
  53.         for(;*game[luoZi_hang-1][luoZi_lie-1]!=KONG;)
  54.         {
  55.                 printf("该处以落子请重新输入!\n");
  56.                 printf("行:");
  57.                 luoJi=scanf("%d",&luoZi_hang);
  58.                 for(;luoJi!=1||luoZi_hang>3;)
  59.                 {
  60.                         printf("输入错误,请重新输入:");
  61.                         scanf("%d",&luoZi_hang);
  62.                 }
  63.                 printf("列:");
  64.                 luoJi=scanf("%d",&luoZi_lie);
  65.                 for(;luoJi!=1||luoZi_lie>3;)
  66.                 {
  67.                         printf("输入错误,请重新输入:\n");
  68.                         scanf("%d",&luoZi_lie);
  69.                 }
  70.         }
  71.         game[luoZi_hang-1][luoZi_lie-1]=&per;
  72. }
  73. int win(int p)
  74. {
  75.         int num;//相连子个数
  76.         int a=1;

  77.         for(a=1,num=1;luoZi_hang-1+a<=2&&*game[luoZi_hang-1+a][luoZi_lie-1]==p;a++)//检测纵向胜利条件
  78.         {
  79.                 num++;

  80.         }
  81.         for(a=-1;luoZi_hang-1+a>=0&&*game[luoZi_hang-1+a][luoZi_lie-1]==p;a--)
  82.         {
  83.                 num++;
  84.         }
  85.         if (num==3)
  86.         {
  87.                 printf("\n玩家%d胜利-",p);
  88.                 return 1;
  89.         }

  90.         for(num=1,a=1;luoZi_hang-1+a<=2&&*game[luoZi_hang-1][luoZi_lie-1+a]==p;a++)//检测横向胜利条件
  91.         {
  92.                 num++;
  93.         }
  94.         for(a=-1;luoZi_hang-1+a>=0&&*game[luoZi_hang-1][luoZi_lie-1+a]==p;a--)
  95.         {
  96.                 num++;
  97.         }
  98.         if (num==3)
  99.         {
  100.                 printf("\n玩家%d胜利|",p);
  101.                 return 1;
  102.         }
  103.         for(num=1,a=1;luoZi_hang-1+a<=2&&luoZi_lie-1+a<=2&&*game[luoZi_hang-1+a][luoZi_lie-1+a]==p;a++)//检测\方向胜利条件
  104.         {
  105.                 num++;
  106.         }
  107.         for(a=-1;luoZi_hang-1+a>=0&&luoZi_lie-1+a>=0&&*game[luoZi_hang-1+a][luoZi_lie-1+a]==p;a--)
  108.         {
  109.                 num++;
  110.         }
  111.         if (num==3)
  112.         {
  113.                 printf("\n玩家%d胜利\",p);
  114.                 return 1;
  115.         }
  116.         for(num=1,a=1;luoZi_hang-1-a>=0&&luoZi_lie-1+a<=2&&*game[luoZi_hang-1-a][luoZi_lie-1+a]==p;a++)//检测/方向胜利条件
  117.         {
  118.                 num++;
  119.         }
  120.         for(a=-1;luoZi_hang-1-a<=2&&luoZi_lie-1+a>=0&&*game[luoZi_hang-1-a][luoZi_lie-1+a]==p;a--)
  121.         {
  122.                 num++;
  123.         }
  124.         if (num==3)
  125.         {
  126.                 printf("\n玩家%d胜利/",p);
  127.                 return 1;
  128.         }
  129.         else//返回无胜负的返回值
  130.         {
  131.                 return 0;
  132.         }
  133. }
  134. int main()
  135. {
  136.         int lunCi;
  137.         int w=0;
  138.         QiPan();
  139.         for(lunCi=1;lunCi<=9&&w==0;lunCi++)
  140.         {
  141.                 if(lunCi%2==1)
  142.                 {
  143.                         player(PLAYER1);
  144.                         QiPan();
  145.                         w=win(PLAYER1);
  146.                 }
  147.                 if(lunCi%2==0)
  148.                 {
  149.                         player(PLAYER2);
  150.                         QiPan();
  151.                         w=win(PLAYER2);
  152.                 }       
  153.         }
  154.         if (w==0)
  155.                 printf("\n平局");
  156.         return 0;
  157. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 17:44:40 | 显示全部楼层
找不到最开始的程序了,这是十月下旬后来学指针的时候回来改的。
零散的学习进度很快,基本一个月就学到函数、指针这部分。但是弊端也是极其严重,楼主当时连什么是形参实参都不知道(还有全局参数等等,之前依葫芦画瓢没问题,自己一改加入指针部分就疯狂报错。自己还作死加了常量,又弄混了常量指针和指针常量...5555)
后来下旬的时候就开始刷视屏了,把漏洞都补上,感觉这样学特别浪费时间。
当时连DEBUG都不知道,为了检查哪出错了在函数里狂加printf检测各个变量...被自己蠢哭。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-10 17:51:32 | 显示全部楼层
本帖最后由 小墨hacker 于 2015-11-11 10:24 编辑

感觉这一段学习过程中除了学习C语言外主要就是三个部分:
1.看懂编译器报错是哪错了,错了什么。(本人英文不好,都是度娘的。错多了自然就记住了)
2.==和=弄混(没有比这更蛋疼的了)后来有学校的师兄提出建议就是(3==a)把变量放右边,现在基本解决。
3.DEBUG!!!很重要但是不难。
大概就是这些,菜鸟厚颜无耻的分享经验全当抛砖引玉,欢迎大神支出错误的地方(包括之前及之后的内容)。
随后就是一边熟悉之前内容,一边做些小程序。
11月初接触图形库,做了贪吃蛇。(贪心的楼主还是没办法改掉坏习惯,有是边做边学结构体、随机数、图形库画图等。度娘了链表由于完全看不懂动态链表,所以程序还是用了静态。图形库是EGE)
  1. #include <graphics.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #define NULL 0
  6. #define UP 1
  7. #define DOWN 2
  8. #define LEFT 3
  9. #define RIGHT 4
  10. int dir=RIGHT;
  11. int num;
  12. char direct;
  13. struct link//定义蛇坐标(最大长度为60,不足部分为0,显示部分为1)
  14. {
  15.         int x;
  16.         int y;
  17.         int state;//0隐藏1显示
  18.         struct link *next;
  19. }snack[60];
  20. struct link *head=&snack[0];
  21. struct link *p;
  22. struct loca
  23. {
  24.         int x;
  25.         int y;
  26.         int state;//没被吃为1,被吃为0
  27. }food;
  28. void initLink()
  29. {
  30.         int l;
  31.         for(l=0;l<=1;l++)
  32.         {
  33.                 snack[l].next=&snack[l+1];
  34.         }
  35. }
  36. void initSnack()
  37. {
  38.         int i;
  39.         for(i=0;i<=2;i++)
  40.         {
  41.                 snack[i].x=400-(i-1)*10;
  42.                 snack[i].y=300;
  43.                 snack[i].state=1;
  44.         }

  45. }
  46. void initFood()
  47. {
  48.         srand((unsigned int)time(NULL));
  49.         food.x=rand()%80*10;
  50.         food.y=rand()%60*10;
  51.         food.state=1;
  52. }
  53. void drawSnack()
  54. {
  55.         p=head;
  56.         for(;p!=NULL;)
  57.         {       
  58.                 setfillcolor(RED);
  59.                 bar(p->x-4, p->y-4, p->x+4, p->y+4);
  60.                 p=p->next;
  61.         }

  62. }
  63. void funcFood()
  64. {
  65.         if(food.state==0)
  66.         {
  67.                 food.state=1;
  68.                 food.x=rand()%80*10;
  69.                 food.y=rand()%60*10;
  70.         }
  71.         setfillcolor(RED);
  72.         bar(food.x-4,food.y-4,food.x+4,food.y+4);
  73.         if(head->x==food.x&&head->y==food.y)//吃到食物,尾不变,加头
  74.         {
  75.                 num++;
  76.                 food.state=0;
  77.                 snack[num-1].next=head;
  78.                 head=&snack[num-1];
  79.         }
  80.         else//没吃食物尾变头
  81.         {
  82.                 p=head;
  83.                 int aa;
  84.                 for(aa=1;aa<=num-2;aa++)//p指向倒数第二个链节
  85.                 {
  86.                         p=p->next;
  87.                 }
  88.                 p->next->next=head;//尾变头
  89.                 head=p->next;
  90.                 p->next=NULL;//完成
  91.         }
  92. }
  93. void die()
  94. {
  95.                 if(head->x<0||head->y<0||head->x>800||head->y>600)
  96.                         goto stop;
  97.                 else
  98.                 {
  99.                         p=head->next;
  100.                         for(;p!=NULL;)
  101.                         {
  102.                                 if(head->x==p->x&&head->y==p->y)
  103.                                 {
  104.                                         goto stop;
  105.                                 }
  106.                                 p=p->next;
  107.                         }
  108.                 }
  109.                 p=head;
  110.                 if(0)
  111.                 {
  112. stop:                for(;1;)
  113.                                 getch;
  114.                 }
  115. }
  116. void move()
  117. {
  118.         for(num=3;num<=60;)
  119.         {
  120.                 drawSnack();
  121.                 funcFood();
  122.                 if(kbhit())
  123.                 {
  124.                         direct=getch();
  125.                         if(direct=='a'&&dir!=RIGHT)
  126.                         {
  127.                                 dir=LEFT;
  128.                         }
  129.                         else if(direct=='d'&&dir!=LEFT)
  130.                                 dir=RIGHT;
  131.                         else if(direct=='w'&&dir!=DOWN)
  132.                                 dir=UP;
  133.                         else if(direct=='s'&&dir!=UP)
  134.                                 dir=DOWN;
  135.                 }
  136.                 if(dir==RIGHT)
  137.                 {
  138.                         head->x=head->next->x+10;
  139.                         head->y=head->next->y;
  140.                 }
  141.                 else if(dir==LEFT)
  142.                 {
  143.                         head->x=head->next->x-10;
  144.                         head->y=head->next->y;
  145.                 }
  146.                 else if(dir==UP)
  147.                 {
  148.                         head->y=head->next->y-10;
  149.                         head->x=head->next->x;
  150.                 }
  151.                 else if(dir==DOWN)
  152.                 {
  153.                         head->y=head->next->y+10;
  154.                         head->x=head->next->x;
  155.                 }
  156.                 Sleep(100);
  157.                 die();
  158.                 setfillcolor(BLACK);
  159.                 bar(0,0,800,600);
  160.         }
  161. }
  162. int main()
  163. {
  164.         initLink();//蛇链表创立
  165.     initgraph(800, 600);
  166.         initSnack();//初始化蛇的位置、长度
  167.         initFood();//初始化食物
  168.         move();//蛇
  169.         closegraph();
  170.         return 0;
  171. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-15 18:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表