Linux C编程:main函数参数与递归函数解析
"这篇文档主要介绍了Linux环境下的C语言编程中的三个关键知识点:1) main函数接收命令行参数,2) 递归函数的概念及如何编写,以及3) 使用GDB进行程序调试。通过示例代码,分别展示了如何处理main函数的argc和argv参数,如何实现递归函数来计算序列和与阶乘,并提到了使用GDB进行程序调试的基本应用。" 一、main函数传参 在C语言中,`main`函数可以接收两个参数:`int argc`和`char *argv[]`。`argc`表示命令行参数的个数,不包括程序本身的名字;`argv`则是一个字符串数组,包含了所有命令行参数。在提供的代码示例中,程序会打印出所有传入的参数,包括程序自身的路径。例如,当执行命令`./eg wang jing ya`时,程序将依次输出`./eg`、`wang`、`jing`和`ya`。 二、递归函数 递归函数是函数自身调用自身的一种编程技巧。编写递归函数需要明确三个要素:1) 基本结束条件(也称为临界条件),标志着递归停止的边界;2) 递归步骤,即每次函数调用时如何接近基本结束条件;3) 每次递归调用中完成的具体任务。文档中提供了两个递归函数的例子: 1. 计算1到N的和:`sum`函数通过递归实现,当n等于1时返回1,否则返回n加上n-1的和。在`main`函数中,用户输入N值,然后调用`sum`函数得到1到N的和并打印结果。 2. 计算1到N的阶乘:`jc`函数用于计算阶乘,当sum等于1或0时返回1,否则返回sum乘以sum-1的阶乘。同样,在`main`函数中,用户输入N值,然后调用`jc`函数计算阶乘并打印结果。 三、GDB调试 GDB(GNU Debugger)是Linux下常用的C/C++程序调试工具。它允许程序员设置断点、单步执行、查看变量值、跟踪调用栈等,对于理解程序执行流程和查找bug非常有帮助。虽然文档没有详细介绍如何使用GDB,但提到使用GDB调试是C语言开发中的重要技能,通常涉及以下几个步骤: 1. 编译程序时添加-g选项,以便包含调试信息。 2. 启动GDB并加载目标程序。 3. 设置断点在特定行或函数。 4. 运行程序,观察其执行过程。 5. 使用`step`、`next`命令单步执行,`print`命令查看变量值,`backtrace`命令查看调用栈。 掌握这些基本概念和技巧,将有助于在Linux环境下进行C语言编程和问题排查。
一、main函数传参
#include<stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i = 0;i < argc;i++)
puts(argv[i]);
//puts(*(argv+i));
return 0;
}
上面这个程序(如果源文件名字为eg.c)在命令行编译:gcc eg.c -o eg
然后运行: ./eg wang jing ya
输出: ./eg
wang
jing
ya
解释:运行的时候可以通过命令行以输入的方式给main传参,输入的内容全是传递的参数(包括./eg),所以输出结果如上所示
--------------------------------------------------------------------------------
二、递归函数
递归函数:自己调用自己
写递归函数需要三步走:
1.什么时候开始?
2.什么时候结束?
-----------------------------------------------------------------------------
案例1:计算1 ~ N的和
#include<stdio.h>
int sum(int n)
{
//临界条件判断
if(1 == n)
return 1;
else
return n+sum(n-1);
}
int main(int argc, const char *argv[])
{
//利用递归实现1 ~ N的求和
int N;
printf("Please input N:\n");
scanf("%d",&N);
int x = sum(N);
printf("1 ~ %d 的值为:%d\n",N,x);
return 0;
}
--------------------------------------------------------------------------------
案例2:计算1 ~ N的阶乘
#include<stdio.h>
int jc(int sum)
{
if(sum == 1 || sum == 0)
return 1;
剩余8页未读,继续阅读
- 粉丝: 49
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 最优条件下三次B样条小波边缘检测算子研究
- 深入解析:wav文件格式结构
- JIRA系统配置指南:代理与SSL设置
- 入门必备:电阻电容识别全解析
- U盘制作启动盘:详细教程解决无光驱装系统难题
- Eclipse快捷键大全:提升开发效率的必备秘籍
- C++ Primer Plus中文版:深入学习C++编程必备
- Eclipse常用快捷键汇总与操作指南
- JavaScript作用域解析与面向对象基础
- 软通动力Java笔试题解析
- 自定义标签配置与使用指南
- Android Intent深度解析:组件通信与广播机制
- 增强MyEclipse代码提示功能设置教程
- x86下VMware环境中Openwrt编译与LuCI集成指南
- S3C2440A嵌入式终端电源管理系统设计探讨
- Intel DTCP-IP技术在数字家庭中的内容保护