第三部分 江苏省二级统考近五年试题汇编
int convert(char s1[],char s2[]) {int i=0,j,s;
char tab[8][4]={\ for(i=0,j=0;s1[i]!='\\0';i++,j=j+3) strcpy(&s2[j],tab[s1[i]-'0']); for(i=0,s=0;i {char ss1[]=\ y=convert(ss1,ss2); printf(\ } 11.以下程序运行时输出 。 long func(long x) {if (x<100) return x; else return func(x/100)*10+x; } main() {printf(\ ? 完善程序题 12.函数loop(s,m,n,str)的功能是:对字符串str 中,从下标为s 的字符开始的所有间隔为m的字符进行循环左移,即:str[s]←str[s+m],str[s+m] ←str[s+2m],?,str[s+(k-1)m] ←str[s+km],str[s+km] ←str[s](k为整数,下标s+km不越界),共做n次。 例如:调用loop(1,2,1,str)前后str中数据的变化情况如下: str 中初始数据:A B C D E F G H I J K 移位后str数据:A D C F E H G J I B K #include void loop(int s,int m,int n,char *str); main() {char buf[81]; strcpy(buf,\loop(1,2,2,buf);puts(buf); } void loop(int s,int m,int n,char *str) {char c;int k;int i,len; len=strlen(str); for(i=0;i while(k+m<(2) ) { str[k]=str[k+m]; 第三部分 江苏省二级统考近五年试题汇编 k= (3) ; } (4) =c; } } 13.以下程序验证一个猜想:任意一个十进制正整数与其反序数相加后得到一个新的正整数,重复该步骤最终可得到一个回文数(所谓反序数,是指按原数从右向左读所得到的数:例如,123的反序数是321。所谓回文数,是指一个数从左向右读的值与从右向左读的值相等。例如,12321、234432都是回文数)。 #include {long n,c=0; printf(\ scanf(\ while((1) ) {printf(\ scanf(\ } n=n+invert(n);c++; while( (2) ) {n=n+invert(n);c++;} printf(\ } long invert(long x) /*生成并返回x的反序数*/ {long s; for(s=0;x>0; (3) ) s=s*10+x; return s; } 14.已知某链表中结点的数据结构定义如下: struct node {int x; struct node *next;}; 函数find_del功能是:在参数head指向的链表中查找并删除x值最大的结点,如有多个相同的x值最大的结点,删除第一个结点,保存该结点的地址到pm指向的指针变量中,函数返回链表首结点的指针。 struct node *find_del(struct node *head,struct node **pm) {stuct node *p1,*p2,*pmax,*pre; if(head= =NULL) return NULL; pmax=(1) ; p2=p1=pmax; while(p1) {if(p1->x> (2) ) {pre=p2;pmax=p1;} 第三部分 江苏省二级统考近五年试题汇编 p2=p1;p1=p1->next; } if(pmax= =head)head=pmax->next; else (3) =pmax->next; (4) =pmax; return head; } 15.以下程序对一组点坐标(x,y)按升序进行排序。要求:先按x的值排序,若x的值相同,则按y的值排序。排序算法为选择法。 #include void point_sort( (1) *x, int n) {POINT t; int i,j,k; for(i=0;i for(j=(3) ;j if( (4) &&x[k].y>x[j].y) k=j; if(k!=i) t=x[i],x[i]=x[k],x[k]=t; } } main() {POINT a[N]={0}; int i=0; while(i {scanf(\.x,&a[i].y);i++;} point_sort(a,N); for(i=0;i printf(\.x,a[i].y); } 2003年(春)上机试卷 一、改错题 【题目】 某数列的前两项是3和2,其后续项根据前面最后两项的乘积,按下列规则生成: (1)若乘积为一位数,则该乘积即为数列的后续项; (2)若乘积为两位数,则该乘积的十位数字和个位数字依次作为数列的两个后续项。例如:该数列的前10项为:3、2、6、1、2、2、4、8、3、2。 函数sum按要求生成数列的前n(n<50)项,存入首指针为pa的数组中,计算并返回前 第三部分 江苏省二级统考近五年试题汇编 n项的和。 #include void sum(int n,int *pa) { int count, total,temp; *pa=3;*++pa=2; total=5; count=2; while(count++ { temp=*(pa-1)**pa; if(temp<10) { total+=temp; *(++pa)=temp; } else {*++pa=temp/10; total+=*pa; if(count return total; } main() { int tol,n,i,num[n]; do {printf(\ scanf(\ }while(n<=2||n>=50); tol=sum(N,num); for(i=0;i printf((i+1)%5?\ printf(\ printf(\} 【要求】 1.将上述源程序录入到文件 MYF1.C中,根据题目要求以及程序中语句间的逻辑关系对程序中的错误进行修改。 2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理语句,但不能增加其他语句,也不能删去整条语句。 3.改正后的源程序MYF1.C必须放在考试盘的根目录下,供阅卷用。 二、编程题 【题目】 一个有符号整型数以字符串形式存放在字符数组a中,字符串中只会出现数字字符、“-”、“+”和空格。约定“-”和“+”只能出现在a[0]的位置。若a[0]位置的字符是“-”,则表示该整型数为负数,否则为正数。除a[0]外,其他位置还可能出现空格。试按下列要求编写程序: 第三部分 江苏省二级统考近五年试题汇编 1.编写函数int chang(char a[], int b[],int *n)按下列规则转换字符数组a中的字符串: (1) 整型变量sign存放数符,当整型数为正数时sign为0,为负数时 sign为1,函 数返回sign值; (2) 整型数组b依次存放字符串a中出现的所有数字字符转换为对应的整型数后的 值(不包括数符); (3) n指向的变量保存放入b数组的整型数的个数; (4) 字符串a中的空格忽略不计 如:字符串“ 20 3 ”转换后的结果是:sign=0,b=(2,0,3) 字符串“-3 3740”转换后的结果是:sign=1,b=(3,3,7,4,0) 2. 函数中输入二个字符串:“-2 35 1”,“+38 2 46”,分别调用函数chang做字符串转换,并将转换结果以例子给出的形式写到文件myt2.out中。 【要求】 1.将源程序文件取名为myf2.c 输出结果文件取名myf2.out。 2.数据文件的打开、使用、关闭等操作均用c标准库中的缓冲文件操作函数实现。 3.源程序文件和运行结果文件均须放在考试盘的根目录下,供阅卷用。 4.不要将myf2.obj和myf2.exe保存到考试盘上。 2004年秋季笔试题及上机题 一、选择题 21.以下叙述正确的是_____ A. 一个用C语言编写的程序在运行时总是从main函数开始逐条执行语句 B main函数是系统库函数 C main函数中每行只能出现一条语句 D main函数必须出现在所有其他函数之前 22.以下全局变量声明中,正确的是_____ A. auto int i=1; B float a=1,b=0.5,c=a+b; C char for = 1; D static char ch; 23.若已有声明“double a[2][3]={1,2,3,4,5,6};”,则下列表达式中不能正确引用a[1][1]值的是_____ A. *(a[0]+4) B. *(a[1]+1) C. *(*(a+3)+1) D. *(*a+4) 24.已知有如下的结构类型定义和变量声明: struct student { int num; char name[10]; } stu = {1,”Mary”},*p=&stu; 则下列语句错误的是_____ A. printf(“%d”,stu.num); B. printf(“%d”,(&stu) -> num);