精华内容
下载资源
问答
  • PAGE / NUMPAGES C语言程序讲解40例 程序1 题目有1234个数字能组成多少个互不相同且无重复数字的三位数都是多少 1.程序分析可填在百位十位个位的数字都是1234组成所有的排列后再去 掉不满足条件的排列 2.程序源代码 ...
  • C语言程序讲解40例.pdf

    2020-07-17 00:29:38
    实用标准文案 C 语言程序讲解 40 例 程序 1 题目有 1234 个数字 能组成多少个互不相同且无重复数字的三位数都是多少 1. 程序分析可填在百位十位个位的数字都是 1234 组成所有的排列后再去 掉不满足条件的排列 2. ...
  • c语言程序讲解40例

    2014-02-07 17:26:31
    word文件格式,内容如题含解析
  • 系统把一个浮点型数据分成小数和指数部分分别存放 一个浮点型数据一般在内存中占4个字节 32位 4个字节 32位 中 多少位来表示小数部分 多少位表示指数部分 由编译系统自定 不少C语言编译系统以24位表示小数部分 以8位...

    注意 编译系统将大写字母和小写字母认为是两个不同的字符 例如 Class和class是两个不同的变量名 建议变量名的长度最好不要超过8个字符 在选择变量名和其它标识符时 应注意做到 见名知意 即选有含义的英文单词 或其缩写 作标识符 1 整型数据在内存中的存放形式数据在内存中是以二进制补码形式存放的 如 inti 定义为整型变量 i 10 给i赋以整数10 图3 2 2整型变量 十进制数10的二进制形式为1010 TurboC2 0和TurboC 3 0为整型变量分配2个字节的内存存储单元 不同的编译系统为整型数据分配的字节数是不相同的 TurboC2 0和TurboC 3 0为整型变量分配2个字节内存存储单元 VC 6 0则分配4个字节 数值是以补码 complement 表示的 一个正整数的补码和该数的原码 即该数的二进制形式 相同 而一个负数的补码是 将该数的绝对值的原码 按位取反再加1 例如i 10时 说明 如果在程序中定义a和b两个变量 inta unsignedintb 则变量a的数值范围为 32768 215 32767 215 1 而变量b的数值范围为0 65535 216 1 整数类型的有关数据 类型类型说明符长度数的范围基本型int2字节 32768 32767 215 1 短整型short2字节 215 215 1长整型long4字节 231 231 1无符号整型unsigned2字节0 65535 216 1 无符号短整型unsignedshort2字节0 65535无符号长整型unsignedlong4字节0 232 1 3 整型变量的定义 语言规定在程序中所有用到的变量都必须在程序中定义 即 强制类型定义 变量的定义一般放在一个函数的开头的声明部分 例如 inta b 指定变量 为整型 unsignedshortc d 指定变量 为无符号短整型 longe f 指定变量 为长整型 例3 2整型变量的定义与使用 includevoidmain inta b c d 指定 为整型变量 unsignedu 指定 为无符号整型变量 a 12 b 24 u 10 c a u d b u printf a u d b u d n c d 说明 可以看到不同种类的整型数据可以进行算术运算 本例中是int型数据与unsignedint型数据进行加减运算 运行结果 a u 22 b u 14 4 整型变量的溢出 在TurboC和TurboC 中 一个int型变量的最大允许值为32767 如果再加1 会出现什么情况呢 例3整型数据的溢出 includevoidmain inta b a 32767 b a 1 printf d d n a b 说明 数值是以补码表示的 一个整型变量只能容纳 32768 32767范围内的数 无法表示大于32767或小于 32768的数 遇此情况就发生 溢出 运行结果 32767 32768 1 浮点型数据在内存中的存放形式浮点型数据在内存中按照指数形式存储 系统把一个浮点型数据分成小数和指数部分分别存放 一个浮点型数据一般在内存中占4个字节 32位 4个字节 32位 中 多少位来表示小数部分 多少位表示指数部分 由编译系统自定 不少C语言编译系统以24位表示小数部分 以8位表示指数部分 2浮点型变量 小数部分占的位数越多 数的有效数字越多 精度也就越高 指数部分占的位数越多 则能表示的数值范围越大 实数3 14159在内存中的存放形式用图表示为 图3 7 类型位数数的范围有效数字float32 3 4 10 38 3 4 10386 7位double型64 1 7 10 308 1 7 1030815 16位longdouble128 1 2 10 4932 1 2 10493218 19位 2 浮点型变量的分类浮点型变量分为单精度 float型 双精度 double型 和长双精度型 longdouble 三类形式 例4浮点型数据的舍入误差 includevoidmain floata b a 123456 789e5 b a 20 printf f f n a b 说明 一个单精度浮点型变量的有效数字是7位 后面的数字是无意义的 因此应当避免将一个很大的数和一个很小的数直接相加或相减 否则就会 丢失 小的数 与此类似 用程序计算1 0 3 0 3的结果并不等于1 运行结果 12345678848 000000 12345678848 000000 3 浮点型数据的舍入误差 C编译系统将浮点型常量作为双精度来处理 例如 floatf f 2 45678 4523 65 系统把2 45678和4523 65作为双精度数 64位 进行相乘的运算 得到的乘也是一个双精度数 最后取其前7位赋给单精度浮点型变量f 如果在数的后面加字母f或F 如1 65f 654 87F 编译系统就会把它们按单精度 32位 处理 浮点型常量的类型 一个浮点型常量可以赋给一个float型 double型或longdouble型变量 根据变量的类型截取常量中相应的有效位数字 假如指定a为单精度浮点型变量 floata a 111111 111 由于float型变量只能接收7位有效数字 因此最后两位小数不起作用 如果a改为double型 则能全部接收上述9位数字并存储在变量a中 ddd1到3位八进制数所代表的字符注意 八进制数代表的是字符的ASCII码 例如 101 代表大写字母 A 八进制101相当于十进制的65 从附录A可以查到ASCII码为65的字符是大写字母 A 0 或 000 代表ASCII码为0的控制字符 即 空操作字符 它常用在字符串中 xhhhh表示1到2位十六进制数所代表的字符 例5转义字符的使用 includevoidmain printf abc tde rf tg n printf h ti b bjk n 程序运行时输出以下结果 fabcgdehjik显示屏上的运行结果 fgdehjk 说明 实际上 屏幕上完全按程序要求输出了全部的字符 只是因为在输出前面的字符后很快又输出后面的字符 在人们还未看清楚之前 新的已取代了旧的 所以误以为未输出应输出的字符 而在打印机输出时 不像显示屏那样会 抹掉 原字符 能真正反映输出的结果 字符型变量用来存放字符常量 注意只能放单个字符 字符变量的定义形式如下 charc1 c2 c1 c2为字符型变量 各可以放一个字符 定义后就可以用下面语句对c1 c2赋值 c1 a c2 b 在所有编译系统中都规定以一个字节来存放一个字符 或者说一个字符变量在内存中占一个字节 2字符变量 将一个字符常量放到一个字符变量中 实际上并不是存放字符本身 而是将该字符的相应的ASCII代码放到存储单元中 附录A 例如 charc1 c2 c1 a c2 b 因此一个字符数据既可以以整数形式输出 直接输出其ASCII码 也可以以字符形式输出 将ASCII码转换成相应字符然后输出 字符数据在内存中的存储形式及其使用方法 例6向字符变量赋以整数 includevoidmain charc1 c2 c1 97 c2 98 printf c c n c1 c2 printf d d n c1 c2 说明 在第5和第6行中 将整数97和98分别赋给c1和c2 它的作用相当于两个赋值语句 c1 a c2 b 因为 a 和 b 的ASCII码为97和98 程序的第5和第6行是把97和98两个整数直接存放到c1和c2的内存单元中 而c1 a 和c2 b 则是先将字符化成ASCII码 再放到内存单元中 二者的结果是相同的 运行结果 9798 一个字符型数据既可以以字符形式输出 c 也可以以整数形式输出 d 例7大小写字母的转换 includevoidmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf c c c1 c2 说明 程序的作用是将两个小写字母a和b转换成大写字母A和B 从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32 运行结果 语言允许字符数据与整数直接进行算术运算 字符数据与整型数据可以相互赋值 例如 inti charc i a c 97 是合法的 如果用 d 输出i的值将得到97 用 c 输出c的值可得到字符 a 如果在上面语句之后执行以下语句 printf c d n c c printf c d n i i 输出 a 97a 97

    展开阅读全文

    展开全文
  • 由浅入深讲解C语言程序设计,有示例以及程序实践,具有实战性
  • C语言程序设计一讲解1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 《C语言程序设计》-第一章 《C语言程序设计》-第一章 * 《C语言程序设计》-第一章 * 第1章 C语言概述 ...

    C语言程序设计一讲解

    1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 1.1.1c语言及其特点 * 《C语言程序设计》-第一章 《C语言程序设计》-第一章 * 《C语言程序设计》-第一章 * 第1章 C语言概述 1.1 计算机语言与结构化程序设计 1.2 C语言的发展历史和特点 1.3 C语言程序的基本结构和执行过程 1.4 C语言的字符集和标识符 * 《C语言程序设计》-第一章 * 1.1 计算机语言与结构化程序设计 1.1.1 计算机语言 1.1.2 结构化程序设计 * 《C语言程序设计》-第一章 * 第一代:机器语言(低级语言):面向机器、可移植性差、效率高、不方便编程 第二代:汇编语言 第三代:高级语言:面向程序员、可移植性好、执行效率低、便于编程 第四代:面向对象式语言 1.1.1计算机程序设计语言 * 《C语言程序设计》-第一章 * 1.1.2 结构化程序设计 1.三种基本结构 结构化程序由三种基本控制结构组成: 顺序结构、选择结构和循环结构。 三种基本结构的流程图: P A B 真 假 选择结构 A B 顺序结构 A 真 P 假 循环结构 三种基本控制结构流程图 * 《C语言程序设计》-第一章 * 2.结构化程序设计的原则 自顶向下 逐步求精 模块化设计 限制使用 goto 语句 * 《C语言程序设计》-第一章 * C语言发展简介 ALGOL语言:1960,面向问题高级语言,不宜写系统程序 CPL语言: 1963,英剑桥,能够作较低层次的操作,但规模较大,难以实现 BCPL语言:(Basic combined programming language) 1967,英剑桥Martin Richards改进CPL B语言: 1970,美贝尔实验室Thompson简化BCPL,用B写UNIX操作系统 C语言: 1972,贝尔实验室,Ritchie和Kernighan设计,保持B和BCPL的精炼与接近硬件,克服其简单和数据无类型的缺点。描述和实现UNIX的工具语言 1977,《可移植C语言编译程序》,C与UNIX相辅相成 1978,Kernighan和Richie,《The C Programming Language》,标准C语言 1983,美国国家标准化协会(ANSI),ANSI C 1990,国际标准化组织(ISO)通过 1.2 C语言的发展历史和特点 * 《C语言程序设计》-第一章 * 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 Ada ALGOL60 ALGOL68 Pascal Modula-2 CPL BCPL B C C++ Java LISP PROLOG COBOL FORTRAN77 FORTRAN PL/1 Simula 67 Smalltalk 80 BASIC ANSI-BASIC QBASIC VB FORTRAN90 < > * 《C语言程序设计》-第一章 * C语言特点      (1) 较低级语言(中级语言)   (2) 结构化语言   (3) 运算能力强   (4) 数据类型多   (5) 有预处理能力   (6) 可移植性好   (7) 语法不严格 1.2.1 C语言及其特点 * 《C语言程序设计》-第一章 * 9种控制语句: if( )~else~ for( )~ while( )~ do~while( ) continue break switch goto return < * 《C语言程序设计》-第一章 * 34种运算符: 算术运算符:+ - * / % ++ -- 关系运算符:< <= == > >= != 逻辑运算符:! && || 位运算符 :<< >> ~ | ^ & 赋值运算符:= 及其扩展 条件运算符:?: 逗号运算符:, 指针运算符:* & 求字节数 :sizeof 强制类型转换:(类型) 分量运算符:. -> 下标运算符:[] 其它 :( ) - < * 《C语言程序设计》-第一章 * C 数 据 类 型 基本类型 构造类型 指针类型 空类型void 定义类型typedef 数值类型 字符类型char 枚举类型enum 整 型 浮点型 单精度型float 双精度型double 短整型short 长整型long 整型int 数组 结构体struct 共用体union <

    展开全文
  • C语言程序实例 精讲 单片机 程序
  • 程序改错 共44题 第1题 (10.0分 题号:380 难度中 第章 /----------------------------------------- 程序改错 ------------------------------------ 功能输入两个双精度数,函数返回它们的平方和的平方根值 例如...
  • 0.618法的C语言程序 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 0.618法 1.用C或C++等编程语言编写0.618法的程序并...
  • 趣味C语言编程讲解

    2015-12-14 23:20:15
    趣味C语言编程讲解,对一些常见的趣味C程序进行讲解
  • 广州航海学院课程C语言设计任务书 设计人曾雨祥 专业1 计应 班级 171 学号 36 设计项目 学生试卷分数统计 指导教师 弓长翚 一 设计内容与要求 1 设计内容 学生试卷分数统计 1 表单设计需与题设保扌寸致 2 要求汉字...
  • 一选择题每题1分共20分 1.C语言程序从main)函数开始执行所以这个函数要写在 D A程序文件的开始 B程序文件的最后 C它所调用的函数的前面 D程序文件的任何位置 2.下列方法中错误的是 D A主函数可以分为两个部分主函数...
  • 指针实验讲解 1.2 main){ int a*p; p=&a; scanf%d&a; printf"p=%p *p=%d\n,p*p; printf%4d%4d\n*p++*p; printf"p=%x\n,p; } 1.4 void main) { int *p,a; a=2; p=&a; f(p; printf(a=%d,a; } void f(int *t) { *t=10; ...
  • 浅谈C语言中函数入门的讲解摘要:本文探讨了C语言中函数的讲解内容及讲解方法,提出了提高C语言教学质量一些建议和方法。关键词:C语言 函数程序模块字义声明调用C语言是国内外广泛使用的一种计算机语言,是计算机...

    浅谈C语言中函数入门的讲解

    摘要:本文探讨了C语言中函数的讲解内容及讲解方法,提出了提高C语言教学质量一些建议和方法。

    关键词:C语言 函数 程序 模块 字义 声明 调用

    C语言是国内外广泛使用的一种计算机语言,是计算机应用人员应掌握的一种程序设计工具。C语言是一种高级语言,采用结构化的程序设计方法:自顶向下、逐步细化、模块化设计、结构化编码。程序中的模块化在C语言中通常用函数来实现,因此对于学习C语言的人员来讲,熟练掌握函数是学好C语言的关键一步。本文根据教学过程中的实践经验,提出了一种新教学方法,以促进学生对函数的熟练掌握。

    1. 模块化

    在程序设计中常采用模块设计的方法,尤其是当程序比较复杂时,更有必要。在遇到一个大任务时,一般把它分为若干个小的子任务,每一个子任务就相对简单了。这些子任务就可以看作模块,每个模块完成特定的功能,按照一定的顺序执行这些模块,这个大任务就能顺利完成。在C语言中,可用函数来实现模块的功能。一个C程序可由一个主函数和若干个函数构成,由主函数调用其他函数,其他函数之间也可互相调用,同一个函数也可被一个或多个函数调用任意次。

    要想掌握函数,必须掌握函数的三大操作:定义、声明和调用。

    2. 函数的定义

    函数定义的一般形式:

    类型标识符 函数名(形式参数表列)

    声明部分

    语句

    函数的类型标识符是函数要返回的数据的类型,函数的形式参数是函数要进行数据处理时,需要从主调函数里获取的值。例:用函数实现计算两个整数的和。

    因为函数的功能是计算两个整数的和,首先要涉及到两个整数,而这两个整数不是固定的,要把这两个整数作为函数的形式参数;而最后得到的结果是这两个整数的和,要返回到主调函数,所以函数的类型标识符也应该是整型;而函数的功能则是把这两个整数相加,利用return语句返回两个整数的和。

    函数的定义如下:

    int add(int x,int y)

    {

    int z;

    z=x+y;

    return z;

    }

    (1)函数的名字是add,函数起名时也要遵循C语言标识符的规定;

    (2)函数的形式参数(简称“形参”)是x和y两个整数;

    (3)函数的功能是计算x+y的值,并把它的值赋给z,然后将z值返回;

    (4)因为z值是整数,所以函数的类型设置为int。

    3. 函数的声明

    在主调函数中一般要写上被调用函数的声明,除非被调用函数在主调函数前被定义。

    函数的声明是把函数的名字、函数的类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按照此进行对照检查。上面函数例子的声明就是:int

    add(int x,int y);

    有时在函数声明中可以不写形参名,只写形参的类型,称为函数的原型:int

    add(int,int);

    4. 函数的调用

    对函数的调用也是函数功能的实现。函数调用的一般形式为:函数名(实参表列);

    函数的实参是真正进行计算的数据,一般都有具体的数据。实参可以没有,但括弧不能省略。各实参之间用逗号间隔,实参与形参按顺序对应,一一传递数据。

    例:对上述函数的调用

    void main()

    {

    int a,b,c;

    scanf(“%d,%d”,&a,&b);

    c=add(a,b);

    printf(“%d”,c);

    }

    在此程序中:

    (1)a和b为实参,从键盘上输入,有固定的值;

    (2)调用add(a,b)函数时,把实参的值按照顺序对应一一传递给形参,即有x=a,y=b;

    (3)函数add通过形参得到实参的值后,进行运算z=x+y;

    得到两个整数的和;

    (4)再通过return语句将z的值返回到主调函数;

    (5)主调函数通过调用add(a,b)得到z的值,并将它赋值给c,得到了两个整数a,b的和。

    5. 如何编写函数

    编写函数时最主要的是函数的定义,因为函数的定义决定了函数声明和函数调用的格式,而函数的定义主要掌握函数的输入、输出和处理。

    (1)函数的输入,一般指函数的形参,即希望函数对哪些数据进行处理,这些数据大都要作为函数的形参而参与计算;

    (2)函数的输出,一般指函数的返回值,即希望函数调用后得到的数值;

    (3)函数的处理,一般函数内部所实现的功能,即通过何种算法利用形参的值得到返回值。

    在编写函数时,一般要确定好函数的输入、输出和处理。

    比如:利用函数计算n!的运算。

    分析这个问题,可以得到:

    (1)函数的输入是n,是一个整数;

    (2)函数的输出是n!,也是一个整数;

    (3)函数的处理,是进行1*2*3*……*n的运算得到n!的值,可用for循环进行计算。

    根据上述分析,编写函数时,首先给函数起一个名字,要做到“见名知义”。可以给函数起一个名字:jiancheng;函数的形参是一个整数,可命名为n;函数的返回值是一个整数,但这个整数的值可能会很大,它的数据类型可以设置为长整型,以满足计算的要求。如此,函数的定义如下:

    long jiancheng(int n)

    {

    long nn; //因此返回值为长整型数,首先定义一个长整型变量nn,来存储n!的值

    //然后在程序的最后一条语句中写上return

    nn语句,再写中间的语句

    int i;

    nn=1;

    for(i=2;i<=n;i++) //利用for循环计算n!

    nn=nn*i;

    return

    nn; //返回n!

    }

    函数定义好以后,就可以在其他函数中任意次地进行调用。

    void main()

    {

    int j;

    for(j=1;j<=10;j++)

    { printf(“%ld\n”,jiancheng(j)); }

    }

    这个函数实现的功能是在屏幕上输出1!,2!,……,10!,

    jiancheng函数被调用了10次,每一次调用函数的实参都不相同。

    小结

    在讲解函数的入门知识,强调函数的三大操作:定义、声明、调用,在编写函数时,提醒并强调学生注意函数的输入、输出和处理,就可使学生对于函数有充分深刻的理解,并能顺利地掌握函数的书写,从而提高C语言的教学质量。

    展开全文
  • 这是我收集的《C语言程序设计》课后习题讲解,希望能对大家有帮助~
  • C语言链表讲解

    2020-05-06 17:51:08
    链表和数组作为算法中的两个基本数据结构,在程序设计过程中经常用到。数组是大家在学习C语言中学到的第一种数据存储方法,其可以存储各种类型的数据,那么为什么还要使用链表来储存数据呢?这里首先先讲解一下两者...

    一、C语言中有了数组为什么还要使用链表

    链表和数组作为算法中的两个基本数据结构,在程序设计过程中经常用到。数组是大家在学习C语言中学到的第一种数据存储方法,其可以存储各种类型的数据,那么为什么还要使用链表来储存数据呢?这里首先先讲解一下两者的特性;

    数组的特性,在于可以方便的遍历查找需要的数据。在查询数组指定位置(如查询数组中的第4个数据)的操作中,只需要进行1次操作即可,时间复杂度为O(1)。但是,这种时间上的便利性,是因为数组在内存中占用了连续的空间,在进行类似的查找或者遍历时,本质是指针在内存中的定向偏移。然而,当需要对数组成员进行添加和删除的操作时,数组内完成这类操作的时间复杂度则变成了O(n)

    链表的特性,使其在某些操作上比数组更加高效。例如当进行插入和删除操作时,链表操作的时间复杂度仅为O(1)。另外,因为链表在内存中不是连续存储的,所以可以充分利用内存中的碎片空间。除此之外,链表还是很多算法的基础,最常见的哈希表就是基于链表来实现的。基于以上原因,我们可以看到,链表在程序设计过程中是非常重要的。

    使用链表可以解决数组的一些缺点:
    1、解决数组无法存储多种数据类型的问题。
    2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。
    3、数组进行遍历时效率还可以,当需要对数组成员进行添加和删除的操作时,数组内完成这类操作则很耗时间,效率也不高,对于插入和删除操作也是如此,而链表可以很好的解决这一问题。
    4、链表在内存中不是连续存储的,所以可以充分利用内存中的碎片空间。
    在这里插入图片描述
    基于以上的特性,所以根据不同需求,从而选择使用链表或数组能够更好的完成任务。说到链表,可能有些人还对其概念不是很了解。我们可以将一条链表想象成环环相扣的结点,就如平常所见到的锁链一样。链表内包含很多结点(当然也可以包含零个结点)。其中每个结点的数据空间一般会包含一据结构(用于存放各种类型的数据)以及一个指针,该指针一般称为next,用来指向下一个结点的位置。由于下一个结点也是链表类型,所以next的指针也要定义为链表类型。

    二、链表的结构:

    在这里插入图片描述
    从这幅图我们得出以下信息:
    这个简单链表的构成:
    头指针(Header),若干个节点(节点包括了数据域和指针域),最后一个节点要指向空。
    实现原理:头指针指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表。

    接下来看看链表的数据结构:

    typedef struct Linklist
    {
      char elem;  //代表数据域
      struct Linklist * next;  //代表指针域,指向直接后继元素
    }link;
    

    头结点、头指针和首元结点
    头结点: 有时,在链表的第一个结点之前会额外增设一个结点,结点的数据域一般不存放数据(有些情况下也可以存放链表的长度等信息),此结点被称为头结点。若头结点的指针域为空(NULL),表明链表是空表。头结点对于链表来说,不是必须的,在处理某些问题时,给链表添加头结点会使问题变得简单。
    首元结点: 链表中第一个元素所在的结点,它是头结点后边的第一个结点。
    头指针: 永远指向链表中第一个结点的位置(如果链表有头结点,头指针指向头结点;否则,头指针指向首元结点)。
    头结点和头指针的区别: 头指针是一个指针,头指针指向链表的头结点或者首元结点;头结点是一个实际存在的结点,它包含有数据域和指针域。两者在程序中的直接体现就是:头指针只声明而没有分配存储空间,头结点进行了声明并分配了一个结点的实际物理内存。
    在这里插入图片描述
    头结点一般不含数据,故可简化为下图所示:
    在这里插入图片描述
    单链表中可以没有头结点,但是不能没有头指针!

    三、链表的具体实现

    万事开头难,初始化链表首先要做的就是创建链表的头结点或者首元结点。创建的同时,要保证有一个指针永远指向的是链表的表头,这样做不至于丢失链表。
    例如创建一个链表(1,2,3,4):

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Linklist
    {
    	char elem;//代表数据域
    	struct Linklist * next;//代表指针域,指向直接后继元素
    }link;
    
    link * initLink()
    {
    	link * head_node = (link*)malloc(sizeof(link));//创建一个头结点
    	link * ptr = head_node;//声明一个指针指向头结点,用于遍历链表,此时这个指针就是头指针,后面会变换
    	ptr->next = NULL;//设置指向,防止其随意指向单元导致错误
    					  
    	for (int i = 1; i<5; i++)//生成链表
    	{
    		link *node = (link*)malloc(sizeof(link));
    		node->elem = i;
    		node->next = NULL;
    		ptr->next = node;
    		ptr = ptr->next;
    	}
    	return head_node;
    }
    
    void display(link *head_node)
    {
    	link* temp = head_node;//将temp指针重新指向头结点
    				   //只要temp指针指向的结点的next不是Null,就执行输出语句。
    	while (temp->next)
    	{
    		temp = temp->next;
    		printf("%d", temp->elem);
    	}
    	printf("\n");
    	system("pause");
    }
    
    int main()
    {
    
    	//初始化链表(1,2,3,4)
    
    	printf("初始化链表为:\n");
    
    	link *list = initLink();
    	display(list);
    	return 0;
    }
    

    具体运行流程如下图所示:
    在这里插入图片描述

    定位元素位置与查询某位置处的元素

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Linklist
    {
    	char elem;//代表数据域
    	struct Linklist * next;//代表指针域,指向直接后继元素
    }link;
    
    link * initLink()
    {
    	link * head_node = (link*)malloc(sizeof(link));//创建一个头结点
    	link * ptr = head_node;//声明一个指针指向头结点,用于遍历链表,此时这个指针就是头指针,后面会变换
    	ptr->next = NULL;//设置指向,防止其随意指向单元导致错误
    					  
    	for (int i = 2; i<6; i++)//生成链表
    	{
    		link *node = (link*)malloc(sizeof(link));
    		node->elem = i;
    		node->next = NULL;
    		ptr->next = node;
    		ptr = ptr->next;
    	}
    	return head_node;
    }
    
    void display(link *head_node)
    {
    	link* temp = head_node;//将temp指针重新指向头结点
    				   //只要temp指针指向的结点的next不是Null,就执行输出语句。
    	while (temp->next)
    	{
    		temp = temp->next;
    		printf("%d", temp->elem);
    	}
    	printf("\n");
    	system("pause");
    }
    
    //定位该数据在链表中的位置
    int localateElem(link * p, int elem)
    {
    	link *t = p;
    	int i = 1;
    	while (t->next)
    	{
    		t = t->next;
    		printf("t->elem = %d\n", t->elem);
    		if (t->elem == elem)
    		{
    			return i;
    		}
    		i++;
    	}
    	return -1;
    }
    
    int selectElem(link * p, int elem)
    {
    
    	link *t = p;
    	int i = 1;
    	while (i < elem)
    	{
    		t = t->next;
    		i++;
    	}
    	t = t->next;
    	//printf("%d号位置的元素为%d\n",elem,t->elem);
    	return t->elem;
    
    }
    
    int main()
    {
    
    	//初始化链表(1,2,3,4)
    
    	printf("初始化链表为:\n");
    	link *list = initLink();
    	display(list);
    
    	printf("查找元素2的位置为:\n");
    	int address = localateElem(list, 2);
    	if (address == -1)
    		printf("没有该元素\n");
    	else
    		printf("元素2的位置为:%d\n", address);
    
    	int data = selectElem(list, 2);
    	printf("2号位置的元素为%d\n",data);
    	display(list);
    
    	return 0;
    }
    

    链表插入、删除和替换操作

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Linklist
    {
    	char elem;//代表数据域
    	struct Linklist * next;//代表指针域,指向直接后继元素
    }link;
    
    link * initLink()
    {
    	link * head_node = (link*)malloc(sizeof(link));//创建一个头结点
    	link * ptr = head_node;//声明一个指针指向头结点,用于遍历链表,此时这个指针就是头指针,后面会变换
    	ptr->next = NULL;//设置指向,防止其随意指向单元导致错误
    					  
    	for (int i = 2; i<6; i++)//生成链表
    	{
    		link *node = (link*)malloc(sizeof(link));
    		node->elem = i;
    		node->next = NULL;
    		ptr->next = node;
    		ptr = ptr->next;
    	}
    	return head_node;
    }
    
    void display(link *p)
    {
    	link* temp = p;//将temp指针重新指向头结点
    				   //只要temp指针指向的结点的next不是Null,就执行输出语句。
    	while (temp->next)
    	{
    		temp = temp->next;
    		printf("%d", temp->elem);
    	}
    	printf("\n");
    	
    }
    
    //定位该数据在链表中的位置
    int localateElem(link * p, int elem)
    {
    	link *t = p;
    	int i = 1;
    	while (t->next)
    	{
    		t = t->next;
    		printf("t->elem = %d\n", t->elem);
    		if (t->elem == elem)
    		{
    			return i;
    		}
    		i++;
    	}
    	return -1;
    }
    
    int selectElem(link * p, int elem)
    {
    
    	link *t = p;
    	int i = 1;
    	while (i < elem)
    	{
    		t = t->next;
    		i++;
    	}
    	t = t->next;
    	//printf("%d号位置的元素为%d\n",elem,t->elem);
    	return t->elem;
    
    }
    
    link *insertElem(link * p, int elem, int add)
    {
    
    	link * temp = p;//创建临时结点temp
    
        //首先找到要插入位置的上一个结点
    	for (int i = 1; i<add; i++)
    	{
    		if (temp == NULL)
    		{
    			printf("插入位置无效\n");
    			return p;
    		}
    		temp = temp->next;
    	}
    
    	//创建插入结点c
    	link * c = (link*)malloc(sizeof(link));
    	c->elem = elem;
    	//向链表中插入结点
    	c->next = temp->next;
    	temp->next = c;
    
    	return p;
    
    }
    
    
    link * delElem(link * p, int add)
    {
    
    	link * temp = p;
    	//遍历到被删除结点的上一个结点
    
    	for (int i = 1; i<add; i++)
    	{
    
    		temp = temp->next;
    
    	}
    
    	link * del = temp->next;//单独设置一个指针指向被删除结点,以防丢失
    
    	temp->next = temp->next->next;//删除某个结点的方法就是更改前一个结点的指针域
    
    	free(del);//手动释放该结点,防止内存泄漏
    
    	return p;
    
    }
    
    link *amendElem(link * p, int add, int newElem)
    {
    
    	link * temp = p;
    
    	temp = temp->next;//tamp指向首元结点
    
    					  //temp指向被删除结点
    
    	for (int i = 1; i<add; i++)
    	{
    
    		temp = temp->next;
    
    	}
    
    	temp->elem = newElem;
    
    	return p;
    
    }
    
    int main()
    {
    
    	//初始化链表(1,2,3,4)
    
    	printf("初始化链表为:\n");
    	link *list = initLink();
    	display(list);
    
    	printf("查找元素2的位置为:\n");
    	int address = localateElem(list, 2);
    	if (address == -1)
    		printf("没有该元素\n");
    	else
    		printf("元素2的位置为:%d\n", address);
    
    	int data = selectElem(list, 2);
    	printf("2号位置的元素为%d\n",data);
    
    	printf("在第4的位置插入元素6:\n");
    	list = insertElem(list, 6, 4);
    	display(list);
    
    	printf("删除元素3:\n");
    	list = delElem(list, 3);
    	display(list);
    
    	printf("更改第3的位置的数据为7:\n");
    	list = amendElem(list, 3, 7);
    	display(list);
    
    	system("pause");
    
    	return 0;
    }
    

    插入操作流程
    在这里插入图片描述
    删除操作流程
    在这里插入图片描述
    链表有很多类型,这里仅以单链表来讲解。

    展开全文
  • C语言技术讲解

    2019-03-01 13:55:50
    C语言是介于汇编语言和高级语言之间的语言,属于高级语言,也称为中级语言,是集汇编和高级语言优点于一身的程序设计语言。 C的特点&nbsp;: 1. 是一种结构化语言。层次清晰,便于按模块化方式组织程序,易于...
  • 高档单片机原理 及应用 第三讲 存储器单元 单片机C语言程序设计 SH3 7709 MEMORY SYSTEM 存储系统结构 高速缓存 存储器空间 存储管理单元 总线状态控制器 SH3 7709开发板存储资源 存储系统结构 SH3 CPU SH3 CACHE ...
  • C语言的多种实例枚举,详细的讲解介绍部分结合和讲解。算法基础与C语言基础
  • 主要介绍了举例讲解C语言程序中对二叉树数据结构的各种遍历方式,先序中序后序二叉树遍历几乎成了最老生常谈的数据结构基础知识,的朋友可以参考下
  • 在这里讲解一下简单的C语言程序(代码),希望自己能够在自己的电脑上敲几遍。 a与b的算术运算 描述:输出a和b的初始化值的简单算术运算。 代码: 输出结果: 分析:printf函数是将双引号中的内容输出到弹...
  • C语言程序设计 ;一几种循环的比较 C语言中三种循环结构都可以用来处理同一个问题但在具体使用时 存在一些细微的差别如果不考虑可读性一般情况下它们可以相互代替 循环变量初始化while和do-while循环循环变量初始化...
  • 程序设计 课程设计说明书 课程名称 程序设计 设计题目 飞机航班订票系统 专业班级 计算机应用技术201221 学生姓名 指导教师 起止日期2013年6月8日至2013年6月14日 福建林业职业技术学院自动化工程系 0 目录 ....
  • 编辑选择适当的编辑程序,将C语言程序通过键盘输入到计 算机中,并以文件的形式存入到磁盘中.C 2.编译即将源程序翻译成机器语言程序的过程编译出来的程 序称为目标程序.OBJ 3.连接编译后生成的目标文件经过连接后...
  • c语言程序设计

    2015-05-01 22:41:16
    丹尼斯里奇亲自撰写的c语言程序设计书,这本书清晰的讲解了c语言的基本语法知识,也给读者一个很好的c程序编程习惯。
  • 第五章 选择结构程序设计;5.1 关系运算符和关系表达式 关系运算实质是比较运算它是将两个值进行比较判断其比较的结果是否符合给定的条件其结果为真1或者为假0 5.1.1关系运算符及其优先次序 C语言提供了6种关系运算符...
  • 1.计算机二级C语言程序设计题库–截图word版本 注意: 题库截图到word文档中,适合直接背题,速度快,直接背诵答案对应答案的位置不适合练习程序。 如需要练习程序,可以下载程序文档(考试时我抽到的题目三道...
  • c语言程序实例 简单

    2011-01-17 20:34:27
    简单c语言程序 经典C语言程序设计实例讲解例子 初学者可以下载看看。
  • C语言程序设计》精品试题(附讲解答案)
  • 下面先给出代码再大概讲解每步代码的作用。 # include<stdio.h> # include<string.h> # include<algorithm> # include<queue> using namespace std; int n,c,m,b[5001],a[17],v[5001],mm...

空空如也

空空如也

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

c语言程序讲解

c语言 订阅