C语言课程设计试题及答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*数据成 /*指向下一个
*p2;
/*声明结 /*初始化 /*创
p1 = (struct student*)malloc(sizeof(struct student)); scanf("%d", &a); /*输入结点数据*/ p1->num = a; /*数据域 赋值*/ if (head == NULL) /*创建头 结点*/ { head = p1; p2 = p1; } else { p2->next = p1; /*指 定后继指针*/ p2 = p1; /*指针移 动到下一个结点*/ } } p2->next = NULL; /*链表结 尾*/ return head; /*返回头 结点指针*/ }
(5)对照下面给出的程序运行的实例,调试程序; (6)将自己完成的代码,粘贴到本文档每个题目的空白 处,并保存; (7)完成一个题后,关闭Visual C++。重新开启Visual C++,做新题。 (8)完成所有题目,保存本文档,并在考试系统中提交。 注意: (1)每个程序只有能够运行并给出正确结果,才 能得满分。 (2)不要改动现有代码。
(2)程序代码 # include <stdio.h> # include <math.h> # include <stdlib.h> int main() //主函数:完成数据的输入、函数调用及结果输出功能 //注意:不要改动主函数 { int twin_primes(int,int,int*); //函数声明 int n,m,count,*p,i; n=0; m=0; count=0; p=NULL; printf("\n"); //输入整数范围的下界n与上界m,1<n<m<1000 do { printf("请在 2 与 1000 之间输入整数范围 [n,m] 的 上、下界:\n"); scanf("%d%d",&n,&m);
专业班级:信息管理与信息系统2014级学号:姓名: 课程编号:13031120 考核方式:闭卷 考核时间:2小时
大连海事大学2015--2016学年 第 二 学期 《 C语言课程设计 》试卷(A) 题号 一 得Fra Baidu bibliotek 25 二 25 三 25 四 25 总分
请通过C语言编程完成如下任务,并提交试卷。 一、题目概览(共100分)
struct student * reverse(struct student *head) //函数功能:实现链表结点的逆向排列 //输入:原链表的头指针 //输出:新链表的头指针 { //请完成函数功能,并将代码粘贴到下面。(粘贴后,注意存盘) struct student *p0,*p1,*p2; p0=p1=head; while(p1!=NULL){ if(p1==head){ p2=p1->next;
*a)
/*输入姓
名*/ if (!strcmp(a[i].name, "#")) break; scanf("%s", a[i].tel); 入电话号码*/ i++; n++; 条数*/ } return n; 数*/ } /*输 /*记录的 /*返回条
void search(struct Contact *b, char *x, int n) // 函数功能:查找数据集——结构体数组 // 输入:b指向结构体数组,n为数组的长度,x为要查找的字符串 (姓名) // 要求:如果找到了,则输出这条记录。如果没找到,给出提示信 息。(参见上面的例子) { //请完成函数功能,并将代码粘贴到下面。(粘贴后,注意存 盘) int i,j=0; for(i=0;i<n;i++){ if(strcmp(b->name,x)==0){ printf("name:%s tel:%s\n",x,b->tel); j=1; } b++; } if(j==0) printf("No found!\n"); } main() { /*定义结构体数组s*/
p1->next=NULL; } else{ p2=p1->next; p1->next=p0; } p0=p1; p1=p2; } head=p0; return head; }
void main() { int n; struct student *q; /*声明结构 体类型指针变量*/ printf("Input the count of the nodes you want to creat:"); scanf("%d", &n); q = create(n); /*创建单链 表*/ q = reverse(q); /*单链表逆 置*/ printf("The reserve linklist is:\n"); while (q) /*输出逆置后的单 链表*/ { printf("%d ", q->num); q = q->next; /*指针下移*/ printf("\n"); } printf("\n"); }
// 输入:n为整数范围的下界,m为上界,1<n<m<1000,p为指向足 够大的一块内存的指针。 // 输出:[n,m]中"孪生素数对"的个数作为函数值返回,并将所有的 素数存到p所指向的动态数组中(以返回给主函数)。 { //请完成函数功能,并将代码粘贴到下面。(粘贴后,注意存 盘) int count; int i,j,s,k1,k2; count=0; for(i=n;i<=m;i++){ k1=sqrt(i); k2=sqrt(i+2); for(j=2;j<=k1;j++) if(i%j==0) break; if(j>=k1+1){ for(s=2;s<=k2;s++) if((i+2)%s==0) break; if(s>=k2+1){ count++; *p++=i; *p++=i+2; } } } return(count); } 2. 根据姓名查找通讯录(20分)。 下面给出了程序运行的两个实例,及主函数main()的全部代码,用 于程序的调试。请阅读已有代码,理解程序要求,完成子函数 search()。将代码粘贴到相应位置,并按“保存”按钮保存本文档。 提示:比较字符串用strcmp函数。 (1)程序运行实例
}while(m-n<=0); //在内存中动态开辟一块足够大的数组,以存放[n,m]中的所 有"孪生素数对" p=(int*)malloc(sizeof(int)*(m-n+1)); //函数调用,返回[n,m]中的"孪生素数对"个数(赋值给 count),及所有的"孪生素数对"(存放在p指向的内存中) count=twin_primes(n,m,p); printf("\n"); //将结果输出 if(count>0) { printf("在 %d 与 %d 之间有 %d 个孪生素数对: \n",n,m,count); for(i=1;i<count+1;i++) { printf("%6d ",*p); //输出孪生素数对中的第一个 素数 p=p+1; printf("%6d ",*p); //输出孪生素数对中的第二 个素数 p=p+1; printf("\n"); //一个"孪生素数对"一行 } }else printf("在 %d 与 %d 之间没有孪生素数对(或整数范 围越界)。\n",n,m); printf("\n\n"); return 0; } int twin_primes(int n,int m,int* p) // 函数功能:寻找[n,m]中的所有"孪生素数对",并计算"孪生素数 对"的个数
4. 连接两个链表(25分)。 下面给出了程序运行的三个实例,及主函数main()等相关代码,用 于程序的调试。请阅读已有代码,理解程序要求,完成子函数 coalition(),实现两个链表的连接。将代码粘贴到相应位置,并 按“保存”按钮保存本文档。 注意:当一个或两个链表为空(NULL)时,程序也能正常运行。 (1)程序运行实例
/*输入要查找的 /*调用函数
3. 链表逆置(25分)。 下面给出了程序运行的一个实例,及主函数main()等相关代码,用 于程序的调试。请阅读已有代码,完成子函数reverse(),实现链表结 点的逆向排列:使原来的头结点成为尾节点、原来的尾结点成为头结 点。将代码粘贴到相应位置,并按“保存”按钮保存本文档。 提示:可以遍历原有的链表,保存当前结点、上一个结点和下一个 结点,将当前结点链到上一个结点,以实现链表的反向链接。 实际上是创建一个链表的过程,方法也有多种。 (1)程序运行实例
请编写如下函数: 1. 求某一区间内的所有“孪生素数对”。(25分) 2. 根据姓名查找通讯录。 3. 链表逆置。 (25分) (25分)
4. 连接两个链表。(25分)
二、答题步骤
(1)阅读下面对每个题的要求与给出的部分代码; (2)在Visual C++中新建一个c文件,将给出的代码粘贴过 去; (3)编译、运行现有代码,如不能运行,请调整之; (4)在Visual C++中完成余下的代码;
三、详细要求
请将答案从Visual 盘。 C++ 中粘贴到每个题目的空白处,并存
1. 求 [n,m] 内的所有“孪生素数对”(20分)。 下面给出了程序运行的两个实例,及主函数main()的全部代码,用 于程序的调试。请阅读已有代码,理解程序要求,完成子函数 twin_primes()。将代码粘贴到相应位置,并按“保存”按钮保存本文 档。 所谓“孪生素数对”指的是相隔为2的两个相邻素数,如(3,5)、 (5,7)、(11,13)、(17,19)等。[n,m] 内的一个“孪生素数 对”中的两个素数均在n于m之间。 (1)程序运行实例
(2)程序代码 #include <stdio.h> #include <string.h> #define MAX 101 /*定义结构体Contact存储姓名和电话号码*/ struct Contact { char name[15]; char tel[15]; }; /*函数readin,用来存储姓名及电话号码*/ int readin(struct Contact { int i = 0, n = 0; while (1) { scanf("%s", a[i].name);
(2)程序代码 #include<stdio.h> #include<stdlib.h> struct student { int num; 员*/ struct student *next; 结点的指针*/ }; struct student *create(int n) { int i; struct student *head, *p1, 构体类型的指针*/ int a; head = NULL; 头结点*/ printf("The record:\n"); for (i = n; i > 0; --i) 建n个结点的链表*/ {
struct Contact s[MAX]; int num; char name[15]; printf("input name '#':\n"); num = readin(s); readin*/ and phone number,stop /*调用函数 with
printf("input the name:"); scanf("%s", name); 姓名*/ search(s, name, num); search*/ }
(2)程序代码 #include <stdio.h> #include<stdlib.h> typedef struct student { int num; 表结点的数据*/ struct student *next; 指针*/ } LNode, *LinkList; 明两个结构体类型的变量*/ LinkList create(void) { LinkList head; 结构体类型指针*/ LNode *p1, *p2; 明结构体类型指针*/ char a; head = NULL; 始化头结点*/ p1=NULL; p2=NULL;