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 v
2、oid 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; rf=
3、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; /*
4、将第一个字符暂赋给 ch* / for (i=O; i strl-1; i+) /*将字符依次左移 */ *(s+i) =* (s+i+l); * (s+strl-1) =ch; /*将第一个字符移到最后 */ 【试题解析】 本题考查的知识点如下: (1) 数组中元素的移动。 (2) 指针的使用。 我们可以使用一个循环实现数组中所有字符元素的左移。这里要注意的足第 1个字符要移至最后 1个字符处,所以首先要将第 1个字符保存。在移动时,要从左到右依次移动,否则,左侧的字符会在移动前被其右侧的字符覆盖。在这里使用了指针,初始时,指针指向数组的第 1个元素,随着地址的增加指针指向数组后面的元素。例如,若地址加 2,