杨佳琴

我的第一次博客

对网络专业的了解

网络工程专业是专门为网络领域人才市场供不应求的迫切需要而设置的专业。培养的人才具有扎实的自然科学基础、较好的人文社会科学基础和外语综合能力;能系统地掌握计算机网和通信网技术领域的基本理论、基本知识;掌握各类网络系统的组网、规划、设计、评价的理论、方法与技术;获得计算机软硬件和网络与通信系统的设计、开发及应用方面良好的工程实践训练,应获得较大型网络工程开发的初步训练。毕业后可以从事各级各类企事业单位的企业办公自动化处理、计算机安装与维护、网页制作、计算机网络和专业服务器的维护管理等方面的有关工作。

刚开始对网络工程专业其实并不怎么了解,只知道是跟计算机有关系,后来通过查阅资料才发现网络工程所涉及的内容其实挺广泛的,而对于我们来说,主要是学习计算机,通信以及网络方面的基础理论、设计原理,具备从事计算机网络设备等有关计算机的基本能力。而网络专业将培养具有扎实的自然科学基础、较好的人文社会科学基础和外语综合能力,能够系统的掌握计算机和网络 通信领域内的基本理论和基本知识等方面知识能力的学生。在人才培养过程中,十分重视学生的创新能力和实践能力。

对c语言的理解

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管c语言提供了许多低级处理的功能,但仍保持着跨平台的特性,以一个标准规格写出的c语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

首先C是基础,学好了C后,别的语言都挺容易的,因为大致的语法都是相通的。C的历史有N年了,在1995年之前,计算机主要用于银行、证券、电信等大行业,那时个,连操作界面都是用C编写的,后来的PowerBuild、VB、VC、Dephi等取代了C的界面应用,但是,在后台应用,如传输、通讯、数据处理、监控等方面,C的地位无可取代。在传输、通讯、数据处理、监控方面有非常大的优势,效率极高。但c语言入门较难,需要不断地练习。

希望在这个专业学到的内容以及大学生活的安排

首先,就我本人而言,我对计算机并不怎么熟悉,因而在这个专业我希望去真正的了解计算机,能够去了解网络和通信,从而掌握这些知识,提高自己的创新能力和实践能力。其次,我希望自己能喜欢这门专业,让它成为自己的兴趣。

大学生活的安排:从小学到初中再到高中,一直都有老师和父母在后面提醒我们需要去做什么,该怎样做,他们也时常告诉我们,上了大学就不会有人再去管着你,一切都要靠自己自觉。现在我发现确实也是如此。因而大学生活中我必须做到自律,对自己的时间有一个大概地管理,比如说,周末不能一直在床上躺着,也不能出去玩一整天,一天起码抽出三分之一的时间用于学习,有一个小时左右的时间用于运动。学好数学和英语,以及专业课。

目前自学的内容

浙大c语言程序设计

输出一个数的各位数

设一个数为n,则在c语言中其个位,十位,百位,千位依次这样计算:n/1%10,n/10%10,n/100%10,n/1000%10。

输出的时候如何保留两位小数

可以在输出的时候限制小数点位数。

  1. 当输出单精度浮点型float变量f时,可以用printf("%.2f",f),来使输出结果保留两位有效数字。(2就是代表保留两位,如果要保留三位就是%.3f,用%.0f就是只输出整数。)
  2. 如果是双精度浮点数double,就需要用%.2lf来使输出结果保留两位小数。

scanf

scanf是c语言中的标准输入函数
其调用格式为:
scanf("<格式化字符串>",<地址表> );
例:
scanf("%d %d",&a,&b)//接收用户从键盘输入的两个整数,分别赋值给变量a,b.
注:scanf函数的返回值:
对于scanf("%d %d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;

&符号

在c语言中有两个意思:一种是取地址符,是单目运算符;另一种是位运算符,是双目运算符。
a和b表示a和b按位进行与运算。
&后面是个变量,每个变量对应一块存储空间。每个存储空间有一个编号,也就是地址。&变量名,表示取出这个编号。变量名表示取出这个编号所对应的存储空间里的值。

分支结构

分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。
c语言的分支结构分三种:单分支结构,双分支结构,多分支结构。

单分支结构

基本形式:
if(<条件表达式>)
{
(语句块)
}

双分支结构

基本形式:
if(<条件表达式>)
{
(语句块1)
}
else
{
(语句块2)
}

多分支结构

多分支结构又分为“分支的嵌套”和“switch语句”

这三种分支结构的区别

  1. 单分支结构在满足条件时执行,不满足条件不执行。
  2. 在双分支结构中,如果条件表达式成立,则执行语句块1,否则,执行语句块2,所以双分支结构至于执行一次;
  3. 多分支结构的分支结构的嵌套中,分支结构的嵌套包含了单分支结构与双分支结构的特性,可以用单分支结构嵌套双分结构,也可用双分支结构嵌套单分支结构,通俗的来讲就是分支结构中放入一个分支结构,当条件成立则执行分支结构中嵌套的分支结构。
  4. switch语句可以理解成其他的分支结构的总和,switch集成了上述所有分支结构的特性,在有多种情况的时候才使用switch,当switch(条件)满足case后面的常量,则执行对应的语句,若满足的条件未能匹配到对应常量,则执行default的switch语句是至少执行一次的,当然default也可省略不写,这样switch语句也可以一次都不执行。

循坏结构

使用循环可以多次重复地执行多条语句,这里的“多条语句”称为循环体。在C语言中,可以使用三种循环,分别是:while、do...while和for。
在这些语句中,循环体被重复执行的次数由循环条件控制,称为控制表达式(controlling expression)。这是一个标量类型的表达式,也就是说,它属于一个算术表达式或指针表达式。如果控制表达式的值不等于 0,循环条件为 true,反之,循环条件为 false.
语句 break 和 continue 用于在一次循环还未执行完时,跳转出循环或返回到循环头部。

while 循环

只要控制表达式为 true,while 循环就会反复地执行语句.
while 表达式是顶部驱动(top-driven)的循环:先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。

从语法上讲,循环体只有一条语句组成。如果需要执行多条语句时,可以使用语句块把它们组合在一起。例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。

例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。

【例1】一个 while 循环

从键盘输入数字,然后输出它们的平均值。

#include <stdio.h>
int main()
{
   double x = 0.0, sum = 0.0;
   int count = 0;
   printf( "\t--- Calculate Averages ---\n" );
   printf( "\nEnter some numbers:\n"
           "(Type a letter to end your input)\n" );
   while ( scanf( "%lf", &x ) == 1 )
   {
      sum += x;
      ++count;
   }
   if ( count == 0 )
     printf( "No input data!\n" );
   else
     printf( "The average of your numbers is %.2f\n", sum/count );
   return 0;
}

在例 1 中,只要用户输入一个小数,下面的控制表达式即为 true:
scanf( "%lf", &x ) == 1

然而,只要函数 scanf()无法将字符串输入转换成浮点数(例如,当用户键入字母 q 时),则 scanf()返回值 0(如果是遇到输入流的尾端或发生错误时,则返回值 -1,表示 EOF)。这时,循环条件为 false,程序将会跳出循环,继续执行循环体后面的 if 语句。

for 循环

和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑。

在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:

  1. 表达式 1:初始化
    只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。
  2. 表达式 2:控制表达式
    每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。
  3. 表达式 3:调节器
    调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。

例 2 展示了使用一个 for 循环初始化数组内每个元素的过程。

【例2】用 for 循环初始化数组

#define ARR_LENGTH 1000
/* ... */
long arr[ARR_LENGTH];
int i;
for ( i = 0; i < ARR_LENGTH; ++i )
    arr[i] = 2*i;

for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:
for ( ; ; )

如果没有控制表达式,则表示循环条件始终是 true,也就是说,这定义了一个死循环。

下面所示的 for 循环,既没有初始化表达式,也没有调节器表达式,它与 while(表达式)语句含义是等效的:
for ( ;表达式; )

事实上,每个 for 循环都可以被改写成 while 循环,反之亦然。例如,例 2 的 for 循环可完全等效为下面的 while 循环:
i = 0;                             // 初始化计数器
while ( i < ARR_LENGTH )     // 循环条件
{
    arr[i] = 2*i;
    ++i;                        // 递增计数器
}

一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环。

在ANSI C99中,也可以使用声明来替代表达式1。在这种情况下,被声明变量的作用域被限制在 for 循环范围内。例如:
for ( int i = 0; i < ARR_LENGTH; ++i )
arr[i] = 2i;
变量 i 被声明在该 for 循环中(与例 2 不同)for 循环结束之后,变量 i 将不会再存在。
逗号运算符常常被用在 for 循环头部,以在表达式 1 中实现多个初始化操作,或者在表达式 3 对每个变量做调整操作。例如,函数 strReverse()使用两个索引变量以保存字符串中字符的次序:
void strReverse( char
str)
{
char ch;
for ( size_t i = 0, j = strlen(str)-1; i < j; ++i, --j )
ch = str[i], str[i] = str[j], str[j] = ch;
}
借助于逗号运算符,可以在只允许出现一个表达式的地方,计算多个表达式。
do...while 循环
do...while 循环是一种底部驱动的循环:
do 语句 while (表达式);

do...while循坏

在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。
【例3】do···while

// 读入和执行所选的菜单命令
// --------------------------------------------
int getCommand( void );
void performCommand( int cmd );
#define END 0
/* ... */
do
{
  int command = getCommand();   // 询问菜单系统
  performCommand( command );    // 执行所选的菜单命令
} while ( command != END );

例 4 展示了标准库函数 strcpy()的一个版本,循环体仅为一条简单的语句,而不是一个语句块。因为在循环体执行之后才计算循环条件,所以字符串终止符'\0'也会被复制。
【例4】函数 strcpy()使用 do...while

// 将字符串2复制到字符串1
// ----------------------------
char *strcpy( char* restrict s1, const char* restrict s2 )
{
  int i = 0;
  do
     s1[i] = s2[i];               // 循环体:复制每一个字符
  while ( s2[i++] != '\0' );      // 如果刚刚复制的是'\0',则结束循环
  return s1;
}

函数

C语言函数是一种函数,用来编译C语言,一般包括字符库函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。

定义函数

C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{
   body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。

下面列出一个函数的所有组成部分:

  1. 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
  2. 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  3. 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  4. 函数主体:函数主体包含一组定义函数执行任务的语句。
    实例:
    以下是 max() 函数的源代码。该函数有两个参数 num1 和 num2,会返回这两个数中较大的那个数:
    /* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

函数声明

函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
函数声明包括以下几个部分:
return_type function_name( parameter list );
针对上面定义的函数 max(),以下是函数声明:
int max(int num1, int num2);
在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:
int max(int, int);

当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

调用函数

创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:
实例

#include <stdio.h>
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}

/* 函数返回两个数中较大的那个数 */

int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}
把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:
Max value is : 200

函数参数

  1. 如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。
  2. 形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
  3. 当调用函数时,有两种向函数传递参数的方式:

调用类型的描述

  1. 传值调用:该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
  2. 引用调用:通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
  3. 默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。

posted on 2020-10-22 01:21  长安&  阅读(200)  评论(5编辑  收藏  举报

导航