精华内容
下载资源
问答
  • 采用C语言设计实现一个简单的防火墙程序,需要完整可运行代码,能实现基本功能和良好的操作界面,谢谢
  • 设计一个计时模块,按下按键K1开始计时,按下K2复位,要求六个八段数码管最右边显示秒数,中间两个数码管显示分钟数,左边两个小时小时数(小时数最大显示99)。要求采用定时中断方式&#...
  • 本节先通过两个简单的例子,让读者了解C语言程序的概貌。 1.2.1 两个简单的C程序例子 【例1-1】 输出行文本。 1 /*程序名:prg1-1.c*/ 2 /*功能:在屏幕上输出行文本*/ 3 #include<stdio.h>...

    1.2 简单的C语言程序

    从下一节开始将详细讨论C语言的各种结构,以及程序设计各方面的问题。本节先通过两个简单的例子,让读者了解C语言程序的概貌。

    1.2.1 两个简单的C程序例子

    【例1-1】 输出一行文本。

    1    /*程序名:prg1-1.c*/
    2    /*功能:在屏幕上输出一行文本*/
    3    #include<stdio.h>
    4      
    5    int main()                                           /*主函数*/
    6    {
    7       printf("This is my first program in C/C++.\n");    /*在屏幕上输出一行信息*/
    8     
    9       return 0;
    10    }
    

    程序的运行结果为:

    This is my first program in C/C++.
    

    下面对该程序进行分析(为方便讲解,在每行前增加了行号):
    第1、2行中/……/符号里的内容为注释语句,用来对程序进行说明。程序员插入注释语句可以提高程序的可读性,帮助人们阅读和理解该程序。实际运行程序时编译系统会忽略这些注释,即对注释不进行编译。在每个程序前加上注释是一种良好的程序设计习惯。
    第3行是一条预处理指令,通知预处理器把标准输入/输出头文件stdio.h中的内容包含进程序中。头文件stdio.h包含了编译器在编译标准输入/输出函数时要用到的信息,每个使用标准输入/输出函数的程序中都要加上该命令。
    第5~9行是每个程序都必须有的主函数,主函数以main()来标识。C语言程序可以有一个或多个函数,其中一个必须是main()函数,每个程序都从main()函数开始执行,也结束于main()的最后一个花括号。main()前面的int表示整型,说明主函数返回值为一个整数值。接下来的一对花括号是main()函数的函数体,函数体中定义了要执行的一系列操作。其中第7行调用了C的标准输出函数printf(),把双引号之间的字符串原样输出到屏幕上,其中“n”是一个转义字符,它使输出屏幕上的光标定位到下一行开始位置,是一个不可见字符,输出时屏幕上看不到。
    【例1-2】 计算两个整数的和。

    1   /*程序名:prg1-2.c */
    2   /*功能:计算两个整数的和并输出结果*/
    3   #include<stdio.h>
    4
    5   int main()                                          /*主函数*/
    6   {
    7       int  i1, i2, sum;                              /*变量定义*/
    8
    9       i1 = 3;                                      /*输入数据*/
    10      i2 = 5;
    11      sum = i1 + i2;                                 /*计算i1、i2的和*/
    12
    13      printf("sum=%d\n", sum);                     /*输出sum的值*/
    14  
    15      return 0;
    16   }
    

    程序运行结果为:

    sum = 8
    

    程序中第7行为变量定义语句,定义了三个整型(int)变量i1、i2和sum,分别存放一个整数。第9、10行分别给变量i1、i2赋值。第11行计算两个变量的和并送入变量sum中。第13行负责打印出字符串“sum=”,以十进制整数格式(%d)输出变量sum的值。

    1.2.2 C程序概貌

    从上一小节中的两个简单例子,大致可以了解C程序的框架:

    /*注释:说明程序功能、目的、编写者、编写时间等信息*/
    #include<stdio.h>                                /*编译预处理命令*/
    int main()                                       /*主函数*/
    {
          ……                                        /*程序内容*/
          printf("…");                               /*输出结果*/
    }
    

    在该框架下,可以根据不同的问题填写不同的内容。C程序的基本概貌如下:
    1)在C的结构化程序框架中,函数是程序的基本组成单元。程序的主体通常由若干函数构成。函数是程序中完成一定功能的模块,其中有且仅有一个主函数,即main()函数。main()函数告诉计算机开始执行程序的地方。正是因为main()函数通过调用其他函数来执行相应的功能,所以main()函数有时也称为驱动函数。不管main()函数放在程序的什么位置,程序总是从main()函数开始运行。
    2)所有程序的内容都必须用一对花括号{}括起来,称为函数体。左侧花括号可以放在下一行的行首,也可以放在行尾。例如,上面的main()函数还可以写成:

    int main(){
          ……
          printf("…");
    }
    

    3)程序中可以有注释,放在“/”和“/”之间,主要是对程序进行简要的说明,包括程序的名称、完成的功能、编写人及最后修改时间等内容,系统不对该部分进行编译和运行,但它却是非常重要的部分,可以增强程序的可读性。
    4)以“#”开头的为预处理命令。要调用系统函数,就应该把描述函数所在的头文件包含进来,如使用输入/输出函数,要加上#include,使用数学函数,应该加上#include等。预处理命令一般写在程序头部。
    5)函数体由若干语句组成,包括声明部分和执行部分。声明部分如变量定义int i1, i2, sum,所有用到的变量都要先定义类型然后才能使用。执行部分包括函数的调用(如printf)和一般的运算等(如sum = i1+i2)。C语言的每条语句都必须以分号结束。
    6)C程序书写格式自由,一行可以写几条语句,一条语句也可以分在几行上。但是这样写程序一是不方便对语句进行注释,二是如果程序稍长一点,或是程序中出现了选择结构和循环结构等控制结构,程序就很难阅读和理解了。因此在编写较长的程序时,为了便于阅读程序,突出程序的功能结构,函数体应采用缩进和对齐格式书写,使程序结构清晰、易于阅读。

    1.2.3 C程序的处理和执行

    C语言属于高级语言,用C语言写出的程序通常称为源程序(文件扩展名为.c),人们对其非常容易编写和阅读,但计算机不能直接执行。要保证C语言程序能被任何计算机执行,需要有一个编译器,把C语言程序翻译成能被计算机理解的二进制形式。不同的计算机系统有不同的编译器,由它们来完成这个翻译过程。由编译器对源程序文件进行分析和处理,生成相应的机器语言目标模块,保存到目标文件里(文件扩展名为.obj)。目标文件还不能执行,还需要连接器把编译得到的目标模块与其他必要部分(如函数库模块等)连接起来,生成可执行程序(文件扩展名为.exe)。运行该程序就会看到程序执行的效果。
    如上所述,开发一个高级语言程序需要经过用编辑器生成源程序、用编译器生成目标程序、用连接器生成可执行文件以及运行已经生成的可执行文件四个步骤。为使程序的开发更加方便,四个步骤中需要的编辑器、编译器、连接器等软件功能通常被集成到一个程序中,形成集成开发环境(Integrated Development Environment,IDE)。集成开发环境是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。C/C++的集成开发环境有很多,主要包括微软的Visual Studio系列、Borland的C++ Builder等。

    展开全文
  • 设计一个程序需要运用算法、数据结构、程序设计方法和语言。 算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用适合方法。 计算机算法分两大类:数值运算算法和非数值运算算法。 算法是解决“做什么”和...

    1 算法是程序的灵魂

    1.1 什么是算法

    程序包括两个方面的内容:
    (1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。
    (2)对操作的描述。即操作步骤,也就是算法。
    数据结构+算法=程序
    设计一个程序需要运用算法、数据结构、程序设计方法和语言。
    算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用适合的方法。
    计算机算法分两大类:数值运算算法和非数值运算算法。
    算法是解决“做什么”和”怎么做“的问题。
    ”做什么“就是目的,效果。
    ”怎么做“就是做哪些事情才能达到解决问题的目的;二是决定做这些事情的先后次序。

    1.2 怎样表示算法

    用自然语言表示算法
    用流程图表示算法
    用N-S流程图表示算法
    用伪代码表示算法

    2 程序的三种基本结构

    (1)顺序结构。各操作步骤是顺序执行。
    (2)选择结构。又称为判断结构或分支结构。
    (3)循环结构。又称重复结构,即在一定条件下反复执行某一部分的操作。
    这三种基本结构构成的程序称为“结构化程序”。
    if实现选择结构。
    for语句,while语句实现循环结构。

    3 C语言语句综述

    一个函数是由数据声明部分和执行语句组成。

    3.1 控制语句

    if()…else…
    条件语句,实现选择结构

    switch
    多分支选择语句
    for()…
    循环语句,实现循环结构

    while()…
    循环语句,实现循环结构

    do…while()
    循环语句,实现循环结构

    continue
    结束本次循环语句

    break
    中止执行switch或循环语句

    return
    从函数返回的语句

    3.2 函数调用语句

    由调用语句由一个函数调用加一个分号构成。如:printf();

    3.3 表达式语句

    表达式语句由一个表达式加一个分号构成,赋值表达式语句由一个赋值表达式加分号构成,如:a=3;

    3.4 空语句

    ;
    只有一个符号的语句,它什么也不做。

    3.5 复合语句

    用{}把一些语句括起来成为符合语句。如:
    在这里插入图片描述
    C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求。

    4 赋值表达式和赋值语句

    4.1 赋值表达式

    4.1. 1 赋值运算符

    赋值符号“=”就是复制运算符,它的作用是将一个 数据赋给一个变量。如:a=3,把常量3赋值给a。也可以将一个表达式赋值给一个变量。

    4.1.2 复合的赋值运算符

    分类:+=,-=,*=,/=,%=
    a+=3 等价于a=a+3
    x *=y+8等价于x=x *(y+8)
    x%=3等价于x=x%3

    4.1.3 赋值表达式

    由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的形式为: 变量 赋值运算符 表达式。如a=(b=7),a=1+(b=8)。
    赋值运算符按照“自右而左”的结合顺序。

    4.2 赋值过程中的类型转换

    (1)实型转整型。实型数据(单、双精度)赋值给整型变量,先对实数取整(即舍去小数部分),然后赋整型变量。
    如:i=2.33,以整数形式存储在整型变量,i=2。
    (2)整型转单精度或双精度变量。
    (3)double型数据转float变量。
    (4)字符型数据赋给整型变量。将字符的ASCII码赋给整型变量。
    (5)将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量。如:把一个4字节的long型数据赋给一个2字节的short型的short型变量,或将一个2字节的int型数据赋给1字节的char型变量

    4.3 赋值语句

    赋值语句是由赋值表达式加上一个分号构成,作用是将一个表达式的值赋给一个变量。
    注:一个表达式中可以包含一个或多个赋值表达式。

    4.4 变量赋初值

    设置初值既可以用赋值语句去实现,也可以在定义变量的同时使变量初始化。如:
    int a,b,c=5;
    int a=3,b=3,c=3;

    5 数据输入输出的概念

    C语言本身不提供输入输出语句。printf和scanf不是C语言的关键字,而只是库函数的名字
    putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)。
    在使用系统库函数时,应当在程序中使用预编译指令“#include”。如:#include <stdio.h>。目的是将有关的“头文件”的内容包括到用户源文件。
    stdio是standard input & output(输入和输出)的缩写。文件后缀中“h”是header的缩写。

    6 字符数据的输入输出

    6.1 用putchar函数输出一个字符

    putchar是put character(给字符)的缩写。作用是输出字符变量,向显示器输出字符。
    在这里插入图片描述
    putchar(’\n’)的作用是输出一个换行符。
    在这里插入图片描述

    整型数据与字符数据是相通的(整型数据的值应在字符的ASCIId代码范围内)。
    putchar函数只能输出字符不能输出整数。
    在这里插入图片描述

    6.2 用getchar函数输入一个字符

    调用系统函数库中的getchar函数(字符输入函数)。getchar是get char(取得字符)的缩写。
    作用是从显示器的键盘输入一个字符,就是计算机得一个字符。
    getchar没有参数,一般形式是getchar()。
    getchar函数只能接受一个字符。
    在这里插入图片描述
    输入BOY,回车。

    在这里插入图片描述
    此外,getchar函数可以获得在屏幕无法显示的字符,如控制字符\n,\r…
    在这里插入图片描述
    输入B,回车,输入O,得出B 回车O。

    7 简单的格式输入与输出

    输入输出主要用printf和scanf函数实现的。这两个函数是格式输入输出的函数。

    7.1 printf函数输出数据

    格式:
    printf(格式控制,输出列表)
    如:
    printf("%d,%c\n",i,c)
    格式控制包括格式声明和普通字符。
    格式声明由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据转换为指定的格式输出。

    7.1.1 d格式字符

    十进制整型数据的实际长度输出。
    在这里插入图片描述

    7.1.2 c格式字符

    输出一个字符。
    一个整数,只要他的值在0~255范围内,可以用“%c”按字符形式输出,将该整数作为ASCII码转换成相应的字符。
    在这里插入图片描述

    7.1.3 s格式字符

    用来输出一个字符串
    在这里插入图片描述

    7.1.4 f格式字符

    用来输出实数(单、双精度),以小数形式输出。单精度实数的有效数为6~7位,双精度有效数为15 ~16位。
    在这里插入图片描述
    a,b为float类型,a+b只能保证6~7位精度,所以只有前7位数字是有效数字,后面的几位数字是误差,千万不要以为凡是计算机输出的数字都是准确的。

    7.1.5 e格式字符

    用格式声明%e指定指数形式输出实数。
    在这里插入图片描述
    e也可以写成大写E形式。

    在这里插入图片描述

    普通字符即需要的原样输出的字符。如:a=%b,a就是普通字符。
    输出列表是需要输出的一些数据,可以是常量、变量或表达式。

    7.2 scanf函数输入数据

    7.2.1 scanf函数的一般形式

    scaf(格式控制,地址表列)
    地址表列是由若干个地址组成的表列,可以是变量的地址或字符串的首地址。
    在这里插入图片描述
    ”&“是“地址运算符”,&a指变量a在内存中的地址。
    输入的a,b,c的值放到变量a,b,c的存储单元,然后根据&a,&b,&c找到a,b,c的存储单元。
    “%d%d%d”表示要按十进制整数形式连续输入3个数据。输入数据时,在两个s数之间以一个或多个空格分隔,也可以按Enter键或Tab键分隔输入数据。

    7.2.2 scanf函数中的格式声明

    scanf函数中的“格式控制”后面是变量地址,不是变量名。
    正确写法:scanf("%d%d%d",&a,&b,&c);
    错误写法:scanf("%d%d%d",a,b,c);

    在输入数据时在对应位置应输入与这些字符相同的字符。
    在这里插入图片描述
    在两个%d间插入一个逗号。
    在输入的两个数据间也应插入一个逗号。

    在用%c格式声明输入字符时,空格字符和转义字符都作为有效字符输入。
    在这里插入图片描述

    在这里插入图片描述
    这里输入a 空格 b,a传给变量a,空格传给变量b,b传给变量c。

    在输入数据时,空格键、Enter键、Tab键或遇到不合要求的输入,认为该数据结束。
    在这里插入图片描述
    12312传给变量a,a传给变量b,21232传给变量c。

    对于unsigned型变量所需的数据,可以用%u或%d格式输入。

    8 顺序结构程序设计举例

    8.1 输入三角形的三个边长,求三角形面积

    知道三边求三角形面积的公式:
    在这里插入图片描述
    在这里插入图片描述
    定义5个双精度变量。
    %lf,l是格式字符f的附加字符,lf表示实数,即双精度数据,不加附加字符l,则不能用于输入双精度变量。
    sqrt函数是求平方根的函数。由于要调用属性函数库的函数,需要在程序开头加一条#include,把头文件math.h包含到程序中来。
    “%7.2f”表示指定输入数据的字段宽度为7列,其中小数点后的数字为2列。

    用来丰富格式字符功能的附加字符称为“修饰符”。表示为“ %m.nf ”m必须大于n。

    8.2 从键盘输入一个大写字母,输出该小写字母

    小写字母的ASCII=大写字母的ASCII+32
    在这里插入图片描述
    用fetchar函数的到从键盘输入的字母‘A’,赋值给字符变量c1。将c1分别用字符形式(‘A’)和整型形式(65)输出。得出‘a’,赋值给c2,将c2分别用字符形式(‘a’)和整数形式(97)输出。

    9 简单易用的C++的输入输出

    c++用cin进行输入,用cout进行输出。cout输出不用考虑输出格式(%d%f)。
    <<是输出运算符,>>是输入运算符
    每个<<只能输出一个项。
    如果程序用C++的cincout进行输入输出,应在程序文件开头写“#include <iostream.h>”。此时,不用写“#include <stdio.h>”。

    例如:
    C语言的输出语句:
    printf(“a=%f\n”,a);
    在c++中可用以下形式输出:
    cout<<“a=”<<a<<"\n";

    C语言的输入语句:
    scanf("%d %f",&a,&b);
    C++的输入:
    cin>>a>>b;

    总结:
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    输入数据时不可以规定精度,输出时才可以规定精度。

    格式控制:scanf函数和printf函数中的双撇号中的部分。
    格式声明:由%和格式字符组成,如%d,%c,%7.2f。
    格式字符:用来指定各种输出格式,如d,c,f等。
    修饰符(附加格式字符):对格式字符的作用补充说明,如%3d,%5.2f,%-10.3f中的3,5.3,-10.3。

    展开全文
  • 时磊忖呎 时磊忖呎 经典C语言程序设计100例 1.数字排列 37.对10个数进行排序 70.计算一个字符串长度 2.奖金分配问题 38.求3*3矩阵对角线元素之和 71.编写输入/输岀函数 3.已知条件求解整数 72.创建链表 4.输入日期...
  • 游戏输赢评定标准是:给定一定数量苹果,谁取了最后一个苹果就算谁赢。游戏规则是:人和电脑双方轮流取苹果;第一次无论哪一方先取苹果,都只能取“1~总苹果数目-1”之间(包括边界)数目苹果;之后每一方取...

     

    二、实验要求

    1.游戏输赢的评定标准是:给定一定数量的苹果,谁取了最后一个苹果就算谁赢。游戏规则是:人和电脑双方轮流取苹果;第一次无论哪一方先取苹果,都只能取“1~总苹果数目-1”之间(包括边界)数目的苹果;之后的每一方取苹果的数目只能是“1~上一次对方取苹果数目的两倍”之间的苹果个数;直至某一方将苹果取完为止,游戏才告结束。

    2.该实验的课内学时是4个课时。

    3.程序完成后应该完成如下基本功能:

    1)游戏取苹果的先后次序可以选择(人先取或电脑先取)。

    2)在游戏中人取多少个苹果由参加游戏的用户自己决定输入,输入之后程序必须判断用户是否按规则输入苹果个数(每一方取苹果的数目只能是“1~上一次对方取苹果数目的两倍”之间的苹果个数)。因此程序应该有明确的提示信息,提示用户输入的苹果以及应该输入的苹果个数范围。用户输入之后,程序必须检查用户输入是否正确。

    3)电脑取苹果的数目由程序来决定,赢取游戏的关键是费波那契数列的应用。具体参看实验提示。

    4)游戏最后必须说明哪一方赢得游戏。

    3.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:

    1)游戏的速度分为快速和慢速两种。快速游戏的电脑取苹果个数方法参看实验提示。

    2)游戏的提示语言清晰明确,界面美观适用。

    三、实验提示

    这是一个费波那契数列的应用程序。赢取游戏的关键是:如果一方正处于所剩苹果数目为一个FINONACCI数时,如果这一方不能取完苹果,则一定处于“输的状态”。例如,现在剩3个苹果,如果你无法取完,则无论你取1个或2个,电脑在此均可以取完剩下的苹果而获胜。

    任何一个数都可以分解为几个FIBONACCI数之和,如12=8+3+134=21+138=5+3等;如果现在轮到一方取,这一方恰巧可以取到现在所剩苹果总数分解为FIBONACCI数之和中的那个最小的FIBONACCI数,则那一方现在就处于“胜利的状态”,但并不表示已经胜利,因为后面也必须一直取正确数目的苹果才能最终获胜。

    注意在对一个数进行FIBONACCI分解时,要分解为从大到小的FIBONACCI数,不能跳跃,若8不可以分解为5+2+1(这个分解跳跃了3,从而导致错误的判断),而应该分解为5+3

    电脑取苹果数目有以下出发点:当电脑处于“输的状态”时,电脑要尽量减慢比赛进度,使用户可能出现苹果数目的错误;但当电脑处于“胜利的状态”时,可以按“快取”和“慢取”两种速度,如果是慢取,则电脑每次只取正常分解情况下所剩的最小的FIBONACCI数即可;如果是快取,则电脑可以尝试向前多取几个被分解的FIBONACCI数即可(要保证仍处于胜利状态)。例如:如果现在所剩苹果数目为17,而17=13+3+1,那么快取情况下可以取4从而加快比赛的进程,而使电脑迅速获胜,而且不会导致电脑进入“输的状态”。但是,如果现在所剩苹果数目为12,而12=8+3+1,那么就不可以取4,只能取1,想想为什么?

     

    展开全文
  • 通过运行简单的程序初步了解的C的结构和特点 4. 掌握基本的出错调试 二实验内容和要求 编辑编译连接和运行一个程序输出HelloC++! 三实验任务分解 四实验步骤 1.新建一个win32 Console Application的工程打开V
  • 经典 C 语言程序设计 100 例 1.数字排列 37.对 10 个数进行排序 70.计算一个字符串长度 2.奖金分配问题 38.求 3*3 矩阵对角线元素之和 71.编写输入/ 输出函数 3. 已知条件求解整数 72.创建链表 4.输入日期判断第几天...
  • 程序设计基础(C)课程设计汇报 简易计算器设计 学 生 姓 名 学 号 班 级 指 导 老 师 日 期 309工作室设计 目 录 TOC \o "1-3" ...10 7308 五分析及结论 11 21339 六参考文件 12 30011 附录 13 一设计目标 设计一个C语言
  • 这段程序是为了输入一个月份(英文单词),然后返回截止到输入月份所有月天数总和(比如我输入march,则返回1-3月份天数总和)。函数部分功能是如果月份输入正确,就返回总数。如果输入不正确,那就返回-1。...
  • C 语言程序设计 程序设计基础(C)课程设计报告 简易计算器设计 学生姓名 学号 班级 指导老师 日期 309...一设计目标 设计一个C 语言程序简单计算器设计 具体要求在功能上功能尽量模拟windows 操作系统中计算器系统界面
  • 用户定义标识符 用户定义标识符用于对用户使用变量数组和函数等操作对象进行命名例如将一个变量命名为a将一个数组命名为date将一个函数命名为fun等 用户标识符命名时要注意 (1) C语言对英文字母大小写敏感即...
  • 大一的C语言课程设计,实现了通讯录基本操作以及简单加密
  • * * C语言程序设计 第二章 程序的简单算法制定 2.1 结构化程序的算法制定 2.2 结构化程序的算法描述 2.3 算法制定范例 2.1 结构化程序的算法制定 利用计算机处理问题简述 例让某学生解方程 ax2+bx+c=0 求解过程 ...
  • 编写一个程序计算并输出某位员工应发工资。 具体要求: ①该员工劳动时间和每小时工资数通过键盘输入,且在输入前要有提示信息。 ②在输出结果时要有文字说明,输出结果小数点后取2位小数。 ③工作时间定义为...
  • C语言实现一个简单的HTTP Client(HTTP客户端) (2007-04-17 21:32) 分类: 程序设计 http://blog.chinaunix.net/space.php?uid=11085590&do=blog&id=2914561 HTTP协议是一个基于文本的协议...
    
    
    
    分类: 程序设计

    HTTP协议是一个基于文本的协议,因此用C语言实现一个简易的HTTP客户端就不是什么难事。但如果对这个不熟悉,要想一下子实现一个HTTP GET方法取获取一个网页这么简单的功能恐怕也未必是两三分钟能搞定的事。其关键是要理解HTTP协议的工作原理,具体参见RFC2616规范(http://www.ietf.org/rfc/rfc2616.txt);
    本文仅仅用一二十行代码就实现了一个简单的HTTP客户端,它能够将163的首页获取并打印出来。
    全部源代码如下(httpClient.c),注意下面的程序是经过精简的,很多参数直接写入了程序,仅仅作为演示用。其中163服务器地址是通过ping www.163.com 获取到的,可能有变,测试时请灵活一点。
    只需修改“strcat(sndBuf, "Host: www.163.com\n\r\n");”和“ inet_addr("202.108.9.51");”就可以获取其他地址的页面。
    #include <stdio.h>
    #include "winsock2.h"
     
    #pragma comment(lib, "ws2_32.lib")
     
    int main()
    {
           SOCKET      sSocket      = INVALID_SOCKET;
           SOCKADDR_IN stSvrAddrIn = {0}; /* 服务器端地址 */
           char        sndBuf[1024] = {0};
           char        rcvBuf[2048] = {0};
           char       *pRcv         = rcvBuf;
           int         num          = 0;
           int         nRet         = SOCKET_ERROR;
     
        WSADATA     wsaData;
     
           /* HTTP 消息构造开始,这是程序的关键之处 */
           sprintf(sndBuf, "GET / HTTP/1.1\n");
           strcat(sndBuf, "Host: www.163.com\n\r\n");
           /* HTTP 消息构造结束 */
          
           /* socket DLL初始化 */
        WSAStartup(MAKEWORD(2, 0), &wsaData);
     
           stSvrAddrIn.sin_family      = AF_INET;
        stSvrAddrIn.sin_port        = htons(80);
           stSvrAddrIn.sin_addr.s_addr = inet_addr("202.108.9.51");
     
           sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     
           /* 连接 */
           nRet = connect(sSocket, (SOCKADDR*)&stSvrAddrIn, sizeof(SOCKADDR));
           if (SOCKET_ERROR == nRet)
           {
                  printf("connect fail!\n");
                  return -1;
           }
          
           /* 发送HTTP请求消息 */
           send(sSocket, (char*)sndBuf, sizeof(sndBuf), 0);
     
           /* 接收HTTP响应消息 */
           while(1)
           {
                  num = recv(sSocket, pRcv, 2048, 0);
     
                  pRcv += num;
     
               if((0 == num) || (-1 == num))
                  {
                         break ;
                  }
           }
          
           /* 打印响应消息 */
           printf("%s\n", rcvBuf);
     
           return 0;
    }
     
    本程序的最为关键是构建HTTP GET消息。HTTP协议规范4.1小节中描述了HTTP消息的格式,它包括一个起始行,零个或多个消息头,然后是空行(CRLF),最后是可选消息体。演示程序中构建的HTTP消息包含一个请求行(GET / HTTP/1.1)和一个消息头(Host: www.163.com)。如下两行代码:
    sprintf(sndBuf, "GET / HTTP/1.1\n");
    strcat(sndBuf, "Host: www.163.com\n\r\n");
    GET是HTTP的获取方法,随后的’/’表示获取根目录下的默认页面,”HTTP/1.1”标明了协议及版本,注意后面的”\n”是必不可少的。
    下面一行是消息头,指明了获取的主机,注意后面的”\n\r\n”,这个一定不能错。空行CRLF就是用”\r\n”表示,这一点耗费了我很多时间,希望写出来对大家有帮助。
    本程序在Visual C++6.0环境下编译通过并运行。直接执行程序,将打印出如下所示的获取结果:
    HTTP/1.0 200 OK
    Date: Tue, 03 Apr 2007 15:40:35 GMT
    Server: Apache/2.0.55 (Unix)
    Accept-Ranges: bytes
    Vary: Accept-Encoding
    Content-Length: 115440
    Content-Type: text/html; charset=GB2312
    Age: 176
    X-Cache: HIT from www.163.com
    Connection: close
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or
    g/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>网易</title>
    <base target="_blank" />
    <meta name="Keywords" content="网易,新闻,体育,娱乐,女性,旅游,文化,论坛,短
    信,数码,汽车,手机,财经,科技" />
    <meta name="Description" content="网易,新闻,体育,娱乐,女性,旅游,文化,论坛
    ,短信,数码,汽车,手机,财经,科技,专业报道门户网站" />
    <meta name="robots" content="index, follow" />
    <meta name="googlebot" content="index, follow" />
    <style type="text/css">
    <!--
    /* CSS Document */
    body { text-align: center;"宋体", arial;margin:0; padding:0; backgr
    ound: #FFF; font-size:12px; color:#000;}
    div,form,img,ul,ol,li,dl,dt,dd {margin: 0; padding: 0; border: 0;}
    h1,h2,h3,h4,h5,h6 { margin:0; padding:0;}
    table,td,tr,th{font-size:12px;}
     
    /* 链接颜色 */
    a:link {color: #1f3a87; text-decoration:none;}
    a:visited {color: #83006f;text-decoration:none;}
    a:hover {color: #bc2931; text-decoration:underline;}
    a:active {color: #bc2931;}
    /* 颜色属性 [定义规则,小写c加?
    从上面的打印结果可以看出,163用的Apache服务器,主机操作系统是Unix。
    展开全文
  • 第3章 最简单的C语言程序设计--顺序程序结构)例3.1有人用温度计测量出用华氏法表示的温度,今要求把它转换为以摄氏法表示的温度。例3.2计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为r1;...
  • 由高级语言编写的程序成为源程序,由C语言编写的程序扩展名为“.c",编译后生成".obj",链接后生成".exe" 二、结构化程序设计 顺序结构 选择结构 循环结构 说明:C语言属于结构化程序设计 C程序设计的初步...
  • C程序的基本组成单位是函数而函数由语句构成所以语句是C程序的基本组成成分语句能完成特定操作语句有机组合能实现指定计算处理功能语句最后必须有一个分号分号是C语句组成部分;变量声明语句 i
  • 程序设计基础 (C) 课程设计报告 简易计算器设计 学 生 姓 名 学 号 班 级 指 导 老 ...11 附录 12 C 语言程序设计 一设计目标 设计一个 C 语言程序简单计算器设计 具体要求在功能上功能尽量模拟 windows 操作系统中
  • C语言一个简单的通讯录管理系统并用文件来保存数据。要求:要将用户输入的内容以文件的形式保存到电脑上要求的位置,实现简单的增删改查操作。要能够对于简单的错误进行处理,并给予用户相应的操作提示。 该程序...
  • 机器语言又称低级语言,意思是贴近计算机硬件的语言,是一个型号机器语言的指令的集合,是紧密依赖于计算机的硬件。 高级语言用于程序设计。 编译系统的软件事先把高级语言编写的程序翻译成机器语言程序。 2 C语言...
  • 浙江大学c语言程序设计专题用的图形库的一个重构和改进版本 (以及简单的CAD demo) github地址:https://github.com/yunwei37/graphics
  • 设计一个简单的求和程序,通过本实例掌握如何创建、编辑、连接和运行C程序。 实现过程: #include&lt;stdio.h&gt; main() { int a, b, sum; a = 123; b = 789; sum = a + b; printf("sum is...
  • C 语言程序设计 程序设计基础(C)课程设计报告 简易计算器设计 学生姓名 学号 班级 指导老师 日期 309...一设计目标 设计一个C 语言程序简单计算器设计 具体要求在功能上功能尽量模拟windows 操作系统中计算器系统界面
  • 使用C语言设计一个程序,开发工具bcb 简单的学生成绩管理程序设计 1,程序设计原始数据输入和结果输出要求使用文件存储 2,计算每个学生三门功课的平均分,并按平均分排列名次,若平均分相同则名次并列,结果...
  • C语言程序设计 输入一个分数 判断分数等级 简单的代码设计
  • 第3章 最简单的c语言设计——顺序程序设计例3.1 把华氏温度转换为以摄氏法表示的温度例3.2 计算存款利息例3.3 给定一个大写字母,要求用小写字母输出例3.4 给出三角形的三边长,求三角形面积例3.5 求ax^2^+bx+c=0...
  • 第三章 最简单的c语言设计——顺序程序设计例3.1 把华氏温度转换为以摄氏法表示的温度。例3.2 计算存款利息。例3.3 给定一个大写字母,要求用小写字母输出。例3.4 给出三角形的三边长,求三角形面积。例3.5 求ax^2+...
  • 本章学习目标能力目标认识编程规范与编程风格重要性初步掌握常用算法描述工具能模仿编写一个符合C语言规范简单C语言程序在VC++开发环境下创建一个简单C语言程序并运行知识目标了解C语言的特点与当前应用熟悉C语言...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,988
精华内容 1,195
关键字:

c语言设计一个简单的程序

c语言 订阅