1、国家三级(数据库技术)机试模拟试卷 63及答案与解析 一、程序设计题 1 下列程序的功能是;把 s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数 chg(char*s)实现程序要求,最后调用函数 readwriteDat()把结果输出到 out63.dat文件中。 例如; s字符串中原有内容为 Mn, 123xyZ,则调用该函数后,结果为 n,123xyZM。 注意:部分源程序已给出。 请勿改动主函数 main()和输入输出函数 readwriteDAT()的内容。 试题程序: #include conio.h #include stdio.h #define N 81
2、void readwriteDAT(); void chg(char *s) main ( ) char a N; clrscr ( ); printf(“Enter a string :“); gets (a); printf(“The original string is :“); puts (a); chg (a); printf(“The string after modified :“); puts (a); readwriteDAT ( ) void readwriteDAT () int i; char a N; unsigned char *p; FILE *rf,*wf; r
3、f=fopen(“in63.dat“,“r“); wf=fopen(“out63.dat“,“w“); for(i=0;i 10;i+) fgets(a,80,rf); p=strchr(a,n); if(p) *p=0; chg(a); fprintf(wf,“%sn“,a); fclose(rf); fclose(wf); 国家三级(数据库技术)机试模拟试卷 63答案与解析 一、程序设计题 1 【正确答案】 void chg(char*s) int i, strl; char ch; strl=strlen(s); /*求字符串的长度 */ ch=*s; /*将第一个字符暂赋给 ch*/ for(i=0; i strt-1/i+) /*将字符依次左移 */ *(s+i)=*(S+i+1); *(s+strl-1)=ch; /*将第一个字符移到最后 */ 【试题解析】 本题考查的知识点如下: (1)数组中元素的移动。 (2)指针的使用。 我们可以使用一个循环实现数组中所有字符元素的左移。这里要注意的是第 1个字符要移至最后 1个字符处,所以首先要将第 1个字符保存。在移动时,要从左到右依次移动,否则,左侧的字符会在移动前被其右侧的字符覆盖。在这里使用了指针,初始时,指针指向数组的第 1个元素,随着地址的增加指针指向数组后面的元素。例如,若地址加 2,则指向数组的第 3个元素。