C语言中主函数指的是main函数
创新互联,是成都地区的互联网解决方案提供商,用心服务为企业提供网站建设、成都app软件开发、小程序制作、系统定制开发和微信代运营服务。经过数十载的沉淀与积累,沉淀的是技术和服务,让客户少走弯路,踏实做事,诚实做人,用情服务,致力做一个负责任、受尊敬的企业。对客户负责,就是对自己负责,对企业负责。
主函数的两个形参形式中的形参,允许从执行环境中传递任意的多字节字符串(它们通常被称为命令行参数),各个指针 argv.. argv[argc-1] 指向每个这些字符串的第一个字符。
argv[0] 是指向一个表示用于执行该程序自身的名字的空结尾多字节字符串(或者当执行环境不支持时,为空字符串 "")的开头字符的指针。这些字符串是可以改动的,虽然对它们的改动并不会被传回给执行环境:比如可以用 std::strtok 来使用它们。由 argv 所指向的数组的大小至少为 argc+1,其最后一个元素 argv[argc] 保证为一个空指针。
扩展资料:
C++继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统,但是要注意,C++中的main函数要想作为程序执行的出入口,必须写在全局(Global)范围,不能写成某个结构体或某个类的成员。虽然main函数可以作为结构体或者类的成员函数,但相应地会失去作为程序出入口的功能。
C++中全局main函数的书写格式与C语言完全相同,功能也完全相同,且同一C++程序同样只能有一个全局main函数。
要做什么课设啊?
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define M 10
int num; //计数
struct student
{
char xuehao[10]; //学号
char name[10]; //姓名
char sex[8]; //性别
char birth[20]; //出生年月
char jiguan[30]; //籍贯
char tel[30]; //电话
int score; //成绩
}student[M];
char headline[80]; //全局变量
void read1()
{
FILE *fp; //文件指针
int i=0;
fp=fopen("jz0112.txt","r"); //打开文件
if(fp==NULL)
{
printf("不能找到文件,请检查!\n");
return;
}
fgets(headline,80,fp); //读第一行的函数
puts(headline);
while(!feof(fp)) //判断文件是否结束
//for(i=0;iM;i++)
{
fscanf(fp,"%s%s%s%s%s%s%d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
i++; //fscanf读两个空白字符之间的字符
}
num=i;
fclose(fp); //关闭文件
for(i=0;inum;i++)
printf("%-10s%-8s%6s%16s%16s%16s%6d\n",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
void find_xuehao() //按学号查询
{
char xuehao[10];
int i;
int flag=0;
printf("请输入学号:");
scanf("%s",xuehao);
for(i=0;inum;i++)
if(strcmp(xuehao,student[i].xuehao)==0)
{
flag=1;
printf("%-10s%-8s%6s%16s%16s%16s%6d\n",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
break;
}
if(flag==0)
printf("\n无此信息\n");
}
void find_name() //按姓名查询
{
char name[8];
int i;
int flag=0;
printf("请输入姓名:");
scanf("%s",name);
for(i=0;inum;i++)
if(strcmp(name,student[i].name)==0)
{
flag=1;
printf("%-10s%-8s%6s%16s%16s%16s%6d\n",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
break;
}
if(flag==0)
printf("\n无此信息\n");
}
void all() //显示全部
{
int i;
for(i=0;iM;i++)
{
printf("%-10s%-8s%6s%16s%16s%16s%6d\n",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
}
void find()
{
int b;
printf("\n*************************************************************************\n");
printf(" 1 按学号查询 2按姓名查询 3显示全部 4退出 \n");
printf("\n*************************************************************************\n");
printf("请选择:");
scanf("%d",b);
switch(b)
{
case 1:find_xuehao();break;
case 2:find_name();break;
case 3:all();break;
case 4:return;
}
}
void sort_name() //按姓名排序
{
char name[M][12],t[12];
int i,j;
for(i=0;iM;i++)
strcpy(name[i],student[i].name);
for(j=1;jM-1;j++)
for(i=0;iM-j;i++)
if(strcmp(name[i],name[i+1])0)
{
strcpy(t,name[i]);
strcpy(name[i],name[i+1]);
strcpy(name[i+1],t);
}
for(i=0;iM;i++)
for(j=0;jM;j++)
if(strcmp(name[i],student[j].name)==0)
printf("%-10s%-8s%6s%16s%16s%16s%6d\n",student[j].xuehao,student[j].name,student[j].sex,
student[j].birth,student[j].jiguan,student[j].tel,student[j].score);
}
void sort_score() //按分数排序
{
int i,j,t,a[M];
for(i=0;iM;i++)
a[i]=student[i].score;
for(j=1;jM-1;j++)
for(i=0;iM-j;i++)
if(a[i]a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0;iM;i++)
for(j=0;jM;j++)
if(a[i]==student[j].score)
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[j].xuehao,student[j].name,student[j].sex,
student[j].birth,student[j].jiguan,student[j].tel,student[j].score);
}
void sort() //排序
{
int b;
printf("\n*************************************************************************\n");
printf(" 1 按姓名排序 2 按分数排序 3 退出 \n");
printf("\n*************************************************************************\n");
printf("请选择:");
scanf("%d",b);
switch(b)
{
case 1:sort_name();break;
case 2:sort_score();break;
case 3:return;
}
}
void add() //添加
{
int i;
int flag=0;
char add[10];
printf("请输入你要修改的学生的学号:");
scanf("%s",add);
for(i=0;inum;i++)
if(strcmp(student[i].xuehao,add)==0)
{
flag=1;
printf("此信息已存在,不能添加!\n");
printf("%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);break;
}
if(flag==0)
{
printf("\n无此学生信息,请添加信息:");
scanf("%s%s%s%s%s%s%d",student[num].xuehao,student[num].name,student[num].sex,
student[num].birth,student[num].jiguan,student[num].tel,student[num].score);
num++;
for(i=0;inum;i++)
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
}
void Delete_name() //按姓名删除
{
int i;
int flag=0;
char name[10];
printf("请输入要删除的姓名:");
scanf("%s",name);
for(i=0;inum;i++)
if(strcmp(student[i].name,name)==0)
{
flag=1;
for(;inum-1;i++)
student[i]=student[i+1];
printf("此信息存在,将被删除。\n");
}
for(i=0;inum-1;i++)
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
if(flag==0)
{
printf("\n无此学生信息,请确认!\n");
}
}
void Delete_xuehao() //按学号删除
{
int i;
int flag=0;
char xuehao[10];
printf("请输入要删除的学号:");
scanf("%s",xuehao);
for(i=0;inum;i++)
if(strcmp(student[i].xuehao,xuehao)==0)
{
flag=1;
for(;inum-1;i++)
student[i]=student[i+1];
printf("此信息存在,将被删除。\n");
}
for(i=0;inum-1;i++)
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
if(flag==0)
{
printf("\n无此学生信息,请确认!\n");
}
}
void Delete() //删除
{
int b;
printf("\n*************************************************************************\n");
printf(" 1 按姓名删除 2 按学号删除 3 退出 \n");
printf("\n*************************************************************************\n");
printf("请选择:");
scanf("%d",b);
switch(b)
{
case 1:Delete_name();break;
case 2:Delete_xuehao();break;
case 3:return;
}
}
void modify() //修改
{
int i;
int flag=0;
char modify[10];
printf("请输入你要修改的学生的学号:");
scanf("%s",modify);
for(i=0;inum;i++)
if(strcmp(student[i].xuehao,modify)==0)
{
flag=1;
printf("学号 姓名 性别 出生年月 籍贯 电话 成绩\n");
printf("%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);break;
}
if(flag==0)
{
printf("\n无此学生信息\n");
return;
}
printf("\n要修改学生的姓名:\n");
printf("student[i].name=");
scanf("%s",student[i].name);
printf("\n要修改学生的性别:\n");
printf("student[i].sex=");
scanf("%s",student[i].sex);
printf("\n要修改学生的出生年月:\n");
printf("student[i].birth=");
scanf("%s",student[i].birth);
printf("\n要修改学生的籍贯:\n");
printf("student[i].jiguan=");
scanf("%s",student[i].jiguan);
printf("\n要修改学生的电话:\n");
printf("student[i].tel=");
scanf("%s",student[i].tel);
printf("\n要修改学生的成绩:\n");
printf("student[i].score=");
scanf("%d",student[i].score);
for(i=0;inum;i++)
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
void classify_male() //按男分类
{
int i;
FILE *fp;
fp=fopen ("male.txt","w");
if (fp==NULL)
{
printf("不能找到文件,请检查!");
return ;
}
fputs(headline,fp);
for(i=0;inum;i++)
{
if(strcmp(student[i].sex,"男")==0)
{
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
fprintf(fp,"\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
}
fclose(fp);
}
void classify_female() //按女分类
{
int i;
FILE *fp1;
fp1=fopen("female.txt","w");
if (fp1==NULL)
{
printf("不能找到文件,请检查!");
return;
}
fputs(headline,fp1);
for(i=0;inum;i++)
{
if(strcmp(student[i].sex,"女")==0)
{
printf("\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
fprintf(fp1,"\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,student[i].sex,
student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
}
}
fclose(fp1);
}
void classify() //分类
{
int b;
printf("\n*************************************************************************\n");
printf(" 1 按男分类 2 按女分类 3 退出 \n");
printf("\n*************************************************************************\n");
printf("请选择:");
scanf("%d",b);
switch(b)
{
case 1:classify_male();break;
case 2:classify_female();break;
case 3:return;
}
}
void write() //写函数,将输出函数写入文本文件
{
FILE *fp;
int i=0;
fp=fopen("jz0112gyq.txt","w");
if(fp==NULL)
{
printf("不能找到文件,请检查!\n");
return;
}
fputs(headline,fp);
for(i=0;inum;i++)
fprintf(fp,"\n%-10s%-8s%6s%14s%16s%16s%6d",student[i].xuehao,student[i].name,
student[i].sex,student[i].birth,student[i].jiguan,student[i].tel,student[i].score);
fclose(fp);
}
void main()
{
int i;
read1();
while(1)
{
printf("\n**************简易学生信息管理系统的设计**************\n");
printf("1 查询 2 排序 3 添加\n");
printf("4 删除 5 修改 6 分类\n");
printf(" 0 退出 \n");
printf("\n******************************************************\n");
printf("请选择:");
scanf("%d",i);
switch(i)
{
case 1:find();break;
case 2:sort();break;
case 3:add();write();break;
case 4:Delete();write();break;
case 5:modify();write();break;
case 6:classify();break;
case 0:return;
}
}
}
这是我的课设程序。简易学生信息管理系统。
1、添加头文件"stdio.h"
2、struct student * creat(void),但是你的main函数中返回接收却是用的int*类型。
3、主函数main应当明确声明为void main()
4、最为严重的是:struct student * creat(void) 函数体中使用了局部变量struct student *head; struct student *p1,*p2; 但是函数结束的地方却要返回这些指针,因此返回的值是无效数据。返回时,已经不再作用域了,是无效的空间。建议把这些数据当作输入参数,指针类型的。就可以正确的接收分配的struct student空间以及指针了。
5、struct student * creat(void) 函数体中,临时指针*p1、*p2再函数返回之前应当设置为NULL,避免因为局部变量的作用域结束导致相关的空间被清除。
总之,我建议把struct student * creat(void)定义修改为:
void creat(struct student **head).
以上内容经过调试,可以使用。
==================我的程序,经过完整的调试
#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
void creat(struct student **head) /*定义函数,此函数带回一个指向链表头的指针*/
{
struct student *p1,*p2;
n=0;
do
{
p1=(struct student *)malloc(LEN); /*开辟一个新单元*/
p1-next=NULL;
scanf("%ld,%f",p1-num,p1-score);
if(p1-num==0)
break;
n++;
if(n==1)
*head=p1;
else
p2-next=p1;
p2=p1;
} while(p1-num!=0) ;
p1=NULL;
p2=NULL;
}
void main()
{
struct student *p;
creat(p);
if(p!=NULL)
do
{
printf("%ld %5.1f\n",p-num,p-score);
p=p-next;
}while(p!=NULL);
flushall(); //清除键盘缓冲区,避免输入混淆
getchar(); //等待键盘任意输入,以便观察运算结果
}
看我的回答怎么样?
1、主调函数与被调函数是成对出现的。是主动与被动的关系。现在有A、B两个函数,A函数调用了B函数,那么,A函数就是主调函数,B函数就是被调函数。这和现实生活中的打电话是一样的,一个是主叫,一个是被叫。有意思的是,在很多编程语言里,函数间的调用就是用CALL关键字来表示的。
2、在C语言里,被调函数如果要先声明的话,一定是在主函数之前被声明的,虽然名字可以取的千奇百怪,不过先声明的话这样就比较明显好认(有很多程序员都提倡这么做,这样就可以方便的分析程序了),另外,主函数是main,看见这个就是看见主函数了。被调函数就是一个可以实行一定功能的函数,需要它有什么用,你就可以随便的定义它,完整它,所以调用函数非常的多、杂乱,不易理清头绪,但是调用函数却是一定在主函数中实现的,我说一下我自己的方法,就是先不看调用函数,先从主函数看起,当遇到调用函数时就回过头去看那个调用函数的具体内容(实际上,把调用函数的内容带入主函数中就行了,具体对待就行)。