C语言程序设计教学大纲_第1页
C语言程序设计教学大纲_第2页
C语言程序设计教学大纲_第3页
C语言程序设计教学大纲_第4页
C语言程序设计教学大纲_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE1C语言程序设计任务驱动式教程教学大纲一、本课程的性质、目的和任务1.课程的性质《C语言程序设计》是计算机相关专业的一门重要的专业基础课程。也是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。它既可以为其它专业课程奠定程序设计的基础,又可以作为其它专业课程的程序设计工具。2.课程的目的设置本课程的主要目的是通过对C语言程序设计的语法规则、数据类型、数据运算、语句、系统函数、程序结构的学习,掌握应用C语言进行程序设计的技能,为进行各种实用程序开发奠定一个良好的基础。3.课程的任务本课程的主要任务是培养学生:⑴熟练掌握C语言程序设计的数据类型(基本类型、构造类型、指针类型等)和各类运算符,能正确使用表达式实现各种数据的简单加工。⑵熟练掌握C语言程序设计的三种基本结构(顺序、选择、循环)的特点,能使用相关语句完成这三种基本结构的程序设计任务。⑶掌握C语言程序设计的常用库函数使用,以及用户函数的定义、调用、参数传递等方法。⑷熟练掌握阅读和分析简短程序的方法和技巧。⑸熟练掌握设计和调试简短程序的方法和技巧。⑹了解并初步掌握实用程序的开发与调试技术。(7)培养严肃,认真、一丝不苟的工作作风。二、教学目标和重点1.认识C语言程序(1)知识目标①掌握C语言程序基本结构②熟悉C语言程序执行过程(2)技能目标①能够理解C语言的特点②能够掌握C语言程序基本结构③能够理解C语言程序执行过程④能够熟悉VisualC++6.0集成开发环境(3)任务目标①任务一:走进C语言世界②任务二:制作一张自己的小名片(4)重点、难点重点:C程序的基本结构。难点:C程序的基本结构(多个函数构成C程序)2.C语言程序设计基础(1)知识目标①掌握标识符及命名规则②掌握基本数据类型及其表示形式③理解运算符的运算规则及优先级关系④学会基本数据类型间的转换规则(2)技能目标①能够正确命名标识符②能够表示变量和常量③能够应用运算符和表达式④能够进行基本数据类型的转换(3)任务目标①任务一:计算圆的面积②任务二:编制密码器③任务三:分离数字问题(4)重点和难点重点:基本数据类型常量的书写方法和变量的定义、赋值、初始化、使用方法;基本运算符的运算规则及优先级别;表达式的构成规则和计算。难点:运算符优先级别,混合表达式计算,自增、自减运算符的使用,字符常量与字符串常量。3.顺序结构程序设计(1)知识目标①了解程序的基本概念②掌握程序的基本结构③了解语句的分类④熟悉输入输出函数(2)技能目标①能够使用C语言中的语句②能运用输入输出函数和赋值语句进行顺序结构程序设计(3)任务目标①任务一:菜单设计②任务二:小写字母转换为大写字母③任务三:输出学生个人信息(4)重点、难点重点:赋值语句;putchar函数;getchar函数;printf函数;scanf函数。难点:输入/输出函数中的格式描述符。4.选择结构程序设计(1)知识目标①掌握关系运算符和关系表达式书写规则②掌握逻辑运算符和逻辑表达式书写规则③了解选择结构程序的基本概念④熟悉实现选择结构的方法(2)技能目标①能够运用if语句进行选择结构程序设计②能够运用多分支选择结构程序设计③能够运用switch语句进行多分支选择结构设计④能够运用条件运算符表示选择结构(3)任务目标①任务一:身高预测②任务二:闰年判断③任务三:划分考试成绩等级④任务四:旅游景点门票打折⑤任务五:小型计算器的设计(4)重点、难点重点:if-else、switch语句的格式和功能。难点:逻辑运算的“短路”现象;正确选用合适的语句来设计选择结构的程序;switch语句和break语句的使用。5.循环结构程序设计(1)知识目标:①了解循环结构设计方法②熟练掌握当型循环while语句③熟练掌握直到型循环do-while语句④熟练循环for语句⑤掌握控制循环break和continue语句⑥了解循环嵌套程序结构(2)技能目标:①学会循环结构程序设计的方法与步骤②能够运用while语句进行循环结构程序设计③能够运用do-while语句进行循环结构程序设计④能够运用for语句进行循环结构程序设计⑤能够运用break和continue语句控制循环⑥综合运用三种循环语句进行嵌套循环结构程序设计(3)任务目标①任务一:红歌比赛计算平均分②任务二:翻牌游戏③任务三:模拟中奖机④任务四:经典九九乘法表⑤任务五:找朋友⑥任务六:猜数游戏(4)重点、难点重点:while、do-while、for、break、countinue的格式和功能,三种循环结构的程序设计方法。难点:break和continue语句的正确使用,三种循环之间的相互转换。6.数组(1)知识目标:①了解数组的概念②熟练掌握一维数组与引用③掌握二维数组与引用④掌握字符数组与字符串(2)技能目标:①会定义一维数组、能够进行数组元素的引用②会定义二维数组能够进行数组元素的引用③会定义字符数组④能够区别字符串数组和字符数组(3)任务目标①任务一:学生成绩存储②任务二:学生成绩计算与查找最值③任务三:学生成绩排序④任务四:多门课程学生成绩存储⑤任务五:多门课程学生成绩计算与查找最值⑥任务六:密码加密(4)重点和难点重点:一维数组、二维数组、字符数组的定义、初始化和数组元素的使用,数组中的查找和排序,字符串处理函数的使用。难点:数组中的地址概念,字符串与字符数组的区别、存放若干字符和存放字符串的字符数组的差别。7.函数(1)知识目标①学会函数的定义与调用②理解实参与形参的关系③了解变量的作用域与生存期(2)技能目标①能够掌握函数的定义与调用②能够正确运用实参和形参(3)任务目标①任务一:菜单输出②任务二:学生成绩计算③任务三:猜年龄(4)重点、难点重点:函数的定义和调用方法,调用函数时数据传递方法,变量的属性和作用域。难点:值传递和地址传递的区别,变量的生命期和作用域。8.指针(1)知识目标①了解指针概念②掌握指针变量的定义、赋值、引用③了解指针变量作为函数参数④了解指针与数组(2)技能目标①能够运用指针指向变量②会运用指针变量作为函数参数③会运用指针指向数组求(3)任务目标①任务一:交换两个变量的值②任务二:三个数的排序③任务三:字母放大镜(4)重点、难点重点:指针变量的定义、初始化和赋值方法,利用指向变量、数组、字符串的指针变量来正确引用变量、数组元素、字符串,取变量、数组、字符串地址的方法。难点:指针的概念,指向多维数组的指针变量和多维数组的地址,主函数中参数的引用方法。9.结构体与文件(1)知识目标①掌握结构体类型的定义方法②掌握结构体类型变量、数组和指针的定义方法③掌握结构体成员的引用方法④掌握结构体类型变量的赋值⑤了解编译预处理命令的使用方法⑥了解文件的基本概念⑦了解文件操作的几个重要函数(2)技能目标①能够利用结构体解决日常工作中的问题②能够进行文件的基本操作操作(3)任务目标①任务一:存储职工信息②任务二:实现小型通讯录(4)重点、难点重点:结构类型数据的特点和定义,结构类型变量、数组、指针变量的定义、初始化和成员引用方法,联合类型的定义和引用方法;缓冲文件系统中“文件类型指针”的概念,有关文件操作(打开、关闭、四种形式的读写、定位、出错检测)的系统函数使用。难点:链表数据的处理;有关文件处理的各种系统函数的使用;特别是读写函数种类较多、功能相近,造成记忆和选择上的困难。三、教学基本内容及学时分配(总学时:56学时)1.课程结构及学时分配序号工作项目/单元/模块工作任务/学习任务/学习主题建议学时1第一单元认识C语言程序任务1:制作一张自己的小名片42第二单元C语言程序设计基础任务2:计算圆的面积任务3:密码编制程序4任务4:分离数字问题43第三单元顺序结构程序设计任务5:菜单设计任务6:小写字母转换为大写字母任务7:输出学生个人信息44第四单元选择结构程序设计任务8:身高预测任务9:闰年判断4任务10:划分考试成绩等级任务11:旅游景点门票打折任务12:小型计算器的设计45第五单元循环结构程序设计任务13:红歌比赛计算平均分任务14:翻牌游戏任务15:模拟中奖机4任务16:经典九九乘法表任务17:找朋友任务18:猜数游戏46第六单元数组任务19:学生成绩存储任务20:学生成绩计算和查找最值任务21:学生成绩排序4任务22:多门课程学生成绩的存储任务23:多门课程学生成绩计算和查找最值任务24:密码加密47第七单元函数任务25:菜单输出任务25:学生成绩计算任务27:猜年龄88第八单元指针任务28:交换两个变量的值任务29:三个数的排序任务30:字母放大镜89第九单元结构体和文件任务31:存储联系人的信息任务32:实现小型通讯录4总计562.课程内容安排第一单元认识C程序程序基本结构·C语言编写的程序称为源程序,扩展名为.C·C语言程序的基本框架包括编译预处理和函数组两部分·编译预处理以#开头,格式为:#include<stdio.h>·函数是构成C的基本单位,一个C语言程序有且只有一个main函数,是程序运行的起点。格式为:voidmain()·//为单行注释,/**/为多行注释·书写格式注意规范,逐层缩进,大括号对齐·printf函数的简单使用2学时程序执行过程每个C语言程序写完后,都是先编译,后链接,最后运行。(.c.obj.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。熟悉VisualC++6.0集成开发环境·掌握c程序设计编程环境visualc++6.0,掌握运行一个c程序设计的基本步骤(包括编辑、编译、连接和运行)2学时第二单元C语言程序设计基础标识符标识符概念:程序中变量、常量、函数、数组、结构体以及文件所起的名称称为标识符。2学时关键字类型说明符:int\float\char\double等语句定义符:if\for\while\return等预定义标识符:define、include、printf、scanf等·用户自定义标识符由字母,数字,下划线组成,并且第一个必须为字母或下划线;不允许使用关键字作为标识符的名称;标识符命名以直观且易于拼读为宜,即做到“见名知意”;标识符区分大小写。数据类型·基本数据类型整型:int占用空间大小是2个或4个字节字符型:char占用1字节(使用时查看ASCII码表),如’A’ASCII码为65,而’a’的-ASCII码为97浮点型:float占用空间4字节或8字节有效数字6-7位Double占用空间为8字节有效数字15-16位枚举类型·指针类型·结构类型:数组类型,结构体类型、共同体类型·空类型常量•数字常量i.普通数字:1,35,2.7ii.指数形式:2.45e-2等价于2.45*10-2注意e大小写皆可,e前面的数字不能省,就算是1也不能省,后面的数字一定要是整数iii.长整型,单精度浮点型:3235L,32.5F分别表示3235是长整型数据,32.5是单精度浮点型,若不写上L,F则表示3235是整型,32.5是双精度浮点型,L,F大小写皆可•字符常量i.普通字符常量:用单引号把一个字符括起来,如’A’,’@’ii.转义字符常量:一对单引号括起来并以“\”开头的字符序列,如’\n’(回车)、’\123’(8进制123对应的字符),’\x23’(16进制23对应的字符)•字符串常量用一对双引号把一个字符序列括起来,如“ABCef”,系统存放字符串常量,每个字符分配一个字节,各字符所占字节紧邻,并且字符串末尾会给再开一个字节里面放一个’\0’做为结束标志。•符号常量定义格式:#define符号常量名符号常量值,如#defineN20则定义了符号常量N,其值为20,·注意符号常量名和符号常量值之间是用空格隔开,而不是写上=号,#define和符号常量名之间也有空格的。变量•变量的定义格式类型名变量名;如inta;//定义了一个整型变量a。变量名要符合标识符命名规则类型说明了此变量所占用的空间大小•变量赋值,初始化inta=3;//定义的同时初始化inta;a=6*9;//定义后在程序中进行赋值•变量的值只有在赋值操作时才会被改变,即将其放在等号左边时才会改变它的值,或自增自减操作:a=5,a++,a--,像a+3并未改变a的值,只是使用了a的值总结:变量三要素,名称、类型和值运算符及表达式算术表达式:+,-,*,/,%几点说明:·若“/”两边都是整型,结果就是一个整型。如:3/2的结果就是1.·“/”如果有一边是小数,那么结果就是小数。3/2.0的结果就是1.5·“%”符号是余数,%符号两边要求是整数。2学时·赋值运算符=如:a=3把赋值号右边的3赋值给赋值号左边的变量a·复合赋值运算符+=,-=,*=,/=算术运算符和赋值运算符复合使用·赋值表达式·注意:常量不可以赋值。赋值的左边只能是一个变量。复合运算符,例a*=2+3;运行完成后,a的值是12。首先要在2+3的上面打上括号。变成(2+3)再运算。·赋值运算优先级最低自加与自减运算符:++,--自加、自减表达式:如:a++++a--bb—等不管前缀++还是后缀++,对于变量的作用都是加一操作,但对于表达式来讲,++在前的表达式用的是变量加一以后的新值,++在后的表达式用的变量原来的值。--运算符同数据类型转换·自动转换,char-int-float-double·强制转换(类型名)表达式一定是(int)a不是int(a),注意类型上一定有括号的。·注意:(int)(a+b)和(int)a+b的区别。前是把a+b转型,后是把a转型再加b第三单元顺序结构程序设计程序算法+数据结构2学时算法描述方法流程图几种图形表示方式:框图;N-S图;伪代码等程序基本结构顺序结构程序基本概念:按照书写的顺序执行,即语句的执行顺序与书写顺序一致顺序结构程序的组成:输入算法所需要的数据、进行运算和数据处理、输出运算结果数据顺序结构程序的流程:固定、不跳转选择结构程序基本概念选择结构程序流程图表示法循环结构基本概念循环结构程序的流程图表示方法语句的分类九种控制语句:if…else;switch;for;while;do…while;continue;break;goto;return表达式语句:任意一种类型的表达式加入一个分号就形成了表达式语句复合语句:用一对大括号括起来的一个或若干语句空语句:只有一个分号的语句输入输出函数·字符串的原样输出printf(“字符串常量”);把需要输出的字符放在双引号中即可·带格式的输出printf(“格式说明符”,输出项列表)格式说明:%d整型int%c字符char%ld长整型longint%s字符串%f浮点型float%o八进制%lf双精度浮点数double输出项列表:可以是一个输出项,也可以是多个输出项,若是多个输出项,中间用逗号分隔举例:printf(“%2d”,123);第二部分有三位,大于指定的两位,原样输出123printf(“%5d”,123);第二部分有三位,小于指定的五位,左边补两个空格123printf(“%-5d”,123);靠左显示右补空格printf(“%10f”,1.25);小数要求补足6位的,没有六位的补0,。结果为1.250000printf(“%5.3f”,1.25);小数三位,整个五位,结果为1.250(小数点算一位)printf(“%3.1f”,1.25);小数一位,整个三位,结果为1.3(要进行四舍五入)·格式输入函数:Scanf(“格式说明符”,输入项地址列表)格式说明符的使用与printf()函数同注意:地址项列表中的&不能省略,多个地址项用逗号隔开屏幕输入的方法典型例题:编写程序,求半径为r的圆的面积#include<stdio.h>#definePI3.14159 //声明常量voidmain(){floatr,s;//声明float型变量printf(“请输入圆的半径:”);scanf(“%f”,&r);//输入r的值s=PI*r*r;printf(“s=%f”,s);//格式化输出}·字符输出函数:格式:putchar(ch)例如:putchar(‘y’)把字符y输出到屏幕中。·字符输入函数格式:getchar()例如:a=getchar()从键盘得到输入的一个字符给变量a。注意:getchar()函数是没有参数的,典型例题:从键盘输入一个小写字母,把它转换为大写字母。#include<stdio.h>voidmain(){charch;printf(“请输入一个小写字母:”);scanf(“%c”,&ch);//输入字符型变量的值ch=ch-32;printf(“转换成的大写字母为:%c”,ch);}学会顺序结构程序设计方法·掌握c语言程序设计的基本框架、学会简单顺序结构的程序编写。·了解程序调试的思想,能找出并改正c程序中的语法错误2学时第四单元选择结构程序设计关系运算符和关系表达式·关系运算符(>、<、>=、<=、、==、!=),注意书写与数学上的书写的区别,关系运算符==和赋值运算符=之间的区别·关系表达式:用关系运算符连接起来的表达式,例如:a>b·关系表达式的值:1或0;在C语言中非0即为真,0为假2学时逻辑运算符和逻辑表达式逻辑运算符(&&、||、!)逻辑表达式:用逻辑表达式连接起来的表达式,逻辑运算符的左右两边一般情况下是关系表达式,例如:(x%5==0)&&x%(7==0)逻辑表达式的值:1或0;选择结构·选择结构概念:选择结构是三种结构之一,选择结构也称为分支结构,是对给定的条件进行判断,依据条件成立与否选择执行不同的操作的一种程序设计方法·选择结构的表示方法:用流程图表示实现选择结构的方法单分支选择语句·语法:If(表达式){语句体}…·功能:判断括号内表达式的值,若其值不为0,则执行语句体中的语句,否则,跳过语句体,执行语句体的后续语句·流程图:·典型例题编一个程序,若通过键盘输入的是大写字母,则把它转换成小写字母输出,若输入的是小写字母,则不转换#include<stdio.h>voidmain(){charch;printf(“请输入一个字母:”);scanf(“%c”,&ch);if(ch>=’a’&&ch<=’z’)ch=ch-32;printf(“转换成的大写字母为:%c”,ch);}双分支选择语句·语法:If(表达式){语句体1}else{语句体2}·功能:判断括号内表达式的值,若其值不为0,则执行语句体1中的语句,否则,执行语句体2中语句·流程图·典型例题设计一个应用程序,判断某一年是否为闰年#include<stdio.h>voidmain(){inty,leap;;printf(“请输入一个年份:”);scanf(“%n”,&y);if((y%4==0)&&(y%100!=0)||(y%400==0))//闰年条件,经典leap=1;elseleap=0;if(leap==1)printf(“%d是一个闰年”,y);elseprintf(“%d不是一个闰年”,y);}条件表达式实现选择结构·条件运算符::?:运算符是C语言中唯一一个三目运算符号,即它有三个参与运算的操作数·条件表达式的表示:表达式1?表达式2:表达式3·条件表达式的值:先求表达式1的值,如果表达式1的值为非0,则整个条件表达式获取表达式2的值,否则获取表达式3的值表达式1通常为关系表达式或逻辑表达式;条件表达式通常用在赋值语句中,如man=(a>b)?a:b;条件运算符是一对运算符,不能分开使用·典型例题编写一个程序,找出两方数据中的最大数#include<stdio.h>voidmain(){Inta,b,max;printf(“请输入两个数据:”);scanf(“%d%d”,&a,&b);man=(a>b)?a:b;printf(“两个数据中的最大数为:%d”,max);}2学时嵌套if语句·基本概念:if语句体中有出现了if语句,称为if语句的嵌套·语法:if(表达式1)If(表达式2){语句体1}else{语句体2}elseIf(表达式3){语句体3}else{语句体4}·功能:先判断表达式1的值,若表达式1的值为非0,再判断表达式2的值,若表达式2的值为非0,则执行语句体1,否则若表达式2的值为0,则执行语句体2;若表达式1的值为0,再判断表达式3的值,若表达式3的值为非0,则执行语句体3,否则执行语句体4·流程图·注意:嵌套if语句的使用非常灵活,不仅单分支的if可以嵌套,其它形式的if语句都可以嵌套;被嵌套的if语句本身又可以使一个嵌套的if语句,称为if语句的多重嵌套;·注意:在多重嵌套的if语句中else总是与离它最近并且没有与其它else配对的if配对·典型例题从键盘输入三个实数a,b,c,求出其中的最小数#include<stdio.h>voidmain(){floata,b,cmin;printf(“请您输入三个实数:”);scanf(“%f%f%f”,&a,&b.&c);if(a<b){if(a<c)min=a;elsemin=c;}else{If(a<c)min=b;else{if(b<c)min=b;elsemin=c;}}Printf(“三个数据中的最小数为:%f”,min);}·多重if…else语句语法:if(表达式1){语句体1}elseif(表达式2){语句体2}elseif(表达式3){语句体3}………elseif(表达式n){语句体n}else{语句体n+1}·功能:先判断表达式1的值,若表达式1的值为非0,则执行语句体1,然后跳出多分支语句结构,继续执行选择结构下边的语句;若表达式1的值为假,不执行语句体1,再来判断表达式2的值是否为真,如果表达式2为真,则执行语句体2,然后跳出选择语句结构,若为假,继续判断表达式3是否为真………以此类推如果所有的条件都不成立,则执行最后一个else下面的语句体n+1,然后继续执行选择结构下面的语句·流程图·典型例题编写一个程序,要求输入一个学生的考试成绩,输出其分数和对应的等级。学生成绩分为5个等级:小于60分的为不及格;60-70之间的为及格;70-80之间的为中等;80-90分之间的良好;90分以上的为优秀。#include<stdio.h>voidmain(){intf;printf(“请输入一个学生的成绩:”);scanf(“%d”,&f);if(f<60)printf(“不及格”);elseif(f<70)printf(“及格”);elseif(f<80)printf(“中等”);elseif(f<90)printf(“良好”);elseif(f<=100)printf(“优秀”);}注意:多重if语句更适用于区间判断。如果if后的表达式只写了半幅,如上题f<80,而不是f>70&&f<80,那么if后的表达式顺序不能颠倒,否则得不到希望的结果。switch语句实现多路分支·概念:switch语句又称为开关语句,在C语言中专门用来处理多分支选择问题,比嵌套if语句更加灵活方便·语法:Switch(表达式){case常量1:语句组1;break;case常量2:语句组2;break;……….case常量n:语句组n;break;default:语句组n+1;break;}·功能:先计算switch后面表达式的值,再依次与每一个case后的常量表达式的值进行比较,如果匹配,则以该case为入口,执行相应的语句序列。若相应的语句序列后面有break,,则跳出switch结构,执行switch结构后面的语句;若相应的语句序列后面没有break,则执行下一个case后面的语句序列。若所有case后面的常量表达式的值没有与switch后表达式的值相等的情况,执行default后面语句。·流程图:·有关说明:括号内的表达式可以使整型或字符型;case后的每个常量表达式必须各不相同;case子句和default子句的位置可以使任意的;每个case之后的执行语句可以多于一个,但不必加{};·典型例题:编写一个程序,要求输入一个学生的考试成绩,输出其分数和对应的等级。学生成绩分为5哥等级:小于60分的为不及格;60-70之间的为及格;70-80之间的为中等;80-90分之间的良好;90分以上的为优秀(用switch语句完成)#include<stdio.h>voidmain(){intf;printf(“请输入一个学生的成绩:”);scanf(“%d”,&f);Switch(f/10){case10:case9:printf(“优秀”);break;case8:printf(“良好”);break;case7:printf(“中等”);break;case6:printf(“及格”);bresk;defaukt:printf(“不及格”);break;}}掌握选择结构程序设计方法·了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);·学会正确使用逻辑、关系运算符,学会书写逻辑表达式;·学会使用if语句和switch语句编写选择结构程序;·学会使用switch语句中break语句。4学时第五单元循环结构程序设计循环结构·概念:程序中有需要多次执行的语句组·设计循环要完成的任务:循环变量的初始化;循环条件(终止值);循环的任务(循环体)2学时当型循环While语句·格式:While(表达式){循环语句组}·功能:当表达式的值为非0时,执行while语句中的循环语句组,否则执行循环体后续语句。·说明:(1)循环体如果包含一个以上的语句,应该用大括号括起来,以复合语句的形式出现,否则while语句范围只到while后面第一个分号处。(2)在循环中应有使循环趋向于结束的语句,即设置修改条件的语句。例如:i=0,s=0;while(i<10){s=s+I;i=i+1;}注意:循环体中如果无i=i+I;语句,则i的值一直不变,循环永不结束,这就称为“死循环”。(3)while语句的特点是先判断表达式的值,然后决定是否执行循环体中的语句,如果表达式的值一开始为假(即值为0),则退出循环,并转入循环体的后续语句执行。·典型例题:求1+2+3+……+100的值。#include<stdio.h>voidmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}printf("1-100的和是%d",sum);}不限定次数的循环·典型例题:输入字符直到回车’\n’结束,进行大小写字符的转换。#include<stdio.h>voidmain(){intcharch;printf(“请输入字符:”);while((getchar(ch))!=’\n’){if(ch>=’a’&&ch<=”z’)ch-=32;elseif(ch>=’A’&&ch<=”Z’)ch+=32;Putchar(ch);}直到型循环Do-while语句·格式do{循环语句组}while(表达式);·功能:先执行一次指定的循环体语句,然后判断表达式的值,当表达式的值为非0时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。·说明:(1)do-while语句的特点是:先执行语句,后判断表达式的值。(2)如果do-while语句的循环体部分是多个语句组成,则必须用左右大括号括起来,使其形成复合语句。(3)while圆括号后面有一个分号“;”,书写时不要忘记。·典型例题:求1-100偶数之和(固定次数的循环)#include<stdio.h>voidmain(){inti,s1=0;do{if(i%2==0)s1+=i;i++;}while(i<=100);printf("1-100的奇数和是%d偶数和%d",s1,s2);}·典型例题:输入字符直到回车”\n”结束,进行大小写字符的转换(非固定次数的循环)。#include‘stdio.h’main(){intcharch;printf(“请输入字符:”);putchar(ch);do{if(ch>=’a’&&ch<=”z’)ch-=32;elseif(ch>=’A’&&ch<=”Z’)ch+=32;printf(“请输入字符:”);putchar(ch);}while((getchar(ch))!=’\n’);For语句·格式for(表达式1;表达式2;表达式3){循环语句组}·功能:(1)先计算表达式1的值。(2)再计算表达式2的值,若其值为真,则执行循环体一次;否则跳转第(5)步。(3)然后计算表达式3的值。(4)回转上面第(2)步。(5)结束循环,执行for语句的后续语句。·说明:(1)表达式1一般为赋值表达式,用于进入循环之前给循环变量赋初值。(2)表达式2一般为关系表达式或逻辑表达式,用于执行循环的条件判定,它与while、do-while循环中的表达式作用完全相同。(3)表达式3一般为赋值表达式或自增(i=i+1可表示成i++)、自减(i=i-1可表示成i--)表达式,用于修改循环变量的值。(4)如果循环体部分是多个语句组成的,则必须用大括号括起来,使其成为一个复合语句。·进一步说明:for语句的一般形式中的“表达式1”可以省略。但要注意省略表达式1时,其后的分号不能省略。举例:i=1;for(;i<=100;i++)sum=sum+i;如果省略表达式2,即表示表达式2的值始终为真,循环将无终止地进行下去。举例:for(i=1;;i++)printf("%d",i);(3)如果省略表达式3,也将产生一个无穷循环。因此,应另外设法保证循环能正常结束,可以将循环变量的修改部分(即表达式3)放在循环语句中控制。举例:for(i=1;i<=100;){sum=sum+i;i++;}(4)可以同时省略表达式1和表达式3,即省略了循环的初值和循环变量的修改部分,此时完全等价于while语句。举例:i=1;for(;i<=10;){printf("%d",i);i++;}(5)在for语句中,表达式1和表达式3也可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。在逗号表达式内按从左至右求解,整个表达式的值为其中最右边的表达式的值。举例:for(i=1;i<=100;i++,sum=sum+i;)2学时break和continue的语句·break语句格式:break;功能:该语句可以使程序运行时中途跳出循环体,即强制结束循环,接着执行循环体的后续语句。典型例题:从键盘输入若干字符,输出其中的字母,直到输入回车结束。#include<stdio.h> voidmain() {charch; while(1){ch=getchar();if(ch=='\n') break;elseif(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')putchar(ch);} }·continue语句格式:continue;功能:结束本次循环,即不再执行循环体中continue语句下面尚未执行的语句,而进行下一次是否执行循环的判定。典型例题:打印出数字0~10,但跳过(即不输出)数字7。main(){inti;for(i=0;i<=10;i++){if(i==7)continue;printf("%5d",i);}}·continue语句和break语句的区别是:continue语句只是结束本次循环,而不终止整个循环的执行;而break语句则是强制终止整个循环过程。循环嵌套·格式:(1)for(;;){……for(;;){……}}(2)do{……do{……}while();}while();(3)while(){……while(){……}}(4)while(){……do{……}while();…}(5)for(;;){……while(){……}}(6)do{……for(;;){}……}while();·典型例题:利用双重for循环结构打印出9*9乘法表。#include<stdio.h>voidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d",j,i,i*j);printf("\n");}}掌握循环程序设计基本方法·熟练使用while、do-while、for语句实现循环程序设计·掌握嵌套循环程序设计·熟练掌握下拉菜单Debug的程序调试方法·熟练掌握使用break、continue语句在循环程序设计中的实现·熟练掌握VC++的程序调试方法4学时第六单元数组数组的概念·概念:具有相同数据类型的数据的有序集合称为数组。数组是一种最简单的构造类型,它包含着一组具有同一类型的变量,这些变量在内存中的存储位置是连续的。·C语言规定:数组必须先定义,后使用。·分类:一维数组、多维数组2学时一维数组的定义·定义:类型说明符数组名[常量表达式];例如:floatscore[10];它表示定义了一个名为score的数组,该数组有10个元素,其存放的数据类型应为实型。·说明:(1)类型说明符用来说明数组元素的类型:常用的数据类型有:int,char,float或double。(2)数组名的命名应遵守标识符的命名规则。(3)数组名后是用方括号括起来的常量表达式。常量表达式表示的是数组元素的个数,即数组的长度。在上例中定义了数组score[10],该数组有10个元素,其下标从0到9可用。注意:不要使用score[10],因为它不是该数组的元素。(4)常量表达式中可以包括常量和符号常量,不能包含变量,因为C语言规定数组不能动态定义。一维数组的初始化·初始化定义:数组的初始化是指在定义数组时给数组元素赋初值。·格式:类型说明符数组名[常量表达式]={常量列表};例如inta[5]={2,4,6,8,10};其作用是在定义数组的同时将常量2、4、6、8、10分别置于数组元素a[0]、a[1]、a[2]、a[3]、a[4]中。·说明:(1)常量列表可以是数值型、字符常量或字符串。(2)数组元素的初值必须依次放在一对大括号内,各值之间用逗号隔开。(3)可以只给部分数组元素赋初值。例如:inta[10]={1,2,3,4,5};(4)在进行数组的初始化时,{}中值的个数不能超过数组元素的个数。例如:inta[5]={1,2,3,4,5,6,7,8};是一种错误的数组初始化方式。(5)在给数组所有元素赋初值时,可以不指定数组长度。例如:inta[]={1,2,3,4,5};则系统会自动定义数组a的长度为5。(6)定义数组时不进行初始化,则该数组元素的值是不确定的。如果欲将数组所有元素的初值置为0,可以采用如下方式:staticinta[10];一维数组元素的引用C语言规定数组不能以整体形式参与数据处理,只能逐个引用数组元素。·格式:数组名[下标];其中下标可以是整型常量、整型变量或整型表达式。例如:inta[10],i=2;则以下是正确的表达式:a[0]=a[1]+a[i]+a[i+3];典型应用·典型应用1.动态给数组赋值,输出数组的值2.数组中元素求和、求平均值3.求数组中元素最大、最小值4.冒泡排序(理解)输入10整数存入数组,求和、求平均值,找出其中的最大数和最小数#include<stdio.h>voidmain(){ intarr[10],i,sum=0,max,min; floatavg; for(i=0;i<10;i++) { printf("请输入第%d个元素的值",i+1); scanf("%d",&arr[i]);//输入数组元素的值 sum=sum+arr[i];//数组元素求和 } avg=sum/10.0;//求平均值 for(i=0;i<10;i++) { printf("%d\n",arr[i]); } printf("数组元素的和是%d,平均值是%.2f",sum,avg); max=min=arr[0]; for(i=1;i<10;i++) { if(arr[i]>max)max=arr[i];//求最大值 if(arr[i]<min)min=arr[i];//求最小值 } printf("最大值是%d,最小值是%d",max,min);}·典型应用2:用冒泡法对10个整数由小到大进行排序main(){inti,j,t,a[11];printf("input10numbers:\n");for(i=1;i<=10;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<=9;j++)/*控制比较的趟数*/for(i=1;i<=10-j;i++)/*控制每趟比较的次数*/if(a[i]>a[i+1])/*相邻元素相比较*/{t=a[i];a[i]=a[i+1];a[i+1]=t;}/*交换数组元素的值*/printf("thesortednumbers:\n");for(i=1;i<=10;i++)printf(“%d“,a[i]);}二维数组定义·格式:类型说明符数组名[常量表达式1][常量表达式2];例如:inta[3][4];定义a为3×4(3行4列)的整型数组。该数组有12个元素,分别为:a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]·说明:(1)类型说明符、数组名、常量表达式的意义与一维数组相同。(2)二维数组中元素的排列顺序是按行存放,即内存中先顺序存放第一行的元素,再存放第二行的元素。(3)可以把二维数组看成是特殊的一维数组,它的每个元素又是一个一维数组。2学时二维数组初始化二维数组也可以在定义时对指定元素赋初值。(1)按行分段赋值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)将所有的初值写在一个大括号内,按数组元素的排列顺序对各个元素赋初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(3)可以对数组部分元素赋初值。例如:inta[3][4]={{1},{5,6},{9}};又如:inta[3][4]={{1,2},{},{0,10}};其作用是使a[0][0]=1,a[0][1]=2,a[2][1]=10,数组的其它元素都为0。(4)如果对数组的全部元素都赋初值,则定义数组时可以不指定数组的第一维长度,但第二维长度不能省略。例如:若有定义:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};此定义也可以写成:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};二维数组元素的引用·格式:数组名[下标1][下标2]其中下标可以是整型常量、整型变量或整型表达式。·典型例题1.输入和输出二维数组的值#include<stdio.h>voidmain(){inta[2][3];inti,j;for(i=0;i<=1;i++)for(j=0;j<=2;j++)scanf("%5d",&a[i][j]);/*输入a数组*/printf("\n");for(i=0;i<=2;i++)for(j=0;j<=1;j++)printf("%5d",a[i][j]);}2.将数组a(2×3矩阵)行列转置后保存到另一数组b中。12314a=b=2545636#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};inti,j,b[3][2];printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);/*输出a数组*/b[j][i]=a[i][j];/*数组转置*/}printf("\n");}printf("arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}字符数组定义·一维字符数组:格式:类型说明符数组名[常量表达式];例如:charstr[10];定义str为一维字符数组,该数组包含10个元素,最多可以存放10个字符型数据。·二维字符数组的格式为:格式:类型说明符数组名[常量表达式1][常量表达式2];例如:chara[3][20];定义a为二维字符数组,该数组有3行,每行20列,该数组最多可以存放60个字符型数据。在C语言中,很多情况下字符型与整型是通用的,因此字符型数组也可以这样定义:intstr[10];inta[3][20];·注意:字符型数据在内存中是以ASCII码方式存储的,在字符数组中也是如此。字符数组初始化字符数组的初始化方式与其它类型数组的初始化方式类似。(1)逐个元素赋初值chars[5]={´C´,´h´,´i´,´n´,´a´};(2)如果初值的个数多于数组元素的个数,则按语法错误处理。(3)如果初值的个数少于数组元素的个数,则C编译系统自动将未赋初值的元素定为空字符(即ASCII码为0的字符:´\0´)。(4)如果省略数组的长度,则系统会自动根据初值的个数来确定数组的长度。例如:charc[]={´H´,´o´,´w´,´´,´a´,´r´,´e´,´´,´y´,´o´,´u´,´?´};数组c的长度自动设定为12。(5)二维数组也可以进行初始化。字符串·字符串和字符串结束标志字符串常量是用双引号括起来的一串字符。C语言系统在处理字符串时,一般会在其末尾自动添加一个´\0´作为结束符。·用字符串常量给数组赋初值可以用字符串常量来使字符数组初始化。例如:charc[]={"student"};也可以省略大括号而直接写成charc[]="student";字符数组输入输出·典型例题:将数组元素逐个输入与输出,即用格式符"%c"输入或输出一个字符。例5.10从键盘读入一串字符,将其中的大写字母转换成小写字母后输出该字符串。main(){chars[80];inti=0;for(i=0;i<80;i++){scanf("%c",&s[i]);if(s[i]==´\n´)break;elseif(s[i]>=´A´&&s[i]<=´Z´)s[i]+=32;}s[i]=´\0´;for(i=0;s[i]!=´\0´;i++)printf("%c",s[i]);printf("\n");}·典型例题:将字符数组整体输入或输出,即用格式符"%s"控制字符串的输入与输出。例5.11将上例改写成整体输入输出形式。main(){chars[80];inti;scanf("%s",s);for(i=0;s[i]!=´\0´;i++)if(s[i]>=´A´&&s[i]<=´Z´)s[i]+=32;printf("%s",s);}注意:(1)用"%s"格式符读入字符串时,scanf函数中的地址项是数组名,不要在数组名前加取地址符号´&´,因为数组名本身就是地址(在后面的内容中将介绍到)。(2)用"%s"格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素。(3)以scanf("%s",数组名);形式读入字符串时,遇空格或回车都表示字符串结束,系统只是将第一个空格或回车前的字符置于数组中。字符串处理函数的使用在C的库函数中提供了一些字符串处理函数,使用它们可以很方便地处理字符串,如输入、输出、拷贝、连接、比较、测试长度等。·字符串输出函数:puts格式:puts(字符数组名)功能:将一个字符串输出到终端,字符串中可以包含转义字符。典型例题:chars[]="China\nBeijing";puts(s);输出结果是:ChinaBeijing·字符串读入函数:gets格式:gets(字符数组名)功能:从终端读入一个字符串到字符数组。该函数可以读入空格,遇回车结束输入。典型例题:chars[20];gets(s);puts(s);运行时输入:Howdoyoudo?↙输出结果为:Howdoyoudo?·字符串连接函数:strcat格式:strcat(字符数组1,字符数组2)功能:将字符数组2中的字符串连接到字符数组1中的字符串的后面,结果放在字符数组1中。典型例题:chars1[14]="China",s2[]="Beijing";strcat(s1,s2);printf("%s",s1);输出结果为:ChinaBeijing说明:使用strcat函数时,字符数组1应作够大,以便能容纳连接后的新字符串。·字符串拷贝(复制)函数:strcpy格式:strcpy(字符数组1,字符数组2)功能:将字符数组2中的字符串拷贝到字符数组1中。典型例题:chars1[8],s2[]="China";strcpy(s1,s2);puts(s1);程序段的输出结果是China说明:(1)字符数组1的长度应大于或等于字符数组2的长度,以便容纳被复制的字符串。(2)字符数组1必须写成数组名的形式(如上例中的s1),字符数组2也可以是一个字符串常量。(3)执行strcpy函数后,字符数组1中原来的内容将被字符数组2的内容(或字符串)所代替。(4)不能用赋值语句将一个字符串常量或字符数组直接赋给另一个字符数组。下面的用法是错误的:chars1[8],s2[]="China";s1=s2;在进行字符串的整体赋值时,必须使用strcpy函数。5.字符串比较函数:strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串的大小,例如:strcmp(s1,s2);strcmp("Beijing","Shanghai");strcmp(s1,"China");比较的结果由函数值带回。(1)如果字符串1等于字符串2,函数值为0。(2)如果字符串1大于字符串2,函数值为一个正整数(第一个不相同字符的ASCII码值之差)。(3)如果字符串1小于字符串2,函数值为一个负整数。6.测试字符串长度函数:strlen格式:strlen(字符数组名)功能:测试字符数组的长度,函数值为字符数组中第一个´\0´前的字符的个数(不包括´\0´)。典型例题:chars[10]="China";printf("%d",strlen(s));输出结果为:57.字符串小写函数:strlwr格式:strlwr(字符串)功能:将字符串中的大写字母转换成小写字母。8.字符串大写函数:strupr格式:strupr(字符串)功能:将字符串中的小写字母转换成大写字母。4学时学会使用数组解决实际工作中的问题·熟练掌握数组的定义和初始化·熟练掌握数组元素的引用·学会数组的操作·熟练掌握字符数组的定义、初始化和元素引用·熟练掌握字符串处理函数第七单元函数函数的定义·语法格式函数类型函数名(形式参数列表){内部变量定义和声明部分;执行语句;}·典型例题intmax(intx,inty){intz;z=x>y?x:y;return(z);}·注意事项1.函数类型是指返回值的类型,即要与return语句后跟的表达式的值的类型一致。若函数类型为void则说明该函数无返回值,即函数体里不能出现return语句。2.形式参数列表里定义的变量要指定类型,而且如果同时要定义多个,应在每个前面都分别指定类型名,而不能写成intx,y;2学时函数的调用·调用函数的格式函数名(实际参数列表);·典型例题以上面的函数为例,在main函数进行调用:voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);printf(“%d”,max(a,b));或c=max(a,b);printf(“%d”,c);以上两种方法都会在屏幕中打印出a,b间的较大值。max(a,b)中max就是函数名,a,b是实际参数列表,执行这个调用语句时,会先把a,b的值给相应位置的形式参数即执行x=a,y=b,然后开始执行max函数的函数体的语句。当max函数体里执行到return语句时,则max函数结束执行,将return后的表达式的值返回给main函数调用max函数的位置,即若上面a=3,b=5则max(a,b)return后的表达式的值应该是5也就是说执行完max后把5返回到调用max的位置可看成printf(“%d”,5);或另一种解法的c=5。·注意当被调函数的函数定义出现在主调函数之后时,在主调函数中必须对被调函数作声明。·递归调用一个函数在它的函数体内调用它自身称为递归调用。为了防止递归调用无终止地进行必须在函数内有终止递归调用的手段。常用的办法是加条件判断满足某种条件后就不再作递归调用然后逐层返回。2学时·数组作为函数参数1.数组元素与普通变量并无区别2.在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。变量的作用域:局部变量和全局变量·局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内。离开该函数后再使用这种变量是非法的。形参变量是属于被调函数的局部变量实参变量是属于主调函数的局部变量。·全局变量也称为外部变量。是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。变量的存储类别·auto变量函数中的局部变量关键字,auto可以省略·static静态局部变量局部变量的值在函数调用结束后不消失而保留原值,静态局部变量在编译时赋初值,即只赋初值一次。·register变量将局部变量得值放在CPU中的寄存器中·extern外部变量即全局变量。是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。·内部函数和外部函数根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数掌握利用函数解决日常工作中的复杂问题·学会函数的定义方法·学会函数的调用方法4学时第八单元指针指针概念一个变量的地址称为该变量的指针。2学时变量与指针指针变量的定义·格式:基类型*指针变量名举例:int*p1;(定义p1为指向整型变量的指针变量)char*p2;(定义p2为指向字符型变量的指针变量)float*p3;(定义p3为指向实型变量的指针变量)int、char、float分别称为指针变量p1、p2、p3的“基类型”,“基类型”意为指针变量所指变量的类型,不是指针变量的类型。指针变量赋值·通过取地址运算符(&)获得地址值单目运算符(&)用来求出运算对象的地址,利用它可以把一个变量的地址赋给指针变量。举例:inta=5,*p,*q;p=&a;因此当有语句:p=&a;时,scanf((″%d″,&a);和scanf(″%d″,p)是等价的。·通过指针变量获得地址值可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针变量指向同一地址。例如,若有上面的定义,则语句:q=p;使指针变量q中也存放了变量a的地址,也就是说指针变量p和q都指向了整型变量a。注意:赋值号两边指针变量的基类型必须相同。·给指针变量赋“空”值:p=NULL;NULL是在stdio.h头文件中定义的预定义符,因此在使用NULL时,应该在程序的前面出现预定义行:#include″stdio.h″。NULL的代码值为0,指针变量的引用·&:取地址运算符·*:间接访问运算符(指针运算符)·典型例题1:通过指针变量访问指针变量#include″stdio.h″main(){inta,b,*p1,*p2;a=10;b=20;p1=&a;/*把变量a的地址赋给指针变量p1*/p2=&b;/*把变量b的地址赋给指针变量p2*/printf(″%d,%d\n″,a,b);printf(″%d,%d\n″,*p1,*p2);}·典型例题2:输入两个整数,按大小顺序输出。#include″stdio.h″main(){inta,b,*p1,*p2,*p;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf(″\na=%d,b=%d\n″,a,b);printf(″max=%d,min=%d\n″,*p1,*p2);}注意:变量a,b的值没有变化,只是p1,p2指针变化了。指针变量作为函数参数函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。·概念:将指针变量的值(该指针变量所指变量的地址)传送到另一个函数中。·典型例题:用函数来实现两个变量值的交换。voidswap(int*q1,int*q2){intt;t=*q1;*q1=*q2;*q2=t;}#include″stdio.h″Voidmain(){inta,b,*p1,*p2;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b)swap(p1,p2);printf(″%d,%d\n″,a,b);}2学时第九单元结构体与文件结构体类型·结构体类型说明struct结构体标识名{类型名1结构体成员1;类型名2结构体成员2;…..类型名n结构体成员n;};·几点说明:结构体标识名是用户定义的结构体的名字,命名规则遵循自定义标识符规则;成员列表时对结构体数据汇总每一个数据项成员变量的说明,格式与定义一个变量的一般格式相同;struct是关键字;struct结构体标识名是结构体类型标识符,在类型定义和类型使用中“struct”不能省略;结构体标识名可以省略,此时定影的结构体为无名结构体;整个结构体类型的定义作为一个完整的语句用分号结束;结构体成员名允许和程序中的其他变量同名·嵌套定义的一般格式struct结构体标识名1{类型名1结构体成员1;类型名2结构体成员2;…..类型名n结构体成员n;};struct结构体标识名2{类型名1结构体成员1;Struct结构体标识符1结构成员名2;…..类型名n结构体成员n;};2学时结构体类型变量、数组和指针的定义·紧跟在结构体类型说明之后进行定义structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;·在说明一个无名结构体类型的同时,直接进行定义struct{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;·先说明结构体类型,再单独进行变量的定义structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];};structstudenta,b[4],*f;·几点说明:不能只是用struct,而不写结构体标识名student;不能只写结构体标识名student而省掉struct。结构体类型成员的引用方法·结构体变量名.成员名·结构体指针变量名->成员名·(*结构体指针变量名).成员名·几点说明:“.“称为结构成员运算符;”->“称为结构指向运算符,由减号和大于号组成·举例:structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a,b[4],*f;f=&a;对age成员的引用可以写成:a,age=18;或(*f).age=18;或f->sge=18;结构体类型变量的赋值·初始化赋值:类似于一般变量,结构体变量也可以再定义的同时赋值;structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a={“04201”,”anshili”,’f’,18.78.5,83,85,”Shijiazhuang”};·注意事项{}中初始化数据用逗号分隔每个初始化数据必须与其对应的成员的数据类型一一对应赋值没和初始化数据必须与其对应的成员的数据类型一致·通过成员引用方法单独赋值structstudent{charnum[10];charname[20];charsex;intage;floatc,vb,os;charadd[30];}a;sex=’f’;age=18;scanf(“%s”,name);结构体的典型应用——链表·动态链表的基本概念动态链表中的节点具有完全相同的结构;链表中的节点有系统随机分配。·几个重要函数void*malloc(unsignedsize):向系统申请一个size字节的连续内存空间;void*calloc(unsignednum,unsignedsize):向系统申请一个size*num个字节的连续内存空间;voidfree(void*ptr):释放ptr为首地址的一段内存空间。·建立链表基本步骤:读取数据;生成新节点;讲数据存入节点数据域的成员变量中;将心节点插入到链表中;重复上述操作直到输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论