计算机二级C语言上机考试——结构体与链表
- 格式:doc
- 大小:43.00 KB
- 文档页数:3
计算机等级考试二级C语言程序设计专项训练题——单链表一.程序填空题1.给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun的功能是:将a、b、c 三个结点链接成一个单向链表,并输出链表结点中的数据。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!#include <stdio.h>typedef struct list{char data;struct list *next;}Q;void fun(Q *pa, Q *pb, Q *pc){Q *p;/**********found**********/pa->next=___1___;pb->next=pc;p=pa;while( p ){/**********found**********/printf(" %c",____2_____);/**********found**********/p=____3____;}printf("\n");}int main(){Q a, b, c;a.data='E';b.data='F';c.data='G'; c.next=NULL;fun( &a, &b, &c );return 0;}2.给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <stdlib.h>#define N 8typedef struct list{int data;struct list *next;} SLIST;SLIST *creatlist(int *a);void outlist(SLIST *);void fun( SLIST *h, int *n){SLIST *p;/**********found**********/___1___=0;p=h->next;while(p){(*n)++;/**********found**********/p=p->___2___;}}int main(){SLIST *head;int a[N]={12,87,45,32,91,16,20,48}, num;head=creatlist(a);outlist(head);/**********found**********/fun(___3___, &num);printf("\nnumber=%d\n",num);return 0;}SLIST *creatlist(int a[]){SLIST *h,*p,*q;int i;h=p=(SLIST *)malloc(sizeof(SLIST));for(i=0; i<N; i++){q=(SLIST *)malloc(sizeof(SLIST));q->data=a[i]; p->next=q; p=q;}p->next=0;return h;}void outlist(SLIST *h){SLIST *p;p=h->next;if (p==NULL) printf("The list is NULL!\n");else{printf("\nHead ");do{printf("->%d",p->data);p=p->next;} while(p!=NULL);printf("->End\n");}}3.给定程序中,函数fun的功能是:计算出带头结点的单向链表中各结点数据域之和作为函数值返回。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12(题后含答案及解析)题型有:1. 选择题选择题1.关于typedef的叙述中错误的是( )。
A.用typedef可以为各种类型起别名,但不能为变量起别名B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.可以用typedef将已存在的类型用一个新的名字来代表正确答案:B解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。
标识符是一个用户定义标识符,用作新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
知识模块:结构体及文件操作2.正确的结构体类型说明和变量定义是( )。
A.typedef struct f{int n;char c;}STR;STR t1,t2;B.struct STR;{int n;char C;};STR t1,t2;C.typedef stmct STR;{int n=0;char c=‘A’;}t1,t2;D.struct{int n;char c;}STR;STR t1,t2;正确答案:A解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct 结构体名后不能加“:”号。
但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。
选项A为用户自定义类型,其为正确的定义形式。
知识模块:结构体及文件操作3.若typedef int*T;T a[5];则与a的定义相同的是( )。
A.int*a[5];B.int(*a)[5]C.int,*a;D.int a[5];正确答案:A解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T 定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。
结构体与共用体要点一、概述结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。
把不同类型的数据组合成一个有机的整体,可以用结构体解决。
结构体中的每一项数据,称为结构体“成员”(member)或“分量”。
声明结构体类型的一般形式:struct 结构体名{成员表列};声明各成员的形式:类型名成员名;例如:学生数据struct student{int num;char name[20];char sex;int age;float score;char addr[30];}; 注意不要忽略最后的分号student结构体类型占59个字节。
二、定义结构体类型变量的方法1.先声明结构体类型再定义变量名struct student student1, student2;要求指定为某一特定的结构体类型2.在声明类型的同时定义变量struct 结构体名{成员表列}变量名表列;例如:struct student{int num;char name[20];char sex;int age;float score;char addr[30];} student1, student2;3.直接定义结构体类型变量struct{成员表列}变量名表列;几点说明:(1)类型与变量是不同的概念;(2)结构体中的成员可单独使用,其作用与地位相当于普通变量;(3)成员也可以是一个结构体变量;(4)成员名与普通变量名相同,不代表同一对象。
三、结构体变量的引用(1)不能将结构体变量整体进行输入和输出,只能对各个成员分别进行输入和输出。
printf("%d,%s,%c,%d,%f,%s\n",student1);错误(2)引用成员的方式:结构体变量名.成员名student1.num=10010;当成员是另一个结构体变量时,应一级一级地引用成员。
仅在以下两种情况下,可以把结构体变量作为一个整体来访问。
数据结构:考点1:栈和队列的特点典型题例:(1)栈和队列的共同特点是(栈和队列的特点)A)都是先进先出B)都是先进后出C)只允许在端点处插入和删除元素D)没有共同点解析:栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除.二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种"后进先出"的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种"先进先出"的线性表.所以没有共同点(2)下列关于栈叙述正确的是(栈)(11.3)A)栈顶元素最先能被删除B)栈顶元素最后才能被删除C)栈底元素永远不能被删除D)以上三种说法都不对(3)下列叙述中正确的是(栈)(10.9)A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D)上述三种说法都不对(4)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是(栈进出顺序)A)e3,e1,e4,e2 B)e2,e4,e3,e1C)e3,e4,e1,e2 D)任意顺序解析:由栈"后进先出"的特点可知:A)中e1不可能比e2先出,C)中e3不可能比e4先出,且e1不可能比e2先出,D)中栈是先进后出的,所以不可能是任意顺序.B)中出栈过程如图所示: (5)一个栈的初始状态为空。
首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为【1】(栈)(10.9)(6) (1)一个队列的初始状态为空,先将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为。
(队列)(10.3)(7)设某循环列队的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有_____个元素。
1:某学生的记录由学号、8门课程成绩和平均分组成, 学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。
void fun(STREC *a){int i;a-〉ave=0.0;for(i=0;i〈N;i++)a-〉ave=a->ave+a->s[i];a-〉ave=a-〉ave/N;} 2:N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,其功能是:求出平均分,并由函数值返回。
double fun(STREC *h) {double av=0。
0;STREC *p=h-〉next;while(p!=NULL){av=av+p-〉s; p=p-〉next;}return av/N;}3:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:把分数最高的学生数据放在b所指的数组中。
注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数. int fun (STREC *a, STREC *b){int i,j=0,max=a[0].s;for(i=0;i<N;i++)if(max<a[i].s) max=a[i].s;for(i=0;i〈N;i++)if(max==a[i].s) b[j++]=a[i]; return j;}4:学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:函数返回该学号的学生数据,指定的学号在主函数中输入。
若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
STREC fun(STREC *a, char *b){int i;STREC str={"\0”,-1};if(strcmp(a[i].num,b)==0) str=a[i];return str; }5:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。
国家二级C语言机试(操作题)模拟试卷808(题后含答案及解析) 全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题程序填空题1.给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun( )的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedef struct list{char data;struct list *next;}Q;void fun(Q *pa,Q *pb,Q *pc){Q *p;/* * * * * * found * * * * * */pa—>next=___1___;pb—>next=pc:p=pa;while(P){/* * * * * * found * * * * * */printf(″%c″,___2___);/* * * * * * found * * * * * */p=___3___;}printf(″\n″);}main( ){Q a,b,c;a.data=′E′:b.data=′F′;c.data=′G′:c.next=NULL;fun(&a,&b,&c);}正确答案:(1)pb (2)p—>data (3)p—>next解析:填空1:将三个结点连接起来,即将pa的指针域指向pb,pb的指针域指向pc。
填空2:输出链表结点中的数据,表示为p—>data。
填空3:指针后移,指向下一个结点,即p=p—>next。
知识模块:程序填空题程序修改题2.下列给定程序中,函数fun的功能是:计算整数n的阶乘。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdlib.h>#include <stdio.h >double fun(int n){double result=1.0;while(n>1 &&n<170)/* * * * * * found * * * * * */result * =——n;/* * * * * * found * * * * * */return;}void main( ){int n:printf(″Enter an integer:″);scanf(″%d″,&n);printf(″\n%d!=%lg\n″,n ,fun(n));}正确答案:(1)result* =n——;(2)return result;解析:本题考查:复合赋值运算;通过return语句完成函数值的返回。
1.下列链表中,其逻辑结构属于非线性结构的是A. 二叉链表B. 循环链表C. 双向链表D. 带链的栈正确答案:A你的答案:解析:【解析】在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。
在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。
循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。
二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。
答案为A 选项。
2.设循环队列的存储空间为Q(1: 35),初始状态为front=rear=35。
现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为A. 15B. 16C. 20D. 0或35正确答案:D你的答案:解析:【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front 指向排头元素的前一个位置。
在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。
只不过当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。
由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。
答案为D选项。
3.下列关于栈的叙述中,正确的是()。
A. 栈底元素一定是最后入栈的元素B. 栈顶元素一定是最先入栈的元素C. 栈操作遵循先进后出的原则D. 以上说法均错误正确答案:C你的答案:解析:【解析】栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。
栈的修改是按后进先出的原则进行的。
因此,栈称为先进后出表,或"后进先出"表,所以选择C。
4.在关系数据库中,用来表示实体间联系的是A. 属性B. 二维表C. 网状结构D. 树状结构正确答案:B你的答案:解析:【解析】关系模型实体间的联系采用二维表来表示,简称表。
(1) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。
则不能把结点b连接到结点a之后的语句是A) a.next=q; B) p.next=&b;C) p->next=&b; D) (*p).next=q;struct node{ char data;struct node *next;a,b,*p=&a,*q=&b; //}a,b,*p=&a,*q=&b;} //去掉}data next data next┌──┬──┐┌──┬──┐a│ 5 ││ b│ 9 │ 0 │└──┴──┘└──┴──┘↑p ↑q【答案】B(2) 若以下定义:struct link{ int data;struck link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构:a bdata next data next┌──┬──┐┌──┬──┐│ 5 │┼──→│ 9 │ \0 │└──┴──┘└──┴──┘↑pcdata next┌──┬──┐│ 7 ││└──┴──┘↑q指针p指向变量a,q指向变量c。
则能够把c插入到a和b 之间并形成新的链表的语句组是: A) a.next=c; c.next=b; B) p.next=q; q.next=p.next;C) p->next=&c; q->next=p->next; D) (*p).next=q; (*q).next=&b;【答案】D(3) 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。
struct node{int info;【10】 link;}【答案】struct node *(4) 设有以下定义stuct ss{ int info; struct ss *link;}x,y,z;且已建立如下图所示链表结构:┌──┬──┐┌──┬──┐┌──┬──┐│ x │┼──→│ y │┼──→│ z │ \0 │└──┴──┘└──┴──┘└──┴──┘请写出删除结点y的赋值语句【】。
1、给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。
例如,有9个正整数:1 5 7 23 87 5 8 21 45按升序排列时的中间数为:8处理后主函数中输出的数列为:8 8 8 23 87 8 8 21 45请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!#include#define N 9int fun(int x[]){ int i,j,k,t,mid,b[N];for(i=0;i<N;I++)&NBSP;B[I]=X[I];for(i=0;i<=N/2;i++){ k=i;for(j=i+1;j<N;J++)&NBSP;IF(B[K]>b[j]) k=j;if(k != i ){/**********found**********/t=b[i]; b[i]=___1___; b[k]=t;}}/**********found**********/mid=b[___2___];for(i=0; i<N;&NBSP;I++)/**********found**********/if(x[i] ___3___ mid) x[i]=mid;return mid;}main(){ int i, x[N]={1,5,7,23,87,5,8,21,45};for(i=0; i<N;&NBSP;I++)&NBSP;&NBSP;PRINTF("%D&NBSP;",X[I]);printf("\nThe mid data is: %d\n",fun(x));for(i=0; i<N;&NBSP;I++)&NBSP;&NBSP;PRINTF("%D&NBSP;",X[I]);printf("\n");}2、给定程序中,函数fun的功能是建立一个N×N的矩阵。
大学生计算机二级考试c语言试题及答案C语言是计算机程序设计中最重要的编程语言之一,在大学生计算机二级考试中也是常见的一种考试内容。
下面将为您提供一套C语言试题及答案,供您参考。
注意:以下试题仅供学习和参考使用,请勿用于商业用途。
一、选择题(共20题,每题2分,共40分)1. 下面哪个关键字表示定义常量?A. defineB. constC. constantD. var答案:B2. C语言中,链表属于哪种数据结构?A. 线性结构B. 树状结构C. 图状结构D. 非线性结构答案:D3. 下面代码的输出结果是什么?```c#include <stdio.h>int main() {int a = 10;int b = 3;float result = (float)a / b;printf("%.2f\n", result);return 0;}```A. 3.33B. 3.00C. 3D. 10答案:A4. 在C语言中,下面哪个运算符用于动态内存分配?A. *B. &C. mallocD. sizeof答案:C5. 下面哪个关键字表示定义函数?A. functionB. defineC. voidD. int答案:D二、编程题(共2题,每题30分,共60分)1. 编写一个C语言程序,输入一个正整数n,计算并输出1到n之间所有偶数的和。
```c#include <stdio.h>int main() {int n, sum = 0;printf("请输入一个正整数n:");scanf("%d", &n);for (int i = 1; i <= n; i++) {if (i % 2 == 0) {sum += i;}}printf("1到%d之间的所有偶数的和为:%d\n", n, sum);return 0;}```2. 编写一个C语言函数,实现将一个字符串逆序输出的功能。
计算机二级C语言考试上机试题及答案2016年计算机二级C语言考试上机试题及答案一、选择题(每小题1分,共40小题,共40分)1.算法的空间复杂度是指( )。
A.算法程序的长度B.算法程序中=的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间2.下列叙述中正确的是( )。
A.一个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率3.简单的交换排序方法是( )。
A.快速排序B.选择排序C.堆排序D.冒泡排序4.关于结构化程序设计原则和方法的描述错误的是( )。
A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用GOT0语句D.语言中若没有控制结构,应该采用前后一致的方法来模拟5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。
A.可重用性差B.安全性差C.非持久性D.冗余性6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。
A.模拟现实世界中不同事物之间的联系B.强调模拟现实世界中的算法而不强调概念C.使用现实世界的概念抽象地思考问题从而自然地解决问题D.不强调模拟现实世界中的算法而强调概念7.对如下二叉树进行后序遍历的结果为( )。
A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。
A.模块间的关系B.系统结构部件转换成软件的过程描述C.软件层次结构D.软件开发过程9.两个或两个以上模块之间关联的紧密程度称为( )。
A.耦合度B.内聚度C.复杂度D.数据传输特性10.下列描述错误的是( )。
A.继承分为多重继承和单继承B.对象之间的通信靠传递消息来实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。
结构体与链表11.1 结构体类型的定义结构体是由C语言中的基本数据类型构成的、并用一个标识符来命名的各种变量的组合,其中可以使用不同的数据类型。
1.结构体类型的定义Struct结构体名{ 类型标识符1 成员名1;类型标识符2 成员名2;……类型标识符n 成员名n;};Struct结构体名——结构体类型名2.关于结构体类型的说明:(1)“struct 结构体名”是一个类型名,它和int、float等作用一样可以用来定义变量。
(2)结构体名是结构体的标识符不是变量名,也不是类型名。
(3)构成结构体的每一个类型变量称为结构体成员,它像数组的元素一样,单数组中元素以下标来访问,而结构体是按结构体变量名来访问成员的。
(4)结构体中的各成员既可以属于不同的类型,也可以属于相同的类型。
(5)成员也可以是一个结构体类型,如:Struct date{Int month;Int day;Int year;};Struct person{Float num;Char name[20];Char sex;Int age;Struct date birthday;Char address[10];};11.2 结构体类型变量11.2.1 结构体类型变量的定义1.先定义结构体类型,再定义结构体变量形式:Struct 结构体名{类型标识符1 成员名1;类型标识符2 成员名2;……类型标识符n 成员名n;};Struct 结构体名变量名表;例如:Struct student{char name[20];Char sex;Int age;Float score;};Struct student stu1,stu2;2.在定义结构体类型的同时定义变量形式:Struct 结构体名{类型标识符1 成员名1;类型标识符2 成员名2;……类型标识符n 成员名n;}变量名表;例如:Struct student{Char name[20];Char sex;Int age;Float score;}stu1,stu2;3.用匿名形式直接定义结构体类型变量形式:Struct{类型标识符1 成员名1;类型标识符2 成员名2;……类型标识符n 成员名n;}变量名表;例如:StructChar naem[20];Char sex;Int age;Float score;}stu1,stu2;11.2.2 结构体变量的使用结构体是一种新的数据类型,因此结构体变量也可以像其它类型的变量一样赋值、运算,不同的是结构体变量以成员作为基本变量。
计算机等级考试二级C语言上机试题上汇总第 1套试题说明***********************************第一题(30分)给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据从小到大顺序链接。
函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!***********************************第二题(30分)给定程序MODI1.C中函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入, 若k的值为500, 则函数值为4622。
请改正程序中的错误,使程序能输出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! ***********************************第三题(40分)函数fun的功能是: 对指定字符在字符串a中出现的次数进行统计, 统计的数据存到b数组中。
其中: 字符'a'出现的次数存放到b[0]中,字符'b'出现的次数存放到b[1]中,字符'c'出现的次数存放到b[2]中,字符'd'出现的次数存放到b[3]中,字符'e'出现的次数存放到b[4]中,其它字符出现的次数存到b[5]中。
例如, 当a中的字符串为: "bacd1b+ddep",调用该函数后,b中存放数据应是:1、2、1、3、1、3。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
第 2套试题说明***********************************第一题(30分)给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。
1:某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。
void fun(STREC *a){int i;a->ave=0.0;for(i=0;i<N;i++)a->ave=a->ave+a->s[i];a->ave=a->ave/N;}2:N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,其功能是:求出平均分,并由函数值返回。
double fun(STREC *h) {double av=0.0;STREC *p=h->next;while(p!=NULL){ av=av+p->s;p=p->next;}returnav/N;}3:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:把分数最高的学生数据放在b所指的数组中。
注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
int fun (STREC *a, STREC *b){int i,j=0,max=a[0].s;for(i=0;i<N;i++)if(max<a[i].s) max=a[i].s;for(i=0;i<N;i++)if(max==a[i].s) b[j++]=a[i];return j;}4:学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:函数返回该学号的学生数据,指定的学号在主函数中输入。
若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
STRECfun(STREC *a, char *b){int i;STREC str={"\0",-1};if(strcmp(a[i].num,b)==0) str=a[i];return str;}5:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。
void fun (STREC a[]){int i,j;STREC t;for(i=1;i<N;i++) /for(j=0;j<N-1;j++) if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}}6:学生的记录由学号和成绩组成。
N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
double fun (STREC *a,STREC *b, int *n) {int i;double av=0.0;*n=0;for(i=0;i<N;i++)av=av+a[i].s;av=av/N;for(i=0;i<N;i++) if(av<=a[i].s) { b[*n]=a[i];*n=*n+1;}return av;}7:N名学生的成绩已在主函数中放入一个带有头节点的链表结构中,h指向链表的头节点请编写函数fun其功能是:找出学生的最高分,并由函数值返回。
double fun(STREC *h){double max=h->s;while(h!=NULL){ if(max<h->s) max=h->s; h=h->next;}return max;}8:学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,请编写函数fun,其功能是:把分数最低的学生数据放入b所指的数组中,int fun(STREC *a,STREC *b) {int i,j=0,n=0,min;min=a[0].s;for(i=0;i<N;i++) if(a[i].s<min)min=a[i].s; for(i=0;i<N;i++)if(a[i].s==min) { *(b+j)=a[i];j++;n++;} return n;}9:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写fun ,功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
double fun(STREC *a, STREC *b, int *n) {inti,j=0;double av=0.0; for(i=0;i<N;i++)av=av+a[i].s;av=av/N;for(i=0;i<N;i++) if(a[i].s<av) b[j++]=a[i];*n=j;return av;}10:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回int fun (STREC *a, STREC *b, int l, int h ){int i,j=0;for(i=0;i<N;i++)if(a[i].s>=l&&a[i].s<=h) b[j++]=a[i];return j;}11:已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。
请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数fun(STU a[], STU *s){int i;*s=a[0];for(i=0;i<N;i++) if(s->s>a[i].s) *s=a[i];}12已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。
请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数fun(STU a[], STU *s) {int i;*s=a[0];for(i=0;i<N;i++) if(s->s<a[i].s) *s=a[i];}杂题1.编写函数fun,其功能是:根据以下公式求pi的值(要求精度0.0005,即某项小于0.0005时停止迭代).double s=1.0,s1=1.0;int n=1;while(s1>=eps) {s1=s1*n/(2*n+1); s=s+s1; n++;}return2*s;2请编写函数fun,函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0---p的数组元素平移到数组的最后。
int x,j,ch; for(x=0;x<=p;x++){ch=w[0];for(j=1;j<n;j++){w[j-1]=w[j];}w[n-1]=ch; }3请编写函数fun,该函数的功能是:移动字符串中的内容,移动的规则是把第1—m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
int i,j; char t;for(i=1;i<=m;i++) {t=w[0]; for(j=1;w[j]!='\0';j++) w[j-1]=w[j];w[j-1]=t; }4请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。
数组中的数已按从小到大的顺序排列,函数返回删除后数组中数据的个数。
int i,j=1; for(i=1;i<n;i++)if(a[j-1]!=a[i]) a[j++]=a[i];return j;5请编写函数fun,其功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)long n=0;int flag=1;if(*p=='-') {p++;flag= -1;}else if(*p=='+') p++;while(*p!='\0') {n=n*10+*p-'0'; p++; } return n*flag;6请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。
int i,j=0; for(i=0;s[i]!='\0';i++) if(s[i]!=' '&&(s[i+1]==' '||s[i+1]=='\0')) j++; return j7请编写函数fun,其功能是:计算并输出当x<0.97时,如下多项式的值,直到|Sn-Sn-1|<0.000001为止。
double fun(double x){double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;int n=1;do{s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)>=1e-6);return sum;}8请编写函数fun,其功能是:计算并输出给定数组(长度为9)中相邻两个元素的平均值的平方根之和。
double sum=0.0;int i,j=1;for(i=0;i<9;i++)if(j<=8){sum+=sqrt((x[i]+x[i+1])/2.0);j++; }return sum;9请编一个函数float fun,该函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入long t; t=(h*1000+5)/10; return (float)t/10010. 请编写函数fun,该函数的功能是:判断字符串是否为回文,若是则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。
回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串123312就不是回文。
int fun(char *str) {int i,n=0,fg=1;char *p=str;while(*p) {n++;p++;}for(i=0;i<n/2;i++) if(str[i]==str[n-1-i]) ;else { fg=0;break;}return fg;}11:编写函数fun:w是一个大于10的无符号整数,若w是n位(n>=2)的整数,则函数求出w的后n-1 位的数作为函数值返回。