C语言二刷第八天:结构类型(mooc视频;老师:翁恺)

11.1.1

  • 枚举创建方式:
  • enum color {red=1,yellow,green=5};  
  • enum color =5;
  •  
  • enum 枚举名{内容元素};
  • 枚举和const的对比:如果需要定义很多常量,要比const看起来美观,且方便。

11.2.1

声明结构类型:(通常在函数外声明,全局性)

注意:最后有分号!!!

struct date{
    int month;
    int day;
    int year;
};

struct date today;

以下是第二种定义格式:

struct point{
    int x;
    int y;
}p1,p2;

p1和p2都是point的变量

访问成员:p1.x   p2.y    打印用%i。

赋值操作:p1=(struct point){5,10};//相当于p1.x=5;  p2.y=10;

                  p1=p2;   //相当于p1.x=p2.x;   p1.y=p2.y;

11.2.2

  • 与其将一整个庞大的结构体当做参数传入函数,然后再最后以赋值的形式在main中运行,不如将结构体的指针当做参数传入函数,
  • 这样做的好处是:节省了结构体参数重建的空间。
  • 指向结构的指针:用->表示指针所指的结构变量中的成员。(以下为两种表示方法)
  • struct date{
        int month;
        int day;
        int year;
    }myday;
    
    struct date*p=&myday;
    
    (*p).month=12;
    p->month=12;

    如何将函数写入结构指针参数:

  • strcut point* getStruct(struct point *p){
        scanf("%d",&p->x);
        scanf("%d",&p->y);
        printf("%d, %d",p->x,p->y);
        return p;
    }

    使用函数可以这么使用:

strcut point{
    int a;
    int b;
}x;
strcut point x={0,0};  //结构体初始化
getStrcut(&x);         //得到结构体的指针
getStrcut(&x)->a=5;    //使得名为x的结构体中的a元素,赋值为5
*getStrcut(&x)=(strcut point){5,4};    //使得结构体重新赋值

11.2.3

结构数组:

strcut date dates[100];   //定义的date结构里有dates数组,其长度为100
struct date dates[]={{4,5,2005},{2,4,2005}};   //dates数组里有两个结构

结构中的结构:

strcut dateAndTime{
    strcut date{
        int a=1;
        int b=2;
    }d;
    strcut time{
        int a1=3;
        int b1=4;
    }t;
}dt;

struct dateAndTime *pdt, dt;
pdt=&x;

//以下四种形式是等价的
dt.d.a;
pdt->d.a;
(dt.d).a;
(pdt->d).a;
//但是没有pdt->d->a;  因为d不是指针


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。 本课程是零基础的编程入门课,是后续的操作系统、编译原理、体系结构等课程的基石。 —— 课程团队 课程概述 程序设计是一门基础课程。对于计算机相关专业而言,程序设计是专业基础知识,是进一步学习其他专业知识的第一步阶梯;对于非计算机专业而言,程序设计的学习有助于理解计算机的能力所在,理解哪些是计算机擅长解决的问题,怎样的方式方法是计算机擅长的手段,从而能更好地利用计算机来解决本专业领域内的问题。 C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。 对于非计算机专业的学生,学习本课程的主要目的是掌握程序设计的基本方法,C语言是教学媒介。但是对于计算机专业的学生,本课程是向后续的计算机组成、操作系统、编译原理、体系结构等课程前进的基石,对于C语言本身甚至程序设计语言基础原理的深入理解都是应该掌握的。 本课程是零基础的入门课程,完成本课程之后,就能具有初步的运用C语言编写程序的能力。要想完整的学习C语言,还需要进一步学习本课程的后续课程——《C语言程序设计进阶》。 程序设计是实践性很强的课程,该课程的学习有其自身的特点,听不会,也看不会,只能练会。你必须通过大量的编程训练,在实践中掌握编程知识,培养编程能力,并逐步理解和掌握程序设计的思想和方法。在这里所提供的,只是基础的知识讲解,要想学会编程,还需要更多时间的投入和努力。 为了学习编程,你需要有一台计算机,安装必要的编程软件。无论是MS Windows、Mac OS X还是Linux,都有适合C语言编程的软件。如果搞不定自己电脑上的编程软件,我们也会提供在网页中编写、运行C语言程序的方法。 课程大纲 01 程序设计与C语言 课时 1 计算机和编程语言 2 C语言 3 第一个程序 02 计算 课时 1 变量 2 数据类型 3 表达式 4 在线评判系统 03 判断与循环 课时 1 判断 2 循环 04 进一步的判断与循环 课时 1 逻辑类型和运算 2 级联和嵌套的判断 3 多路分支 4 循环的例子 5 判断和循环常见的错误 05 循环控制 课时 1 循环控制 2 多重循环 3 循环应用 06 数组与函数 课时 1 数组 2 函数的定义与使用 3 函数的参数和变量 4 二维数组 07 数组运算 课时 1 数组运算 2 搜索 3 排序初步 08 指针与字符串 课时 1 指针 2 字符类型 3 字符串 4 字符串计算 预备知识 作为第一门编程课,本课程可以零基础学习。大学计算机(大学计算机基础、计算思维导论)等课程对于理解本课程的部分内容有帮助,但这些课程的学习不是必须的。 证书要求 课程的总分达到60分以上,可以获得本课程的合格证书。 课程的总分达到85分以上,可以获得本课程的优秀证书。 参考资料 何钦铭、颜晖,《C语言程序设计(第3版)》,高等教育出版社,2015年,ISBN 978-7-04-043128-3 颜晖、张泳,《C语言程序设计实验与习题指导(第3版)》,高等教育出版社,2015年,ISBN 978-7-04-043563-4 常见问题 Q:我需要特殊版本的计算机吗? A:任何计算机都可以用于C语言编程,包括但不限于各个版本的MS Windows、各个版本的Mac OS X、各种发行版本的Linux。有的手机有app也能实现C语言编程,不过我们不推荐那么小的屏幕。 Q:我需要安装特定的软件才能做这门课的作业吗? A:任何C语言的开发工具都可以。课程演示会使用Dev C++及命令行环境,但是你使用任何其他开发工具都不会影响做作业的正确性。可以使用的其他工具包括但不限于MS Visual Studio、C-Free等。 Q:每周会发布多少时间的视频?我需要花多少时间来学习? A:我们按照90分钟的授课时间来设计课程。但是发布的视频肯定小于90分钟,一般在50到70分钟左右。因为在线下上课时,老师可能会回顾一下上周的内容、某些内容会看学生的反应重复几遍、会当堂问做一些提问,以及在各种软件等教学工具之间切换,这些都要花点时间,而这些在线上课程中都不存在了,所以视频的时间不会正好是90分钟。但是一般我们设计课程需要1:1.5到1:2的课后学习时间,这包括预习、作业、练习和复习的时间,所以每周大约需要花费三到五小时的时间。
P11.1.1 计算机与编程语言:计算机与编程语言 P21.1.2 计算机和编程语言:计算机的思维方式 P31.2.1 C语言:为什么是C P41.2.2 C语言:简单历史 P51.2.3 C语言 编程软件 P61.3.1 第一个程序:第一个程序 P71.3.3 第一个程序:做点计算 P81.3.4 第一个程序:命令行编译和执行 P92.1.1 变量:第二周 P102.1.2 变量:变量定义 P112.1.3 变量:变量赋值与初始化 P122.1.4 变量:变量输入 P132.1.5 变量:常量VS变量 P142.1.6 变量:浮点数 P152.2.1 表达式:表达式 P162.2.2 表达式:运算符优先级 P172.2.3 表达式:交换变量 P182.2.4 表达式:复合赋值和递增递减 P192.2.5 表达式:如何使用PAT系统来做编程练习题 P203.0.1 编程练习解析:PAT再解释 P213.0.1 编程练习解析:第二周习题解析 P223.0.3 编程练习解析:0的故事 P233.1 判断:判断的条件 P243.1.1 判断:做判断 P253.1.3 判断:找零计算器 P263.1.4 判断:否则的话 P273.1.5 判断:if语句再探 P283.2.1 分支:嵌套的if-else P293.2.2 分支:级联的if-else if P303.2.3 分支:if-else的常见错误 P313.2.4 分支:多路分支 P324.1.1 循环:循环 P334.1.2 循环:while循环 P344.1.3 循环:do-while循环 P354.2.1 循环应用:循环计算 P364.2.2 循环应用:猜数游戏 P374.2.3 循环应用:算平均数 P384.2.4 循环应用:整数求逆 P395.1.1 第三种循环:for循环 P405.1.2 第三种循环:循环的计算和选择 P415.2.1 循环控制:循环控制 P425.2.2 循环控制:嵌套的循环 P435.2.3 循环控制:从嵌套的循环中跳出 P445.3.1 循环应用:前n项求和 P455.3.2 循环应用:整数分解 P465.3.3 循环应用:求最大公约数 P476.0.1 编程练习解析:编程练习解析4-0 P486.0.2 编程练习解析:编程练习解析4-1 P496.0.3 编程练习解析4-2:九九乘法表 P506.0.4 编程练习解析4-3:统计素数求和 P516.0.5 编程练习解析4-4:猜数游戏 P526.0.6 编程练习解析5-0:n项求和 P536.0.7 编程练习解析5-1~5-3 P546.1.1 数据类型:数据类型 P556.1.2 数据类型:整数类型 P566.1.3 数据类型:整数的内部表达 P576.1.4 数据类型:整数的范围 P586.1.5 数据类型:整数的格式化 P596.1.6 数据类型:选择整数类型 P606.1.7 数据类型:浮点类型 P616.1.8 数据类型:浮点的范围与精度 P626.1.9 数据类型:字符类型 P636.1.10 数据类型:逃逸字符 P646.1.11 数据类型类型转换 P656.2.1 其他运算:逻辑类型 P666.2.2 其他运算:逻辑运算 P676.2.3 其他运算:条件运算与逗号运算 P687.1.1 函数的定义和使用:初见函数 P697.1.2 函数的定义和使用:函数的定义和调用 P707.1.3 函数的定义和使用:从函数中返回 P717.2.1 函数的参数和变量:函数原型 P727.2.2 函数的参数和变量:参数传递 P737.2.3 函数的参数和变量:本地变量 P747.2.4 函数的参数和变量:函数庶事 P758.1.1 数组:初试数组 P768.1.2 数组:数组的使用 P778.1.3 数组:数组的例子 P788.2.1 数组运算:数组运算 P798.2.2 数组运算:数组例子 P808.2.3 数组运算:二维数组 P819.1.1 指针:取地址运算 P829.1.2 指针指针 P839.1.3 指针指针的使用 P849.1.4 指针指针与数组 P859.1.5 指针指针与const P869.2.1 指针运算:指针运算 P879.2.2 指针运算:动态内存分配 P8810.1.1 字符串:字符串 P8910.1.2 字符串:字符串变量 P9010.1.3 字符串:字符串的输入输出 P9110.1.4 字符串:字符串数组,以及程序参数 P9210.2.1 字符串函数:单字符输入输出 P9310.2.2 字符串函数:字符串函数strlen P9410.2.3 字符串函数:字符串函数strcmp P9510.2.4 字符串函数:字符串函数strcpy P9610.2.5 字符串函数strcat P9710.2.6 字符串函数:字符串搜索函数 P9811.1.1 枚举:枚举 P9911.2.1 结构结构类型 P10011.2.2 结构结构结构与函数 P10111.2.3 结构结构中的结构 P10211.3.1 联合:类型定义 P10311.3.2 联合:联合 P10412.1.1 全局变量:全局变量 P10512.1.2 全局变量:静态本地变量 P10612.1.3 全局变量:后记 P10712.2.1 编译预处理和宏:宏定义 P10812.2.2 编译预处理和宏:带参数的宏 P10912.3.1 大程序结构:多个源代码文件 P11012.3.2 大程序文件:头文件 P11112.3.3 大程序结构:声明 P11213.1.1 文件:格式化输入输出 P11313.1.2 文件:文件输入输出 P11413.1.3 文件:二进制文件 P11513.2.1 位运算:按位运算 P11613.2.2 位运算:移位运算 P11713.2.3 位运算:位运算例子 P11813.2.4 位运算:位段 P11914.1.1 可变数组:可变数组 P12014.1.2 可变数组:可变数组的数据访问 P12114.1.3 可变数组:可变数组的自动增长 P12214.2.1 链表:可变数组的缺陷 P12314.2.2 链表:链表 P12414.2.3 链表:链表的函数 P12514.2.4 链表:链表的搜索 P12614.2.5 链表:链表的删除 P12714.2.6 链表:链表的清除 P128A0.1 ACLLib入门:ACLLib介绍,看几个小游戏的演示 P129A0.2 ACLLib入门:Win32API简单介绍,太难了,不学了! P130A0.3 ACLLib入门:Dev C++建ACLLib项目,第一个程序跑起来! P131A0.4 ACLLib入门:ACLLib的基本绘图函数
### 回答1: 可以使用Python的SciPy库中的dblquad函数来计算双重积分。以下是一个示例程序,用于计算双重积分: ```python from scipy.integrate import dblquad import numpy as np # 定义被积函数 def integrand(x, y): return np.exp(-x*y) # 定义积分区间 x_lower = 0 x_upper = 1 y_lower = lambda x: 0 y_upper = lambda x: 1-x # 计算双重积分 result, error = dblquad(integrand, x_lower, x_upper, y_lower, y_upper) # 输出结果 print("Result: ", result) print("Error: ", error) ``` 在这个例子中,我们计算了双重积分$$\int_{0}^{1}\int_{0}^{1-x} e^{-xy}dydx.$$ 我们首先定义了被积函数integrand(x, y)。然后我们定义了积分区间,其中y的积分上限和下限都是函数x的函数。最后我们使用dblquad函数来计算积分结果和误差,并将它们打印出来。 ### 回答2: 编写Python程序求解双重积分可以使用数值积分的方法,如矩形法、梯形法或辛普森法。下面以矩形法为例进行说明。 首先,我们需要将双重积分转化为二重迭代的形式。根据给出的链接中的双重积分,可以发现积分范围为x从0到1,y从0到2,因此可以将双重积分表示为两重嵌套的积分形式。 然后,我们可以使用矩形法对双重积分进行近似计算。具体步骤如下: 在程序中引用数值计算库,如numpy库。 设置步长h1和h2,用于控制矩形的划分精度。 定义双重积分函数f(x, y),根据给定的双重积分表达式编写对应的Python函数。 使用两个嵌套循环,分别迭代x和y的取值范围,每次迭代计算f(x, y)并进行累加。这里要注意,x的取值范围是[0, 1],y的取值范围是[0, 2]。 最后,输出计算得到的近似积分值。 下面是一个简化的代码示例: ```python import numpy as np def f(x, y): return x**2 + y def double_integral(): h1 = 0.001 # x轴步长 h2 = 0.001 # y轴步长 integral_value = 0.0 # 积分值 for x in np.arange(0, 1, h1): for y in np.arange(0, 2, h2): integral_value += f(x, y) * h1 * h2 return integral_value result = double_integral() print("双重积分的近似值为:", result) ``` 以上代码中,我们设置了较小的步长h1和h2来提高积分的精度,然后通过两个嵌套循环对二重积分进行近似计算。计算完成后,输出得到的近似积分值。 需要注意的是,由于双重积分结果可能是一个较大的数值,因此可能需要适当调整步长和划分区域的细度,以提高计算的准确性和效率。 ### 回答3: 要编写Python程序求解双重积分,我们可以使用数值积分的方法来逼近积分值。下面是一个简单的Python程序: ```python import numpy as np def f(x, y): return np.sin(x*y) def double_integral(a, b, c, d, n): dx = (b - a) / n dy = (d - c) / n integral = 0 for i in range(n): for j in range(n): x = a + i*dx + dx/2 y = c + j*dy + dy/2 integral += f(x, y) integral *= dx*dy return integral a = 0 # 第一个积分的下限 b = np.pi # 第一个积分的上限 c = 0 # 第二个积分的下限 d = np.pi # 第二个积分的上限 n = 100 # 将每个积分区间分成n个小区间 result = double_integral(a, b, c, d, n) print("双重积分的近似值:", result) ``` 上述程序中,`f(x, y)`是被积函数,`double_integral(a, b, c, d, n)`是求解双重积分的函数。在函数中,我们将每个积分区间分成n个小区间,然后通过循环求和的方式,依次计算每个小区间的中点的函数值,并累加得到积分值。最后,将每个小区间的宽度dx和dy乘起来,得到整个双重积分的近似值。 以上是一个简单的数值积分求解双重积分的Python程序,可以根据需要进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值