上机实验十一 函数、结构体综合应用
【实验十参考答案见后】
目的和要求:
(1)熟悉结构体的基本语法及基本应用; (2)继续熟悉函数调用; (3)熟悉省考、国考题型。
实验内容: 一、完善程序题
1.全国二级C程序填空题(即完善题):
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 【typedef的功能是:用新的名字替代原类型名,使用格式如下:
typedef 原类型名 新类型名;
例如:typedef float single;
single x; /*此句等价于 float x; */ 】
#include
int year, month, day ; }STU ;
/**********found**********/ //【注意:考试时不能删除“/**********found**********/”】 ___1___ fun(STU *std, char *num)
{ int i; STU a={\ for (i=0; i /**********found**********/ if( strcmp(___2___ ,num)==0 ) /**********found**********/ return (___3___); return a; } main() { STU std[N]={ {\ {\ {\ STU p; char n[10]=\ p=fun(std , n); if(p.num[0]==0) printf(\ else { printf(\ \ printf(\ %d-%d-%d\\n\ } } 2.下列程序完成的功能是:任意读入一个十进制整数,调用子函数将其转换成二至十六进制中任一指定进制的字符串形式。 例如:读入 -46 16 输出 -2E #include {void tran(int m, int r, int *p); int x, r0; /*r0为进制基数,只能为2~16之间的整数*/ int i, n; /*n为生成序列的余数个数*/ _________ char ys[50]; printf(\输入十进制整数以及进制基数(2~16):\\n\ scanf(\ printf(\的%d进制形式为:\ if(x<0){putchar('-'); x=-x;} if(r0>=2&&r0<=16) {tran(x, r0, ________); for(i=n-1; i>=0; i--) printf(\ printf(\ else {printf(\输入的值不符合题意!\\n\ exit(0); /*exit函数可以终止整个程序的运行*/ } } char ys[50]; /*全局变量*/ void tran(int m, int r, int *pn) {char sb[ ]=\ int i=0, g; do{g=m%r; ys[i]=sb[______]; m=m/r; i++; }while(m!=0); _________=i; } 二、省考改错题 【程序功能】 统计一个字符串中包含的字母串个数并找出其中最长的字母串。所谓字母串是指一个连续的字母序列(不区分大小写),字母串之间用非字母字符分隔。 函数count的功能是统计p指向的字符串中包含的字母串个数,并将找出的最长字母串存放在pmax指向的数组中,函数返回字母串的个数。 【测试数据与运行结果】 测试数据: you are teacher234too. 屏幕输出: a= you are teacher234too. number is 4 max string is:teacher 【含有错误的源程序】 #include int count(char p[],char pmax[]) {int j=0,k,m=0; char temp[100]; while(*p) { while((!isalpha(*p))&&*p)p++; k=0; if(*p!='\\0')m++; while(isalpha(*p)) temp[k++]=*p++; temp[k]=\ if(k pmax=temp; } } return m; } main() {char a[100]=\ int i; i=count(a[],max[]); if(i==0) printf(\ else printf(\} 【要求】 (1)根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 (2)改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的声明或编译预处理命令(即#开头的),但不能增加其他语句,也不能删去整条语句。 三、编程题(省考真题) 【程序功能】 统计n个学生某门课程成绩的分布情况。 【编程要求】 1)定义存储学生成绩的数据结构如下: struct student {char num[10]; /*学号*/ int score; /*成绩*/ }; 2)编写函数void stat(struct student stud[ ],int count[ ],int n)。函数功能:对stud指向的数组中已存储的n个学生的成绩,统计各分数段的人数,将统计结果存放到count指向的数组中(count[0]存放90~100分的人数,count[1]存放80~89分的人数,count[2]存放70~79分的人数,count[3]存放60~69分的人数,count[4]存放60分以下的人数)。 3)编写函数main()。函数功能:声明struct student类型结构数组stud并用测试数据初始化,声明数组count用于存放各分数段的人数;用stud和count作实参调用函数stat统计各分数段人数;将统计结果输出到屏幕及数据文件myf2.out中。最后将考生本人的准考证号输出到myf2.out文件中。 【测试数据与运行结果】 测试数据:0201 95 0202 76 0203 54 0204 80 0205 66 0206 82 0207 93 0208 80 0209 71 0210 70 屏幕输出:2 3 3 1 1 【实验十参考答案】 一、完善程序题 1.以下程序使用牛顿迭代法求得方程2x#include 3 - 4x2+3x-6在1.5附近的根。
相关推荐: