计算机二级C语言上机考试——结构体与链表
C语言程序设计专项训练题之 单链表

计算机等级考试二级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语言机试(结构体、共同体、位运算及文件操作)模拟试

国家二级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个数据元素。
计算机二级C语言结构体要点

结构体与共用体要点一、概述结构体(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;当成员是另一个结构体变量时,应一级一级地引用成员。
仅在以下两种情况下,可以把结构体变量作为一个整体来访问。
计算机二级c语言数据结构部分

数据结构:考点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(指向队尾元素),则该循环队列中共有_____个元素。
全国计算机等级考试二级C语言上机题库(全)

int i; for(i=1;i<strlen(ss);i+=2) {if(ss[i]>=’a’&&ss[i]<=’z’) ss[i]-=32; } } 第五套 1. 程序填空 给定程序中,函数 fun 的功能是:计算下式前 n 项的和作为函数值返 回。例如:当形参 n 的值为 10 的时,函数返回:9.6125588。 第一处 s=0; 第二处 for(i=1;i<=n;i++) 第三处 s=s+(2.0*i-1)*(2.0*i+1)/(t*t); 2. 程序修改 给定程序 MODI1.C 中函数 fun 的功能是:统计 substr 所指字符串在 str 所指字符串中出现次数。 /**found**/ for(i=0;str[i];i++) /**found**/ if(substr[k+1]==’\0’) 3. 程序设计 请编写一个函数 fun,它的功能是:根据以下公
for(i=1;i<N;i++) if(max<a[i].s)max=a[i].s; for(i=0;i<N;i++) if(max==a[i].s)b[n++]=a[i]; return n; } 第九套 1. 程序填空 给定程序中,函数 fun 的功能是:计算形参 x 所指数组中 N 个数的平 均值,(规定所有数均为正数),将所指数组中小于平均值的数据移至 数据的前部,大于等于平均数的移至 x 所指数组的后部,平均值作为 函数值返回,在主函数中输出平均值和移动后的数据。 第一处 for(i=0;i<N;i++) av+=x[i]/N 第二处 y[j]=x[i]; x[i]=-1;j++;} 第三处 i++; 2. 程序修改 给定程序 MODI1.C 中函数 fun 的功能是:统计字符串各元音字母 (即:A、E、I、O、U)的个数。注意字母不分大小写。 /**found**/ num[k]=0;
(word完整版)计算机二级C语言上机考试——结构体与链表

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,其功能是:按分数降序排列学生的记录,高分在前,低分在后。
全国计算机等级考试2级C语言上机考试例题讲解PPT课件

三、上机编程题考点总结
二级C语言上机编程题在二级上机考试中属于较难题型,因 此很多同学都害怕通过不了。综合往年的考试,结合考试大纲, 每年考试的编程题都有一定的规律和方法,只要同学们认真、 熟练掌握做题的方法和技巧,通过考试是没有问题的。
下面介绍常考题型
10
类型一:数学问题,公式类型
[例1]:求小于n能同时被3和7同时整除的所有自然 数之和的平方根。
2级C语言上机考试例题讲解
1
2级考试的上机题型有:
1。填空题(30分,2~3个) 2。改错题(30分,2~3个) 3。程序编写题(40分,一定记得调试运行,否则没分!)
1、2 题是按照每个考点的答案给分的,也就是说只有和标准 答案一致的才是正确的 。虽然和标准答案不同也有可能运行 正确 ,但是也不能得分 。不过不用担心这个 ,因为题目简单 相应的正确答案的种类也少, 所以运行正确就OK ;3题要求 最高、 也最灵活 ,只要能写出符合题目要求功能的代码就可 以得40分。
须把整数1改为1.0;若变量或表达式是整型时,则只能进 行强制类型转换。
5、 字符串类问题 若错误行中有字符串结束符,则特别要注意结束符
有没有写错。注意要区分字符‘o’和数字’0’。
6、 指针类问题 若错误行中有指针变量,并且该变量名之前没有指
针运算符,则一般都是加上指针运算符;
8
7、 函数首部类问题
float fun(int n) {
{ int i,sum=1; double s=1.0; for(i=2;i<=n;i++) {sum=sum+i; s=s+1.0/sum ;} return s;
} }
12
通过上面问题的探讨,大家自己来解决以下两个问题:
计算机二级C语言第13章 结构体和链表

以下有关结构体类型描述正确的是()。 A.结构体类型的大小为其最后一个成员中所占内存空间的大小 B.结构体类型变量占据的内存空间是固定的,与成员无关 C.结构体类型的大小为其成员中占内存空间最大者所占空间的大小 D.结构体类型的大小为其各成员所占内存的总和
正确答案:D 【解析】结构体类型的大小为其所有成员所占内存空间之和,选项A、B、C错误,本题答案为D。
目录页
CONTENTS PAGE
计算机二级C语言第13 章 结构体和链表
说明新类型名的语句一般形式为: typedef 类型名 标识符;
例如: typedef int INTEGER ; 则:INTEGER m, n; 等价于 int m,n; 又如: typedef char *CHARP; CHARP p; 等价于: char *p;
(1)紧跟在结构体类型说明之后进行定义。 (2)在说明一个无名结构体类型的同时,直接进行定义。 (3)先说明结构体类型,再单独进行变量定义。
struct student{ char name[10]; int age; char sex; float score;
};
(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。
若有定义 typedef int *T; T a[20];
则以下与上述定义中a类型完全相同的是 A.int *a[20]; B.int (*a)[20]; C.int a[20]; D.int **a[20];
正确答案:A 【解析】“typedef 类型名 新类型名”表示为一个已有定义的类 型标识符重新定义一个类型名,题中选项A代表的意思是数组指针, 即指向数组的指针,B选项是指针数组,即数组存放的元素是整型 指针,首先为整型指针类型命名为T,再通过T定义了一个整形指 针数组*a[20],等价于int *a[20],答案为A选项。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 位的数作为函数值返回。