您好,欢迎访问三七文档
1程序设计题2注意事项在编程题中,有一个与文件操作相关的函数NONO(),这是用于评分使用的,不要改动。做程序设计题时,在程序设计完成后运行程序,在考生文件夹中生成一个输出文件,评分程序是按照最终生成的输出文件给分的。3题型1.整数合并/10%10652.累加、累乘求和(公式)123.素数的判断84.一维数组元素的筛选945.一维数组最值求解96.一维数组或字符串的排序747.移动问题(字符串、数组元素)4048.二维数组周边元素(找出规律)269.二维数组转一维数组7310.二维数组转置3511.二维数组三角元素操作8712.数字字符串转整数(-48,-‘0’)2813.回文字符串7714.字符串长度比较1415.字符串的计数6916.删除字符串中指定字符53517.结构体数组求最值2218.结构体数组排序219.链表92.148.361.整数合并主要是算术运算符的应用。知道某两位整数n,个位n%10,十位n/10结合简单的数学运算符相关练习33:142534:425118:524165:514297:415264:152495:251472:24157第65.3套编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=5142。软件中in文件错误导致的没分思路:数字放在合适的位置8#includestdio.hvoidfun(inta,intb,long*c)//5142{*c=a%10*1000+b/10*100+a/10*10+b%10;}main(){inta,b;longc;printf(Inputa,b:);scanf(%d,%d,&a,&b);//45,12fun(a,b,&c);printf(Theresultis:%d\n,c);}92.累加、累乘求和找出方程式中的数学规律定义变量累加的变量赋初始值0(0.0),累乘的变量赋值1(1.0)运用for循环实现相关练习70(7),93(8),66(9),63(10)29(25),84(34),6(37),11(38)100(39),12(40),92(47)10第12套(40)请编写函数fun,它的功能是计算下列级数和,和值由函数值返回。S=1+x+x2/2!+x3/3!+…+xn/n!例如,当n=10,x=0.3时,函数值为1.349859。思路先求一项的表达式,然后累加11#includestdio.h#includemath.hdoublefun(doublex,intn){}voidmain(){printf(%f,fun(0.3,10));}12参考答案:#includestdio.h#includemath.hdoublefun(doublex,intn){doubles=1,t=1;inti;for(i=1;i=n;i++){t*=x/i;s=s+t;}returns;}13参考答案:doublefun(doublex,intn){inti;doubles=1.0,s1=1.0;for(i=1;i=n;i++){s1=s1*i;s=s+pow(x,i)/s1;}returns;}S=1+x+x2/2!+x3/3!+…+xn/n!143.素数的判断除了1和本身之外不能被其他任何数整除通过循环、判断语句实现相关练习:80(1),8(35),31(94),39(105)15第8套(35)请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入17,5,则应输出19、23、29、31、37。思路:先判断一个数是不是素数,再判断有个数,需要嵌套循环16#includestdio.hvoidfun(intm,intk,intxx[]){}voidmain(){intm,n,zz[1000];printf(\nPleaseentertwointegers:);scanf(%d%d,&m,&n);fun(m,n,zz);for(m=0;mn;m++)printf(%d,zz[m]);printf(\n);}17参考答案voidfun(intm,intk,intxx[]){inti,j,n;for(i=m+1,n=0;nk;i++){for(j=2;ji;j++)if(i%j==0)break;if(i==j)xx[n++]=i;}}18voidfun(intm,intk,intxx[]){inti,j=0;while(jk){m++;for(i=2;im;i++)if(m%i==0)break;if(i=m)xx[j++]=m;}}194.一维数组元素的筛选在一维数组中,按指定的条件进行筛选,把满足条件的元素筛选出来放在另一数组中通过循环语句对数组进行遍历,用if语句把符合条件的元素赋值给另一数组相关练习75(2),68(4),3(6),49(29)98(30),17(31),13(33),84(34)94(68)20第94套(68)编写函数fun,其功能是:将1到m之间(含m)能被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。例如若传给m的值为50,则程序输出:711142122283335424449思路循环,在循环中判断是否满足条件,记录个数,返回21#includestdio.h#defineM100voidfun(intm,int*a,int*n){}main(){intaa[M],n,k;fun(50,aa,&n);for(k=0;kn;k++)if((k+1)%20==0)printf(\n);elseprintf(%4d,aa[k]);printf(\n);}22voidfun(intm,int*a,int*n){inti,j=0;for(i=1;i=m;i++)if((i%7==0)||(i%11==0))a[j++]=i;*n=j;}235.一维数组最值求解找出数组中最大值或最小值及其所在的下标。相关练习:9(28),24(36)24第9套(28)请编写函数fun,其功能是:找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。思路:先把第0个作为最大值,遍历数组,如果比第0个大,则保存在最大值里,同时记录下标25#includestdio.h#includestdlib.hvoidfun(inta[],intn,int*max,int*d){}voidmain(){inti,x[20],max,index,n=10;for(i=0;in;i++){x[i]=rand()%50;printf(%4d,x[i]);/*输出一个随机数组*/}printf(\n);fun(x,n,&max,&index);printf(Max=%5d,Index=%4d\n,max,index);}26参考答案voidfun(inta[],intn,int*max,int*d){inti;*max=a[0];*d=0;for(i=1;in;i++)if(a[i]*max){*max=a[i];*d=i;}}276.一维数组或字符串的排序冒泡排序选择排序插入排序例如:74(61)28第74(61)套请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为“CEAedca”,排序后输出为“CedcEAa”。思路嵌套循环,内循环比较ASCII码大小,找最大的,退出内循环,交换。29#includestdio.h#includectype.h#includestring.hvoidfun(char*s,intnum){}main(){chars[10];printf(输入7个字符的字符串:);gets(s);fun(s,7);printf(\n%s,s);}30参考答案:用指针表示voidfun(char*s,intnum){charch;inti,j;for(i=1;inum-1;i++)for(j=i+1;jnum-1;j++)if(*(s+i)*(s+j)){ch=*(s+j);*(s+j)=*(s+i);*(s+i)=ch;}}CEAedca31参考答案:用数组表示voidfun(char*s,intnum){inti,j;chart;for(i=1;inum-1;i++)for(j=i+1;jnum-1;j++)if(s[i]s[j]){t=s[i];s[i]=s[j];s[j]=t;}}327.移动问题数组中的元素、字符或者字符串的平移问题字符串的平移:首先将要移动的字符取出,保存到某个变量中然后调整字符串的其他字符,空出要存放的位置最后将变量中的字符存入字符串相关练习:36(45),40(46)33第40(46)套请编写函数fun,其功能是:移动字符串中的内容,移动的规则是把第1~m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为“ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是“DEFGHIJKABC”。思路:内循环移动一个字符,外循环确定循环次数,使用嵌套循环34#includestdio.h#includestring.h#defineN80voidfun(char*w,intm){}voidmain(){chara[N]=ABCDEFGHIJK;intm;printf(Theoriginastring:\n);puts(a);printf(\n\nEnterm:);scanf(%d,&m);fun(a,m);printf(\nThestringaftermoving:\n);puts(a);printf(\n\n);}35voidfun(char*w,intm){inti,j;charch;for(i=0;im;i++){ch=w[0];for(j=1;w[j]!='\0';j++)w[j-1]=w[j];w[j-1]=ch;}}36voidfun1(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/{inti;chart;t=w[0];for(i=0;i(int)strlen(w)-1;i++)w[i]=w[i+1];w[strlen(w)-1]=t;}voidfun(char*w,intm)/*可调用fun1函数左移字符*/{inti;for(i=0;im;i++)fun1(w);}//主函数没变378.二维数组周边元素第一行、最后一行、第一列、最后一列特点:其下标一定有一个0或N-1通过for循环和if语句实现对这些元素的相关操作相关练习:26(97)38第26套(97)请编写函数fun,该函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为:13579
本文标题:程序设计题
链接地址:https://www.777doc.com/doc-3992356 .html