是’\\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。
10.编写函数fun,其功能是:计算n门课程的平均分,结果作为函数值返回。 例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。 #include
floatav=0.0; for(i=0;i 分析:本题考查:如何通过指针来实现计算平均分。 本题较简单,只需用一个循环语句就可完成数组元素的求和,再将和除以课程数即可。需要注意的是本题对指针的操作,当指针变量指向一个数组时,用该指针变量引用数组元素,引用方式与数组的引用方式相同。如本题中a指向了score,所以通过a引用score中的元素时可以用下标法,也可以用指针运算法,a[i]和*(a+i)具有相同的作用。下标运算实际上是从当前地址开始往后取出地址中的第几个元素,当前地址下标为0。例如,若有intcc[10],*p=cc+5;,即p指向了cc的第5个元素,则p[0]的作用与cc[5]相同;p[3]的作用是取出从当前地址(即p所指地址)开始往后的第3个元素,它与cc[8]相同;p[-2]的作用是取出从当前地址开始往前的第2个元素,它与cc[3]相同,但不提倡使用\负\的下标。 注意:计算平均分方法。 掌握以下语句: for(i=0;i } voidmain() { floatscore[30]={90.5,72,80,61.5,55} aver=fun(score,5); printf(“\\nAveragescoreis:%5.2f\\n”,aver); } 11.学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,编写函数fun,其功能是:把分数最高的学生的数据放在b所指的数组中。注意:分数最高的学生可能不止一个,函数返回分数最高的学生人数。 #include intfun(STREC*a,STREC*b) { inti,j=0,max=a[0].s; for(i=0;i if(max 6 for(i=0;i if(max==a[i].s)b[j++]=a[i]; returnj; } voidmain() {STRECs[N]={{\},{\64},{\2\,{\2}}; STRECh[N]; inti,n; n=fun(s,h); printf(\for(i=0;i 该程序使用两个循环判断语句,第1个循环判断语句的作用是找出最大值。第2个循环判断语句的作用是找出与max相等的成绩(即最高成绩)的学生记录,并存入b中。 对于如何找出数组中最大值(多个相等)的方法,我们已经不陌生。如果是对结构体数组进行类似操作呢?掌握以下语句: for(i=0;i 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。 #include inti=0; char*p=a;//单独处理字符串为’*’的情况 while(*p&&*p=='*') { a[i]=*p;i++;p++; } //循环判断当前指向的字符是否’*’如果不是保存 while(*p) { if(*p!='*') //保存非*得字符串,并将指针移到下一个位置 {a[i]=*p;i++;} p++; } a[i]='\\0'; } main() { chars[81]; printf(“Enterastring:\\n”); gets(s); fun(s); printf(“Thestringafterdeleted:\\n”); puts(s) } 分析:本题考查:指针型变量定义;while循环语句;if语句条件表达式;字符串结束标识'\\0'。 函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1)定义一个临时指针p,初始指向原串首地址;(2)利用循环语句把字符串前导*号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符'\\0'。 要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。 13.编写函数voidfun(char*tt,intpp[]),统计在tt所指的字符串中“a”到“z”26个小写字母各自出现的次数,并依次放在pp所指的数组中。 7 例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是: 33322110000000000000000000 #include voidfun(char*tt,intpp[]) { inti; for(i=0;i<26;i++)//初始化pp数组个元素为0 pp[i]=0;//遍历字符串,统计字母出现的个数 for(;*tt!='\\0';tt++)//如果字符为小写字母 if(*tt>='a'&&*tt<='z')//使统计字母个数的数组pp中的对应元素加1 pp[*tt-'a']++; } 需注意条件表达式的逻辑运算;字符串结束标识'\\0'。 要求统计在tt所指字符串中'a'~'z'26个小写母各自出现的次数,并依次放在pp所指数组中。首先使用for循环语句初始化pp数组中分别用来统计26个字母的个数,再使用循环判断语句对tt所指字符串中的字符进行逐一比较操作,同时存入相对应的pp数组中. main() { charaa[1000]; intbb[26],k; printf(\ scanf(\ fun(aa,bb); for(k=0;k<26;k++) printf(\ printf(\} 分析:本题考查:for循环语句,注意循环变量取值范围以及循环体语句作用;数组元素初始化和赋值操作;if语句条件表达式, 14.规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:将字符串尾部的*全部删除,前面和中间的*号不动。 例如,字符串中的内容为:\,删除后,字符串中的内容应当是:\。在编写函数时,不得使用C语言提供的字符串函数。 #include while(*a!='\\0') a++; a--;//指针a指向字符串的尾部 while(*a=='*') a--;//指针a指向最后一个字母 *(a+1)='\\0';//在字符串最后加上结束标识符* } voidmain() {chars[81]; printf(\gets(s); fun(s); printf(\puts(s); } 分析:本题考查:删除字符串尾部*号;删除的主要思想是把不删除的字符保留起来。 对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号’\\0’。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号'\\0'。 15.编写函数fun,其功能是:比较字符串的长度,不得使用C语言提供的求字符串长度的函数,函数返回较长的字符串。若两个字符长度相同,则返回第一个字符串。 8 例如,输入beijing char*fun(char*s,char*t) { inti,j; for(i=0;s[i]!='\\0';i++); for(j=0;t[j]!='\\0';j++); if(i<=j) returnt; else returns; } voidmain() { chara[20],b[20]; printf(“Input1thstring:”); gets(a); printf(“Input2thstring:”); gets(b); printf(“%s”,fun(a,b)); } 分析:本题考查:字符串长度比较运算,使用循环语句实现,应注意其循环条件。 本题中,第1个for循环的作用是求出s串的字符个数i,第2个for循环的作用是求出t串的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环语句后面加上一个分号以结束循环。 16.学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,编写函数fun,其功能是:函数返回该学号的学生的数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp,strcmp(a,b)中,当a和b字符串相等时返回值为0)。 #include charnum[10]; ints; }STREC; STRECfun(STREC*a,STREC*b) { inti; STRECstr={\//若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1 for(i=0;i if(strcmp(a[i].num,b)==0)//找到指定学号的学生数据 str=a[i]; returnstr;//返回学生记录 } voidmain() {STRECs[N]={{\ },{\64},{\2\,{\2}}; STRECh; charm[10]; intI; printf(“Theoriginaldata:\\n”); for(i=0;i if(i%4==0) printf(\每行输出4个学生记录 printf(“%s=”,s[i].num,s[i].s); } printf(\gets(m); h=fun(s,m); printf(\ printf(\printf(\} 分析:本题考查:结构体类型;字符串比较函数strcmp()的应用。 9 本程序一开始先使结构体变量str中的学号为空串,成绩为-1。循环体的功能是搜索所有学生的学号,并判断是否有学号与b所指字符串相同(即找到),若找到则给str重新赋值(str=a[i]),若没找到则str成员的值还是原有值(即未找到时学号返回空串,成绩返回-1)。 17.函数fun的功能是:将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。 例如,若s所指字符串中的内容为\其中字符A的ASCII码值为奇数,因此应当删除;字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是\。 #include inti,j=0; for(i=0;s[i]!='\\0';i++) if(i%2==0&&s[i]%2==0) t[j++]=s[i]; t[j]='\\0'; } chars[100],t[100]; system(“CLS”); printf(\scanf(\fun(s,t); printf(\} 分析:本题考查:循环判断结构;字符串的操作;逻辑运算符的使用。 本题要求删除除了下标为偶数同时ASCII码值也为偶数的字符,即保留下标为偶数同时ASCII码值也为偶数的字符。循环语句用于遍历字符串,条件语句用于判断当前字符是否符合要求。注意判断条件是下标为偶数,同时ASCII码值也为偶数,所以应使用逻辑与\运算符。 18.编写函数fun,其功能是:利用下面的简单迭代方法求方程cos(X)-x=0的一个实根。Xn+1=cos(Xn) 迭代步骤如下: (1)取x1初值为0.0; (2)x0=x1,将x1的值赋给x0; (3)x1=cos(x0),求出一个新的x1; (4)若x0-x1的绝对值小于0.000001,执行步聚(5),否则执行步聚(2); (5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 程序将输出结果Root=0.739086。 #include #include 10 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库程序设计题(2)在线全文阅读。
相关推荐: