A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

从今天起,跟着基础班视频学习。开贴记录点滴进步。Fight!

22 个回复

倒序浏览
本帖最后由 一笑奈_UTPa1 于 2016-1-10 20:07 编辑

占楼








更多图片 小图 大图
组图打开中,请稍候......

点评

day1  发表于 2016-1-9 17:27
回复 使用道具 举报
学习课程:第8天c语言数组,改变整型变量的符号
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     //学完该知识后给自己出了一道题
  5.     //question:输出某种类型的变量所能表示的最大范围,以short int为例
  6.     /*
  7.      0:00000000 00000000
  8.      1:00000000 00000001
  9.      0-1:11111111 11111111 因为定义为无符号的,所以值为65535
  10.      */
  11.     unsigned short  num=0-1;
  12.     printf("该类型的变量的范围为负%u到正%u",(num/2+1),num/2);
  13.     return 0;
  14. }
复制代码
回复 使用道具 举报
  1. #include <stdio.h>
  2. /*
  3. 学习课程:day8数组遍历
  4. 程序目标:用户输入数组长度,构建数组。然后从键盘输入数值给数组初始化。最后输出打印。
  5. 重难点分析:数组长度是用户输入的值,是动态变化的。需要注意的是数组只能采用先定义后初始化的方式。如采用int arr[len]={0};会报错
  6. */
  7. int main(int argc, const char * argv[]) {
  8.     //接受用户输入的长度
  9.     int len=0;
  10.     printf("请输入要创建的数组长度");
  11.     scanf("%d",&len);
  12.     //创建长度为len的数组,此时均为垃圾数
  13.     int arr[len];
  14.     //接受用户输入的数值
  15.     for(int i=0;i<len;i++)
  16.     {
  17.         printf("请输入第%d个整数",i+1);
  18.         scanf("%d",&arr[i]);
  19.     }
  20.     //遍历数组,并打印出来
  21.     for(int i=0;i<len;i++)
  22.     {
  23.         printf("%d\n",arr[i]);
  24.     }
  25. }
复制代码
回复 使用道具 举报
  1. #include <stdio.h>

  2. /*
  3. 学习课程:冒泡排序
  4. 思想:从第一个数开始,依次和下一个数进行比较,若大于下一个,则进行交换。(大数下沉,小数上浮)。实现过程中使用两重循环,需要注意的是第二重循环的终止条件为j<len-1-i (-1是排除自己)因为针对第i个数来说,已经有i个数下沉到后面去了,确定是大的数,所以不用和他们进行比较,从而提高程序效率。
  5. 实战:用户给定一个数组的长度以及数组,进行冒泡排序后打印输出。
  6. */
  7. void bubbleSort(int arr[],int len)
  8. {
  9.     //传入数组以及数组长度
  10.     for(int i=0;i<len;i++)
  11.     {
  12.         int temp=0;
  13.         for(int j=0;j<len-i-1;j++)
  14.         {
  15.             if(arr[j]>arr[j+1])//大的下沉
  16.             {
  17.                 temp=arr[j];
  18.                 arr[j]=arr[j+1];
  19.                 arr[j+1]=temp;
  20.             }
  21.         }
  22.     }
  23. }
  24. int main(int argc, const char * argv[]) {
  25.     //数组的长度
  26.     int len=0;
  27.     printf("请依次输入要进行排序的数字个数以及具体数字,以空格隔开");
  28.     scanf("%d",&len);
  29.     //构建数组
  30.     int arr[len];
  31.     //初始化
  32.     for(int i=0;i<len;i++)
  33.     {
  34.         scanf("%d",&arr[i]);
  35.     }
  36.     //进行冒泡排序
  37.     bubbleSort(arr,len);
  38.     for(int i=0;i<len;i++)
  39.     {
  40.         printf("%d\n",arr[i]);
  41.     }
  42.     return 0;
  43. }
复制代码
回复 使用道具 举报
本帖最后由 一笑奈_UTPa1 于 2016-1-10 18:56 编辑
  1. #include <stdio.h>

  2. /*
  3. 学习课程:选择排序
  4. 思想:从第一个数开始,和所有的数进行比较,中途若发现比自己小的,择交换数值。和冒泡排序类似的地方是,冒泡经过一趟后,数组最后的是确定的,而选择从数组的第一个值开始,先确定第1个,再确定第2个。和冒泡不同的是,冒泡一趟后,两两之间传递变化,而选择只选取需确定的那位和比他大的那位进行交换,有跳跃性。关键代码:j=i+1 前i个已经排列好,无需比较;a[i]>a[j]
  5. 实战:用户给定一个数组的长度以及数组,进行选择排序后打印输出。
  6. */
  7. void selectSort(int arr[],int len)
  8. {
  9.     //传入数组以及数组长度
  10.     for(int i=0;i<len;i++)
  11.     {
  12.         int temp=0;
  13.         //j=i+1 前i个已经排列好,无需比较
  14.         for(int j=i+1;j<len;j++)
  15.         {
  16.             if(arr[i]>arr[j])
  17.             {
  18.                 temp=arr[i];
  19.                 arr[i]=arr[j];
  20.                 arr[j]=temp;
  21.             }
  22.         }
  23.     }
  24. }
  25. int main(int argc, const char * argv[]) {
  26.     //数组的长度
  27.     int len=0;
  28.     printf("请依次输入要进行排序的数字个数以及具体数字,以空格隔开\n");
  29.     scanf("%d",&len);
  30.     //构建数组
  31.     int arr[len];
  32.     //初始化
  33.     for(int i=0;i<len;i++)
  34.     {
  35.         scanf("%d",&arr[i]);
  36.     }
  37.     //进行选择排序
  38.     selectSort(arr,len);
  39.     for(int i=0;i<len;i++)
  40.     {
  41.         printf("%d\n",arr[i]);
  42.     }
  43.     return 0;
  44. }
复制代码
回复 使用道具 举报
在学习视频过程中看到老师在方法前快速生成了注释,本来以为是快捷键,经过百度后原来是一款插件。在此分享给有缘人。https://github.com/onevcat/VVDocumenter-Xcode 在这个网址下载项目文件,在本地build成功后即可。之后在需添加注释的方法前按///即可快速生成注释。效果如下:
  1. /**
  2. *  <#Description#>
  3. *
  4. *  @param arr <#arr description#>
  5. *  @param len <#len description#>
  6. */
复制代码
回复 使用道具 举报
  1. #include <stdio.h>
  2. /*
  3. 学习课程:折半查找
  4. 思想:在一个有序的集合中,(必须是有序的),不断和中间的值进行比较,每次可以排除掉一半的值,大大提高查找的效率。
  5. 实现关键: target>arr[mid] 证明在数组后半段 low=mid+1
  6.            target<arr[mid] 证明在数组前半段  high=mid-1
  7.            target== arr[mid] 返回mid
  8. 失败条件 low>high
  9. 实战:用户给定一个数组的长度以及有序数组以及需要查找的值,进行折半查找后打印输出位置。
  10. */
  11. /**
  12. *  折半查找函数
  13. *
  14. *  @param arr    传入的目标数组
  15. *  @param len    数组的长度
  16. *  @param target 查找的目标值
  17. *
  18. *  @return 查找成功则返回数组下标,否则返回-1
  19. */
  20. int halfSearch(int arr[],int len,int target)
  21. {
  22.     int low=0,high=len-1,mid=len/2;
  23.     while(low<=high)
  24.     {
  25.         if(target>arr[mid])
  26.         {
  27.             low=mid+1;
  28.         }
  29.         else if(target<arr[mid])
  30.         {
  31.             high=mid-1;
  32.         }
  33.         else if(target==arr[mid])
  34.             return mid;
  35.         mid=(low+high)/2;
  36.     }
  37.     return -1;
  38. }
  39. int main(int argc, const char * argv[]) {
  40.     //数组的长度
  41.     int len=0;
  42.     printf("请依次输入给定集合的数字个数以及具体数字和要查找的数值,以空格隔开\n");
  43.     scanf("%d",&len);
  44.     //构建数组
  45.     int arr[len];
  46.     //初始化
  47.     for(int i=0;i<len;i++)
  48.     {
  49.         scanf("%d",&arr[i]);
  50.     }
  51.     //要查找的数值
  52.     int target=0;
  53.     scanf("%d",&target);
  54.     //调用函数
  55.     int answer=halfSearch(arr,len,target);
  56.     printf("%d\n",answer);
  57.        return 0;
  58. }
复制代码
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include<string.h>
  3. /*
  4. 学习课程:字符串
  5. 实战&练习:输入多个单词,首字符大写并统计单词个数
  6. 编程思路:1、使用gets()获取用户输入的字符串流
  7.          2、逐个判断,如果该字符前面是空格,该字符若不是大写则大写并让单词数加1
  8.          3、让字符与‘a’相减后比较,若大于0,证明还没有大写,否则,已经是大写的
  9. */
  10. /**
  11. *  单词转换函数
  12. *
  13. *  @param ch 需要转换的单词流
  14. *
  15. *  @return 返回字符串中单词的个数,若没有则返回-1
  16. */
  17. int change(char ch[])
  18. {
  19.     //计算字符串长度
  20.     int len=strlen(ch);
  21.     //传入空字符串,直接返回
  22.     if(len==0)
  23.         return -1;
  24.     int count=0;
  25.     for(int i=0;i<len;i++)
  26.     {
  27.         if(i==0&&ch[i]!=' ')
  28.         {
  29.             ch[i]=ch[i]-'a'>=0?ch[i]-32:ch[i];
  30.             count++;
  31.         }
  32.         else
  33.         {
  34.             if(ch[i-1]==' ')
  35.             {
  36.                 ch[i]=ch[i]-'a'>=0?ch[i]-32:ch[i];
  37.                 count++;
  38.             }
  39.         }
  40.     }
  41.     return count;
  42. }
  43. int main(int argc, const char * argv[]) {
  44.     //用户输入的单词组
  45.     char danChi[100]=" ";
  46.     //接受用户输入
  47.     printf("请输入单词,每个单词间用空格隔开");
  48.     gets(danChi);
  49.     int count=change(danChi);
  50.     printf("一共有%d个单词\n",count);
  51.     puts(danChi);
  52.     return 0;
  53. }
复制代码
回复 使用道具 举报
  1. #include <stdio.h>
  2. /*
  3. 学习课程:指针
  4. 实战&练习:通过函数交换两个变量的值
  5. 分析:因为一般函数传入的是形参,开辟的是另一块存储空间,因此,函数结束后该空间上的变量生命周期也就结束了,无法将结果返回。方法1:定义成全局变量 方法2:使用指针
  6. */
  7. void swap(int *p1,int *p2)
  8. {
  9.     //传入的是实际两数的地址,交换函数生命周期结束后两数的地址不影响。
  10.     int temp;
  11.     temp=*p1;
  12.     *p1=*p2;
  13.     *p2=temp;
  14. }
  15. int main(int argc, const char * argv[]) {
  16.     int num1=0,num2=9;
  17.     printf("交换前两数分别为%d  %d\n",num1,num2);
  18.     swap(&num1,&num2);
  19.     printf("交换后两数分别为%d  %d\n",num1,num2);
  20.     return 0;
  21. }
复制代码

点评

const与指针:const int *p 内容不能改,指向可以改;int* const p 内容可以改,指向不能改;const int * const p 指向和内容都不能改  发表于 2016-1-13 17:11
重要用途:在被调函数中修改主调函数中的值  发表于 2016-1-11 22:49
回复 使用道具 举报
  1. #include <stdio.h>
  2. /*
  3. 学习课程:数组指针
  4. 实战&练习:逆序数组:将数组a中的元素逆序存放
  5. 分析&思路:观察逆序前后结果,刚好符合以中间元素为对称轴的对称关系,采用交换方法。a[i]=a[len-1-i] 2、通过引入指针实现被调函数改变主调函数变量的功能
  6. */
  7. /**
  8. *  将传入的数组逆序存放
  9. *
  10. *  @param arr 数组
  11.     @param len 数组长度
  12. */
  13. void niXu(int arr[],int len)
  14. {
  15.     int i=0,j=len-1;
  16.     int temp=0;
  17.     while(i<j)
  18.     {
  19.         temp=arr[i];
  20.         arr[i]=arr[j];
  21.         arr[j]=temp;
  22.         i++;
  23.         j--;
  24.     }
  25. }
  26. int main(int argc, const char * argv[]) {
  27.     //定义目标数组
  28.     int arr[8]={1,2,3,4,4,5,6,7};
  29.     niXu(arr,8);
  30.     for(int i=0;i<8;i++)
  31.         printf("经过逆序后的数组为%d ",arr[i]);
  32. }
复制代码
回复 使用道具 举报
  1. //
  2. //  main.c
  3. //  字符串排序
  4. //
  5. //  Created by xuzhenhao on 16/1/12.
  6. //  Copyright (c) 2016年 xuzhenhao. All rights reserved.
  7. //

  8. #include <stdio.h>
  9. #include <string.h>
  10. /*
  11. 学习课程:字符串指针相关
  12. 实战&练习:字符串排序:输入5个国家名,按字母顺序排序后输出
  13. 思路&分析:1、根据ascii码值对两个字符串之间进行排序,用到strcmp函数 2、选择排序算法
  14. */
  15. /**
  16. *  选择排序算法
  17. *
  18. *  @param arr 需要排序的字符数组
  19. */
  20. void selectSort(char *arr[])
  21. {
  22.     //临时存放变量
  23.     char *temp=NULL;
  24.     for(int i=0;i<5;i++)
  25.     {
  26.         for(int j=i+1;j<5;j++)
  27.         {
  28.             //根据ascii码值比较大小
  29.             if(strcmp(arr[i], arr[j])>0)
  30.             {
  31.                 //如果用arr[i]格式,则直接取到值;若用指针point格式,则*(point+i)取到值
  32.                 temp=arr[i];
  33.                 arr[i]=arr[j];
  34.                 arr[j]=temp;
  35.             }
  36.         }
  37.     }
  38. }
  39. int main(int argc, const char * argv[]) {
  40.     //需要排序的国家名
  41.     char *county[]={"china","america","german","france","australia"};
  42.     selectSort(county);
  43.     for(int i=0;i<5;i++)
  44.     {
  45.         printf("%s\n",county[i]);
  46.     }
  47.     return 0;
  48. }
复制代码
回复 使用道具 举报
支持一下,爱做笔记的同学学习起来都不会差
回复 使用道具 举报
guyuexing 来自手机 中级黑马 2016-1-13 13:19:41
14#
赞一个,楼主的学习方法挺好的
回复 使用道具 举报
yuanxiang05 发表于 2016-1-13 11:27
支持一下,爱做笔记的同学学习起来都不会差

感谢支持
回复 使用道具 举报
guyuexing 发表于 2016-1-13 13:19
赞一个,楼主的学习方法挺好的

感谢支持
回复 使用道具 举报
很有用,学会后可以加深印象。
回复 使用道具 举报
从今天开始,正式学习oc部分
  1. //
  2. //  main.m
  3. //  oc-product
  4. //
  5. //  Created by xuzhenhao on 16/1/18.
  6. //  Copyright (c) 2016年 xuzhenhao. All rights reserved.
  7. //
  8. //

  9. //import 引入头文件
  10. //question:为什么使用import,和include的区别是什么?
  11. //answer:使用import引入头文件,使用include也可以,但include使用预处理指令来防止重复包含,如果没有写预处理,则没有该功能。而import则无需考虑上述问题,更安全,省心。
  12. #import <Foundation/Foundation.h>

  13. int main(int argc, const char * argv[]) {
  14.     @autoreleasepool {
  15.         // insert code here...
  16.         //question NSLog与printf使用差异
  17.         //1、NSLog会自动换行,printf不会 2、NSLog会输出项目信息,printf不会
  18.         //3、NSLog参数是一个NSString对象,printf是一个字符串常量指针
  19.         NSLog(@"Hello, World!");//@代表接字符串
  20.         
  21.         int a=3;
  22.         double f=3.2;
  23.         char ch='a';
  24.         //如果该函数能运行,说明oc向下兼容c
  25.         printf("%d,%.2f,%c\n",a,f,ch);
  26.         //如果该函数能运行成功,说明NSLog支持格式化输出
  27.         NSLog(@"%d,%.2f,%c",a,f,ch);
  28.         //oc中有自己的字符串表示方法
  29.         NSString *str=@"xuzhenhao";
  30.         NSLog(@"%@",str);
  31.         
  32.         //NS前缀:oc不支持命名空间,为了保证变量的全局唯一和命名冲突,在变量前加上前缀。官方建议第三方开发者使用2到3个字母做前缀,如XZHNSString
  33.         
  34.     }
  35.     return 0;
  36. }
复制代码
回复 使用道具 举报
  1. //
  2. //  main.m
  3. //  class
  4. //
  5. //  Created by xuzhenhao on 16/1/18.
  6. //  Copyright (c) 2016年 xuzhenhao. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. //若属性值范围可确定,可用这中方法定义
  10. //typedef enum color{yellow,white,gold} iColor;
  11. /**
  12. *  类是特征(属性)和行为(方法)的抽象
  13. */
  14. //类的声明
  15. @interface Student : NSObject
  16. {
  17.     @public//声明公有的
  18.    
  19.     NSString *stuName;//学生姓名
  20.     int age;//学生年龄
  21. }
  22. //方法声明
  23. -(void)regeist;//学生注册  一个无参无返回值的方法
  24. -(int)ageAdd: (int) x and:(int) y;//年龄增加   一个有参有返回值的方法  :也是方法名的一部分
  25. @end

  26. //类的实现
  27. @implementation Student

  28. //方法实现
  29. -(void)regeist
  30. {
  31.     NSLog(@"学生报到注册了!");
  32. }
  33. -(int)ageAdd:(int) x and:(int)y
  34. {
  35.     NSLog(@"学生的年龄加起来等于%d岁",x+y);
  36.     return x+y;
  37. }
  38. @end
  39. int main(int argc, const char * argv[]) {
  40.     @autoreleasepool {
  41.         //类的实例化 先申请空间,再初始化成员变量,最后返回地址
  42.         Student *stu = [Student new];
  43.         stu->age=25;//年龄赋值为25
  44.         stu->stuName = @"xuzhenhao";
  45.         //查看学生的信息
  46.         NSLog(@"年龄 = %d,姓名 = %@",stu->age,stu->stuName);
  47.         //stu 调用对象方法regeist
  48.         [stu regeist];
  49.         //stu 调用方法gaeAdd
  50.         [stu ageAdd:3 and:6];
  51.     }
  52.     return 0;
  53. }
复制代码
回复 使用道具 举报
  1. //
  2. //  main.m
  3. //  类的练习
  4. //
  5. //  Created by xuzhenhao on 16/1/18.
  6. //  Copyright (c) 2016年 xuzhenhao. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. /**
  10. *  学习课程:oc第一天相关内容
  11.     练习&实战:人吃食物体重增加0.6.如果出门遛弯,每走100步,体重减少0.2,小于100步忽略不计。
  12.     分析&思路:1、设计一个人的对象,其属性有体重(float),名字等   涉及类的声明及实现相关知识
  13.              2、有吃食物和遛弯两种行为(方法),均为无返回值的有参方法
  14. *
  15. *
  16. */

  17. //人这个类的声明
  18. @interface Person : NSObject
  19. {
  20.     //定义属性
  21. @public
  22.     float _weight;//体重
  23.     NSString *_name;//名字
  24. }
  25. //声明方法
  26. //声明吃食物的方法,体重增加0.6
  27. -(void)eatFood:(NSString *)food;
  28. //声明散步的方法,每走100步,体重减少0.2
  29. -(void)walk:(int) step;
  30. @end
  31. //Person类的实现
  32. @implementation Person
  33. //实现吃的方法
  34. -(void)eatFood:(NSString *)food
  35. {
  36.     _weight+=0.6;
  37.     NSLog(@"吃了%@后,目前体重为%.2f",food,_weight);
  38. }
  39. //实现散步的方法
  40. -(void)walk:(int)step
  41. {
  42.     //取整运算,小于100的忽略不计
  43.     int temp=step/100;
  44.     _weight-=(float)temp*0.2;
  45.     NSLog(@"走了%d步后,体重为%.2f",step,_weight);
  46. }
  47. @end
  48. int main(int argc, const char * argv[]) {
  49.     @autoreleasepool {
  50.         //实例化Person类,并初始化
  51.         Person *per=[Person new];
  52.         per->_weight=50;
  53.         per->_name=@"xuzhenhao";
  54.         //调用方法
  55.         [per eatFood:@"香蕉"];
  56.         [per walk:201];
  57.     }
  58.     return 0;
  59. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马