2021-08-24 自学C语言《跨平台的C语言程序设计》(上海工程技术大学SUES校本) 第十章 结构体,共用体和枚举类型 总结+课后练习

2021/8/24 22:06:35

本文主要是介绍2021-08-24 自学C语言《跨平台的C语言程序设计》(上海工程技术大学SUES校本) 第十章 结构体,共用体和枚举类型 总结+课后练习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

结构体

1、结构体有三种定义方式:单独定义、混合定义、无类型名定义。系统并不分配内存空间,只有在定义了结构体变量时,系统才为定义的每一个变量分配相应的存储单元。

2、不准对整体进行各种运算及输入输出操作,而对成员可进行像简单变量一样的运算。

3、*不能把整数赋给枚举变量;结构体、枚举类型、共用体要加;.

创建一个stu类型的,头指针名字是stu的,数组长度为sizeof stu的结构体数组

4、要考虑空间最优性,选择宏定义,结构体、共用体类型的存储空间最优化。Char1;short2;float4;int4;double8;long8;*8;char[20] 20。

5、枚举:将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。枚举元素是常量。枚举变量可以参与比较运算。6、定义枚举类型的关键字为enum。

例:enum weekdays{sun,mon,tue,wed,thu,fri,sat};

枚举的好处:它可以让数据更简洁,更易读。

枚举语法定义格式为:

enum 枚举名 {枚举元素1,枚举元素2,……};

7、Typedef用法:Typedef 原类型名 新类型名。

例5.Int i;

Enum weekday{mon,tue,wed,thu,fri}workday;

Workday=(enum weekday)(4-2);√

Workday=(4-2);× A为4,C为1,D为3;

用法篇

1\Strcmp函数

C/C++函数,比较两个字符串

设这两个字符串为str1,str2,

若str1==str2,则返回零;

若str1<str2,则返回负数;

若str1>str2,则返回正数。

matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false

2\结构体赋值语句:strcpy(stu.name,name)

注意:右大括号后面的;不能省略.

用大括号定义,而不是小括号和中括号;

3\宏定义后面没有分号

4\写注释一道斜杠“/”可分行注释;两道斜杠“//”注释在同一行。漏括号也可能导致编译出错。For语句第一个条件可以空缺;可以换行写程序。写程序过程中注意缩进,for if while switch可以用大括号括起来

5\大括号书写时系统会自动有照应,switch可以没有default

6\ Int float double short long 要用&读入,而char可以不用;

Tips:输入完成后按下space or enter就会被存入

Switch中default只有在case匹配失败的时候才会执行

词义辨析:Wage 日周工资 salary 月工资allowance 津贴

Depart离开  department 部门 morrow和tomorrow皆可表示次日

常见错误1\Id returnde 1

 没有关闭编译器

出现此错误提示可能的问题:
1、库函数拼写错误。如:printf,scanf, main等
2、定义的函数名在调用时,函数名拼写错误
3、在执行函数时可能函数体本身的问题
4、 运行窗口没关闭就再次编译

2\runtime  error (运行时错误)*****.exe已停止工作

就是程序运行到一半,程序就崩溃了。

比如说:

①除以零

②数组越界:int a[3]; a[10000000]=10;

③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;

④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000]

报错: 'printf' was not declared in this scope

原因是这个 printf  函数需要头文件 "stdio",但是程序中没写,解决办法是在头文件中加入此头文件。

C语言加入 #include<stdio.h>

C++加入  #include<cstdio>

3\ [Error] no 'operator++(int)' declared for postfix '++' [-fpermissive] 

++不同的编译器处理不同,有些规定:++后面的表达式必须是个左值,左值我也有些不懂,不过大致理解应该是一个类似于一个字母的表达式,所以而++n不是一个左值,故错误

4\ was not declared in this scope

c语言在使用变量前需要先定义引入变量,否则程序无法识别变量名,导致程序运行失败,只需在程序开始时加入定义的变量符号即可.

写法篇

电脑识别字符时注意:1.中文的符号和英文的符号大多是不一样的,例如大括号;以下字符识别时系统可能混淆:

o和0和O;l和\有区别;十和+;两种分号;_和.和” ”(空格)不要混淆;rn和m和t;r和m;()和{}和[]和C;#和”并”;c和e;”带收”和”枚举”;”*”和”¥”;8和&;”;”和’’:’

两个加号之间不能有空格 + +×   ++√

2.空格可能被漏掉;系统识别不出大括号,需要自己添加

3.”.”后面不能加空格

4.可能会重复识别单词

5.逗号之间不能有空格

翻译一些单词:initiailizer:初始化程序 ;enumeration 枚举;spectrum光谱;violet紫罗兰色的;紫罗兰

Sth. Was not declared:某些变量没有定义。

关于#、##的用法:

使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.

下划线在C没有特殊含义。一般在命名变量和方程用作断字符:integerarray,这样命名变量会很难看,一般会:integerArray 或者integer_array这样命名。一些程序包会经常看到:__Macro_A__ab。

这类的变量命名原因是为了避免命名重复。因为这些包被包含的时候他的头文件的每个变量会在该模块中占用一个命名。为了方便使用者的编写加入下划线从而使使用者命名变量时方便点。例如如果包中命名的是abc,那么使用者就不能使用abc来命名了。

一些冷知识:扩展资料

标志

1、//  双斜杠是一种注释标志。 前面有//的语句只是用来注释的,不是程序的一部分,只是为了让你看懂你注释的内容是作什么用的。

2、 /* */ 这个也是注释用的,只不过可以换行写。只要在两个符号之间的东西,都是注释 。不像上面只能写一行。

3、 + - * / 这是基本的运算符了,跟数学里的加减乘除一样。 再加上一个 % ,这个是求余数的,就像这样 3/5=0余3. 在编程里表示成 3%5=3 。4.  & ,|,~ 这三个是对位操作用的,叫按位运算,即 0&1=0,1|0=1. !0=1.



这篇关于2021-08-24 自学C语言《跨平台的C语言程序设计》(上海工程技术大学SUES校本) 第十章 结构体,共用体和枚举类型 总结+课后练习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程