1、计算机二级-机试一百套-试题库上机题库1 建立班级通讯录,通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为 myfile5.dat 的二进制文件中。int fun(STYPE *std)FILE *fp;int i;if(fp=fopen(“myfile5.dat“,“wb“)=NULL)return(0);printf(“nOutput data to file !n“);for(i=0;i10)s=s/100;*t=s%10*s1+*t;s1=s1*10;将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是
2、:将 a 数的十位和个位数依次放在 c 数的个位和百位上,b 数的十位和个位数依次放在 c 数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1524void fun(int a,int b,long *c)*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);3 将自然数 110 以及它们的平方根写到名为 myfile3.txt 的文本文件中,然后再顺序读出显示在屏幕上。int fun(char *fname )FILE *fp;int i,n;float x;if(fp=fopen(fname,“w“)=NULL) return 0;for(i
3、=1;iai) p=i; if(p!=j)将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的个位和百位上,b 数的十位和个位数依次放在 c 数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2514。void fun(int a,int b,long *c)*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);4 将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回 1,失败时返回 0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量 sfname 中,
4、目标文件名放在变量 tfname 中。int fun(char *source,char *target)FILE *fs,*ft; char ch;if(fs=fopen(source, “r“)=NULL)return 0;if(ft=fopen(target, “w“)=NULL)return 0;printf(“nThe data in file :n“);ch=fgetc(fs);while(!feof(fs)putchar(ch);fputc(ch,ft);ch=fgetc(fs);fclose(fs); fclose(ft);printf(“nn“);return 1;将长整型数
5、 s 中每一位上为偶数的数依次取出,构成一个新数放在t 中。高位仍在高位,低位仍在低位。当 s 中的数为 87653142 时,t 中的数为 8642。void fun(long s,long *t)int d;long sl=1;*t=0;while(s0)d=s%10;if(d %2=0)*t=d*s1+*t;s1*=10;s/=10;将两个两位数的正整数 a,b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,b 数的十位和个位数依次放在 c 数的百位和个位上。例如,当 a=45 时,b=12,调用该函数后,c=5142。void fu
6、n(int a ,int b,long *c)*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);5 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数的功能是:把形参 x 的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。void fun( SLIST *h, int x)SLIST *p, *q, *s;s=(SLIST *)malloc(sizeof(SLIST);s-data=x;q=h;p=h-next;while(p!=NULL p=p-next;s-next=p;q-next=s;
7、计算正整数 num 的各位上的数字之积。例如,若输入 252,则输出应该是 20。long fun(long num)long k=1;dok*=num%10;num/=10;while(num);return (k);计算 n 门课程的平均分,计算结果作为函数值返回。例如:若有 5门课程的成绩是:90.5,72,80,61.5,55 则函数的值为 71.8float fun(float *a,int n)int i;float ave=0.0;for(i=0;inext;s=p;while(t-next!=NULL)s=t;t=t-next;printf(“%d “,t-data);s-ne
8、xt=NULL;free(t);将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为 abcd,则应输出 dcba。fun(char *a)if(*a)fun(a+1);printf(“%c”,*a);比较两个字符串的长度,(不得调用字符串长度的函数) ,函数返回较长的字符串。若两个字符串长度相等,则返回第 1 个字符串。例如,输入 beijing shanghai(为回车键) ,函数将返回 shanghai。char *fun(char *s, char *t)int i;char *p=s,*q=t;int n=0,m=0;while(*p)n+;p+;while(*q)m
9、+;q+;if(n=m)p=s;elsep=t;return p;或者 int i,j;for(i=0;s=i!=0;i+);For(j=0;tj!=0;j+);If(i=j) return t;else return s; 7 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。删除链表中数据域值相同的结点,使之只保留一个。void fun( SLIST *h)SLIST *p,*q;p=h-next;if(p!=NULL)q=p-next;while(q!=NULL)if(p-data=q-data)p-next=q-next;free(q);q=p-next;e
10、lse p=q;q=q-next;用选择法对数组中的 n 个元素按从小到大的顺序进行排序。void fun(int a,int n)int i,j,t,p;for(j=0;jnext;while(p!=0 或者 NULL)n+;if(p-data=ch)return n;else p=p-next;return 0;main()SLIST *head;int k;char ch;char aN=;head=creatlist(a);outlist(head);printf(“Enter a letter:“);scanf(“%c“,k=fun(head,ch);if(k=0) printf(“
11、nNot found!n“);else printf(“The sequence number is : %dn“,k);删除 p 所指字符串中的所有空白字符(包括 Tab 字符、回车符及换行符)。输入字符串时用#结束输入。fun(char *p)int i,t;char c80;for(i=0,t=0;pi;i+)if(!isspace(*(p+i)ct+=pi;ct=0;strcpy(p,c);将 ss 所指字符串中所有下标为奇数位置上的字母转化为大写(若该位置上不是字母,则不转换)。若输入 abc4EFg,则应输出aBc4Efg。void fun ( char *ss)int i;for
12、(i=1;i=awhile(p)(*n)+;p=p-next;main()SLIST *head;int aN=,num;head=creatlist(a); outlist(head);fun(head,求出 s 所指字符串中最后一次出现的 t 所指字符串的地址,通过函数值返回,若未找到,则函数值为 NULL。如,当字符串中的内容为abcdabfabcdx,t 中的内容为 ab 时,输出应是 abcdx。当字符串中的内容为 abcdabfabcdx,t 中的内容为 abd 时,则程序输出未找到的信息:Not found!char *fun(char *s,char *t)char *p,*r
13、,*a;a=NULL;while(*s)p=s;r=t;while(*r)if(*r=*p)r+;p+;else break;if(*r=0)a=s;s+;return a;将 s 所指字符串中除了下标为偶数、同时 ASCII 值也为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。若 s 所指字符串中的内容为 ABCDEFG123456,最后 t 所指的数组中的内容应是 246。void fun(char *s, char t)int i,j=0;for(i=0;inext;while(p)s+=p-data;p=p-next;return s;main()S
14、LIST *head;int aN=;head=creatlist(a);outlist(head);printf(“nsum=%dn“, fun(head);将 s 所指字符串中出现的 t1 所指字符串相同的字符串全部替换成t2 所指字符串,所形成的新的字符串放在 w 所指的数组中。在此处,要求 t1 和 t2 所指字符串的长度相同。例如:当 s 所指字符串中所指的内容为 abcdabfab,t1 所指字符串中的内容为 ab,t2 所指字符串中的内容为 99 时,结果在 w 所指的数组中的内容应为99cd99f99。void fun (char *s,char *t1, char *t2,
15、char *w)int i;char *p,*r,*a;strcpy(w,s);while(*w)p=w;r=t1;while(*r)if(*r=*p)r+;p+;else break;if(*r= =0)a=w;r=t2;while (*r)*a=*r;a+;r+;w+=strlen(t2);else w+;将 s 所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在 t 所指数组中。例如,当 s 所指字符串中的内容为ABCDEFGHIJK,则在 t 所指数组中的内容应是 BDFHJ。void fun(char *s,char t)int i,j=0;for(i=1;istrlen(
16、s);i+=2)tj+=si;tj=0;11人员的记录由编号和出生年、月、日组成,N 名人员的数据已在主函数中存入结构体数组 std 中,且编号唯一。函数 fun 的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。STU fun(STU *std,char *num)int i;STU a=“,9999,99,99;for(i=0;iN;i+)if(strcmp(stdi.num,num)=0)return (stdi);return a;从 s 所指字符串中,找出与 t 所指字符串相同的子串的个数作为函数值返回。例如当 s 所指字符串中
17、的内容为 abcdabfab,t 所指字符串的内容为 ab,则函数返回整数 3。int fun(char *s,char *t)int n;char *p, *r;n=0;while(*s)p=s;r=t;while (*r)if(*r=*p)r+; p+;else break;if(*r=0)n+;s+;return n;将 s 所指字符串中 ASC值为偶数的字符删除,串中剩余字符形成一个新串放在 t 所指的数组中。例如,若 s 所指字符串中的内容为ABCDEFG12345,最后 t 所指的数组中的内容应是 ACEG135。void fun(char *s, char t)int i=0;for(;*s!=0;s+)if(*s%2=1)ti+=*s;ti=