一、实验作业

注意:

1.可以先初始化2个结构体数组数据以便测试。

2.要求用模块化方式组织程序结构,合理设计各自定义函数。同时,程序能够进行异常处理,检查用户输入数据的有效性,用户输入数据有错误,如类型错误或无效不会中断程序执行,具有一定的健壮性。

1.1 PTA题目 十进制转换二进制

设计思路

主函数:
定义变量n存放十进制数
输入n
调用函数dectobin
被调函数:
如果n<2输出n
否则
dectobin(n/2);
输出n取2的余数

代码截图

调试问题

一开始使用的判断条件是n!=0,但是0这个测试点没有输出,添加0的输出后非0数值转换结果又错了,后来改用n<2为判断条件答案正确

1.2 学生成绩管理系统

代码总行数:340

1.2.1 画函数模块图,简要介绍函数功能。

1.2.2 截图展示你的工程文件

1.2.3 函数代码部分截图

头文件

插入学生信息及学生成绩信息代码

【只实现了基础功能,合法性没有判断】

删除学生成绩信息代码

【题目是删除成绩,觉得这样操作和修改成绩的代码其实没有区别了】

总分排序代码

(通过输出实现代码注释方便使用操作)

1.2.4 调试结果展示

录入数据

命令1:新增学生信息

新增学生是否已存在

命令3:删除学生信息

命令2:修改学生信息

命令4:输出所有信息

命令5:按总分,平均分排序输出

命令6:查询学生信息

找不到该学生

命令7:退出系统

1.2.5 调试碰到问题及解决办法。

(1)开始建的是c++项目,一加函数就提示结构体重定义,重建项目还是不行,后来重写了结构体,建立新项目,这个问题解决了,但是又出现全局变量函数中提示未定义,改用c项目后解决。

(2)

插入新学生时,循环中数组下标使用了i,而i初值设为0,导致第一组数值被覆盖,换用count后解决

(3)忘记定义的是字符数组,排序时用整型比较的方式寻找输入学号,导致排序一直错误,后改正

二、截图本周题目集的PTA最后排名

三、阅读代码

找一篇优秀代码贴图展示,先描述题目,再贴代码,可自己在里面加注释。
说明该代码功能是什么,优点是什么?
代码本次要求找递归相关代码。代码长度至少10行以上。
内容不能太泛,一定是有针对性讲出代码优势,自己可以从里面怎么学习。

功能:主函数控制输出格式,被调函数利用递归计算数列元素的值
优点:(1)主函数里动态申请变量空间,不浪费内存空间
(2)斐波拉契数列是比较典型的使用递归的例子,如果使用循环,另外判断n=1和n=2时的情况是可以的,但是从第三项起,要计算第n-2项和第n-1项之和就有点不好操作了,是不是还得用数组存放数值?代价就有点大了。而递归将这种重复性的一样的操作直接丢给计算机去做,代码思路看上去也清晰很多

四、本周学习总结

1.介绍本周学习内容

1.1while(1)可以实现永久循环,通过循环体中的break语句结束循环

1.2#define宏定义将固定不变的系数定义成符号常量,保证符号常量不变性,也增加程序可读性

1.3宏定义格式:#define 宏名 宏定义字符串 【行尾无需加分号,常用大写字母串做宏名,中间可有空格,回车符结束】

1.4在程序编译时,所有出现宏名的地方,都会用宏定义字符串来替换,即宏替换,只替换不做运算

1.5宏要在一行内完成,可实现简单的函数功能,如 #define MAX(a,b) a>b?a:b

     另外如果#define最后跟的“\”表示改行未结束,与下一行合起来成为完整一行

1.6宏嵌套定义:#define PI 301415926

#define S PIrr

1.7文件包含的指定的文件名如果使用尖括号<>将使用C语言的标准头文件,编译系统在系统设置好的文件夹中把指定文件包含进来。使用“”则从当前工作文件夹中寻找被包含文件,找不到再到系统中寻找。

1.8条件编译

1.9

01.外部变量格式:extern 变量名表

1)只起说明作用,不分配储存单元,对应的储存单元在定义时分配

2)全局变量只能在某个模块中定义一次,如果其他模块要使用该全局变量,需要外部变量的声明

02.函数的外部声明

1)格式:extern 函数类型 函数名

2)实现在一个模块中调用另一个模块中的函数

2.1一维数组

(1)一般格式:类型名 *数组名【数组长度】

(2)指针数组是由指针变量构成的数组,在操作中既可以对数组元素进行赋值和引用,也可以间接访问数组元素所指向的的单元内容,改变或引用该单元的内容

2.2二维数组

(1)二维数组相当于二级指针,即指向指针

(2)指向指针一般定义:类型名 * *变量名

(3)二级指针指向一级指针,代表同一个单元,值是相等的

2.3二维数组a中三个层次的指针等价关系

(1)a是行元素数组的首地址,又称为行地址,二级指针;a是首行第一个元素的地址,又称列地址,一级指针

(2)a[i][j]等价于
(a+i)+j)或(a[i]+j)

2.4定义二维字符数组必须指定列长度大于最长字符串的有效长度,由于各个字符串的长度一般不相同,会造成内存单元的浪费。而指针数组并不存放字符串,仅仅用数组元素指向各个字符串,没有类似问题

2.5所有的局部数据对象在函数返回就会消亡,其值不再有效,所以不能实现函数时返回在函数内部定义的局部数据对象的地址,一般都返回全局数据对象或主调函数中数据对象的地址

2.6 函数名可以做函数的实参,函数指针做函数的形参

2.学习体会

学的比较零散,所以做系统的时候有点乱了阵脚,知道整个框架要怎么做,但是具体到细节就不确定了,一直在改错误,改不完的感觉,叹气,做系统真的很考验学习的扎不扎实。这周学的东西更体会到知识点的联系的重要性。系统写不出来的时候有挫败感,有点担心期末的课程设计。

C语言--函数嵌套的更多相关文章

  1. C语言函数嵌套调用作业总结

    成绩管理系统作业小结 devc中出现"ID Return"问题,我帮很多同学看完后发现,大部分还是自身程序问题,如全局变量大小写错误.没有添加c文件进工程等等.所以对于" ...

  2. C语言函数嵌套调用作业

    一.实验作业 1.1 PTA题目:6-4 十进制转换二进制 设计思路 如果n大于1 对n/2继续进行该函数运算 输出n%2的值 代码截图 调试问题 我第一次做的时候判断的边界条件是大于0继续进行运算, ...

  3. C语言--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  4. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...

  5. c语言函数的嵌套使用和矩阵运算

    这段时间,听刚刚学习c的同学说函数嵌套运用不太熟练,想做一个简单的程序进行练习,我也就当练练手了,哈哈.虽然说是比较简单,但是其中的思维也是值得思考的. 一.函数的嵌套使用 简单说明题目:对于等式 y ...

  6. iOS学习05C语言函数

    本次主要是学习和理解函数,函数树状图如下: 1.函数的声明和定义 函数定义的四要素分别为: 返回值类型 :函数的结果值类型,函数不能返回数组. 指定返回类型是void类型说明函数没有返回值. 函数名 ...

  7. 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 $url = "http://www. ...

  8. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  9. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

随机推荐

  1. es6的新特性--模板字符串

    这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...

  2. River Hopscotch POJ - 3258

    Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...

  3. 极速搞定1小时不出结果SQL的优化(SQL Tuning)

    今天帮用户做了一个SQL TUNING,原来为1个多小时不出结果,TUNING后为几秒,图片为我调优时参考的explain plan,隐去某些具体信息,虽然通过该计划,不能完全确定SQL慢的原因,但稍 ...

  4. 【BZOJ3924】幻想乡战略游戏(动态点分治)

    [BZOJ3924]幻想乡战略游戏(动态点分治) 题面 权限题...(穷死我了) 洛谷 题解 考虑不修改 发现一个贪心的做法 假设当前放在当前位置 如果它有一个子树的兵的总数大于总数的一半 那么,放到 ...

  5. 【MyBatis源码分析】插件实现原理

    MyBatis插件原理----从<plugins>解析开始 本文分析一下MyBatis的插件实现原理,在此之前,如果对MyBatis插件不是很熟悉的朋友,可参看此文MyBatis7:MyB ...

  6. tp5 提升性能的几个方法

    原文:http://www.upwqy.com/details/27.html 首先说明 如果是linux 或者是Mac,需要给予权限才能操作 以下方法建议,在网站稳定后再生成上传. 1 生成路由缓存 ...

  7. golang 互斥锁和读写锁

    golang 互斥锁和读写锁 golang中sync包实现了两种锁Mutex(互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. ty ...

  8. Android 开发使用第三方库出现Crash时处理方案汇总

    一.Glide混淆脚本没加导致的Crash 现象描述: 使用Glide开发的时候在debug版本一直没事,但是realease版本各种Crash,报错信息如下: java.lang.IllegalAr ...

  9. Thinking in Java 第二章学习笔记

    Java虽基于C++,但相比之下,Java是一种更加纯粹的面向对象程序设计语言. 在Java的世界里,几乎一切都是对象,而Java中的全部工作则是定义类,产生那些类的对象,以及发送消息给这些对象. 尽 ...

  10. MapReduce并行编程模型和框架

    传统的串行处理方式 有四组文本数据: "the weather is good", "today is good", "good weather is ...