报错不知道哪里出了问题,感觉代码也没什么问题啊

#遇到问题的现象#代码出错#已附上代码和报错#C语言求n阶勒让多项式的值

img

第二行代码都没有分号结尾呀
还有,一个文件里两个main函数是几个意思
你要写代码,就好好搞个IDE,不要用vim来写,它是文本处理工具,不是专业写代码的工具,根本不会提示你到底哪里有语法错误

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7637810
  • 你也可以参考下这篇文章:保证只要看一遍,新手也能写出来的超简单五子棋代码
  • 除此之外, 这篇博客: 常用数据结构与经典算法 简单讲解与示例代码中的 约瑟夫问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 问题描述

    据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决。Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

    解题思路

    约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。
    (1) 每个人只有死和活着,因此可以用布尔标记每个人的状态,可用true表示死,false表示活。
    (2) 开始时每个人都是活的,所以数组初值全部赋为false。
    (3) 模拟杀人过程,直到所有人都被杀死为止。

    示例代码(C语言)
    约瑟夫环 Visual Studio 2019

    /**
     * 数据结构 C语言 顺序表_约瑟夫问题
     * @FileName						    Seq_Josephus_Problem.c
     * @author						    	W.Lionel.Esaka
     */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <stdlib.h>
    
     //预处理
    #define MAXSIZE 200					//数据数组大小 MAXSIZE 方便更改
    #define bool int						//C语言中没有bool值,用int替换
    #define true 1						//用true替换1,用false替换0
    #define false 0						//也可以用Correct/Error
    
    typedef int ElemType;					//ElemType/Status  元素类型/状态
    typedef int Status;					//用来指代特定的数据类型
    
    /*定义线性表结构体*/
    typedef struct
    {
    	ElemType Data[MAXSIZE];			//Data数组,用来存储线性表数据的“容器”
    	int Count;						//数据个数计数器
    } Sequential_linear_table;				//Sequential_linear_table(顺序线性表)
    
    //创建线性表(线性表指针,数据数组,数组长度)
    void CreateList(Sequential_linear_table* list,int n)
    {
    	int i;						
    	for (i = 0; i < n; i++)				//将所给数据数组数据赋值给线性表中的数组
    		list->Data[i] = i + 1;
    	list->Count = n;						//线性表长度/计数器置为n
    }
    
    //判定是否为空表(线性表指针)
    bool ListEmpty(Sequential_linear_table* list)
    {
    	return (list->Count == 0);				//返回此表达式的值,假为true,真为ture
    }
    
    //返回线性表长度值(线性表指针)
    int ListLength(Sequential_linear_table* list)
    {
    	return(list->Count);					//返回线性表计数器中的值
    }
    
    //输出线性表(线性表指针)
    void ListDisplay(Sequential_linear_table* list)
    {
    	int i;							
    	if (ListEmpty(list))
    	{
    		printf("空表\n");
    		return;					//for循环输出线性表数据数组中的数据
    	}
    	for (i = 0; i < list->Count; i++)
    	{
    		printf("%4d\t", list->Data[i]);
    	}
    	printf("\n");
    }
    
    //求某个数据元素值(线性表指针,所查找的数据位置,将所的数据返回给此变量)
    bool GetElem(Sequential_linear_table* list, int i, ElemType* e)
    {
    	if (i<1 || i>list->Count)						//判断所给位置是否在线性表范围内
    		return false;
    	*e = list->Data[i - 1];						//将查找位置的数据返回给所给变量
    	return true;
    }
    
    //按元素值查找元素位置(线性表指针,所查找的数据)
    bool LocateElem(Sequential_linear_table* list, ElemType e)
    {
    	int i = 0;
    	while (i < list->Count&& list->Data[i] != e)
    		i++;								//将所给数据与线性表数组中的数据一一对比查找
    	if (i >= list->Count)					//超出范围返回为false
    		return false;
    	else
    		return i + 1;
    }
    
    //插入数据元素(线性表指针,数据插入位置,将要插入的数据)
    bool InsertList(Sequential_linear_table* list, int i, ElemType e)
    {
    	int j;
    	if (i<1 || i>list->Count + 1)
    		return false;						//不在范围内时返回false
    	i--;									//将顺序表逻辑序号转化为数据数组序号
    	for (j = list->Count; j > i; j--)	    //将Data数组元素整体后移一位
    		list->Data[j] = list->Data[j - 1];
    	list->Data[i] = e;							//插入元素e
    	list->Count++;								//顺序表计数器加1
    	return true;									//成功插入返回true
    }
    
    //删除数据元素(线性表指针,所要删除数据位置,被删除的数据值)
    bool DeleteList(Sequential_linear_table* list, int i, ElemType e)
    {
    	int j;
    	if (i<1 || i>list->Count)						//不在范围内时返回false
    		return false;
    	i--;											//将顺序表逻辑序号转化为物理序号
    	e = list->Data[i];							//将被删除数据值赋值给e
    	for (j = i; j < list->Count - 1; j++)	 //将Data数组元素整体前移一位
    		list->Data[j] = list->Data[j + 1];
    	list->Count--;								//顺序表计数器减1
    	return true;									//成功删除返回true
    }
    
    //入口函数
    int main()
    {
    	//游戏初始数值定义
    	printf("\n  |约瑟夫问题测试|  \n=-=-=-=-=-=-=-=-=-=-=\n");
    	ElemType value = 0;
    	int n,m,i = 1,Number_Off = 1;
    	printf("输入参与游戏的总人数n:");
    	scanf("%d", &n);
    	printf("输入报数上限m:");
    	scanf("%d", &m);
    	if (n > 200)
    	{
    		printf("超过游戏人数上限,程序退出\n");
    		exit(0);
    	}
    
    	//线性表初始化
    	Sequential_linear_table seqlist;
    	Sequential_linear_table* list = &seqlist;
    
    	//创建本局游戏
    	CreateList(list, n);
    	printf("\n本局游戏创建成功\n本局游戏人数为%d\n报名上限为%d\n", ListLength(list),m);
    
    	//游戏开始
    	while ( list->Count > 1 )
    	{
    		if (Number_Off == m)
    		{
    			DeleteList(list,i,value);
    			Number_Off = 1;
    		}
    		else
    		{ 
    		i++;
    		Number_Off++;
    		}
    		if ( i > list->Count )
    		{
    			i = 1;
    		}
    	}
    
    	printf("\n最后获胜的人的编号为");
    	ListDisplay(list);
    	
    	return 0;
    }
    
    
  • 您还可以看一下 颜廷吉老师的软件架构师成长之路课程中的 常用代码编辑工具操作技巧小节, 巩固相关知识点