C语言视频链接

一、视频

视频链接见 :http://pan.baidu.com/s/1i320yEh 

本视频初衷在于帮助初学者更好地学习C语言。

二、报错

视频中的一些错误修正见下面链接,欢迎大家修正报错,发邮件[email protected],或者直接评论,希望大家共同进步。

http://note.youdao.com/share/?id=2e09ff62a3c83bcd4a79d369146bbff0&type=note

三、学习辅助

结合下面大纲和作业配合视频多写多练。

Day1:

计算机基础概述

linux 安装 

目录结构:树形

路径:绝对路径 相对路径

特殊目录:根目录 主目录  上一层目录 当前目录

命令 : ls  cd  pwd  vim  gedit   man 

作业:安装其他linux发行版本 比如 centos redhat

 

Day2:

命令:sudo  su  

c语言:

(0)gcc 编译 四个阶段  

(1)变量基本定义,变量、内存、数据之间关系  

(2)操作符 表达式  

     注意表达式的值 这个概念 

     + - * / ++ --

     &&    ||    !

     < > <= >= == !=

     ?:  ,,,逗号表达式

 

Day3:

1、流程图基本画法

2、  if 语句 switch语句

       for  while   do..while

课后作业 :

基础题:  4、5、7.(1)  8  9 10 11 12 流程图要求画出来。 

1(必做)、在终端输出自己的名字和年龄。

2(必做)、打印出各种变量类型所占字节数。

3(必做)、输入半径求出圆形面积并打印 。

4(必做)、输入3个数 从小到大输出。

5(必做)、输入学生成绩(0-100分) 输出等级(a:90-  100,  b :80-89  c:70-79  :d 60-69  e:<60 )

        用 if 和switch 语句

6(必做)、输入数字,输出星期几(输入:6,输入:星期六)     用if和switch语句

7、(必做)(1)用 for  while do while语句实现 1+2+3….+100

  (必做)(2)求n的阶乘 

8、(必做) 把100-200之间不能被3整除的数输出

9、 输入两个数求最大公约数。

10 、编程题:在屏幕上输出如下图形 键盘输入n

              *

            *   *

          *   *   *

11、分解质因数 12 = 2*2*3

 

12(必做)、1!+2!+3!+4!+++n!

扩展题:求 123456789123456789123456+12345678901234567890

 

课后思考:float double 在内存中存储形式

预习 Day4命令及相关知识 

 

Day4:

数组

   (1)一维数组定义 、初始化、使用 

   (2)一维数组在内存中的形式

   (3)数组与字符串

   (4)二维数组定义、初始化、使用

   (5)二维数组在内存中的形式。

 

     strcpy  strlen gets puts

Day5:

1 、函数

(1)函数基本定义及使用  

 (2) 形参实参 的传递

 (3) 函数传递数组

4)函数嵌套调用

2、自学gdb 调试 :

      见群共享 《gdb 十分钟教程》

3、预处理指令 

#if  #else  #endif

#define 

#include 

#ifdef  

#ifndef 

思考题:

   (1)   gets 函数为什么有危险

   (2)  int func(int a[10])

             {

                 sizeof(a) --->等于多少,为什么?

              }

 

作业:必做

 1、计算数组的长度   

 2、用数组来处理Fibonicci数 列的前10项  

          output 1,1,2,3,5,8......

 3、输入一串字符、剔除除了小写字母以外的其他字符,并输出。

 4、有 一维数组  int  a[6] = {1,2,3,4,5,6};

       二维数组   b[2][3];

       把数组a中的数据拷贝到数组b中,并且在逻辑上b里面的数据行列为

       1 2 3

       4 5 6

 5、输入2*3 矩阵,并打印,行列互换后再打印。

 6、验证 二维数组 在内存中的存储方式。

 7、写函数实现    int sum(int n); 1+2+3。。。。N

 8、用函数实现 min 到 max之间不能被m整除的数的个数    int  num(int min ,int max,int m);

 9、写函数实现    int fac(int n); 1*2*3*....n

      用函数实现 1!+2!+3!+4!….n!;

      int sum_of_factorial(int n);

 

 10、实现 加减乘除 函数.

参考接口   double  add(double a,double b);

double  sub(double a,double b);

double  mul(double a,double b);

double  div(double a,double b);

 实现计算器 函数接口 通过 0、1、2、3来选择计算功能

int calc(int select,int a,int b);

 11、用函数实现 2、8、16进制打印

void decimal_to_hex(int data); 

void decimal_to_oct(int data);

void decimal_to_binary(int data);

     实现总函数接口 通过2、8、1 2 选择来输出各种进制

void decimal_convert(int select,int data);

 12、输出数组的全部元素。

          void array_print(int a[],int len );

 13 、编写程序,交换数组a和数组b中的前n个元素。

     void swap_array(int a[],int b[],int n);

 14、 A、编程实现:有10个人(编号1到10)围成一圈123123...报数,报到3的人出去,然后下一个人继续从一开始报数,求最后剩下的人的编号。

      B、用函数实现  n 个人报数,报到m的人除去,求最后剩下的人的编号

       int  left_num(int a[ ],int n,int m )

 15、 函数的功能是:将s数组中的n个数倒序,请自己定义函数的参数形式及命名

 16、用函数实现 数组从小到大排序

void  sort(int a[ ],int len);

 17、有数组 a[10] b[10]  c[20]

     a、b中的数据都是从小到大排列,把a  b 中的数据合并放到 c中依然从小大

     Void func(int a[],int b[],int c[],int len); 

     其中 a  b 数组的长度为 len ,c 为 2*len


Day6-7


1、指针基本定义及使用  *  &

2、指针加减法

3、指针与一维数组关系

4、指针变量  所占字节

5、Malloc free 基本用法

6、typedef #define用法及区别

7、变量作用域及生存周期

8、栈、堆、静态存储区、文字常量区 比较

9、指针作为函数形参

10、函数传数组本质

11、指针与字符串、char数组综合分析

12、const  及 const 于指针结合

 

作业:

1、有int *p1,char *p2 ,double *p3,int **p ,打印出各个       sizeof(p)

2、int a[10] 用指针为数组a赋值,并打印出每个值 ( 用多种方法)  

提示 :a[i] ---*(a+i) 

3、交换两个数    void swap(int *a,int *b);

4、输出数组的全部元素。

       void array_print(int *a,int len);

5、int  my_strlen(const  char *p),求字符串长度

6、实现 my_strcpy 函数 ;

7、my_strcpy 安全吗,如何改进? 

8、编写函数,对传递进来的两个整型量计算它们的和与积之后,通过参数返回。

    函数声明为 void compute(int m, int n, int *sum, int *p);

9、用函数实现创建动态数组 

   提示(数组的本质是什么?)

          void *create_array(int  size,int len);

   Size为数组每个元素所占内存的大小,len为数组长度。

10、使用memcpy,memset函数,实现 my_memcpy,my_memset函数

 

 

Day8-9

1、指针数组,数组的每个元素是指针 int* a[10];

2、指针的指针 int **p;

3、函数的指针  int (*p)(int)

4、一维数组的地址 及 指针变量   

5  二维数组与指针

大小端

7  main 函数参数

 

作业:

1、定义指针数组 int * a[10],每个指针指向一块10Int大小的内存,赋值0-99,并打印。

2、定义指针数组 char *a[10],每个指针指向一块10char 大小的内存,用scanf 为每块内存输入字符串(不超过10个字符),并打印所输入.

3、输出一个int 变量 每个字节所存的数据。

4int a,b;

   int *p1 = &a;

   Int *p2 = &b;

   通过函数 调用使  p1 = &b, p2 = &a;

 

5、函数指针基本用法

   有 以下函数

    int  add(int a,int b);

strcpy ;

memcpy   

 分别用指针变量去调用这些函数。

  

6、用指向数组的指针 Int (*p)[10] ,去访问int a[10]的每个元素.

 

7、用指针实现int a[2][3] 所有元素输出(多种方法)

  用以下指针  int *p1, int (*p2)[3];


8、编写代码,并生成可执行文件 cal ,有两种运行模式

A-------界面模式

./cal 运行的时候

打印以下界面并根据选择计算结果

1

please select function

1  add

2  sub

3  div

4  mul 

5  quit 

2)输入

please input  num:

3)输入 1  2

4)输出 并返回到 (1)界面

B---------直接命令模式

 

./cal -add 1 2

输出和,以下同理:

./cal -sub 1 2

./cal -div 1 2

./cal -mul 1 2 

如果命令输入错误会有相应提示

比如 ./cal -kk  ,没有kk这个选项

       ./cal -sub 1,缺少参数

 9、编写以下函数,把字符串中的小写字母都转化为大写字母,运行错误返回NULL,

   运行成功,返回新字符串的地址。

char*  trans(const char *p);

   并写 测试函数测试功能,如果测试成功返回0,测试失败返回-1

int  test_trans();

10、请编写一个函数,计算某一个字符串中有多少个单词,假设单词与单词之间用空格分隔,且单词为英文字母。

     int  num_of_word(char *p)

1)画出流程图

2)完成代码

3)编写测试函数 int  test_num_of_word();成功返回0,失败返回-1,尽可能全面得测试各种情况。

11、查手册使用 strstr函数,并实现其功能 my_strstr.

12、查手册使用strtok函数,并实现其功能 my_strtok

13、查手册使用 strdup函数,并实现其功能 my_strdup


Day10

结构体 

1、结构体基本定义、使用及初始化

2、结构体与指针

3、结构体包含结构体成员

4、结构体数组

5、结构体与函数

6、浅拷贝  深拷贝

7、字节对齐

8、位段 

 

作业 :

1、定义图书结构体,输入信息并打印,用多种方法.    Book 

        a、书名(小于10个字符)

        b、页数、

        c、作者(小于10个字符)

        d、价格

2a\定义图书结构体数组,存入10本书信息,并打印

  多种方法

   b\ 定义结构体指针数组,通过该数组操作 

3、动态定义图书结构体数组,存入10本书,打印,打印完后销毁。

4、定义图书馆结构体       

 (1Library

      a、现存图书数量   

  b、最大容量(固定)

      c、所存图书信息

(2) Book

       a、书名 (书名字符不定)

       b、页数、

   c、价格

  定义如下函数

 (1)增加一本书的信息

      Int  add_book(Library *p,char *name,int  page, int price)

 (2)打印图书馆中所有所存图书的信息。

        void  print_lib(Library *p);

5、定义图书馆结构体,最大图书容量不定。并写

   

       图书馆创建函数

 Library *create_lib(int  max_num)   max_num是最大容量

       图书馆销毁函数

 int  destroy_lib(Library *p)

  增加一本书的信息

 Int  add_book(Library *p,char *name,int  page, int price)

        打印图书馆中所有所存图书的信息。

     void  print_lib(Library *p);

       拷贝p1图书馆中的信息到p2图书馆中

 Int  copy_lib(Library *p2,Library *p1)

 

 测试 copy_lib函数,按照如下方法:

 (1) lib1 并增加基本书

 (2)lib1中的信息拷贝到lib2

(3)销毁lib1

(4)打印lib2中的信息

     

 

Day11

新增视频 

      结构体11 -20

作业:

1、写代码验证字节对齐

2、写代码验证位段的概念

3、把Day10的作业代码用多文件标准写法组织起来:有如下文件

   book.c  book.h   library.c  library.h  main.c

  book.c 实现书的基本信息的设计

  library.c 实现图书馆的基本设计(用到book.c的功能)

  main.c 测试功能  

 





你可能感兴趣的:(C)