苏州seo公司排名,济南网络优化哪家专业,wordpress在哪设置评论,建设一个商城式网站可以吗文章目录 20151.C语言算法设计部分2.数据结构算法设计部分 20161.C语言算法设计部分2.数据结构算法设计部分 2017年1. C语言算法设计部分2.数据结构算法设计部分 2015
1.C语言算法设计部分 int total(int n)
{if(n1) return 1;return total(n-1)n1;
}
//主函数测试代码已省略… 文章目录 20151.C语言算法设计部分2.数据结构算法设计部分 20161.C语言算法设计部分2.数据结构算法设计部分 2017年1. C语言算法设计部分2.数据结构算法设计部分 2015
1.C语言算法设计部分 int total(int n)
{if(n1) return 1;return total(n-1)n1;
}
//主函数测试代码已省略2.输入某天的年月日计算该天为当年的第几天。例如输入1998925 输出9月25日是1998年的第268天(提示闰年第判别方法为能被4整除却不能被100整除或能被400整除的年份是闰年)。要求使用下面的结构体 struct Data{int year; int month; int day};
int Func(int month,int day)
{int sum0;switch (month-1) {case 11:sum30 ;case 10:sum31 ;case 9:sum30 ;case 8:sum31 ;case 7:sum31 ;case 6:sum30 ;case 5:sum31 ;case 4:sum30 ;case 3:sum31 ;case 2:sum28 ;case 1:sum31 ;}return sumday;
}int main()
{struct Data data{1998,9,25}; //初始化结构体int num0; //记录一共有多少天numFunc(data.month, data.day);// 判断是否是闰年如果是则统计的天数1如果不是则直接结束if(data.year%40data.year%100!0)num1;printf(%d月%d日是%d年的第%d天\n,data.month,data.day,data.year,num);
}3.请编写一个程序将一字符串的第K个字符开始的全部字符赋值成为另一个字符串要求 (1)将复制过程单独写成一个函数并用指针完成 (2)在主函数中输入字符串和K的值并在主函数中输出复制结果
void copy(char *str1,char *str2,int k)
{while(k--)str1;str1--;//保证从第k位置开始while(*str2!\0){*str1*str2;str1;str2;}*str1\0;}int main()
{char str1[]{month};char str2[]{day};copy(str1, str2, 4);puts(str1);} 2.数据结构算法设计部分 1. 算法基本思想遍历一遍单链表定义两个指针一个pre指向当前结点的前一个结点定义一个cur指针指向当前结点首先判断一下前两个结点的关系明确是升序还是将序然后开始遍历比较不成立直接返回或者一直成立直到遍历完。 代码省略就是遍历单链表 算法基本思想该问题的关键在于每层所以算法的基本思想在于二叉树的层序遍历辅以队列这种数据结构重点在于处理每一层每次计算当前队列的长度确定每一层的长度一次处理一层 代码省略多次考察 3.设计算法求出无项连通图中距离顶点V0的最短路径长度为K的所有节点
#define INF -1 // 表示尚未访问的节点
void BFS_K(ALGraph G,VertexType v,VertexType K)
{int visit[MASVETEX]; //初始化访问数组for(int i0;iMASVETEX;i)visit[i]INF;SqQueue Q;Queue_Init(Q);Queue_En(Q, v);visit[v]0; //顶点0到顶点0的距离为0while (!Queue_Empty(Q)) { //假设队列不为空开始循环Queue_De(Q, v); //从队列中弹出表头此时弹出的元素存放在v中if (visit[v] K) break; //加快操作以后的循环是没有意义的ArcNode *pG.vertices[v].firstArc;while(p!NULL){if(visit[p-adjvex]INF) //没有被访问过{visit[p-adjvex]visit[v]1; //更新visit数组Queue_En(Q, p-adjvex); //将该元素加入队列中}pp-nextArc;}}for(VertexType i1;iG.vexnum;i){if(visit[i]K){printf(%d ,i);}}}
2016
1.C语言算法设计部分 思路如下 第1项是 1 有一个数 第二项是23 有两个数 第三项是 3456 有三个数 外层一个大循环从1到n内层循环 大循环i的次数最开始初始化一个1,每次上它 代码略
2.某歌咏比赛中有8个评委对20位选手进行评分选手按1-20号进行编号每个评委给出1-10的分数在统计分数时要除去一个最低分和最高分计算出其他评委给出分数的平均分作为选手的最后得分。编写程序实现以下功能评委输入按评分输出得分最高的三位选手的编号和分数要求程序执行时间最短。 思路梳理: 因为要求程序执行时间最少所以不能通过先找第一大再找第二大再找第三大这么循环而是每拿出一个选手看看它是否是第一大是就依次下移将原先的第三大挤出以此类推然后判断是不是第二大 3.编写程序查找给定字符在字符串中首次出现的位置。要求:不使用有关字符串处理的库函数 (1)主函数中键盘输入字符以及查找的字符调用子函数 (2)子函数完成查找任务如果字符串中包含所查找的字符则返回该字符串首次出现的位置否则返回0
int first_str(char *p,char c)
{int index1;while(*p!\0){if(*pc) return index;p;index;}return 0;
}#define MASIZE 100
int main()
{char str[MASIZE];scanf(%s,str); //输入字符串char c;while (getchar() ! \n);scanf(%c,c);int indexfirst_str(str, c);if(index!0){printf(出现的位置为:%d\n,index);}else{printf(查找失败\n);}
}值得积累的点:关于getchar清除缓冲区的问题 在C语言中while (getchar() ! ‘\n’); 这行代码通常用于清除输入缓冲区input buffer中直到下一个换行符newline character\n的所有字符。这里getchar() 是一个标准输入函数用于从标准输入通常是键盘读取下一个可用的字符并返回这个字符作为 int 类型实际上返回的是字符的ASCII码值但可以通过类型转换或字符比较来直接使用。 当您使用 scanf(“%s”, str); 读取一个字符串时scanf 会在遇到空格、制表符或换行符时停止读取。然而换行符用户按下回车键时产生的仍然会留在输入缓冲区中。紧接着当您尝试使用 scanf(“%c”, c); 读取一个字符时scanf 会立即从输入缓冲区中读取下一个字符这通常是之前留在那里的换行符。 2.数据结构算法设计部分 问题1和问题2:已经出现多次了
问题3: 问题分析本质上就是一个非连通图的遍历将每个顶点都以它们为起始节点遍历一遍用DFS即可实现 int visit[MaxSize]{0};void DFS_G(ALGraph G,VertexType v)
{visit[v]1; //当前v点被访问printf(%d ,v);ArcNode *pG.vertices[v].firstArc; //找到该点连接的第一个结点while(p!NULL){VertexType nextp-adjvex;if(visit[next]0)DFS_G(G, next);pp-nextArc;}
}int traverse_G(ALGraph G)
{int sum0;for(int i1;iG.vexnum;i){if(visit[i]0){DFS_G(G,i);sum;printf(\n);}}return sum; //返回连通分量的个数
}2017年
1. C语言算法设计部分 第一题
void printfMultiTable()
{for(int i1;i9;i){for(int j1;ji;j){printf(%d*%d%d ,i,j,i*j);}printf(\n); }
}第二题 思路为判断回文通过取余将每个数存储到数组中然后双指针判断是否为回文数。 完数电判断就是按照定义找到每个因子加和计算即可。 不存在既是回文数又是完数的数这道题emm代码略 第三题 新颖的点在于要求了动态链表存储学生成绩 struct Student
{int studentID; //学号float score;struct Student *next;
};void init_student(int ID,float score,struct Student *head)
{struct Student *p(struct Student *)malloc(sizeof(struct Student)); //定义一个新结点p-studentIDID;p-scorescore;p-nexthead-next;head-nextp;
}void function_num(struct Student *head) //统计结果
{struct Student *phead-next;int s600;int s700;int s800;int s900;while(p!NULL){if(p-score90p-score100){s90;}else if(p-score80){s80;}else if(p-score70){s70;}else{s60;}pp-next;}printf(90-100分段有%d人\n,s90);printf(80-89分段有%d人\n,s80);printf(70-79分段有%d人\n,s70);printf(60-69分段有%d人\n,s60);}
int main()
{struct Student *headNULL;head(struct Student *)malloc(sizeof(struct Student)); //头指针的初始化while(1){int ID;float score;scanf(%d,ID);if(ID0) break;scanf(%f,score);init_student(ID, score, head); }function_num(head);
}2.数据结构算法设计部分 问题1:略
问题2: 回顾 结点的度指该结点的分支个数如结点A的度为2 树的度指树中最大的结点度数如该树的度为3 //统计一个结点的左孩子连同左孩子的右孩子的最大数量
int getDegree(CSTree T)
{if(TNULL) return 0;else{int maxDegree0;int degree0; //根节点的度for(CSTNode *pchildT-fristChild;pchild!NULL;pchildpchild-nextSibling) {degree; //for循环执行4次degree最终为4int subdegreegetDegree(pchild); //subdergg本质还是degree是子函数返回的degreeif(subdegreemaxDegree)maxDegreesubdegree;}return degreemaxDegree?degree:maxDegree;}
}问题三
//邻接表的插入操作头插法
void insert(VertexType v,VertexType w,ALGraph rG)
{ArcNode *p(ArcNode *)malloc(sizeof(ArcNode));p-adjvexw;p-nextArcrG.vertices[v].firstArc;rG.vertices[v].firstArcp;
}void reverse(ALGraph G,ALGraph rG)
{// 第一步将G的头结点赋给rG的头结点for(int i1;iG.vexnum;i){rG.vertices[i].dataG.vertices[i].data;rG.vertices[i].firstArcNULL;}//第二步 将vw以wv形式插入到rg中以分配新的存储空间的形式插入for(int i1;iG.vexnum;i){ArcNode *pG.vertices[i].firstArc;VertexType vG.vertices[i].data;while(p!NULL){VertexType wp-adjvex;insert(w,v,rG);pp-nextArc;}}//第三步将点的数量弧的数量赋值给rGrG.vexnumG.vexnum;rG.arcnumG.arcnum;}