C语言的简单总结1.0
- 格式:doc
- 大小:52.50 KB
- 文档页数:9
Win-TC简介WIN-TC是一个TC2 WINDOWS平台开发工具,用于编写C语言程序。
该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。
而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。
并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。
WIN-TC是Turbo C 2.0(简称TC2.0)的一种扩展形式,是在TC2.0的基础上,增强了系统的兼容性和共享性,允许进行复制粘贴的多项可以用鼠标来操作的功能,比TC2.0使用起来方便。
WIN-TC主要特色1)在WINDOWS下编辑TC代码,可以充分利用WINDOWS的支持剪贴版和中文的特点;2)Include和Lib路径自动定位,告别TC设置路径的历史;3)编译错误捕捉功能,编译时不会出现烦人的DOS窗口;4)支持C内嵌汇编从而实现C/ASM混合编程;5)支持C扩展库(自定义LIB库);6)错误警告定位功能、出现编译错误时双击输出框里的出错行信息可以自动寻找到错误的行,就像DOS的TC那样;7)支持语法加亮功能,并可以自定义设置;8)没有目录路径限制,你甚至可以安装到带有空格的路径文件夹里;9)允许自定义设置输入风格,能够实现VC类似的输入风格;10)可选择是否生成ASM、MAP或OBJ文件,你甚至可以指定只生成EXE文件;11)稳定的文件操作功能,支持历史记录列表和使用模板;12)撤消和重复功能,并可以按照自己内存情况设置最多撤消次数(最多允许999次);13)具有行标计数的功能,并可以设置样式。
Turbo CTurbo C是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。
该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。
C语言软件编程规范拟定:黄宗灯日期:2019-01-25评审:日期:批准:日期:Revision Record修订记录Date 日期RevisionVersion修订版本SecNo.修改章节Change Description修改描述Author作者2019-01-25v1.0All initial初稿完成黄宗灯关键词:编程规范、软件开发规范、规则、建议、规范摘要:本文描述了宇眼科技C语言在设计和编码过程中,需要遵循的一些基本规范。
缩略语清单:Abbreviations缩略语Full spelling英文全名Chinese explanation中文解释ppf Police Platform警用平台cpf Car Platform汽车平台fpf Fire Control Platform消防平台ueyes UEYES宇眼科技1.概述1.1.目的制定本规范的目的是在宇眼科技的开发和维护过程中,统一设计规范和编程规范,便于提高开发效率,统一风格,提高软件质量和可维护性。
1.2.本规范所规定的内容1)目录组织结构,文件命名,头文件组织;2)在函数设计、实现过程中所遵循的一些规范;3)在调试,维护,源程序管理等其他方面的一些规范;4)组件设计、裁减及配置方面的规范;采用以下的术语描述:规则:工作过程中强制必须遵守的原则建议:工作过程中必须加以考虑的原则说明:对此规则或建议进行必要的解释2.目录结构规范由于Unix、Linux下对字母大小写敏感,为减少出错的机率,统一规定宇眼科技所有目录名都使用小写。
3.文件组织3.1.文件类型及命名规则3-1-1:宇眼科技的源程序文件有如下类型的文件:头文件:*.h程序文件:*.c规则3-1-2:文件名必须为小写字母;说明:由于Unix、Linux下对文件名大小写敏感,为减少因此出错的概率,统一规定使用小写字母。
规则3-1-3:文件名前加一个表示模块的前缀以避免重名;示例:ply_ui.c具体前缀请参考:4.1标识定义;规则3-1-4:几种特殊类型的文件命名如下:xxx_interface.h:模块的对外(提供给其他模块使用的接口)的头文件,使用该模块时需要包含的头文件;例如:ply_interface.h3.2.文件内容组织规则3-2-1:公用头文件包含需要全局引用的宏定义、变量说明、结构说明和外部函数声明等。
C语言程序设计主讲教师:马驰Email:teacher_ma@本课程讲述如何使用C语言进行真正的编程。
C 语言是目前软件开发者们最主要的编程语言。
这也是它受到广泛传播并且成为标准的原因。
本课程将侧重学习一个具体问题的算法化的过程。
本课程还将学习在实际编程过程中应该掌握的基本技巧。
以及用C编程的风格和艺术。
要写出一个好的程序,不仅仅是敲一些代码,功能正确。
还应该简单易读。
在学习的示例中,我们强调的是简单、实用的原则。
本课程是如何组织的?第一部分基础第二部分简单程序设计第三部分高级程序设计算法概念、编程原理、编程风格、基本数据类型定义、算术运算符及表达式顺序结构、选择结构、循环结构、数组的定义及应用、程序设计过程函数、变量的存储类别、指针、结构体与共用体、文件·计算机与程序·计算机中的数据·程序设计由程序控制计算机完成人们想做的工作。
由0/1代码组成的二进制数,也可以表示为十六进制数和八进制数。
在20世纪80年代,结构化的程序设计是最主要、最通用的程序设计方法。
程序=数据结构+算法在编写一个程序中,需要对两个方面进行描述:(1)对数据的描述(数据流):指定数据的类型和数据的结构。
(不同的语言对数据的定义不同,我们将学习C语言的数据类型和数据结构)(2)对操作的描述(控制流):要指定操作的步骤,既算法。
(算法具有通用性,脱离于语言之外,是程序设计的灵魂)什么是算法(Algorithm)?就是为了解决一个特定的问题而采取的确定的、有限的、按照一定次序进行的、缺一不可的执行步骤。
在计算机能执行的算法就是计算机算法。
计算机算法可以分成两大类:数值运算算法和非数值运算算法。
注意:为了有效地利用计算机解决实际问题,在设计算法时不仅要保证计算机执行算法的正确性,还要考虑算法的质量,选择适合于具体问题的算法。
例1:猴子吃桃问题。
有一堆桃子不知数目,猴子第一天吃掉一半并多吃了一个,第二天照此方法,吃掉剩下桃子的一半加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?算法写成:(1)a1=1{第10天的桃子数,A1的初始值};i=9{计数器的初值为9};(2)a0=2*(A1+1){计算当天的桃子数};(3)a1=a0;{将当天的桃子数作为下一次计算的初值};(4)i=i-1;(5)若i>=1,继续循环执行(2);(6)输出A0的值。
基本要求1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。
1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
1.3 尽量使用标准库函数和公共函数。
1.4 不要随意定义全局变量,尽量使用局部变量。
1.5 使用括号以避免二义性。
2.可读性要求2.1 可读性第一,效率第二。
2.2 保持注释与代码完全一致。
2.3 每个源程序文件,都有文件头说明,说明规格见规范。
2.4 每个函数,都有函数头说明,说明规格见规范。
2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。
2.7 常量定义(DEFINE)有相应说明。
2.8 处理过程的每个阶段都有相关注释说明。
2.9 在典型算法前都有注释。
2.10 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为6个字节。
2.11 循环、分支层次不要超过五层。
2.12 注释可以与语句在同一行,也可以在上行。
2.13 空行和空白字符也是一种特殊注释。
2.14 一目了然的语句不加注释。
2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。
2.16 注释行数(不包括程序头和函数头说明部份)应占总行数的1/5 到1/3 。
3. 结构化要求3.1 禁止出现两条等价的支路。
3.2 禁止GOTO语句。
3.3 用IF 语句来强调只执行两组语句中的一组。
禁止ELSE GOTO 和ELSE RETURN。
3.4 用CASE 实现多路分支。
3.5 避免从循环引出多个出口。
3.6 函数只有一个出口。
3.7 不使用条件赋值语句。
3.8 避免不必要的分支。
3.9 不要轻易用条件分支去替换逻辑表达式。
4. 正确性与容错性要求4.1 程序首先是正确,其次是优美4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
4.4 所有变量在调用前必须被初始化。
第一章程序设计的基本概念·01-01.程序设计的基本概念计算机语言高级语言远离硬件 C语言--- C++ ---- JAVA低级语言贴近硬件机器语言汇编语言基本概念:1、机器语言:计算机能接受和处理的由0和1代码构成的二进制指令或数据,是面向机器的。
2、源程序:由高级语言编写的程序称为“源程序”。
3、目标程序:二进制代码表示的程序称为“目标程序”。
4、编译程序:5、C源程序:6、C语言源程序文件名的后缀是.c,经过编译后生成目标文件的后缀名是.obj,经过连接后生成的可执行文件后缀名是.exe。
例题:在Visual C++环境下运行一个C程序时,所运行的程序的后缀名是?7、程序设计一般包含以下步骤:1)确定数据结构;2)确定算法;3)编译;4)运行调试程序;5)整理并写出文档资料。
8、算法:特点:1)有穷性;2)确定性;3)可行性;4)有零个或多个输入;5)有一个或多个输出。
算法的描述方法:1)伪代码;2)一般流程图(传统的结构化流程图);3)N-S流程图;4)PDA图等。
传统的结构化流程图:开始框处理框输入/输出框判断框流程线连接点N-S流程图:9、结构化的语言的三种结构:1)顺序结构;2)选择结构;3)循环结构。
顺序结构:语句1 语句1语句2语句2一般流程图 N-S图选择结构:判断表达式 满足语句1 语句2循环结构:判断表达式当判断表达式满足a )当型循环 先判断,后执行 最少循环0次b )直到型循环 先执行,后判断 最少循环1次不满足语句1语句2满足不满足判断表达式不满足满足循环体循环体第二章 C语言基础知识·02-01.简单C语言的构成和格式例:#include “stdio.h”main(){float a,b,area;a=1.2;b=3.6;area=a*b;printf(“a=%f,b=%f,area=%f\n”,a,b,area);}1、命令行:1)命令行必须以“#”开头,最后不能加“;”号。
易错点C语言中易犯的错误对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。
看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考。
****************************************************************************************1。
书写标识符时,忽略了大小写字母的区别。
main(){int a=5;printf(”%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量名用大写,变量名用小写表示,以增加可读性.****************************************************************************************2.忽略了变量的类型,进行了不合法的运算。
main(){float a,b;printf(”%d",a%b);}%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余运算,而实型变量则不允许进行”求余"运算。
****************************************************************************************3.将字符常量与字符串常量混淆。
char c;c=”a”;在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。
C规定以"\"作字符串结束标志,它是由系统自动加上的,所以字符串"a"实际上包含两个字符:'a’和’\’,而把它赋给一个字符变量是不行的。
****************************************************************************************4。
C语言常用算法模块的总结一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5三、闰年算法 page17、 page107四、连续小数相加减 page18、 page124五、素数、整除问题 page18、 page124、 page126、 page127六、大小写字母转换、密码问题 page51、 page87、 page89/4.9、 page104、 page67、 page128七、格式化字符提醒起于page 76八、三角形面积问题 page86九、一元二次方程 page87、 page89/4.8、 page108十、分段一元函数 page100、 page110、 page111/5.5、5.6十一、位运算 page112/5.7、 page129/6.2、6.3十二、公约数公倍数 page129/6.1十三、迭代法、二分法 page129-130/6.11-13C语言常用算法模块的总结一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2主要思想:替换+中转关联习语: if句int a,b,c,max; 多余的一个max是承载中转的容器scanf(“%d,%d,%d”,&a,&b,&c);max=a; 定初值if(max<b)Max=b; 分别取a、 b、c相互比较,由于只需输if(max<c) 出最大或者最小值,所以只需将最大值存Max=c; 储在max中即可printf(“……”);如果需要依次输出所给的数值,则须在比较大小之后进行替换赋值int a,b,t;scanf(“%d,%d”,&a,&b)if(a>b){ 此步的依次赋值体现了赋值运算自右向左的结合次序t=a; 先将a的值赋给t,此时a的值空出a=b; 将b的值赋给a,b值空出b=t; 将t中存储的a的值赋给b,此时t仍回复空值} 若混淆其中赋值规律则产生混乱printf(“……”);二、连乘连加问题page113、114、115 page129/6.3 page129/6.4、6.5主要思想:容器+循环关联习语:while(do……while)、for、(goto)int i,sum=0; 循环第一步,定初值,sum可视作是承载运算结果的容器,初为空i=1;while(i<=100) 构设循环条件,注意必须是有限循环,否则程序无终止{sum=sum+I; 循环第二步,累计结果i++; 循环第三步,循环量自增。
c语言中0xa1的意思摘要:1.0xa1 的含义2.0xa1 在C 语言中的作用3.0xa1 与其他编码方式的区分4.避免出现未知字符错误的方法正文:在C 语言中,0xa1 是一个重要的十六进制数,它表示一个特定的ASCII 字符。
0xa1 在C 语言中表示的是字符"A"。
许多人可能会对此产生疑惑,因为他们习惯将字符与字母A 对应到十进制的65。
但实际上,在C 语言中,字符和数字采用十六进制表示,因此"A" 的十六进制编码为0x41,而0xa1 表示的是另一个字符。
在C 语言中,字符通常用单引号括起来,例如"A" 表示字母A,而0xa1 则表示一个特殊的字符。
这个字符可能是某个非英文字符,也可能是编程过程中出现的错误。
当我们看到error C2018: unknown character "0xa1" 时,我们需要找出这个错误的原因并加以解决。
出现这种错误的原因往往是因为输入了全角字符,而编译器无法识别。
在全角字符与半角字符混合的情况下,编译器可能会出现识别错误。
例如,在全角状态下输入的英文单词可能被识别为中文字符,从而导致未知字符错误。
为了解决这个问题,我们只需要确保输入法处于英文状态,或者在代码中明确指出字符编码方式。
为了避免类似问题的发生,我们需要在编程过程中注意以下几点:1.确保输入法处于英文状态,以避免输入全角字符。
2.在代码中明确指出字符编码方式,例如使用UTF-8 编码。
3.检查代码中是否存在字符串拼写错误或其他可能导致错误的原因。
总之,0xa1 是C 语言中一个表示特定ASCII 字符的十六进制数。
在编程过程中,我们需要注意字符编码方式,避免出现全角与半角混合的情况。
C语言学习第一章:整型与浮点型之前一直开发单片机方面的项目时带着学着点C语言方面的知识,一直没有系统的学习C,所以写的程序现在自己都不忍心在回头看,因此打算静下心来完整的学下C,只有打好了基础才能写出精辟的程序。
好的,废话进入主题。
今天主要讲的是C中的两种数据类型——整型和浮点型,看到这,你肯定一拍大腿说,切,这么简单的东西有什么好讲的,如果你真的拍了退,那么说明你是C菜鸟,拍的声音越大,就越菜。
一:整型1.1首先我们先来将整型int。
不同的系统中对于整型的大小定义是不一样的,有些是两个字节有些是四个字节,那么我们该怎么来得知其大小呢?对,你肯定也想到了用运算符“sizeof”。
程序如下:#include <stdio.h>/*函数名:main输入参数:无输出参数:无调用:printf()被调用:无功能:查看整型的大小*/void main(void){printf("the size of int is:%ubytes\n",sizeof(int));}运行上面的程序得到如下结果:也就是说我的这个系统中,int被规定成四个字节。
需要注意的是,整型常量必须是整数,而如果含了小数点或是指数,那么将被认定我浮点型。
例如:1,-12是整型,而1.0,1.2E2则是浮点型,尽管我们看来1.0也是整数,但计算机是不这么认为的。
1.2下面我们来说说如何使用”pfintf()”来打印出int型数据,我们结合具体的程序来讲。
#include <stdio.h>/*函数名:main输入参数:无输出参数:无调用:printf()被调用:无功能:正确打印int型数据*/void main(void) //1{int i_a = 12; //2int i_b = -32; //3printf("%d %d %d %d\n",i_a,i_b,i_a+i_b,34);//4}在第四行中,我们分别答应出了四个int型数据,如下所示:也就是说,”pfintf()”可以打印出整型变量、整型常量、整型表达式。
C语言基本知识总结一、基础知识1.编译四阶段1)预处理阶段:为编译做准备,把“#”进行替换,将所代替的内容包含到引用处;2)汇编阶段:将经过预处理后的文件编译为汇编文件3)生成机器码:将汇编文件编译为机器码4)可执行文件:将机器码便以为可执行文件2.关键字1)变量:auto :声明自动变量const :声明只读变量enum :声明枚举类型extern :声明变量是在其它文件中声明static :声明静态变量char :声明字符型变量或函数short :声明短整型变量或函数int :声明整型变量或函数long :声明长整型变量或函数float :声明浮点型变量或函数double :声明双精度变量或函数unsigned :声明无符号类型变量或函数signed :声明有符号类型变量或函数struct :声明结构体变量或函数union :声明共用数据类型register :声明寄存器变量volatile :说明变量在程序执行中可被隐含地改变//?????????2)语句控制if:条件语句else :条件语句否定分支(与if 连用)for :一种循环语句switch : 用于开关语句case :开关语句分支break :跳出当前循环continue :结束当前循环,开始下一轮循环default :开关语句中的“其它”分支do :循环语句的循环体while :循环语句的循环条件goto :无条件跳转语句void :声明函数无返回值或无参数,声明无类型指针return :子程序返回语句(可以带参数,也可不带参数)循环条件sizeof :计算数据类型长度typedef :用以给数据类型取别名3.输入输出格式1)%[-][m]d d是按整形输出,m 输出字符宽度,-如果数据宽度小于m则右侧补空格;2)%[-][m.n]f f是浮点输出,n代表小数点后保留位数二、数组1.一维数组数组是具有连续内存空间的,相同类型的集合,它们都有一个共同的变量名,即数组名;字符数组函数:char s[32];strcpy(deststr,src);strlen(const char *s);strcmp(const char *s1,const char *s2);strcat(char *dest,const char *src);char *strstr(const char *s,const char *subs);//返回子串地址;如果没有出现段错误;char *strchr(const char *s,int c); //strchr(查找字符串里第一个出现的字符)strlwr(char *s) ; //将字符串转换小写strupr(char *s) ; //将字符串转换大写sprintf(char *str,"格式字符串",参数列表....);str 是准备好的字符数组,将字符串按照定义好的格式写入内存中;2.二维数组二维数组,是数组的数组定义:数组名[一维数组的个数][一维数组元素的个数];本质:是一维的线性存储三、自定义类型1.普通类型的定义typedef int INTINT a=12;printf("%d\n",a);#define true 1#define false 0typedef int bool; //true falsebool isok=true;printf("%d\n",isok);typedef float REAL;2. 指针类型1)普通指针类型typedef int * PINT; int * 当做原类型PINT 当新类型,是整型指针类型int a=12;PINT p=&a; //int *p;printf("%p,%p,%d,%d\n",&a,p,a,*p);2) 函数指针类型typedef int (*PFUN)(int,int);int max(int x,int y){return (x>y)?x:y;}int main(int argc, char* argv[]){PFUN p;p=max;printf("%d\n",p(12,24));return 0;}3) 数组指针类型typedef int (*AP)[4];int max(int x,int y){return (x>y)?x:y;}int main(int argc, char* argv[]){AP p;int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};p=a;for(int i=0;i<3;i++){for(int j=0;j<4;j++){printf("%d ",p[i][j]);}printf("\n");}return 0;}四、枚举枚举:将变量的值一一的列举出来,变量的值只限于一个范围格式:enum 枚举类型名{枚举的元素列表} [枚举变量列表];1)枚举元素是一系列的常量,常量有值,是从0开始0,1,2....2)将数值赋与了一种函义,让数值代表意义更直观enum weekday {sun,mon,tue,wed,thu,fri,sat} week;sun是常量值0mon 1变量的定义,enum weekday weekend; //enum weekday 是类型名weekend是变量名变量的取值范围,就枚举元素列中的任意一个元素weekend=mon;例:enum weekday {sun,mon,tue,wed,thu,fri,sat} week;int main(int argc, char* argv[]){week=mon;printf("%d\n",week);for(int i=0;i<7;i++){printf("星期%d\n",i);}//week+1后变成整型,要先强制转换为enum weekday类型for(week=sun;week <=sat; week=(enum weekday)(week+1)){printf("星期%d\n",week);}}输出结果:1星期0星期1星期2星期3星期4星期5星期6星期0星期1星期2星期3星期4星期5星期63)指定第一个元素=1时,常量的值是从1开始,而不是从0enum sets {screen=1,key,mouth}; //此时的key=2,mouth=3;4)用typedef来定义枚举类型typedef enum weekday {sun,mon,tue,wed,thu,fri,sat} WEEK;1) WEEK是枚举类型2) WEEK week=sun; //week是枚举变量例:枚举类型常用于条件判断WEEK week=(WEEK)(sun+10);printf("%d\n",week);for(week=sun;week <=sat; week=(enum weekday)(week+1)){if (week==fri) printf("星期%d\n",week);}}五、联合体(共用体)由一个变量存储各种类型数据union 联合体类型名{类型成员名;类型成员名;....}[变量列表];union type {int x;double d;char c;char str[256];};union type 类型名x,d,c,str都是成员union type them;them是变量名,这个变量里,只存储一个数据,在存储数据时决定了这个变量保存是哪一种类型。
占用内存是多大?这里面成员内存最大一个。
所有的成员共用了一个内存。
最后给哪一个成员赋值,内存中就会保留哪一个成员的值,前一个值被替换。
存取数据:变量名.成员名them.x=64;them.c='c';指针类型变量:union type *pthem=&them;int a=*pthem.x; //用*号取变量,(*指针变量名).成员名int a=pthem[0].x; //用[]取变量,指针变量名[0].成员名int a=pthem->x; //用->指向成员取值用typedef定义类型typedef union type {int x;double d;char c;char str[256];} TYPE;TYPE them;them.c='c';them.str="ajsdf";//错,对数组元素赋值用循环给元素赋值strcpy(them.str,"aaaaaa");sprintf(them.str,"%s","aaaaaa");很少使用,常用于编写数据库的软件比如编写oracle六、结构体是不同类型的数据组合而成的集合struct [结构体类型名]{类型成员;类型成员;....} [结构体变量列表];1)联合体用union ,结构体用struct2)联合体占用的内存=成员中占用内存最大内存结构体所有成员的内存总和3)联合体内只保留一个数据结构体保留是所有数据,每一个变量都占用属于自已一块内存4)联合体不可以在定义时初始化结构体可以在定义时进行初始化struct student{int num;char name[8];char sex[2];int age;};struct student std={1,"joe","man",24};存取数据:变量名.成员名printf("%d,%s,%s,%d\n",std.num,,std.sex,std.age);5)数组是同类型变量的集合结构体是不同类型变量的集合6)数组的成员(元素)内存地址连续结构体成员内存是连续,但间隔不一致7)结构体内的变量,是它的成员,没有静态和全局说法。
8)定义指针类型变量struct student *pstd;pstd=&std;int a=(*pstd).num;int a=pstd[0].num;int a=pstd->num;pstd++; //地址移动了整个结构体变量的长(所有成员的总和的长度)9)结构体数组struct student{int num;char name[10];char sex[4];int age;int score[5];};int main(int argc, char* argv[]){truct student std[3]={ {1,"joe","man",18,{12,32,34,54,33}},{2,"tonny","man",19,{32,23,34,54,33}},{3,"cindy","woman",17,{32,23,34,54,33}} };for(int j=0;j<3;j++){printf("%d,%s,%s,%d ",std[j].num,std[j].name,std[j].sex,std[j].age);for(int i=0;i<5;i++){printf("%d ",std[j].score[i] );}}return 0;}11) 结构体的变量之间赋值struct student std1,std2={1,"joe","man",18,{12,32,34,54,33}};std1=std2;printf("%d,%s,%s,%d ",std1.num,,std1.sex,std1.age);for(int i=0;i<5;i++){printf("%d ",std1.score[i] );}1. std1=std22. memcpy(&std1,&std2,sizeof(struct student));3. 成员变量逐一赋值12)结构体嵌套struct date{int year;int month;int day;}struct student{int num;char name[10];char sex[4];int age;struct date birthday;}struct student std1={1,"joe","man",18,{2012,4,25}};读写:std1.birthday.year;struct student{int num;char name[10];char sex[4];int age;struct date *pd;}struct date bd={2012,4,25};struct student std1={1,"林旭","男",18,&db};读写std1.pd->yearstruct student *p=&std1;读写:p->pd->year;struct student{int num;char name[10];char sex[4];int age;struct date{ //struct date是类型可以去掉dateint year;int month;int day;} birthday; //birthday是变量} std1; //std1是变量七、用typedef定义结构体类型typedef struct student{int num;char name[10];char sex[4];int age;struct date{ //struct date是类型int year;int month;int day;} birthday; //birthday是变量} STUDENT; //STUDENT是结构体类型STUDENT std1;三、指针1.指针类型分析[]的优先级高于*int p; //这是一个普通的整型变量int *p; // P是一个返回整型数据的指针int p[3]; //P是一个由整型数据组成的数组int *p[3]; //P是一个由返回整型数据的指针所组成的数组//int* p[3]; (由指针所组成的数组)“指针数组”int (*p)[3]; //P是一个指向由整型数据组成的数组的指针//int(*p) [3]; "数组的指针"int **p; //P是一个返回指向整型数据的指针的指针int p(int); //P是一个有整型参数且返回类型为整型的函数int (*p)(int); //P是一个指向有一个整型参数且返回类型为整型的函数的指针int *(*p(int))[3];//P是一个参数为一个整数且返回一个指向由整型指针变量组成的数组的指针变量的函数2.指针分析指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。