C语言机试Word文档格式.docx
《C语言机试Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言机试Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
400500600
700800900
程序输出:
100400700
200500800
300600900
voidfun(intarray[3][3])
{inti,j;
intb[3][3];
for(i=0;
i<
3;
i++)
for(j=0;
j<
j++)
b[j][i]=array[i][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;
lim;
i++)/*判断i是否小于lim,如果i小于lim执行循环*/
{for(j=2;
i;
j++)/*判断i是否能被比它小的整数整除*/
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<
M;
for(j=0;
j<
N;
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;
num-1;
{h=i;
for(j=i;
if(s[h]<
s[j])h=j;
/*从字符串的第i+1个字符到num-1个字符中找出最大的字符,并将其数组下标赋值给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;
4;
{
min=tt[0][i];
/*将每列的第一个数赋值给min*/
for(j=0;
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指针*/
=num;
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<
strlen(str))
{j=0;
add=i;
while((str[add]==substr[j])&
&
(substr[j]!
='
\0'
))
{add++;
j++;
if(substr[j]=='
)k++;
i++;
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;
N;
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指向'
,以保证指针不越界。
voidfun(charp1[],charp2[])
char*point1,*point2;
point1=p1;
point2=p2;
while(*point1!
)point1++;
/*将指针point1指向字符串末尾的结束符位置上*/
while(*point2!
){
*point1=*point2;
/*将point2指向的字符通过指针point1逐一连接在字符串p1末尾*/
point1++;
/*point1指针指向p1字符串中的下一个字符*/
point2++;
}/*判断point2是否指向字符串末尾的结束符位置上,如果是则连接完成退出循环*/
*point1='
;
/*将point指针指向'
,以保证指针不越界*/
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;
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、通过循环,让