(ints char ss, 5=5:其t while(*ss) s+, fou (*ss)+ while(*) + 作**市中车本*中中f0und中中*车车年+/ ()+ ifti>sl)return t: else retums, main( {char int printf"nEnter astring:").gets(a). printf"nThe longer is Anin\%s\"n".fun(ab) 解愿思路: 第一处:试题要求返回字符串的首地址,所以应改为:ch*in(car*s,chr) 第二处:取字符串指针55的下一个位置,所以应政为:5+, 第三处:取字符申指针的下一个位置,所以应改为:+:。 请编写函数u,函数的功能是:移动字符中中的内容,移动的规则如下:把第1到第m个字符,平移到字符中的最 后.把第+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为:ABCDEFGHIK,m的值为3,则移动后,字符串中的内容应该是:DEFGHUKABC, 注意:部分源程序在文件PROG1.C中。 请勿改动主函数man和其它函数中的任何内容,仅在函数m的花括号中填入你编写的若干语句. 给定源程序: #include<stdio.h #include <stringh void funl(char*W):本函数的功能是将字符串中字符循环左移一个位置 -21
- 21 - { int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss) { sl++; /**********found**********/ (*ss)++; } while(*tt) { tl++; /**********found**********/ (*tt)++; } if(tl>sl) return t; else return s; } main() { char a[80],b[80],*p,*q; int i; printf("\nEnter a string : "); gets(a); printf("\nEnter a string again : "); gets(b); printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); } 解题思路: 第一处: 试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t) 第二处: 取字符串指针 ss 的下一个位置,所以应改为:ss++;。 第三处:取字符串指针 tt 的下一个位置,所以应改为:tt++;。 *************************************************** 请编写函数 fun,函数的功能是: 移动字符串中的内容,移动的规则如下: 把第 1 到第 m 个字符, 平移到字符串的最 后, 把第 m+1 到最后的字符移到字符串的前部。 例如, 字符串中原有的内容为: ABCDEFGHIJK, m的值为 3, 则移动后, 字符串中的内容应该是: DEFGHIJKABC。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <string.h> #define N 80 void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ {
t=w[0]: for(i-0.i<strlen(w)-lji++) w[i]-w[i+1]. w(strlen(w)-1]=t void fun(char*w,intm)作可调用funl函数左移字符/ main() char a[N]="ABCDEFGHUK" int m. printf"The original stringn)puts(a) fun(a.m): printf"nThe string after moving:\n").puts(a), NONOO: 解题思路: 本思是考察字符串的操作。 1,由于函数fn1是将字符申中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串 2.利用循环or语句来操作多少个字符m)需要循环左移。 参考答案: void funl(chr*w)本函数的功能是将字符冲中字符循环左移一个位置/ int i char t t=w[0J: for(i=0:i<strlen(w)1:++) wli-w(i+1J: w[strlen(w)-1=t void fun(char*w,itm)可调用funl函数左移字符 for(i=0;i<m;++)funl(w) 2
- 22 - int i; char t; t=w[0]; for(i=0;i<strlen(w)-1;i++) w[i]=w[i+1]; w[strlen(w)-1]=t; } void fun(char *w, int m) /* 可调用 fun1 函数左移字符 */ { } main() { char a[N]= "ABCDEFGHIJK"; int m; printf("The original string:\n");puts(a); printf("\n\nEnter m: ");scanf("%d",&m); fun(a,m); printf("\nThe string after moving:\n");puts(a); printf("\n\n"); NONO(); } 解题思路: 本题是考察字符串的操作。 1. 由于函数 fun1 是将字符串中字符循环左移一个位置,并通过实参 w 返回循环左移一个位置的字符串。 2. 利用循环 for 语句来操作多少个字符(m)需要循环左移。 参考答案: void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ { int i; char t; t=w[0]; for(i=0;i<strlen(w)-1;i++) w[i]=w[i+1]; w[strlen(w)-1]=t; } void fun(char *w, int m) /* 可调用 fun1 函数左移字符 */ { int i; for(i = 0 ; i < m ; i++) fun1(w); }
※※※※※※※※※※※※※※※※※※※※※※※※※ 第07套: 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息,函数u的功能是输出这位学生的信息 请在程序的下划线处填入正确的内容并把下划线别除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中. 不得增行或别行,也不得更政程序的结构: 给定源程序: #include<stdio.h> int num: char name char sex struct int year.month.day :birthday float score ISTU: 作+found voidshow(STU_1_) inti printf"%%tnum,name,sex tt.birthdav.vear.tt.birthdav.month.tt.birthday.day ) for(i=0,i<3+) print%5.1f,_2_, main() (STUstd={1,"Zhanghua'M,1961,0,876.5,78.0,82.0} printf"nA student data:n"): 4 found* show(3). 解题思路: 本恩是利用结构体变量存储了一名学生的信总。 第一处:t变量在函数体fun已经使用,所以应填:, 第二处:利用循环分别输出学生的成绩数据,所以应填:s0r。 第三处:函数的调用,所以应填:sd。 .23
- 23 - ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 07 套: 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数 fun 的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> typedef struct { int num; char name[9]; char sex; struct { int year,month,day ;} birthday; float score[3]; }STU; /**********found**********/ void show(STU _1_) { int i; printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i<3; i++) /**********found**********/ printf("%5.1f", _2_); printf("\n"); } main( ) { STU std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 }; printf("\nA student data:\n"); /**********found**********/ show(_3_); } 解题思路: 本题是利用结构体变量存储了一名学生的信息。 第一处:tt 变量在函数体 fun 已经使用,所以应填:tt。 第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]。 第三处:函数的调用,所以应填:std。 ***************************************************
给定程序MOD1.C中函数f的功能是:求出数组中最大数和次最大数,并把最大数和0中的数对调、次最 大数和1中的数对调。 请敏正程序中的错误,使它能得出正确的结果。 注意:不要改动mm函数,不得增行或别行,也不得更改程序的结构! 给定源程序: #define N 20 int fun(int·a.intn) inti.m.tk: fo(=0:i<2:it+)f 作4 found m=0 for(k=i+l:k<n:k++) 作*4*found*s*书a与 if(alk]>alml)k=m: =ad可,a=amam=t } main() {int x,b[N){11.5,12,0,36,9,710,8,n=10,5 for(=0,i<n;it+)printf"d"b), printf")n") fn(b,n方 printf"n") 解题思路: 第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:=式。 第二处:通过内循环来找出最大的一个数的位置k,所以应改为:面o[k]-a[m])m-k. 车中水率中事华水华神车非事水中车车中卓率中华中水家率中串中家家中车中水家中车中中率率非串率水家率华 请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是na≥2位的整数, 函数求出w的低n-位的数作为函数值返回。 例如:w值为5923,则函数返回923:w值为923则函数返回23. 注意:部分源程序存在文件PROG1.C中。 请勿改动主函数ma和其它函数中的任何内容,仅在函数n的花括号中填入你编写的若干语句。 给定源程序: -24
- 24 - 给定程序 MODI1.C 中函数 fun 的功能是:求出数组中最大数和次最大数,并把最大数和 a[0]中的数对调、次最 大数和 a[1]中的数对调。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #define N 20 int fun ( int * a, int n ) { int i, m, t, k ; for(i=0;i<2;i++) { /**********found**********/ m=0; for(k=i+1;k<n;k++) /**********found**********/ if(a[k]>a[m]) k=m; t=a[i];a[i]=a[m];a[m]=t; } } main( ) { int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i; for ( i=0; i<n; i++ ) printf("%d ", b[i]); printf("\n"); fun ( b, n ); for ( i=0; i<n; i++ ) printf("%d ", b[i]); printf("\n"); } 解题思路: 第一处:外循环每循环一次,把当前位置 i 赋值给 m,所以应改为:m=i;。 第二处:通过内循环来找出最大的一个数的位置 k,所以应改为:if(a[k]>a[m]) m=k;。 *************************************************** 请编写一个函数 unsigned fun ( unsigned w ),w 是一个大于 10 的无符号整数,若 w 是 n (n ≥ 2)位的整数, 函数求出 w 的低 n-1 位的数作为函数值返回。 例如:w 值为 5923,则函数返回 923; w 值为 923 则函数返回 23。 注意: 部分源程序存在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序:
include<stdio.h> unsigned fun(unsigned w) main() {unsigned x. printf ("Enter a unsigned integer number:)scanf ("u&) printf "The original data is:%un",x ) if(x<1)printf ("Dataerror!). else printf ("The result %u'n",fun (x )) NONO(). 解题思路: 本题是考察考生怎样扶取一个符合要求的无符号整数。本题是应用条件语句首先判断给出的数是几位数,再 模相应的值,最后得出的余数就是结果。 参考答案: unsigned fun (unsignd w) iw>10000)w%=10000 else ifw>1000)w6=1000 csei政w>100)w%=100 return w; ※※※激※※※※※※※※※※※※激※※※※※※※测 第08套: 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数的 功能是将该学生的各科成绩都乘以一个系数. 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更政程序的结构: 给定源程序: #include<stdio.h> typedef struct {int num; char name[9]: .25
- 25 - #include <stdio.h> unsigned fun ( unsigned w ) { } main( ) { unsigned x; printf ( "Enter a unsigned integer number : " ); scanf ( "%u", &x ); printf ( "The original data is : %u\n", x ); if ( x < 10 ) printf ("Data error !"); else printf ( "The result : %u\n", fun ( x ) ); NONO( ); } 解题思路: 本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用 if 条件语句首先判断给出的数是几位数,再 模相应的值,最后得出的余数就是结果。 参考答案: unsigned fun ( unsigned w ) { if(w>10000) w %= 10000 ; else if(w>1000) w %= 1000 ; else if(w>100) w %= 100 ; else if(w>10) w %=10 ; return w ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 08 套: 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和 3 门课的成绩。函数 fun 的 功能是将该学生的各科成绩都乘以一个系数 a。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> typedef struct { int num; char name[9];