C语言机试.docx
- 文档编号:2917260
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:30
- 大小:38.01KB
C语言机试.docx
《C语言机试.docx》由会员分享,可在线阅读,更多相关《C语言机试.docx(30页珍藏版)》请在冰豆网上搜索。
C语言机试
1请编一个函数fun(char*s),函数的功能是把字符串中的内容逆置。
例如:
字符串中原有的内容为:
abcdefg,则调用该函数后,串中的内容为:
gfedcba。
voidfun(char*s)
{
inti,length;
chartmp;
length=strlen(s);/*统计字符串s中字符的个数*/
for(i=0;i {/*以下三行即将s中的第i个字符与第length-i个字符进行交互*/ tmp=s[i]; s[i]=s[length-i-1]; s[length-i-1]=tmp; } 2.编写程序,实现矩阵(3行3列)的转置(即行列互换)。 例如,输入下面的矩阵: 100200300 400500600 700800900 程序输出: 100400700 200500800 300600900 voidfun(intarray[3][3]) {inti,j;intb[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) b[j][i]=array[i][j];/*将矩阵行列互换*/ for(i=0;i<3;i++) for(j=0;j<3;j++) array[i][j]=b[i][j];/*将b数组中的数据原封不动的保存在array数组中*/ } 3.编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。 intfun(intlim,intaa[MAX]) {inti,j=0,k=0; for(i=2;i {for(j=2;j if(i%j==0)break;/*假如i能被整除,则退出该层循环*/ if(j==i)aa[k++]=i;/*假如i不能被比它小的整数整除,则将i存入aa数组中*/ } returnk; } 4.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。 二维数组中的值在主函数中赋予。 例如: 二维数组中的值为 13579 29994 69998 13570 则函数值为61。 解题思路: 二维数组的周边元素的特点是: 它有一个下标为0或为数组上界。 所以我们只需判断数组的下标是否为0或数组上界即可。 按行、列进行循环可以保证符合条件的元素只被运算一次。 intfun(inta[M][N]) { inti,j,sum=0; for(i=0;i for(j=0;j if((i==0)||(i==M-1)||(j==0)||(j==N-1))/*判断a[i][j]是否为数组中的第一行或最后一行或第一列或最后一列*/ sum+=a[i][j];/*对a数组的周边元素求和*/ returnsum; } 5.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。 例如,原来的字符串为CEAedca,排序输出为CedcEAa 解题思路: 只对除首、尾字符外的字符排序,排序可用多种方法来实现,本题用的是选择法,通过一变量来记录大数的下标,再与前面的数交换,从而实现降序排序。 */ intfun(char*s,intnum) {inti,j,h,t; for(i=1;i {h=i; for(j=i;j if(s[h] if(h! =i)/*判断找到的最大字符的下标是否为第i个字符*/ {t=s[h];s[h]=s[i];s[i]=t;}/*将s[h]与s[i]中的字符进行交换*/ } 6.请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。 二维数组中的数已在主函数中赋予。 #defineM3 #defineN4 voidfun(inttt[M][N],intpp[N]) { inti,j,min; for(i=0;i<4;i++) { min=tt[0][i];/*将每列的第一个数赋值给min*/ for(j=0;j<3;j++)/*将min与该列中的每个数进行比较,并把最大的那个数赋值给min*/ if(min>tt[j][i]) min=tt[j][i]; pp[i]=min; } 7.编写一个函数,从传入的num个字符串找出最长的一个字符串,并通过形参指针max传回该串地址。 (注意: 用****作为结束输入的标志。 ) 解题思路: 通过求字符串长度函数对一组字符串的字符进行比较,并将地址赋给一指针变量。 */ fun(char(*a)[81],intnum,char**max) {inti; *max=a[0];/*将第一个字符串赋值给max指针*/ for(i=1;i<=num;i++) if(strlen(a[i])>strlen(*max))*max=a[i];/*假如字符串a[i]的长度比指针max中的字符串的长度长,则将a[i]字符串赋值给max指针*/ } 8.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。 例如,假定输入的字符串为: asdasasdfgasdaszx67askmklo,子字符串为: as,则应输出6。 解题思路: 将主串中的字符从第一个位置开始逐个与子串中的字符作比较,若子串出现在主串中,次数加1,主串中的指针移动到下一个位置继续与子串比较,反之,主串中的指针也同样移动到下个位置,直至主串中的字符全部比较结束。 */ intfun(char*str,char*substr) {unsignedinti=0; intj,k=0,add; while(i {j=0;add=i; while((str[add]==substr[j])&&(substr[j]! ='\0')) {add++;j++;} if(substr[j]=='\0')k++; i++; } returnk; } 9.程序定义了N×N的二维数组,并在主函数中赋值。 请编写函数fun,函数的功能是: 求出数组周边元素的平均值并作为函数值返回给主函数中的s。 例如: a数组中的值为 |01279| |19745| a=|23831| |45682| |59141| 则返回主程序后s的输出结果为: 3.375000。 解题思路: 使用循环语句控制行,然后对首行和末行使用内循环求取所有元素的和。 对于其他行则取其首尾元素的值。 最后求这些数总和的平均值。 */ doublefun(intw[][N]) { inti,j,count=0; doubleaverage,sum=0.0; for(i=0;i if(i==0||i==(N-1))/*判断是否为第一行或最后一行的元素*/ for(j=0;j sum+=w[i][j]; count++;/*元素个数加1*/ }/*对第一行或最后一行的元素求和*/ else { sum+=w[i][0];/*对第i行第一列的元素求和*/ sum+=w[i][N-1];/*对第i行最后一列的元素求和*/ count+=2; }/*对除首尾两行外的其他行中每行的首尾两个元素求和*/ } average=sum/count;/*计算数组周边元素的平均值*/ returnaverage; } 10.编写一个函数fun,它的功能是: 实现两个字符串的连接(不使用库函数strcat)。 解题思路: 1、定义两个字符型指针point1、point2,分别指向字符串p1和p2;2、point1起始指向字符串p1的第一个字符,通过循环,令其指向p1串尾,为未来的连接工作做好准备;3、point2起始指向字符串p2的第一个字符,通过循环,不断将指针指向p2的下一个字符;4、将point2指向的字符通过指针point1逐一连接在字符串p1末尾;5、连接完毕后,将指向字符串p1末尾的指针point1指向'\0',以保证指针不越界。 */ voidfun(charp1[],charp2[]) { char*point1,*point2; point1=p1; point2=p2; while(*point1! ='\0')point1++;/*将指针point1指向字符串末尾的结束符位置上*/ while(*point2! ='\0'){ *point1=*point2;/*将point2指向的字符通过指针point1逐一连接在字符串p1末尾*/ point1++;/*point1指针指向p1字符串中的下一个字符*/ point2++; }/*判断point2是否指向字符串末尾的结束符位置上,如果是则连接完成退出循环*/ *point1='\0';/*将point指针指向'\0',以保证指针不越界*/ } 11.请编写函数fun,函数的功能是: 实现B=A+A',即把矩阵A加上A的转置,存放在矩阵B中。 计算结果在main函数中输出。 例如,输入下面的矩阵: 其转置矩阵为: |123||147| |456||258| |789||369| 程序输出: |2610| |61014| |101418| 解题思路: A的转置即指原先在i行j列的元素现放置在j行i列上,通过一个两重循环即可求得矩阵与其转置的和。 */ voidfun(inta[3][3],intb[3][3]) {inti,j; for(i=0;i<3;i++) for(j=0;j<3;j++) b[i][j]=a[i][j]+a[j][i];/*按从行到列的顺序,求得矩阵与其转置的和*/ } 12.m个人的成绩存放在score数组中,请编写函数fun,它的功能是: 将低于平均分的人数作为函数值返回。 例如,当score数组中的数据为: 10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为: 10203040。 解题思路: 1、首先定义两个变量total和average,分别放置总分数和平均分;2、通过循环,计算出数组score[]中各个分数的总和,并放至total中;3、根据由主函数传过来的m,计算平均分,并放至average中;4、定义指针p_below,指向主函数中的数组below[],通过这个指针的操作设置below[]中各元素的值;5、通过循环,让
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)