三、程序设计题
1.请编写函数fun,其功能是:找出2*M整型二维数组中最大元素的值,并将此值返回调用函数。 #defineM4
#include
inti,j,max=a[0][0]; /*对二维数组进行遍历*/ for(i=0;i<2;i++) for(j=0;j
此类求最大值或最小值问题,可以采用逐个比较的方式,对数组中所有元素遍历一遍,从中找出数组最大值或最小值。首先定义变量max用来存放数组的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素之大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。
注意:该类题目考查较多,需要掌握逐个比较的方法。对于m*n二维数组,如果采取逐个查找方法,代码实现如下: for(i=0;i /*将最大值保存在max中*/ max=a[i][j]; returnmax; } Voidmain() { intarr[2][M]={5,8,3,45,76,-4,12,82}; printf(“max=%d\\n”,fun(arr)); 分析:本题考查:求数组的最大值,需运用循环语句。因为数组是二维数组,所以应使用二层加for循环嵌套。使用for循 2.请编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代。) ??????×????×??×????×??×??×????×??×…×?? =??+++++?+ ??????×????×??×????×??×??×????×??×… ????+?? 程序运行后,若输入精度0.0005,则程序应输出为3.14... #include #include doubles=1.0,s1=1.0; intn=1; while(s1>=eps)/*当某项大于精度要求时,继续求下一项*/ {s1=s1*n/(2*n+1);/*求多项式的每一项*/ s=s+s1;/*求和*/ n++; } return2*s; } doublex; printf(“Inputeps:”); scanf(“&1f”,&x); printf(“\\neps=,PI=\\n”,x,fun(x)); } 分析:本题考查迭代法求给定多项式的值。迭代算法是让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令或这些步骤时,都从变量的原值推出它新值。需要注意变量的数据类型以及赋初值操作。 首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s表示求和后的结果。需注意s1和s的初值都为1.0,因为循环变量从第二项开始累加。 3.请编写函数fun,其功能是:求出1至1000之间能被7或11整除,但不能同时被7和11整除的所有整 1 数,并将其放在a所指的数组中,通过n返回这些数的个数。 #include inti,j=0; for(i=1;i<=1000;i++)//求1到1000之内能被7或11整除但不能同时被7和11整除的所有整数,并放入数组a中 if((i%7==0||i==0)&&iw!=0) a[j++]=i; *n=j;//传回满足条件的数的个数 } Voidmain() { intaa[1000],n,k; system(“CLS”); fun(aa,&n); for(k=0;k Printf(“\\n”);}//一行写9个数 else printf(“]”,aa[k]); } 分析:本题考查if语句,用来判断能被7整除或者能被11整除,但是又不能同时被7和11整除的数,在这里充分理解\逻辑与\和\逻辑或\的区别;for循环语句的循环变量用来控制取值范围。 该题需要运用循环判断结构来实现,其中循环语句比较容易,只要确定循环变量的范围即可,下面我们来看判断语句,题目要求找出能被7或11整除,但不能同时被7和11整除的所有整数。能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除的数所以可得出程序中的if()语句。注意:(i%7==0||i==0)两边必须要有小括号。 4.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函数函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后字符串中的内容应当是:ABCDEFG。 #include inti,j=0; for(i=0;a[i]!='\\0';i++) if(a[i]!='*') a[j++]=a[i];//若不是要删除的字符’*’则保留 a[j]='\\0';//最后加上字符串结束符’\\0’ } 判断结构。 用循环操作从字符串的开始往后逐个进行比较,若不是要删除的字符(用if(a[i]!=’*’)来控制)则保留。变量i和j用来表示原字符串的下标和删除*号后新字符串的下标。注意下标变量j要从0开始,最后还要加上字符串结束标识’\\0’。 voidmain() { chars[81] printf(“Enterastring:\\n”); gets(s); fun(s); printf(“Thestringafterdeleted:\\n“); puts(s) } 分析:删除字符串中所有*号需要用循环语句遍历字符串,用判断语句判断字符是否为*号,由此可以决定该程序应使用循环 5.编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串的后面。 2 例如,分别输入下面两个字符串: FirstString-- SecondString 程序输出: FirstString--SecondString #include voidfun(charp1[],charp2[]) { inti,j; for(i=0;p1[i]!='\\0';i++);//求出的i为p1字符串的总长度,包括结束标识符 for(j=0;p2[j]!='\\0';j++) p1[i++]=p2[j];//将p2字符串连在p1字符串后面 p1[i]='\\0';//在字符串最后加上结束标识符 } voidmain() 识'\\0'。 本题用两个循环完成操作,第1个循环的作用是求出第1个字符串的长度,即将i指到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。最后在第1个字符串的结尾加上字符串结束标识’\\0’。 { chars1[81],s2[40]; system(“CLS”); printf(“Enters1ands2:\\n”); scanf(“%s%s”,s1,s2); printf(“s1=%s\\n”,s1); printf(“s2=%s\\n”,s2); printf(“Invokefun(s1,s2):\\n”); fun(s1,s2); printf(“Afterinvoking:\\n”); printf(“%s\\n”,s1); } 分析:本题考查:不使用字符串函数实现字符串连接操作。通过for循环语句来完成,不要忘了最后需要加上字符串结束标 6.某学生的记录由学号、8门课程成绩和平均分组成,学号、8门课程成绩已在主函数中给出,编写函数fun,其功能是:求出该学生的平均分,并记录的ave成员中。 例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应为78.875。 #include charnum[10]; doubles[N]; doubleave; } STREC; voidfun(STREC*a) { doubleave=0.0; inti; for(i=0;i a->ave=a->ave+a->s[i]; a->ave/=N; } voidmain() { STRECs={\}; inti; fun(&s); printf(\’sstudentdata:\\n\for(i=0;i printf(\ printf(\; } 分析:本题考查:结构体类型成员运算,指向结构体类型的指针变量作函数参数。 3 本题考查自定义形参的相关知识点,程序流程是这样的:在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*a,此时,引用成员的方式可以使用指向运算符,即a->ave和a->s[i],当然也可用(*a).ave和(*a).s[i]。 7.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。编写函数fun,其功能是:求出平均分,并由函数值返回。 例如,若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是:78.625。 #include #include #defineN8 structslist { doubles; structslist*next; }; typedefstructslistSTREC; doublefun(STREC*h) { doubleave=0.0; STREC*p=h->next;//p直接指向”头结点”的下一个结点,即第一个成绩 while(p!=NULL) {ave=ave+p->s;//求总分数 p=p->next; } returnave/N;//返回平均值 } STREC*creat(double*s) { STREC*h,*p,*q; inti=0; h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(i 点。 题目要求求链表中数据域的平均值,应首先使用循环语句遍历链表,求各结点数据域中数值的和,再对和求平均分。遍历链表时应定义一个指向结点的指针p,因为\头结点\中没有数值,所以程序中让p直接指向\头结点\的下一个结点,使用语句STREC*p=h->next;。 { q=(STREC*)malloc(sizeof(STREC)); q->s=s[i];i++;p->next=q;p=q; } p->next=0; returnh; } outlist(STREC*h) { STREC*p; p=h->next; printf(\do { printf(\p=p->next; }while(p!=NULL) printf(\} voidmain() { doubles[N]={85,76,69,85,91,72,64,87},ave; STREC*h; h=creat(s);outlist(h); ave=fun(h); printf(\} 分析:本题考查:链表的操作,对链表的主要操作有以下几种:建立链表、结构的查找与输出、插入一个结点、删除一个结 8.编写函数fun,其功能是:将所有大于一小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。 4 例如,若输入17,则应输出:4 6 8 9 10 12 14 15 16。 #include voidfun(intm,int*k,intxx[]) { inti,j,n=0; for(i=4;i if(i%j==0)break; if(j 本题考查:如何判断非素数;循环判断结构;数组的引用。 题目要求将1~m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否素数,若不是素数,则将其存入数组中。这道题目是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。 判定一个数是否为素数,即该数除了能被1和它本身外,不能被任何数整除。 代码实现为: for(j=2;j if(i%j==0)/*如余数为0,证明i不是素数*/…… 此语句需要熟记,很多判断素数的题目也可通过此法解决。 voidmain() { intm,n,zz[100]; system(\ printf(\100:\ scanf(\fun(n,&m,zz); printf(\d:\ for(n=0;n 9.编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串123412132,输入字符为1,则输出3。 #include intfun(char*ss,charc) { inti=0; for(;*ss!='\\0';ss++) if(*ss==c) i++; returni; } voidmain() {chara[M],ch; system(“CLS”); printf(\gets(a); printf(\ch=getchar(); printf(\h)); } 分析:本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。 从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不 5 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库程序设计题在线全文阅读。
相关推荐: