C语言上机题例.docx
- 文档编号:26334587
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:17
- 大小:21.09KB
C语言上机题例.docx
《C语言上机题例.docx》由会员分享,可在线阅读,更多相关《C语言上机题例.docx(17页珍藏版)》请在冰豆网上搜索。
C语言上机题例
一、字符串类
1、假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
除了字符串前导和尾部的*号之外,将串中其它*号全部删除。
形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。
在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:
****A*BC*DEF*G********,删除后,字符串中的内容应当是:
****ABCDEFG********。
在编写函数时,不得使用C语言提供的字符串函数
解题思路:
先将原串中从首字符开始的连续*放到一字符串数组中,再将从第一个非*字符开始到串尾连续*之前的非*字符追加其后,接着将串尾的连续*后追加,最后将新串中的字符放到原串中覆盖原串
voidfun(char*a,char*h,char*p)
{charb[81],*x;
inti=0,j=0;
x=a;
while(x while(h<=p) if(*h! ='*'){b[j]=*h;j++;h++;} elseh++; p++; while(*p){b[j]=*p;j++;p++;} b[j]='\0';j=0; while(b[j]) {a[i]=b[j];i++;j++;} a[i]='\0'; } 3、请编写一个函数fun,它的功能是: 比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。 若两个字符串长度相同,则返回第一个字符串。 例如,输入beijing 函数将返回shanghai。 解题思路: 先分别使用循环语句计算出各个字符串的长度,再对此长度进行比较来确定返回值 char*fun(char*s,char*t) { intfirst=0,second=0; char*p,*q; p=s; q=t; while(*p++! ='\0')/*判断是否到了字符串s的结尾*/ first++; while(*q++! ='\0')/*判断是否到了字符串t的结尾*/ second++; if(first==second)/*判断两个字符串的长度是否相等*/ returns;/*若上述条件成立,则返回第一个字符串*/ elseif(first>second)/*返回较长的字符串*/ returns; else returnt; } 4、规定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 使字符串最前面连续的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。 例如,字符串中的内容为: *******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是: ****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为: *******A*BC*DEF*G****。 n的值在主函数中输入。 在编写函数时,不得使用C语言提供的字符串函数。 voidfun(char*a,intn) {charb[81]; inti=0,j=0,s=0,k; while(a[i]=='*'){s++;i++;} if(s>n) {for(k=0;k {b[j]='*';j++;} while(a[i]) {b[j]=a[i];j++;i++;} b[j]='\0';i=0;j=0; while(b[j]) {a[i]=b[j];i++;j++;} a[i]='\0'; } } 二、多项式类 2、请编写一个函数fun,它的功能是: 根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代): 程序运行后,如果输入精度0.0005,则程序输出为3.140578。 解题思路: 通过循环语句判断公式中某项是否在精度范围之内,以控制迭代。 doublefun(doubleeps) { intn=0; doubledown=1,up=1; doubleone,pi=0; one=(double)up/(double)down; while(one>=eps){/*通过循环语句判断公式中某项是否在精度范围之内*/ pi+=one; n++; up=up*n; down=down*(2*n+1); one=(double)up/(double)down; } returnpi*2; } 20、请编写函数fun,其功能是: 计算并输出下列多项式的值: 例如,在主函数中从键盘给n输入8后,输出为: s=0.662872。 注意: 要求n的值大于1但不大于100。 解题思路: 该题考查的是数学上的一个数列,其通式为: 1/(2*n-1)-1/(2*n)。 在给出的参考程序中,由于函数要求的返回值为双精度型,所以将sum定义为双精度型,其初值为0.0,再判断输入的n是否符合条件,如果条件为真,则执行for循环,分别计算出1.0/(2*i-1)-1.0/(2*i)相应的每一个多项式的值,同时累加到变量sum中,并将该结果返回。 doublefun(intn) {inti; doublesum=0.0;/*定义sum为双精度型变量,并给其赋初值为0.0*/ if(n>1&&n<=100) {for(i=1;i<=n;i++) sum+=1.0/(2*i-1)-1.0/(2*i);/*计算出1.0/(2*i-1)-1.0/(2*i)相应的每一个多项式的值,同时累加到变量sum中*/ } returnsum;/*返回计算结果*/ } 三、数组类 5、请编写一个函数fun,它的功能是: 计算n门课程的平均分,计算结果作为函数值返回。 例如: 若有5门课程的成绩是: 90.5,72,80,61.5,55,则函数的值为: 71.80 解题思路: 先使用循环语句对数组中的各个元素求和,然后用此和除以数组的元素总个数即得平均值。 然后使用return语句将此平均值作为函数的返回值返回。 floatfun(float*a,intn) { inti; floataverage; doublesum=0; for(i=0;i sum+=a[i];/*对数组中的各个元素求和*/ average=(float)sum/n;/*计算平均值*/ returnaverage;/*返回平均值*/ } 13、请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。 例如: w值为5923,则函数返回923;w值为923,则函数返回23 解法二: /*注: 由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。 由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if()语句*/ unsignedfun(unsignedw) {if(w>=10000)returnw%10000; if(w>=1000)returnw%1000; if(w>=100)returnw%100; returnw%10; } 14、请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标,用k返回。 例如,输入如下整数: 876675896101301401980431451777 则输出结果为: 6,980 本题的考核点是求数组中的最大元素在数组中的下标。 解题思路: 1、定义变量max_integer,用以存放数组s[]中的最大元素; 2、建立循环,查找出数组s[]中的最大元素; 3、将查找到的最大元素的下标赋给k,并传回主函数。 intfun(int*s,intt,int*k) { intmax_integer=0;/*定义变量max_integer,用以存放数组s[]中的最大元素*/ inti=0; max_integer=s[0];/*假定第一个数组元素为最大*/ for(i=0;i {/*建立循环,查找出数组s[]中的最大元素*/ /*将查找到的最大元素的下标赋给k,并传回主函数*/ if(max_integer { max_integer=s[i]; *k=i; } } return*k; } } 16、请编写一个函数fun,它的功能是: 求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传送给m的值为50,则程序输出: 711142122283335424449 解题思路: 使用循环语句使循环变量依次从1递增到m,并将每个值与7和11进行取余比较,将符合条件的值存放入数组中,统计符合条件的值的个数并返回。 #include #include #defineM100 voidfun(intm,int*a,int*n) { inti,count=0;/*count用于计数*/ for(i=1;i<=m;i++){/*使用循环语句使循环变量依次从1递增到m*/ if(i%7==0||i%11==0){/*判断变量i是否能被7或者11整除*/ a[count++]=i;/*将符合条件的值存放入数组a中*/ } } *n=count;/*返回能被7或者11整除的数的个数*/ } 17、请编写一个函数fun,它的功能是: 找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。 数组元素中的值已在主函数中赋予。 主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标 解题思路: 先取出数组中的第一个元素,然后通过循环语句依次用数组中的其他元素与其作比较,如果大于第一个元素则交换两者的值,并记录此数组元素的下标,直到数组中的元素都比较完为止。 voidfun(inta[],intn,int*max,int*d) { inti,base,subscript; base=a[0];/*假定第一个元素的值最大*/ subscript=0;/*subscript用于存放数组下标*/ for(i=1;i if(a[i]>base){/*将数组中的其他元素与变量base作比较,如果大于它则交换两者的值*/ subscript=i; base=a[i]; } } *max=base;/*将最大值元素的值赋给*max*/ *d=subscript;/*将最大值元素的下标赋给*d*/ } 四、结构体 7、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是: 把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形参传回,平均分通过函数值返回 解题思路: 先求出平均分,然后再将学生成绩与平均分作比较,将高于等于平均分的学生数据放在另一数组中,并统计人数的个数。 doublefun(STREC*a,STREC*b,int*n) {inti,j; doubleaver=0; *n=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机