西电软件技术基础上机大作业答案
西电机电院软件技术基础大作业
上机报告班级:04103201:伟学号:04103123一、上机目的:明确线性表和树的相关用法,写出相应的程序,实现相应所需的功能。
二、上机容1.设有一个由正整数组成的无序单链表,编写完成下列功能的算法:①找出最小值结点,且打印该数值;②若该数值是奇数,则将其与直接后继结点的数值交换;③若该数值是偶数,则将其直接后继结点删除。
2.编一程序:①建立一个数据域为1至10的带头结点的链表;②将此链表就地逆转。
3.设有一个含有数字、英文字母和其它字符的单链表,试编写一个算法将该单链表拆分为三个单链表,使每个单链表中只包含同一类的字符,要求利用原表中的结点空间作为这三个表的结点空间,头结点可以另辟空间。
4.某百货公司仓库中有一批电视机,试按价格从高到低的次序建立一个循环链表,每个结点有价格、数量和指针三个域。
现新到10台价格为4000元的电视机,修改原链表并输出修改后链表的所有容。
5.假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’’为结束符的字符序列是否是回文。
6.试设计一个程序,求二叉树的结点数目和叶子结点数目。
三、设计说明1.用一个单链表实现,单链表中的每一个节点储存一个整数,从前到后遍历一遍链表找出最小值,若该值是奇数,则将最小值节点与其后节点交换,若该值是偶数,则将其后节点删除。
2.建立一个单链表,从头结点开始,数据域依次是1到10。
再按照头插法的思想,从第二个节点还是,依次把其后的节点,插到头节点的后面。
即可将链表逆转。
3.建立三个单链表。
其中一个链表用来存输入的数据,其余三个链表置空,从前到后遍历一遍原始链表,若数据域是数字,则继续遍历该链表。
若数据域是英文字母或是其它字符,则将其从原来的链表中删除,并把它分别插入到其它两个链表中。
4.建立一个循环链表,链表的数据域为商品的价格和数量,最后插入(4000,10)节点。
2017西电电院软件技术基础上机大作业答案
1.若在矩阵Am×n中存在一个元素A[i][j],其满足A[i][j]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。用二维数组存储矩阵Am×n,设计算法求出矩阵中所有马鞍点。(文件夹:找马鞍点)
2.A和B是两个n×n阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。(文件夹:对称矩阵相乘)
2.采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。(文件夹:统计二叉树结点)
实验六图
一、实验目的
1.熟悉图的邻接矩阵和邻接表的存储结构
2.熟悉图的邻接矩阵和邻接表的建立算法
实验五树
一、实验目的
1.熟悉二叉树的链式存储结构
2.掌握二叉树的建立、深度优先递归遍历等算法
3.能够利用遍历算法实现一些应用
二、实验内容
1.已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。(文件夹:交换左右子树)
二、实验内容
1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。(文件夹:模式匹配)
思路6:朴素模式匹配对于字串和子串逐个字符进行匹配,在某一位置如果该字符与子串中的字符不相等时,那么进行回溯,子串到开始位置,字串到下一位置重新开始遍历,直到遍历结束,判断在该字串中是否存在给定的子串。
西电—软件大作业
软件技术基础大作业电子工程学院2016.121、//单链表逆置void invert(linklist*head) {linklist*p, *q, *r;//p指向前一个结点,q指向p后的结点,r用于保存q指针域的值p = head->next; //p指向第一个结点q = head->next->next; //q指向第二个结点head->next->next = NULL;while (q != NULL) {r = q->next;//保存q指针域的值,接下来会将此值赋予pq->next = p; //修改q的指针域,使其指向p所指结点,以达到逆置的目的p = q;//p 后移q = r;//q后移}head->next = p;}分析:2、//按字母、数字、其它字符分解单链表void resolve(linklist*head, linklist*letter, linklist*digit, linklist*other) { linklist *p;while (head->next != NULL) {p = head->next; //p指向第一个节点head->next = head->next->next; //缩短循环链表if ((p->data >= 'A'&&p->data <= 'Z') || (p->data >= 'a'&&p->data <= 'z')) insert(letter, p);elseif (p->data >= '0'&&p->data <= '9')insert(digit, p);else insert(other, p); //判断字母、数字和其它字符}}分析:3、//判字符串是否中心对称int symmetry(linklist*head, stack*s) {int l = length(head);int n = l / 2;int x;linklist*p = head->next;for (int i = 1; i <= n; i++) {push(s, p->data);//把单链表的前一半元素压入堆栈p = p->next;}if (l % 2 == 1) p = p->next;//当链表长度为奇数时while (p->next != NULL) {x = pop(s);if (x == p->data)p = p->next;elsereturn 0;}return 1;}分析:4、//入队void enqueue(qu *sq, datatype x) {for (int i = 0; i < m; i++) {sq->sequ[i] = x;}}//出队datatype *dequeue(qu *sq){datatype *temp;if (sq->quelen == 0){printf("queue is empty\n"); return NULL;}else {temp = (datatype*)malloc(sizeof(datatype));sq->quelen--;*temp = sq->sequ[(sq->rear - sq->quelen + m) % m];return (temp);}}分析:5、//顺序串的朴素模式匹配int Index(seqstring*S, seqstring*subS) {int i = 1, j = 1; //位序从1开始while (i <= S->len&&j <= subS->len)if (S->str[i - 1] == subS->str[j - 1]){i++; j++;} //继续比较后面的字符else{i = i - j + 2; j = 1;} //本趟不匹配,设置下一趟匹配的起始位序if (j >subS->len) return(i - subS->len); //匹配成功elsereturn(-1); //匹配不成功}分析:6、//添加删除子串算法void strDelete(seqstring*S, int pos, int len) {char temp[maxsize];if (pos>= 1 &&len<= S->length - len + 1) {strncpy_s(temp, S->str, pos - 1);//strncpy_s与strncpy具有相同的功能,用于将源字符串复制到目的字符串strcpy_s(temp + pos - 1,maxsize,S->str + pos + len - 1);//strcpy_s与strcpy具有相同的功能strcpy_s(S->str,maxsize, temp);S->length = S->length - len;}}分析:7、//希尔排序void shellsort(rectype r[], int d[]){int i, j, k, h;rectype temp;int maxint = 32767;for (i = 0; i<D1; i++)r[i].key = -maxint;//设置T个监视哨k = 0;do {h = d[k];//取一趟的增量for (i = h + D1; i<N + D1; i++){temp =r[i];j = i - h;while (temp.key<r[j].key){r[j + h] =r[j];j = j - h;}r[j + h] = temp;}//组内直接插入法排序print(r, N);//输出一趟的排序结果k++;} while (h != 1);}分析:8、//折半查找索引表,块内顺序查找int blksearch(record r[], index idx[], keytype k, int n) {int i, low = 0, high = n - 1, mid, bh, find = 0;//折半查找索引表while (low <= high && !find){mid = (low + high) / 2;if (k<idx[mid].key)high = mid - 1;elseif (k>idx[mid].key)low = mid + 1;else{high = mid - 1;find = 1;}}if (low<n){i = idx[low].low;//块的起始地址bh = idx[low].high;//块的终止地址}//块内顺序查找while (i<bh&&r[i].key != k)i++;if (r[i].key != k)i = -1;return i;}分析:9、//双向起泡排序void dbubblesort(sequenlist r[], int n){int i = 1, j, noswap = 1;sequenlist temp;while (noswap) {noswap = 0;for (j = n - i + 1; j >= i + 1; j--)if (r[j].key<r[j - 1].key){noswap = 1;temp =r[j];r[j] =r[j - 1];r[j - 1] = temp;}for (j = i + 1; j <= n - i; j++)if (r[j].key>r[j + 1].key){noswap = 1;temp =r[j];r[j] =r[j + 1];r[j + 1] = temp;}for (int k = 1; k <= n; k++)printf("%5d", r[k].key);printf("\n");i++;}}分析:10。
西安电子科技大学机电工程学院 软件技术大作业
西安电子科技大学机电工程学院软件技术大作业任课老师李凯上机报告一、上机目的1.熟悉线性表,链表,队列,二叉树等数据结构2.学习利用C语言实现多种数据结构的建立和多种操作(插入,删除等)3.在编程过程中学习程序的调试方式二、上机内容假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。
三·设计说明5题1)用一维数组实现。
(当然可以参考用课件中的队列的方法,但就算法繁简来说,用数组实现更为简单高效)2)基本思想:设数组长度为n。
分别将a[0]与a[n-1],a[1]与a[n-2],a[2]与a[n-3]……比较,判断是否相等,相等则计数变量k加1,否则退出循环。
最后判断k值。
若是回文,则k应该等于[n/2],否则就不是回文。
3)输入说明:以$输入为结束标志三、调试分析1.调试所遇到问题1)编译时,头文件包含不全2)逻辑一般没有错误,而问题多出在实际实现过程与自己想法间的差距。
例如:2题,判断条件(s!=r)&&(r->next!=s)。
我想实现的是当结点数为偶数时,头尾两部分交换结束的条件是s=r;当为奇数时,结束的条件是s跑到r的后面。
因此在写程序初,逻辑运算用的是||(或),即二种情况中的一种,结果运行时怎么都不正确。
后来在老师帮助下才找到错误。
3)对于算法实际运行的方式理解不到位。
在做第6题时认为该题应该比较简单,因为二叉树的建立和遍历课本上都有现成的算法,自己只需添加相应的判断条件即可。
结果调试发现怎么做都不正确,后来仔细想递归算法的细节才注意到统计变量递归一次又从头开始统计,所以结果始终是结点数1,叶子数0。
改进作法是将统计量变为一个初值为0的参数,发现也是不行的。
最后只能改为全局变量。
4)输入方式不正确。
在输入时没有注意输入方式,随便加空格,使得运行结果错误。
西电最优化上机报告(大作业)
上机报告一.最速下降法算法简述:1.在本例中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。
2.将函数的一阶导数化简,存在一个矩阵,将其hesse矩阵存在另一个矩阵。
依照公式求出α,进而求出下一任迭代的矩阵初值。
循环内设置一个计数功能的变量,统计迭代次数。
3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。
4.显示最优解,终止条件,最小函数值。
心得体会:最速下降法的精髓,无疑是求梯度,然后利用梯度和hesse矩阵综合计算,求解下一个当前最优解。
但是,要求函数是严格的凸函数,结合严格凸函数的大致图像,这就给初值的选取提供了一点参考。
例如在本例中,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。
综合以上考量,第一次选取(1,1)作为初值,判别精度方面,取到千分位,暂定为0.001。
运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。
这个结果已经相当接近笔算结果。
整体的运行也比较流畅,运算速度也比较快。
第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。
可见,最优结果更接近理想值,终止条件也变小了,最关键的是,迭代次数减少至第一次的一半以下!这说明以上初选取的方向是对的!第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。
结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。
第四次,判别精度不变,取初值(4,4)。
西电软件技术基础大作业
西电软件技术基础大作业现有若干学生的学籍档案信息,要求编写一个应用软件实现对其进行日常管理,以实现学生档案信息的插入和删除,并能根据学号查询.#include<stdio.h>#include<stdlib.h>#include<string>typedef struct student{char ID[10];char name[10];char sex[3];int age;char addr[30];struct student *next;}stu;void Input(stu *&head){stu *temp,*current;temp=(stu *)malloc(sizeof(stu));printf("输入学生信息:\n");printf("学号\t姓名\t性别\t年龄\t地址\t\n");fflush(stdin);scanf("%s%s%s%d%s",temp->ID,temp->name,temp->sex,&temp->age,temp->addr);temp->next=NULL;if(head==NULL){head=(stu *)malloc(sizeof(stu));head->next=temp;}else{current=head->next;while(current->next)current=current->next;current->next=temp;}printf("添加成功\n");system("pause");}void FindByID(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{stu *current =head->next;bool flag=0;char a[10];printf("输入要查询的学号:\n");fflush(stdin);scanf("%s",a);do{if(strcmp(current->ID,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);system("pause");}else{printf("没有找到\n");system("pause");}}}void FindByName(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{stu *current =head->next;bool flag=0;char a[10];printf("输入要查询的姓名:\n");fflush(stdin);scanf("%s",a);do{if(strcmp(current->name,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);system("pause");}else{printf("没有找到\n");system("pause");}}}void Delete(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{ stu *current =head->next;stu *prev=NULL;char a[10];printf("输入要删除的学号:\n");fflush(stdin);scanf("%s",a);while(current!=NULL){if(strcmp(current->ID,a)==0)break;prev=current;current=current->next;}if(prev==NULL){head->next=current->next;free(current);}else{prev->next=current->next;free(current);}printf("删除成功\n");system("pause");}}void Show(stu *&head){stu *current =head->next;if(current==NULL){printf("数据为空\n");system("pause");return ;}printf("学号\t姓名\t性别\t年龄\t地址\t\n");while(current!=NULL){printf("%s\t%s\t%s\t%d\t%s\n",current->ID,current->name,current->sex,current->age,current->ad dr);current=current->next;}system("pause");}void Modify(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}bool flag=0;char a[10];printf("输入要查询的学号:\n");fflush(stdin);scanf("%s",a);stu *current=head->next;do{if(strcmp(current->ID,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);printf("请重新输入该学生信息:\n");printf("学号\t姓名\t性别\t年龄\t地址\t\n");scanf("%s%s%s%d%s",current->ID,current->name,current->sex,current->age,current->addr); printf("修改成功\n");printf("pause");}else{printf("没有找到\n");system("pause");}}void Print(){system("cls");printf(" 请选择功能(按0退出)\n");printf(" 1------添加学生\n");printf(" 2------通过学号查询学生\n");printf(" 3------通过姓名查询学生\n");printf(" 4------删除学生\n");printf(" 5------修改学生\n");printf(" 6------显示所有学生\n");}int main(){char ch;stu *head=NULL;do{Print();fflush(stdin);ch=getchar();//system("cls");switch(ch){case '1':Input(head);break;case '2':FindByID(head);break; case '3':FindByName(head);break; case '4':Delete(head);break;case '5':Modify(head);break; case '6':Show(head);break;}}while(ch!='0');}。
软件技术基础_课后答案_周大为_西电
Stack*temp; datatype x; InitS(temp); while(!EmptyS(s)) {
x=Pop(s); if(x!=m) Push(temp,x); } while(!Empty(temp)) Push(s,Pop(temp)); }
}
12、已知结点序列{21,18,37,42,65,24,19,26,45,25},
画出相应的二叉排序树,并画出删除结点 37 后的二叉排序树。有问 题
(1)
(2)删除结点 37 后
14 某密码电文由 8 个字母组成,每个字母在电文中的出现频率分别
是 7、19、2、6、32、3、21、10,试为这 8 个字母设计相应的哈
四、7
void strDelete(char*S,int i,int m) {
char temp[80];int k; k=i-1; if(i>=strlen(S)) return; else {
strncpy(temp,S,k); if(k+m>=strlen(S)) strcpy(temp+k,"\0"); else strcpy(temp+k,S+k+m); strcpy(S,temp); } } 或者: void strDelete(seqstring*S,int i,int m)
}
习题 4
四、1
int symmetry(linklist*head,stack*s) //具有头结点的单链表中存放有一个字符串,每个结点的数据域存放 一个字符。 //head 为单链表的头指针,s 为栈的结构体指针 {
int n=length(head)/2; linklist*p=head->next ; datatype x; for(int i=0;i<n;i++){
大一计算机上机题目及答案(西电专用)
《《程序设计实践》上机报告要求:五次上机(每次8机时)正确完成8~10 题。
最终提交:(1) 电子版文档。
格式模板参见《程序设计基础实验报告》(注意文档最后一部分包含课程设计小结)。
(2) 打印电子版文档。
(3) 源程序,打包成压缩文件提交。
注意:(1) 压缩文件格式:学号.zip (或rar)。
例如:03051122.zip(或03051122.rar) (2) 各源程序命名方式:no题号.c 。
例如:no3.c (3) 源程序压缩包内只包含各题目的源程序和程序运行过程中需要的相关文件,不包含编译后的可执行文件和运行结果。
(4) 课程设计小结写本次课设的收获和体会。
备选题目如下:算法类1、已知2000年1月1日为星期六,输入任一年的年份后,打印该年的年历。
2、假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,实际的长整数m表示为:m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]其中a[0]保存该长整数的位数。
完成(任选一题):(1) 长整数乘普通整数。
(2) 长整数除普通整数。
3、假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,实际的长整数m表示为:m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]其中a[0]保存该长整数的位数。
完成(任选一题):(1) 转换成16进制数输出。
(2) 转换成8进制数输出。
文件类1、用文件保存一段英文文本。
(1) 统计各字母在文本中出现的次数(忽略大小写)。
(2) 查找并替换文本中的某字符串,将替换后的文本存入另一个文件。
2、编写文件拷贝命令行程序,命令行格式为:HCOPY filename1filename2 。
3、现有两个文本文件file1.txt和file2.txt。
file1中第一列为姓名,第二列为英语成绩;file2中第一列为姓名,第二列为数学成绩。
西电 C++ 面向对象程序设计 软件技术基础 课后答案
习题3 四、1int compare(SeqList*La,SeqList*Lb){int i;i=1;while(i<=La->last&&i<=Lb->Last&& La->data[i]==Lb->data[i]) i++;if(i<=La->last&&j>Lb->last|| La->data[i]>Lb->data[i]) return 1; //A>B if(i>La->last&&j<=Lb->last|| La->data[i]<Lb->data[i]) return -1; //A<B if(i>La->last&&j>Lb->last) return 0; //A=B}四、2 (1)顺序表int invert(SeqList*L){int i=1;datatype temp;while(i<=L->last/2){temp=L->data[i];L->data[i]=L->data[L->last-i+1];L->data[L->last-i+1]=temp;}}(2)链表void invert (linklist*head){linklist*p,*q,*r;p=head->next;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next->next=NULL;head->next=p;}四、5void mergelist(Linear_list*La,Linear_list*Lb,Linear_list*&Lc){Lc=(Linear_list*)malloc(sizeof(Linear_list)); //产生C表的头结点头插法Lc->next=NULL;while(La->next!=NULL&&Lb->next!=NULL) //La、Lb均非空if(La->next->data<=Lb->next->data){p=La->next;La->next=La->next->next;insert(Lc,p);}else{p=Lb->next;Lb->next=Lb->next->next;insert(Lc,p);}while(La->next!=NULL){p=La->next;La->next=La->next->next;insert(Lc,p);}while(Lb->next!=NULL){p=Lb->next;Lb->next=Lb->next->next;insert(Lc,p);}}//O(Length(La)+Length(Lb))void insert(Linear_list*Lc,Linear_list*p){p->next=Lc->next;Lc->next=p;}//O(1)四、8void deleteFront(Link*s){Link*p=s,*q;while(p->next->next!=s)p=p->next;q=p->next;p->next=s;free(q);}习题4 四、1int symmetry(linklist*head,stack*s)//具有头结点的单链表中存放有一个字符串,每个结点的数据域存放一个字符。
软件技术基础 习题答案
软件技术基础习题答案软件技术基础习题答案在学习软件技术基础的过程中,习题是非常重要的一种学习方式。
通过解答习题,我们可以巩固所学的知识,提高自己的理解能力和解决问题的能力。
下面是一些常见的软件技术基础习题及其答案,供大家参考。
1. 什么是软件开发生命周期?它包括哪些阶段?答:软件开发生命周期是指软件从开始开发到最终交付使用的整个过程。
它包括需求分析、系统设计、编码、测试、部署和维护等阶段。
2. 什么是面向对象编程?面向对象编程有哪些特点?答:面向对象编程是一种编程范式,它将程序中的数据和操作封装成对象,并通过对象之间的交互来实现程序的功能。
面向对象编程的特点包括封装、继承和多态。
3. 什么是数据结构?请举例说明一种常见的数据结构。
答:数据结构是指组织和存储数据的方式。
常见的数据结构有数组、链表、栈和队列等。
以数组为例,它是一种线性数据结构,可以存储多个相同类型的元素。
4. 什么是算法?请举例说明一种常见的算法。
答:算法是指解决问题的一系列步骤。
常见的算法有排序算法、搜索算法和图算法等。
以排序算法为例,冒泡排序是一种常见的排序算法,它通过比较相邻元素的大小来实现排序。
5. 什么是数据库?请举例说明一种常见的数据库类型。
答:数据库是指存储和管理数据的系统。
常见的数据库类型有关系型数据库和非关系型数据库。
以关系型数据库为例,MySQL是一种常见的关系型数据库,它使用表格的形式来存储数据。
6. 什么是网络编程?网络编程有哪些常用的协议?答:网络编程是指通过网络进行数据传输和通信的编程方式。
常用的网络协议有TCP/IP协议和HTTP协议。
TCP/IP协议是一种传输协议,用于保证数据的可靠传输;HTTP协议是一种应用层协议,用于在客户端和服务器之间传输超文本。
7. 什么是操作系统?操作系统有什么作用?答:操作系统是计算机系统中的核心软件,负责管理和控制计算机的硬件和软件资源。
操作系统的作用包括管理内存、文件和进程,提供用户界面和系统调度等。
软件技术基础第一次作业题及答案.doc
第1次作业一、单项选择题(本大题共100分,共40小题,每小题2.5分)1. 若执行以下程序段,其运行结果是()char c [[二{'a', ' b', ' \0', ' c', ' \0'} ; printf (,,%s\n ,/, c ); A. ab cB. 'a''b'C. abcD. ab2. 一个C 语言程序是由()组成A.主程序B.子程序C.函数D.过程3. 已知各变量定义如下:int i 二& a, b; double x=l. 42, y=5. 2;则以下符合C 语言语法的表达式是 ()A. a+二a -二(b 二4) * (a 二3)B. ei 二a*3二2C. x%(-3)D.(y+i )++ 4. 下列程序的输岀结果为()void main () { int &□二{1, 2, 3, 4, 5}, *p;P=a; * (p+4)+=5;printf %d\n\ *p, * (p+4)); } A. 4,10 B. 10,4 C. 1,4 D. 1, 105. 下列数据屮,属于“字符串常量”的是()A. Abcddd B. 〃3bcddd 〃 C. ,abcddd , D. <a ,6. 以下语句或语句组中,能正确进行字符串赋值的是()A. char*sp;*sp 二〃right!" B. char s[10];s 二〃right!〃 C. char s[10];*s 二〃right!〃 D. char *sp 二〃right!"7. 已知 long a=-2L ; printf (z ,%d\ n ,z , a );则有()A.赋值不合法 B. 输出值为-2 C.输出为不确定值D.输出值为2&在C 语言屮,类型名char 表示的数据类型是()A.实型B.字符型C. 整型D.双精度实型9. 判断char 型变量cl 是否小写字母的正确表达式为()A.,a<=cl<=z ,B. (cl>二'a')&&(cl 〈二'z') C. (cl>=a )&&(cl<=z ) D.(务‘〈二cl ) | | ('z'>二cl )10. 下列有关共同体说法正确的是()A.任一时刻,只有一个分量有效,其他 分量无意义B.共同体变量可以用作函数参数C.结构变量可以出现在共同体 类型中,而共同体变量不能出现在结构类型中D.在定义共同体变量时不能为 其初始化11・以下程序的输岀结果是()void main () {int x=020^ y=0x20^ z=20; 32, 16, 20 C. 16, 32, 20 D. 20, 32, 20printf 冷 * z) ; } A. 20, 20, 20 B.12.若有运算符:>、*二、==、%、sizeof,则它们按优先级(由低至高)的正确排列次序为()A. *二-> ==->>->% -> sizeof B. == -> *二->>->% -> sizeof C. *二-〉 > -〉二二-〉sizeof -> % D. *二-〉 > -〉二二 -〉% -> sizeof13.char s[]二” student”,*(s+2)的值是()A.,u,B. <d,C. “s' D. 't'14.用C语言编写的源程序,必须经过编译、连接和运行才能得到结果。
西电软件技术基础大作业
软件技术基础大作业通讯录管理的设计一、程序设计目的通过对通讯录管理链表的课程设计,加深对程序设计的理解,熟练掌握和加深c语言的基本知识和语法规范,同时更进一步地理解数据结构对单链表知识的应用。
二、实验内容设计一个含有多个菜单项的程序,菜单项内容如下:1.通讯链表的建立2.通讯者结点的插入3.通讯者结点的查询4.通讯者结点的删除5.通讯录链表的输出0.退出管理系统三、算法分析首先,应运用c语言中结构体的知识。
把通讯者的各项信息储存到结构体的链表中,定义一个新的结构体类型struct(struct是声明结构体时所必须使用的关键字)它向编译系统声明这是一个“结构体类型”,它包括num, name ,phone 等不同类型的数据项。
其次运用数据结构中线性表的知识。
线性表的存储结构分为线性表的线性存储结构和线性表的链式存储结构,线性表的顺序存储结构是指用一组地址连续的存储单元一次存储线性表的数据元素。
线性表的链式存储结构则是通过指针反映元素之间的关系,不要求逻辑上相邻的元素在物理位置上也相邻,所以该方法可以克服顺序表的一些缺点。
所以本次应运用线性链表的链式存储结构。
线性链表的链式存储结构又分为单链表、循环链表和双链表,本次运用单链表的知识。
四、模块分析1. 通讯链表的建立建立单链表有两种方法,头插入法和尾插入法。
头插入法是将每次新插入的结点插入在链表的表头,而尾插入法是将新插入的结点插入到链表的表尾。
在这个通讯录的建立中将采用尾插入法建立链表。
2. 链表的插入链表结点的插入是要求将一个通讯录数据结点按其编号的顺序插入有序通讯录表的相应位置,以保持其有序性。
使用两个指针变量分别指向刚访问的结点和下一个结点,寻找插入结点的位置,其中一个指向待插入位置的前一个结点。
3. 链表的查询首先输入要查找的通讯录的编号或姓名,从表头顺序访问表中结点,查找成功则返回指向查找的通讯者信息的结点,否则返回一个空的指针。
4. 单链表的删除输入要查找的通讯录的编号或者姓名,从表头顺序访问表中结点,查找成功则返回指向查找的通讯者信息的结点,删除结点即可。
软件技术基础上机作业
1)实验项目简介:《软件技术基础实验》是与理论课程《软件技术基础》配套开出的,主要包含一个C程序部分的综合测试上机实验,和四个数据结构部分的基本上机实验,着重培养同学进行软件设计的基本能力。
2)实验内容:实验一:C程序设计综合上机实验 4学时实验目的:回顾C程序部分的相关知识,加强同学对指针、函数和结构体等的软件技术基础课程中需要大量使用的C语言知识的巩固和掌握。
实验内容:1、从键盘上输入5个同学的基本信息,包含同学的姓名(用拼音字母表示),班级,年龄,性别,身高。
把年龄最小的一个同学的信息同排在第一个位置的同学的信息交换,把年龄最大的一个同学的信息和最后一个元素交换,并将交换前后的结果打印出来。
2、已知一个班中5名同学的英语成绩为{88,76,83,89,86,80,62,85,74,87},平时成绩为{8,9,7,8,6,9,10,8,9,10},主函数中用C的指针分配函数:malloc()分配两块连续的存储单元存放以上的考试成绩和平时成绩,用一个函数计算该班同学的考试平均成绩和各同学的最终成绩(考试成绩+平均成绩),在主函数中将以上计算结果打印出来。
3、要求在主函数输入一串文字,并编写一个函数计算该文字串中的大写字母,小写字母,数字以及其它字符的个数,并在主函数中将文字串和以上计算结果打印出来。
本题选作。
实验要求:本实验是软件技术基础课程的第一次上机实验,要求同学从本次实验开始遵守以下基本实验要求:1)上机之前必须在书面编好以上程序;2)上机是在老师的指导下完成程序的编译、调试和测试;3)实验完成后完成实验报告。
实验二:顺序表基本操作上机实验 4学时实验目的:掌握顺序表的基本概念,基本操作和其C语言实现,同时进一步强化C程序设计的基本方法和能力。
实验内容:1、有序的一组整数{1,2,3,4,6},设计顺序表并实现以下操作:A.初始化线性表;B.添加上述一组数;C.删除第四个数据元素;D.显示B,C操作后的结果。
西电软计技术上机
西安电子科技大学机电工程学院软件技术大作业任课老师许威上机报告一、上机目的1.熟悉线性表,链表,队列,二叉树等数据结构2.学习利用C语言实现多种数据结构的建立和多种操作(插入,删除等)3.在编程过程中学习程序的调试方式二、上机内容一共完成5题——1,2,4,5,61题:设有一个由正整数组成的无序单链表,编写完成下列功能的算法:①找出最小值结点,且打印该数值;②若该数值是奇数,则将其与直接后继结点的数值交换;③若该数值是偶数,则将其直接后继结点删除。
2题:编一程序:①建立一个数据域为1至10的带头结点的链表;②将此链表就地逆转。
4题:某百货公司仓库中有一批电视机,试按价格从高到底的次序建立一个循环链表,每个结点有价格、数量和指针三个域。
现新到10台价格为4000元的电视机,修改原链表并输出修改后链表的所有内容。
5题:假设称正读反读都相同的字符序列为回文。
例如,‘abba’,‘abcba’都是回文,‘ababab’不是回文,试编写程序判别从标准输入读入的以’@’为结束符的字符序列是否是回文。
6题:试设计一个程序,求二叉树的结点数目和叶子结点数目。
三、设计说明1题1)用带头结点的单链表是实现2)结点声明typedef struct node{int data;struct node *next;}linklist3)共定义了5个函数CREAT——建立单链表函数DELETE——删除结点函数SEARCH——查找数据域最小的结点函数基本思想:定义两个指针,其中s指针始终记录值较小的结点,并与p所指结点比较,直到将整个链表比较完毕。
EXCHANGE ——交换结点值函数PRINT——打印单链表,显示结点数据值函数4)输入说明:以为单链表由正整数组成,所以以输入0为输入结束标志。
2题1)用带头结点的单链表实现2)共定义了3个函数CREAT——建立单链表REVERSE——将单链表逆置基本思想:有3个指针r,s。
r指向单链表尾部,s指向单链表头部,s为用于交换结点数据值的中间量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}sequenlist;
void create(sequenlist*&);
void print(sequenlist*);
void invert(sequenlist*);
void main()
{
sequenlist*L;
create(L);//建立顺序表
print(L);//输出顺序表
invert(L);//调用顺序表逆值的函数
print(L);//输出顺序表
}
//建立顺序表
void create(sequenlist*&L)
{
L=(sequenlist*)malloc(sizeof(sequenlist));
L->last=0;
char ch;
while((ch=getchar())!='*')
说明
每个实验题目含有一个main函数和一些函数,与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出,供上机实验参考使用。对于每个题目,只需要根据题目要求设计算法,补充函数定义,然后对程序进行编译、调试。
实验一线性表
一、实验目的
1.熟悉线性表的顺序和链式存储结构
2.掌握线性表的基本运算
二、实验内容
1.已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。(文件夹:交换左右子树)
2.采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。(文件夹:统计二叉树结点)
附录:原代码
实验一:第1题(1)
//顺序表逆置的程序代码
#include<stdio.h>
#include<malloc.h>
//顺序表结构类型定义
typedef char datatype;
const int maxsize=1024;
typedef struct
{ datatype data[maxsize];
{
L->last++;
3.能够利用线性表的基本运算完成线性表应用的运算
二、实验内容
1.设有一个线性表E={e1, e2,…, en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en, en-1,…, e2, e1},要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。(文件夹:顺序表逆置、单链表逆置)
实验四数组
一、实验目的
1.熟悉数组的结构
2.掌握矩阵的压缩存储
3.能够对数组和矩阵的压缩存储进行运算
二、实验内容
1.若在矩阵Am×n中存在一个元素A[i][j],其满足A[i][j]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。用二维数组存储矩阵Am×n,设计算法求出矩阵中所有马鞍点。(文件夹:找马鞍点)
实验六图
一、实验目的
1.熟悉图的邻接矩阵和邻接表的存储结构
2.熟悉图的邻接矩阵和邻接表的建立算法
3.掌握图的遍历算法
二、实验内容
1.无向图采用邻接矩阵存储,编写深度优先搜索遍历算法,从不同的顶点出发对无向图进行遍历。(文件夹:无向图邻接矩阵)
实验七排序
一、实验目的
1.熟悉各种内部排序算法
2.能够编写程序显示排序过程中各趟排序的结果
3.能够编写一些排序的算法
二、实验内容
1.采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。(文件夹:希尔排序)
2.编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。(文件夹:双向起泡排序)
实验八查找
一、实验目的
1.熟悉线性表、二叉排序树和散列表的查找
2.A和B是两个n×n阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。(文件夹:对称矩阵相乘)
实验五树
一、实验目的
1.熟悉二叉树的链式存储结构
2.掌握二叉树的建立、深度优先递归遍历等算法
3.能够利用遍历算法实现一些应用
3.能够利用栈和队列的基本运算完成栈和队列应用的运算
二、实验内容
1.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。)(文件夹:判字符串中心对称)
2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。编写实现该循环队列的入队和出队操作的算法。提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。(文件夹:循环队列)
实验三串
一、实验目的
1.熟悉串的顺序存储结构
2.掌握串的基本运算及应用
二、实验内容
1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。(文件夹:模式匹配)
2.若S是一个采用顺序结构存储的串,利用C的库函数strlen和strcpy(或strncpy)编写一算法void SteDelete(char*S,intI,int m),要求从S中删除从第i个字符开始的连续m个字符。若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则将S中从位置i开始直至末尾的字符均删除。(文件夹:删除子串)
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。(文件夹:分解单链表)
实验二栈和队列
一、实验目的
1.熟悉栈和队列的顺序和链式存储结构
2.掌
1.18个记录的关键字为22、12、13、8、9、20、33、42、44、38、24、48、60、58、74、49、86、53,编写分块查找的算法进行查找。(文件夹:分块查找)
2.编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数。(文件夹:判断二叉排序树)