C语言博客作业--函数嵌套调用

一、实验作业

1.1 PTA题目

题目:6-5 递归实现顺序输出整数

设计思路

void printdigits(int n)
  定义变量i
  如果(i=n/10)!=0    printdigits(i)
  返回输出n%10

代码截图

调试问题

一开始输出语句中用%c,结果提交答案错误,后来发现它要输出的还是数值

修改后,输出的值改成了i%10,结果部分正确,因为该递归应返回的是n。

1.2 学生成绩管理系统

1.2.1函数模块图及函数功能


input_output()函数用于输入输出
score()函数用于排序
delete()函数用于删除
change()函数用于修改
add()函数用于增加
search()函数用于查找
num()函数用于控制学生数量

1.2.2工程文件展示

1.2.3 函数代码部分截图

main()函数


输入输出函数


排序函数

删除函数

修改函数

增加函数

查找函数

1.2.4 调试结果展示

封面


输入学生信息

输出学生信息

查询学生信息



修改学生信息



删除学生信息

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

一开始总是编译不了,编译器提示的错误很多,有代码错误,有文件错误,代码主要是编译器不支持的形式通过不了,比如for语句里定义变量等等,经过修改可以运行,文件的问题,主要是提示找不到文件,或者文件错误,后来改了头文件,勉强可以编译。

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

三、阅读代码

1.递归函数实现全排列

void Swap(int *lhs, int *rhs)  
{  
    int t = *lhs;  
    *lhs = *rhs;  
    *rhs = t;  
}  
void FullPermutation(int source[], int begin, int end)  
{  
    int i;  
    if (begin >= end)  
    {  
        for (i = 0; i < end; i++)  
        {  
            printf("%d", source[i]);  
        }  
        printf("\n");  
    }  
    else  
    {  
        for (i = begin; i < end; i++)  
        {  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]);  
            }    
            FullPermutation(source, begin + 1, end);  
            if (begin != i)  
            {  
                Swap(&source[begin], &source[i]);   
            }   
        }  
    }  
}  
int main()  
{  
    int source[30];  
    int i, count;  
    scanf("%d", &count);  
    // 初始化数组  
    for (i = 0; i < count; i++)  
    {  
        source[i] = i + 1;  
    }  
    FullPermutation(source, 0, count);  
    return 0;  
}  
Swap函数用于交换两个形参的值,FullPermutation函数用于找每个全排列,主函数调用FullPermutation后,如果找到找到一个排列,就输出;没有找完一个排列,则继续往下找下一个元素,用for循环,对元素进行交换后,递归排列剩余的从begin+1到end的元素,最后回溯还原。

四、本周学习总结

1.介绍本周学习内容

1.1函数的嵌套调用


1.2递归函数调用

1.2.1直接递归调用和间接递归调用

1.3宏定义

1.3.1格式及示例:

1.3.2宏的嵌套定义:

1.3.3宏的用途:

1.符号常亮,增加程序的灵活性
2.简单的函数功能实现,由于宏要在一行内完成,只能实现简单的函数功能
3.为程序书写带来方便

1.3.4注意事项:宏引用形式与函数调用非常相似,但两者时间过程完全不同,宏替换在编译预处理时完成。函数调用时,如果实参是表达式,要先计算表达式,再把结果值传递过去。而宏替换不做计算,直接替换过去,记住,宏只进行替换。

1.4多文件模块

1.4.1程序文件模块

当一个c程序由多文件模块组成时,整个程序只允许有一个main()函数,程序的运行从main()函数开始,包含main()函数的模块叫做主模块,为了能调用写在其他文件的模块中的函数,文件包含是一个有效的方法.

1.4.2文件模块间的通信

用到全局变量,需外部变量声明,格式:

extern 变量名表

外部函数调用:

extern 函数类型  函数名

静态全局变量:有特殊的作用,用于限制全局变量作用域的扩展。为了避免自己定义的全局变量影响其他人编写的模块,c语言的静态全局变量可以把变量的作用范围仅局限于当前的文件模块中,即使其他文件模块使用外部变量声明,也不能使用该变量。

2.学习体会

  • 感觉c语言真的越来越难,越来越复杂了,特别是代码量的增加,还有递归、指针进阶、文件模块等知识的加入,真的远远超出了我预想的范围,觉得什么都不会,又不知道自己哪里不会,以前只是觉得自己的编程能力很差,现在开始怀疑自己的理解能力了,上课也不是很能听懂,比如这次的大作业,写学生管理系统,什么文件,什么工程,真的还没弄明白,就迷迷糊糊要写系统了,也不知道该从哪下手。学好c真的不是件容易事,我还是得脚踏实地,一步一步来吧。
posted @ 2017-12-31 12:14  晴天*  阅读(3265)  评论(2编辑  收藏  举报