1编一个函数funchars函数的功能是把字符串中的内容逆置.docx

上传人:b****2 文档编号:24089474 上传时间:2023-05-24 格式:DOCX 页数:64 大小:38.43KB
下载 相关 举报
1编一个函数funchars函数的功能是把字符串中的内容逆置.docx_第1页
第1页 / 共64页
1编一个函数funchars函数的功能是把字符串中的内容逆置.docx_第2页
第2页 / 共64页
1编一个函数funchars函数的功能是把字符串中的内容逆置.docx_第3页
第3页 / 共64页
1编一个函数funchars函数的功能是把字符串中的内容逆置.docx_第4页
第4页 / 共64页
1编一个函数funchars函数的功能是把字符串中的内容逆置.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

1编一个函数funchars函数的功能是把字符串中的内容逆置.docx

《1编一个函数funchars函数的功能是把字符串中的内容逆置.docx》由会员分享,可在线阅读,更多相关《1编一个函数funchars函数的功能是把字符串中的内容逆置.docx(64页珍藏版)》请在冰豆网上搜索。

1编一个函数funchars函数的功能是把字符串中的内容逆置.docx

1编一个函数funchars函数的功能是把字符串中的内容逆置

1、编一个函数fun(char*s),函数的功能是把字符串中的内容逆置。

例子如:

字符串中原有的内容为:

abcdefg,则调用该函数后,串中的内容为:

gfedcba

试题程序:

#include

#include

#include

#defineN81

/*注:

该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次

都进行两字符的位置对换,直到中间字符(用s+i

由于s+i中一个

地址,因此要注意把它的内容取出再进行换位。

即先进行取内容运算*)*/

fun(char*s)

{inti=0,t,n=strlen(s);

for(;s+i

{t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}

}

main()

{chara[N];

clrscr();

printf("Enterastring:

");gets(a);

printf("Theoriginalstringis:

");puts(a);

fun(a);

printf("\n");

printf("Thestringaftermodified:

");

puts(a);

}

2、写程序,实现矩阵(3行3列)的转置(即行列互换)。

例如,输入一面的矩阵:

程序输出:

试题程序:

#include

#include

/*这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列

互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用

for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。

*/

intfun(intarray[3][3])

{inti,j,t;

for(i=0;i<2;i++)

for(j=i+1;j<3;j++)

{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}

}

main()

{inti,j;

intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};

clrscr();

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",array[i][j]);

printf("\n");

}

fun(array);

printf("Convertedarray:

\n");

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

printf("%7d",array[i][j]);

printf("\n");

}

}

3、请编一个函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出数

组中所有奇数之和以及所有偶数之和。

形参n给了数组中数据的个数:

利用指针odd返回

奇数之和,利用指针even返回偶娄这和。

例如:

数组中的值依次为:

1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用

指针even返回偶数之和8。

试题程序。

#include

#include

#defineN20

/*注:

该题的算法是:

用for()循环一步一步地找元素,用if(!

a[i]%2)来判断是否是奇

数,%运算是求余运算,当对2求余为1时表示原数为奇数,否则为偶数。

*/

fun(int*a,intn,int*odd,int*even)

{inti;*even=0;*odd=0;

for(i=0;i

if(!

(a[i]%2))

*even+=a[i];

else

*odd+=a[i];

}

main()

{inta[N]={1,9,2,3,11,6},i,n=6,odd,even;

clrscr();

printf("Theoriginaldatais:

\n");

for(i=0;i

printf("\n\n");

fun(a,n,&odd,&even);

printf("Thesumofoddnumbers:

%d\n",odd);

printf("Thesumofevennumber:

%d\n",even);

}

4、要求程序的功能是:

把20个随机数存入一个数组,然后输出该数组中的最小值。

中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。

试题程序。

#include

#include

#defineVSIZE20

intvector[VSIZE];

/*注:

该题的算法是用一个变量(j)来存储最小值元素的下标,在循环过程中让每个元

素都与原最小值元素进行大小比较(if(list[i]

拥有最小值元素的下标(j=i)。

*/

intfun(intlist[],intsize)

{inti,j=0;

for(i=1;i

if(list[i]

j=i;

returnj;

}

main()

{

inti;

clrscr();

for(i=0;i

{

vector[i]=rand();

printf("Vector[%d]=%6d\n",i,vector[i]);

}

i=fun(vector,VSIZE);

printf("\nMininum:

vector[%d]=%6d\n",i,vector[i]);

}

5、请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留2位小数,并

对第三位进行四舍五入(规定h中的值为正数)。

例如:

h值为8.32433,则函数返回8.32;

h值为8.32533,则函数返回8.33。

试题程序。

#include

#include

/*注:

h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时

如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加

5后该位就要向前进一位数(即五入)。

进行加5运算后除10再赋给一个整型变量此时就

只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出

现了两位小数。

该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底

变成0。

*/

floatfun(floath)

{longt;

h=h*1000;

t=(h+5)/10;

return(float)t/100;

}

main()

{

floata;

clrscr();

printf("Entera:

");scanf("%f",&a);

printf("Theoriginaldatais:

");

printf("%f\n\n",a);

printf("Theresult:

%6.2f\n",fun(a));

}

6、编写函数fun,函数的功能是:

从字符串中删除指定的字符。

同一字母的大、小写按

不同字符处理。

若程序执行时,输入字符串为:

turbocandBorlandc++

从键盘上输入字符:

n,则输出后变为:

turbocadborladc++

如果输入的字符串不存在,则字符串照原样输出。

试题程序。

#include

#include

/*注:

该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字

符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要

删除一些元素,因此新串的下标总是比原下标i要慢。

因而可用此法即同一字符串变量的

方法。

*/

intfun(chars[],intc)

{inti,k=0;

for(i=0;s[i];i++)

if(s[i]!

=c)s[k++]=s[i];

s[k]='\0';

}

main()

{staticcharstr[]="turbocandborlandc++";

charch;

clrscr();

printf(":

%s\n",str);

printf(":

");

scanf("%c",&ch);

fun(str,ch);

printf("str[]=%s\n",str);

}

7、请编写一个unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n

>=2)位的整数,函数求出w的后n-1位的数作为函数值返回。

例如:

w值为5923,则函数返回923;w值为923则函数返回23。

试题程序。

#include

#include

/*注:

由于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;

}

main()

{unsignedx;

printf("enteraunsignedintegernumber:

");

scanf("%u",&x);

if(x<10)printf("dataerror!

");

elseprintf("theresult:

%u\n",fun(x));

}

8、编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于lim的所有素数

并放在aa数组中,该函数返回所求出素数的个数。

试题程序。

#include

#include

#defineMAX100

/*注:

循环for(i=2;i

对k求余,如余数为0(即被整除)则表示k不是一个素数。

语句if(i>=k)用于判断在

上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。

*/

intfun(intlim,intaa[MAX])

{inti,j=0,k;

for(k=2;k

{for(i=2;i

if(!

(k%i))break;

if(i>=k)aa[j++]=k;

}

returnj;

}

main()

{intlimit,i,sum;

intaa[MAX];

printf("\ninputaintegernumber:

");

scanf("%d",&limit);

sum=fun(limit,aa);

for(i=0;i

{if(i%10==0&&i!

=0)

printf("\n");

printf("%5d",aa[i]);

}

}

9、请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。

二维

数组中的值在主函数中赋予。

例如:

二维数组中的值为

则函数值为61。

试题程序。

#include

#include

#defineM4

#defineN5

/*注:

该题的第一个for()循环是计算矩阵的最上一行和最下一行的总和,第二个for()

是计算除两头元素以外的最左一列和最右一列的元素的和,最后sun就是周边元素的和。

*/

intfun(inta[M][N])

{intsum=0,i;

for(i=0;i

sum+=a[0][i]+a[M-1][i];

for(i=1;i

sum+=a[i][0]+a[i][N-1];

returnsum;

}

main()

{intaa[M][N]={{1,3,5,7,9},

{2,9,9,9,4},

{6,9,9,9,8},

{1,3,5,7,0}};

inti,j,y;

clrscr();

printf("Theoriginaldatais:

\n");

for(i=0;i

{for(j=0;j

printf("\n");

}

y=fun(aa);

printf("\nThesum:

%d\n",y);

printf("\n");

}

10、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按

降序排列。

例如,原来的字符串为CEAedca,排序后输出为CedcEAa。

试题程序。

#include

#include

#include

/*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端往后

端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进

行换位。

直到外for()循环走到最后一个字符。

此外,此题还要注意把首尾字符除开,即

在最外层for()循环中从1开始,只到num-2即可。

*/

intfun(char*s,intnum)

{inti,j,t;

for(i=1;i

for(j=i+1;j

if(s[i]

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

main()

{chars[10];

clrscr();

printf("输入7个字符的字符串:

");

gets(s);

fun(s,7);

printf("\n%s",s);

}

11、请编一函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,

求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主

函数中赋予。

试题程序。

#include"conio.h"

#include"stdio.h"

#defineM3

#defineN4

/*注:

该题用for(i=0;i

j++)用于控制同列内元素的比较。

多重循环的嵌套总是最里层循环变化最快,即外层循

环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在

多数题目中都要用到多重循环(一般为二重)。

*/

voidfun(inttt[M][N],intpp[N])

{inti,j;

for(i=0;i

{pp=tt[0][i];

for(j=0;j

if(tt[j][i]

}

}

main()

{intt[M][N]={{22,45,56,30},

{19,33,45,38},

{20,22,66,40}};

intp[N],i,j,k;

clrscr();

printf("theoriginaldatais:

\n");

for(i=0;i

{for(j=0;j

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\ntheresultis:

\n");

for(k=0;k

printf("%4d",p[k]);

printf("\n");

}

12、写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max

传回该串地址。

(注意:

用****作为结束输入的标志。

试题程序。

#include"stdio.h"

#include"string.h"

#include"conio.h"

/*函数strlen()用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p

;如果用maz=&p;则只改变了max的指向,它不能传回给实参。

因此我们要改变max指

向地址中的内容,这才能使得实参ps有正确的值。

*/

fun(char(*a)[81],intnum,char**max)

{char*p=a[0];inti;

for(i=1;i

if(strlen(a[i])>strlen(p))

p=a[i];

*max=p;

}

main()

{charss[10][81],*ps;

intn,i=0;

clrscr();

printf("enterstring:

\n");

gets(ss[i]);

puts(ss[i]);

while(!

strcmp(ss[i],"****")==0)

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

fun(ss,n,&ps);

printf("\nmax=%s\n",ps);

}

13、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。

函数的功能是

删除所有值为y的元素。

数组元素中的值和y的值由主函数通过健盘读入。

试题程序。

#include

#include

#defineM20

/*注:

该题的算法是,用for()循环控制元素逐一判断数组元素是否等于y,若不等则赋

给新数bb,由于删除的关系j总是小于或等于i,故而可用bb作为新数组,与第6题相似。

还要注意*n=j;如果没有这个语句则不能传回新数组的个数,另外也不能换成n=&j

;这点是用指针时常犯的错误,切记!

*/

voidfun(intbb[],int*n,inty)

{inti,j=0;

for(i=0;i<*n;i++)

if(bb[i]!

=y)bb[j++]=bb[i];

*n=j;

}

main()

{intaa[M],n,y,k;

printf("\npleaseentern:

");

scanf("%d",&n);

printf("\nenter%dpositivenumber:

\n",n);

for(k=0;k

printf("theoriginaldatais:

\n");

for(k=0;k

printf("\nenteranumbertodeleted:

");

scanf("%d",&y);

fun(aa,&n,y);

printf("thedataafterdeleted%d:

\n",y);

for(k=0;k

printf("\n");

}

4、编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数

例如,假定输入的字符串为:

asdasasdfgasdaszx67asdmklo,子字符串为:

as

,则应输出6。

试题程序。

#include"stdio.h"

#include"string.h"

#include"conio.h"

/*注:

由于小串中只有2个字符所以可用str[i]==sbustr[0]&&str[i+1]==subs

tr[1]来判断小串是否与长串当前位置(str[i])相同(即出现一次)。

因而只要让长串

当前位置逐一向后移即可(用for()循环来完成)。

*/

intfun(char*str,char*substr)

{inti,n=0,s=strlen(str);

for(i=0;i

if((str[i]==substr[0])&&(str[i+1]==substr[1]))

n++;

returnn;

}

main()

{

charstr[81],substr[3];

intn;clrscr();

printf("enter1:

");

gets(str);

printf("enter2:

");

gets(substr);

puts(str);

puts(substr);

n=fun(str,substr);

printf("n=%d\n",n);

}

5、请编写一个函数intfun(intx),它的功能是:

判断整数x是否是同构数。

若是同构

数,函数返回1;否则返回0。

所谓“同构数”是指这样的数,它出现在它的平方数的右边。

例如:

输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。

x的值由主函数从健盘读入,要求不大于100。

试题程序。

#include"conio.h"

#include"stdio.h"

/*注:

由“同构数”的定义可得只要求出平方数或平方数的最后一位或平方数的最后两

位然后与x进行判断即可,分别求余后即得出平方数的右边。

*/

intfun(intx)

{intxx=x*x;

if(xx==x//xx%10==x//xx%100==x)return1;

elsereturn0;

}

main()

{intx,y;

clrscr();

printf("\npleaseenteraintegernumbers:

");

scanf("%d",&x);

if(x>100){printf("dataeror!

\n");exit(0);}

y=fun(x);

if(y)printf("%dyes\n",x);

elseprintf("%dno!

\n",x);

}

16、请编写函数fun,函数的功能是:

在字符串中所有数字字符前加一个$字符。

例如,输入:

A1B23CD45,则输出为:

A$1B$2$3CD$4$5。

注意:

部分源程序给出如下。

#include

/*注:

该题用while()循环来控制原字符串从头走到尾,在走动过程中判断是当前字符是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1