1. 简述main函数的作用
[编辑本段]main函数概述 日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现。
在C++程序的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用。 一个程序,无论复杂或简单,总体上都是一个“函数”;这个函数就称为“main 函数”,也就是“主函数”。
比如有个“做菜”程序,那么“做菜”这个过程就是“主函数”。在主函数中,根据情况,你可能还需要调用“买菜,切菜,炒菜”等子函数。
[编辑本段]main函数的参数 C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程 序运行的入口。
其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用 的是有参函数,则参数在调用时传递。 main() { 。
y1=f1(x1,x2); 。 } f1(int a,int b) { 。
. Y2=f2(x3,x4); 。. } f2(int m,int n) { 。
. 。.. } 在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,允许main()调用 其它函数并传递参数。
事实上,main()函数既可以是无参函数,也可以是有参的函数。对于有 参的形式来说,就需要向其传递参数。
但是其它任何函数均不能调用main()函数。当然也同样 无法向main()函数传递,只能由程序之外传递而来。
这个具体的问题怎样解决呢? 我们先看一下main()函数的带参的形式: main(argc,argv) int argc,char *argv[]; { 。.. } 从函数参数的形式上看,包含一个整型和一个指针数组。
当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由 系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为: 命令参数1参数2。
.参数n¿ 此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系: 设命令行为:program str1 str2 str3 str4 str5 其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。
数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后 才是参数。
下面用实例来说明带参数的main()函数的正确使用。 [例6-29] 利用图形库函数绘制一个变化的环。
它是把一个半径为R 1的圆周分成n份,然 后以每个等分点为圆心,以R s为半径画n个圆(关于作图的详细理论本教材第9章第1节作了专 门介绍,这里只作简单分析)。利用m a i n ( )函数的带参数形式,我们可以从键盘以命令行的方 式输入R 1和R s及屏幕的背景色。
#include
由于指针数组均存放字符串,所需的圆半径及背景 色彩通过atoi()函数转换为整型。 通过带参数的main()函数,我们可以为自己的程序设置口令,在运行程序的命令行中给出所需的口令,正确则继续,否则退出。
程序图形输出如图6-17所示。 [例6-30]将上述程序作修改,在程序的入口处添置密码,若给定密码正确,则显示图 形。
#include
2. C语言怎么在main函数里写自定义函数,格式是怎么样的
写个程序你看看就知道了,
题目:求两个整数中的大者.
程序如下:
#include"stdio.h"
int main(void)
{
int max(int x,int y); //函数声明
int a b c; //定义变量
scanf(”%d,%d“,&a,&b); //输入两个数
c=max(a,b); //调用max函数。将得到的值赋给c
printf("%d\n",c); //输出c的值
}
int max(int x,int y) //函数定义部分。定义max函数为整型。函数值为整型,形式参数x,y为整型,
{
int z; //max函数的声明部分
if(x>y) z=x;
else z=y;
return(z);
}
后面的那一句语句就是自定义的,是前面需要调用的函数。在c中,不管你把main函数放在前面还是后面都是从main函数开始执行的。
3. 求教二叉树的main函数怎么写合适:
我的能力也有限,学数据结构过的时间有点久了,而且这个程序我读的很吃力,没用过这样子的语言来写呢,刚刚写了个主类可是运行还是有错误,我又不会改,不好意思。
我想要的主类大体是这样写的,你可以参考一下:void main(){ BiTree Tr;//这里定义的东西在这个程序里也不行,本来是想让那个BinTree是个指针的,可是这个程序俺也不大会弄 printf("按前序次序输入,以#表示为空:\n"); CreateBinTree(Tr,T,i);//这个括号里面的内容我也不知该怎么写,程序大体读了读 貌似不大会 printf("\n前序遍历结果为:\n"); PreOrder(Tr);//反正括号里的内容就是你前面写的那个函数括号里相应的 printf("\n中序遍历结果为:\n"); InOrder(Tr); printf("\n后序遍历结果为:\n"); PostOder(Tr); printf("\n层序遍历结果为:\n"); LevelOrder(Tr); printf("\n该二叉树的深度为:\n%d",countHighOfBiTree(Tr)); printf("\n该二叉树的叶子节点个数为:\n"); countNumOfLeaf(Tr); printf("\n该二叉树的所有结点数为:\n"); Count(Tr); printf("\n");}这里是实验课上老师布置给我们的,然后自己写的,语言和你的不大一样 但思路差不多,你可以看看这个的,毕竟我还是学的时候思路比较清晰啦,嘿嘿,貌似~是按前序序列来创建的二叉树,你输入的前序序列一定要是正确的哦~我的这个程序还很低级,错误的它不会提示,不好意思哈,学习不大好,只能帮到这里了#include "stdio.h"#include "conio.h"#include "stdlib.h" #include#include//#include#include#define NULL 0typedef char Elemtype;typedef struct BinNode{Elemtype data;struct BinNode *lchild,*rchild;//左右孩子指针}BinTNode,*BinTree;//按前序构造二叉树链表表示的二叉树序列BinTree CreateBinTree(BinTree &T){char ch;scanf("%c,\n",&ch);if(ch=='#') T=NULL;else{T=(BinNode *)malloc(sizeof(BinNode));T->data=ch;//生成根结点CreateBinTree(T->lchild);//生成左子树CreateBinTree(T->rchild);//生成右子树}//ifreturn T;}//CreateBinTreevoid Visit(char dataa){printf("%c",dataa);}//前序遍历二叉树void PreOrderTraverse(BinTree T){//前序遍历二叉树T的递归算法,Visit是访问数据元素的函数if(T)//二叉树非空{Visit(T->data);//访问根结点PreOrderTraverse(T->lchild);//前序遍历左子树PreOrderTraverse(T->rchild);//前序遍历右子树}//if}//PreOrderTraverse//中序遍历二叉树void InOrderTraverse(BinTree T){//中序遍历二叉树T的递归算法,Visit是访问数据元素的函数if(T)//二叉树非空{InOrderTraverse(T->lchild);//中序遍历左子树Visit(T->data);//访问根结点InOrderTraverse(T->rchild);//中序遍历右子树}//if}//InOrderTraversevoid PostOrderTraverse(BinTree T){//后序遍历二叉树T的递归算法,visit是访问数据元素的函数if(T)//二叉树非空{PostOrderTraverse(T->lchild);//后序遍历左子树PostOrderTraverse(T->rchild);//后序遍历右子树Visit(T->data);//访问根结点}//if}//PostOrderTraverse//求二叉树的深度int Depth(BinTree T){int DepthLeft,DepthRight,depthval;if(!T)return 0;else{DepthLeft=Depth(T->lchild);DepthRight=Depth(T->rchild);depthval=1+(DepthLeft>DepthRight?DepthLeft:DepthRight);return depthval;}//if}//Depthvoid CountLeaf(BinTree T,int &count0,int &count2){//统计二叉树中的叶子节点个数if(T){if((!T->lchild)&&(!T->rchild))count0++;CountLeaf(T->lchild,count0,count2);CountLeaf(T->rchild,count0,count2);}count2=count0-1;}void Countduone(BinTree T,int &count1){//统计二叉树中度为1的结点个数if(T){if(((!T->lchild)&&(T->rchild))||((T->lchild)&&(!T->rchild)))count1++;Countduone(T->lchild,count1);Countduone(T->rchild,count1);}}int ZongNode(int &a,int &b,int c){return (a+b+c);}void main(){BinTree Tr;int count0,count1,count2;int jie;count0=0;count1=0;count2=0;printf("按前序次序输入,以#表示为空:\n");CreateBinTree(Tr);printf("\n前序遍历结果为:\n");PreOrderTraverse(Tr);printf("\n中序遍历结果为:\n");InOrderTraverse(Tr);printf("\n后序遍历结果为:\n");PostOrderTraverse(Tr);printf("\n该二叉树的深度为:\n%d",Depth(Tr));printf("\n该二叉树的叶子节点个数为:\n");CountLeaf(Tr,count0,count2);printf("%d",count0);printf("\n该二叉树的所有结点数为:\n");//CountLeaf(Tr,count0,count2);Countduone(Tr,count1);jie=ZongNode(count1,count2,count0);printf("%d",jie);printf("\n");}。
4. 在main函数里如何写,才能用此函数
#include 你的习惯是正确的,编程时会发现你永远不可能知道一个项目有多少个函数或者类,所以代码先写main,再写类,但是你显然没有声明。当类在前面时,main在调用它的时候,此类已存在,故有了前面的定义,main中不再需要声明,但是main在前面的时候,就需要先声明了,因为调用在定义的前面。 main() { class a; ````` ```` } class a { public: ````` private: `````` }但是请注意,main无法直接调类中的函数,因为main认不到·····这里主要用于表示friend等关系才会这么用 所以,建议保存为.h文件(头文件),但类假如太小就显得麻烦了······5. C++里main函数写在类的上面应该怎么做