全国计算机考试二级C语言南开100题试题_第1页
全国计算机考试二级C语言南开100题试题_第2页
全国计算机考试二级C语言南开100题试题_第3页
全国计算机考试二级C语言南开100题试题_第4页
全国计算机考试二级C语言南开100题试题_第5页
已阅读5页,还剩298页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机考试二级c语言南开100题

题目1

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

例子如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:

gfedcba

O

试题程序:

Sinclude<string.h>

ttinclude<conio.h>

Sinclude<stdio.h>

#defineN81

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

动一次

都进行两字符的位置对换,直到中间字符(用s+i<s+n-l-i来控制)。由于s+i

中一个

地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*)*/

fun(char*s)

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

for(;s+i<s+n-l-i;i++)

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

)

main()

{chara[N];

clrscr();

printf("'Enterastring:");gets(a);

printf(z,Theoriginalstringis:z,);puts(a);

fun(a);

printf(〃\n〃);

printf("Thestringaftermodified:,z);

puts(a);

)

题目2

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

例如,输入一面的矩阵:

程序输出:

试题程序:

Sinclude<stdio.h>

Sinclude<conio.h>

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

行行列

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

(用

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

intfun(intarray[3][3])

{inti,j,t;

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

for(j=i+l;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++)

printfarray[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),函数的功能是分别求

11、数

组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数:利用指针

odd返回

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

例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和

24;利用

指针even返回偶数之和80

试题程序。

Sinclude<stdio.h>

Winclude<conio.h>

ttdefineN20

/*注:该题的算法是:用for。循环一步一步地找元素,用来判断

是否是奇

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

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

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

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

if(!(a[i]%2))

*even+=a[i];

else

*odd+=a[i];

main()

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

clrscr();

printf(z,Theoriginaldatais:\n〃);

for(i=0;i<n;i++)printf(〃%5d〃,*(a+i));

printf(〃\n\n〃);

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

printf(z,Thesumofoddnumbers:%d\nz/,odd);

printf(Z/Thesumofevennumber:%d\nzz,even);

题目4

要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。

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

试题程序。

Sinclude<stdio.h>

Sinclude<conio.h>

#defineVSIZE20

intvector[VSIZE];

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

每个元

素都与原最小值元素进行大小比较(if(list[iklist[j]),如发现更小的则让j

重新

拥有最小值元素的下标(j=i)o*/

intfun(intlist[],intsize)

{inti,j=0;

for(i=l;i<size;i++)

if(list[i]<list[j])

j=i;

returnj;

)

main()

(

inti;

clrscr();

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

{

vector[i]=rand();

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

)

i=fun(vector,VSIZE);

printf(/z\nMininum:vector[%d]=%6d\nzz,i,vector[i]);

)

题目5

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

小数,并

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

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

h值为8.32533,则函数返回&33。

试题程序。

Sinclude<stdio.h>

Winclude<conio.h>

/*注: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;

mainO

(

floata;

clrscr();

printf("'Entera:〃);scanf(〃%f〃,&a);

printf(zzTheoriginaldatais:z,);

printfC%f\n\n,,,a);

printf(Z/Theresult:%6.2f\nz,,fun(a));

)

题目6

编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大、

小写按

不同字符处理。

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

从键盘上输入字符:n,则输出后变为:turbocadborladc++

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

试题程序。

^include<stdio.h>

Sinclude<conio.h>

/*注:该题的算法是让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';

}

mainO

{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<conio.h>

Sinclude<stdio.h>

/*注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000

求余即得出后

面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的

判断。由于

return的作用除了返回值以外,还有当执行到retum时就跳出该程序,所以可

以连续的

用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(,&x);

if(x<10)printf("dataerror!;

elseprintf("theresult:%u\n”,fun(x));

)

题目8

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

有素数

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

试题程序。

Sinclude<stdio.h>

Winclude<conio.h>

#defineMAX100

/*注:循环for(i=2;i<k;i++)用于判断k是否为素数,原理是当用2到k-1这

间的数去

对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;Klim;k++)

{for(i=2;i<k;i++)

if(!(k%i))break;

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

)

returnj;

}

main()

{intlimit,i,sum;

intaa[MAX];

printf(/z\ninputaintegernumber:,z);

scanf(,z%dz,,&limit);

sum=fun(limit,aa);

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

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

printf("\n");

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

)

)

题目9

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

二维

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

例如:二维数组中的值为

则函数值为61。

试题程序。

#include<conio.h>

#include<stdio.h>

SdefineM4

^defineN5

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

个for()

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

素的和。

*/

intfun(inta[M][N])

{intsum=0,i;

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

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

for(i=l;i<M-l;i++);

sum+=a[i][0]+a[i][NT];

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<M;i++)

{for(j=0;j<N;j++)printf("%6d”,aa[i][j]);

printf("\n");

)

y=fun(aa);

printf(/z\nThesum:%d\n”,y);

printf("\n");

题目10

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

符按

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

试题程序。

Sinclude<string.h>

Sinclude<conio.h>

Sinclude<stdio.h>

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

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

的字符与该字符进行换位。直到外for。循环走到最后一个字符。此外,此题还

要注意把首尾字符除开,即在最外层for。循环中从1开始,只到num-2即可。

*/

intfun(char*s,intnum)

{inti,j,t;

for(i=l;i<num-2;i++)

for(j=i+l;j<num-l;j++)

if(s[i]<s[j])

{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所指•维数组中,二维数组中的

数已在主

函数中赋予。

试题程序。

Sinclude"conio.h"

^include"stdio.h"

#defineM3

#defineN4

/*注:该题用for(i=0;i〈N;i++)来控制一列一列地找,而内嵌循环for(j=0;j<M;

j++)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即

外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体

会和理解,在多数题目中都要用到多重循环(一般为二重)。*/

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

{inti,j;

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

{pp=tt[0][i];

for(j=0;j<M;j++)

if(tt[j][i]<pp[i])pp[i]=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<M;i++)

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

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

printf("\n");

)

fun(t,p);

printf("\ntheresultis:\n");

for(k=0;k<N;k++)

printf("Md",p[k]);

printf('\n");

)

题目12

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

针max

传回该串地址。(注意:用****作为结束输入的标志。)

试题程序。

ftinclude"stdio.h"

#include"string,h”

Sinclude"conio.h"

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

max=&p

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

max指

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

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

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

for(i=l;i<num;i++)

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

P=a[i];

*max=p;

mainO

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

intn,i=0;

clrscr();

printf("enterstring:\nz,);

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(,z\nmax=%s\nz/,ps);

题目13

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

功能是

:删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。

试题程序。

Sinclude<conio.h>

Sinclude<stdio.h>

#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;

)

mainO

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

printf(,z\npleaseentern:");

scanf(〃%d〃,&n);

printf(z,\nenter%dpositivenumber:\n,,,n);

for(k=0;k<n;k++)scanf(〃%d〃,&aa[k]);

printf(zztheoriginaldatais:\n〃);

for(k=0;k<n;k++)printf(z,%5d〃,aa[k]);

printf(z,\nenteranumbertodeleted:,/);

scanf(〃%d〃,&y);

fun(aa,&n,y);

printfC'thedataafterdeleted%d:\n〃,y);

for(k=0;k<n;k++)printf(〃%4d〃,aa[k]);

printf(〃\n〃);

)

题目14

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

的次数

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

为:as

,则应输出6。

试题程序。

Sinclude"stdio.h〃

ttinclude"string.h〃

Sinclude〃conio.h〃

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

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

要让长串

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

intfun(char*str,char*substr)

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

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

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

n++;

returnn;

)

main()

(

charstr[81],substr[3];

intn;clrscr();

printf(z/enter1:〃);

gets(str);

printf(zzenter2:〃);

gets(substr);

puts(str);

puts(substr);

n=fun(str,substr);

printf(〃叩%d\n〃,n);

)

题目15

请编写一个函数intfun(intx),它的功能是:判断整数x是否是同构数。若

是同构

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

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

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

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

试题程序。

Sinclude〃conio.h〃

Sinclude"stdio.h〃

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

最后两

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

intfun(intx)

{intxx=x*x;

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

elsereturn0;

)

mainO

{intx,y;

clrscr();

printfC'\npleaseenteraintegernumbers:〃);

scanf(〃%d〃,&x);

if(x>100){printf("dataeror!\n,/);exit(0);}

y=fun(x);

if(y)printfC%dyes\n〃,x);

elseprintf(〃%dno!\n,z,x);

)

题目16

请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。

例如,输入:A1B23CD45,则输出为:A$lB$2$3CD$4$5o

注意:部分源程序给出如下。

Sinclude<stdio.h>

/*注:该题用while。循环来控制原字符串从头走到尾,在走动过程中判断是当

前字符是否是数字,若是则在新串中先连一个'$'然后再连原字符,否则直接连

原字符。一定要注意指针和下标的变化。最后要把新串拷贝到s所指的地址中,

注意不能用s=a;若用了,则实参数组还是原字符串。*/

voidfun(char*s)

{chara[100];

inti=0;

while(*s)

if(*s>='O'&&*s<='9'){a[i++]='$';a[i++]=*s++;}

elsea[i++]=*s++;

a-\0,;

strcpy(s,a);

)

main()

{chars[80];

printf(,zenterastring:z/);

scanf(〃%s〃,s);

fun(s);

printf(/ztheresult:%s\n〃,s);

)

题目17

请编一个函数fun(char*s),函数的功能是把字符串中所有的字符前移一个位

置,

串中的第一个字符移到最后。

例如:原有的字符串为:Mn.123xyZ,则调用该函数后,串中的内容为:n.123xyZMo

试题程序。

ttinclude"conio.h〃

Sinclude"stdio.h〃

#defineN81

/*注:该题要先将字符串的头元素存到某一变量(用c=*s)中,然后后面的字

符依向前

移(用for()循环),要记得在串的未尾加一个结束符。*/

fun(char*s)

{charc=*s;

for(;*(s+l);s++)

*s=*(s+l);

*s=c;

*(s+l)='\0';

mainO

{chara[N];

clrscr();

printf(z/enterastring:");

gets(a);

printf(zztheoriginalstringis:〃);

puts(a);

fun(a);

printf("thestringaftermodified:");

puts(a);

题目18

请编写函数fun,函数的功能是:将所有大于1小于整数m的非素数存入xx所

指数组

中,非素数的个数通过k传回。

例如,若输入:17,则应输出:9和468910121415160

试题程序。

^include<conio.h>

Sinclude<stdio.h>

/*注:内嵌的for()循环用于判断是否是素数,在的情况下,只要j对i

求余,余

数为0则表示i不是素数,则将i存入xx数组中。break;语句只是让它提前结

束循环。不用

亦可。*/

voidfun(intm,int*k,intxx[])

{inti,j;

*k=0;

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

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

if(i%j==0)

{xx[(*k)++]=i;break;}

}

mainO

{intm,n,zz[100];

printfC'\npleaseenteranintegernumberbetween10and100:〃

);

scanf(〃%d〃,&n);

fun(n,&m,zz);

printf(〃\n\nthereare%dnon-primenumberslessthan%d:〃,m,

n);

for(n=0;n<m;n++)

printf(zz\n%4d〃,zz[n]);

题目19

请编一个函数fun(char*s),函数的功能是把字符串中所有的字母改写成该字

母的

下一个字母,最后一个字母z改写成字母a。大写字母仍为大写字母,小写字母

仍为小写

字母,其他的字符不变。

例如:原有的字符串为:Mn.123zyZ,则调用该函数后,串中的内容为:No.123yzAo

试题程序。

Sinclude"conio.h〃

ttinclude"string.h〃

ttinclude"stdio.h〃

Sinclude"ctype.h〃

#defineN81

/*该题的思路较为明显,用for()循环一个字符一个字符地走动,移动过程中

判断是否

在a到y之间,若是则加1(即下移一个字母),若是z则换成对应的a*/

fun(char*s)

{inti,n=strlen(s);

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

{if((s[i]>='A'&&s[i]<,Z')〃(s[i]>='a'

It;'z'))

s[i]=s[i]+l;

elseif(s[i]==,z)s[i]=,a;

elseif(s[i]=='Z')s[i]=,A,;

)

)

mainO

{chara[N];

clrscr();

printf(zzenterastring/');gets(a);

printf("theoriginalstringis:,/);puts(a);

fun(a);

printf("thestringaftermodified:z,);

puts(a);

题目20

请编写函数fun,函数的功能是:将s所指字符串中、下标为奇数位置上的大写

字母

转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换;若该

位置上

是大写字母Z,则仅转换成小写字母z。

例如,输入:ABCdxZZZ,则输出为:AcCdXzZzo

试题程序。

Sinclude"stdio.h"

#defineN80

/*该题的算法与上一题相似,注意同一个字母小写要比大写在ASCH值上大32。

*/

voidfun(char*s)

{

inti;

for(i=l;i<N;i=i+2)

if(s[i]>='A'&&s[i"'Z')

s[i]+=32+l;

elseif(s[i]==,Z')s[i]+=32;

main()

{

chars[N];

printf("\nenterastring:");scanfs);

fun(s);

printf(/z\ntheresult:%s\nz/,s);

题目21

程序定义了N*N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能

是:

给数组周边元素置0值。

例如:a数组中的值为

则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<stdio.h>

Sinclude<conio.h>

ttinclude<stdlib.h>

#defineN5

/*由于是赋值0,因而只要能表示出周边元素即好办,它与求和不同在于求和

不能重复

对某个元素进行运算,而赋值则可重复赋值。所以这里只用了一个for()循环来

找出所有

的周边元素。*/

fun(intw[][N])

{inti;

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

{w[i][0]=0;

w[i][N-l]=0;

w[0][i]=0;

w[N-l][i]=0;

)

main()

{inta[N][N],i,j;

clrscr();

printf(''*****Thearray*****\n〃);

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

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

{a[i][j]=rand()%10;

printf(飞4d”,a[i][j]);

}

printf("\n");

)

fun(a);

printf(''*****Theresult*****\n");

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

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

printf("%4d",a[i][j]);

printf("\n");

)

}

题目22

请编写函数fun,它的功能是:求出ss所指字符串中、指定字符的个数,并返

回此

值。

例如:若输入字符串:123412132,输入字符为:1,则输出:30

试题程序。

#include<conio.h>

#include<stdio.h>

ttdefineM81

/*注:本题用while。循环来控制字符的移动,每移动一个字符都要进行判断

(if(*ss

==c))是否为指定的字母,若是则个数加1。这里要注意如何让SS指针向下走

动(ss++)

□*/

intfun(char*ss,charc)

{intnum=O;

while(*ss!=,\0")

{if(*ss==c)num++;

ss++;

)

return(num);

)

main()

{chara[M],ch;

clrscr();

printf("\nPleaseenterastrint:/z);gets(a);

printf("\nPleaseenterachar:");ch=getchar();

printf('\nThenumberofthecharis:%d\nz,,fun(a,ch));

)

题目23

程序定义了N*N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能

是:

求出数组周边元素的平均值并作为函数值返回给主函数中的So

例如:a数组中的值为

则返回主程序后s的值应为:3.3750

试题程序。

Sinclude<stdio.h>

Sinclude<conio.h>

Sinclude<stdlib.h>

#defineN5

/*注意不能重复计算,它与题21不同,第一个for()循环求出第一列与最后一

列的和,

第二个for()循环求出第一行与最后一行(已除去两头元素),要注意第二个

for()中起

始为b最后为N-2o*/

doublefun(intw[][N])

{inti,t=0;

doubles=0;

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

{s+=w[i][0]+w[i][N-l];t+=2;}

for(i=l;i<N-l;i++)

{s+=w[0][i]+w[N-l][i];t+=2;}

s=s/t;

returns;

)

main()

{inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};

inti,j;

doubles;

clrscr();

printf(〃*****Thearray*****\n〃);

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

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

printf(z/%4dz,,a[i][j]);

printf(〃\n〃);

}

s=fun(a);

printf(〃*****Theresult*****\n〃);

printfC'Thesumis%lf\n〃,s);

)

题目24

编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat)

O

例如,分别输入下面两个字符串:

FirstSrting-

SecondString

程序输出:

FirstString一SecondString

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<stdio.h>

#include<conio.h>

/*注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意

在这个for

()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字

符依次放

到第一个字符串的末尾。止匕外,还要注意最后一定要有来给字符

串加上

结束符。*/

voidfun(charpl[],charp2[2)

{inti,j;

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

for(j=0;p2[j];j++)

pl[i++]=p2[j];

pl[i]=\0';

)

main()

{charsl[80],s2[80];

clrscr();

printf("/Entersiands2:\n");

scanf("%s%s”,si,s2);

printf(,,sl=%s\n//,si);

printf("s2=%s\n”,s2);

printf(z/Invokefun(si,s2):\n");

fun(si,s2);

printf(,zAfterinvoking:\n??);

printf(z/%s\nz,,si);

)

题目25

程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]

),函数的功能是:使数组第一列元素中的值与最后一列元素中的值对调、第二

列元素的

值与倒数第二列中的值对调、……、其他依次类推。

例如:a数组中的值为

则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<stdlib.h>

Sinclude<conio.h>

Sinclude<stdio.h>

^defineN5

/*本题的第一个for()循环用于控制行,而内嵌的for()用于在同一行中将列与

列对调,

当i为0时a[m][i]为第m行的第一列元素,a[m][NT-i]为第m行的最后一列

的元素,正好

符合调换的要求。依次类推。*/

intfun(inta[][N])

{inti,m,t;

for(m=0;m<N;m++)

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

{t=a[m][i];

a[m][i]=a[m][N-l-i];

a[m][N-l-i]=t;

)

)

main()

{inta[N][N],i,j;

clrscr();

printf(''*****Thearray*****\n〃);

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

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

{a[i]Lj]=rand()%30;printf(z,%4dz,,a[i][j]);}

printf("\n");

)

fun(a);

printf(''*****Theresult*****\n");

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

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

printf("%4d",a[i][j]);

printf("\n");

)

)

题目26

请编写函数fun,函数的功能是:实现B=A+A,,即把矩阵A加上A的转置,存

放在矩

阵B中。计算结果在main函数中输出。

例如:输入下面的矩阵:其转置矩阵为:

程序输出:

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<conio.h>

#include<stdio.h>

/*26题:本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为

转置后的

第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两

矩阵的

相加后得出的新矩阵,由转置性质可知原转置后位置为在表

达式:b[

i][j]=a[i][i]第一个a为A的元素,第二个a为A'的元素。*/

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];

)

main()

{inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf(级7d”,t[i][j]);

printf("\n");

)

题目27

序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int

a[][N]),

函数的功能是:使数组第一行元素中的值与最后一行元素中的值对调、第二行元

素的值

g倒数第二行中的值对调、……、其他依次类推。

例如:a数组中的值为

则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<stdlib.h>

Sinclude<conio.h>

ttinclude<stdio.h>

^defineN5

/*27题:该题与25题相似,外层for()循环用于控制一列一列地移动,内嵌的

forr()循

环用于控制在同一列内对应行元素的对调。为第m列第i行元素,而

a[N-l-i][m]

为第m列倒数第i行的元素,正好需要对调。*/

fun(inta[][N])

{inti,m,t;

for(m=0;m<N;m++)

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

{t=a[i][m];

a[i][m]=a[N-l-i][m];

a[N-l-i][m]=t;

main()

{inta[N][N],i,j;

clrscr();

printf(〃*****Thearray*****\n〃);

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

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

{a[i][j]=rand()%30;printf(〃%4d〃,a[i][j]);}

printf(〃\n〃);

)

fun(a);

printf(〃*****Theresult*****\n〃);

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

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

printfCz%4dz/,a[i][j]);

printf(〃\n〃);

}

题目28

m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均

分的

人数作为函数值返回。

例如,当score数组中的数据为:10、20、30、40、50、60、10、80、90、时,

函数返

回的人数应该是4,below中的数据应为:10、20、30、40。

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<string.h>

Sinclude<conio.h>

ttinclude<stdio.h>

/*28题:第一个for()循环用来计算score数组中分数的总和,然后用aver/初

求出平均

值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意

j的递增

方式。*/

intfun(intscore[],intm,intbelow[])

{inti,j=0,aver=0;

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

aver+=score[i];

aver/=m;

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

if(score[i]<aver)

below[j++]=score[i];

returnj;

)

mainO

{inti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,80,90);

clrscr();

n=fun(score,9,below);

printf(,?\nBelowtheaveragescoreare:〃);

for(i=0;i<n;i++)printf("%4d”,below[i]);

题目29

程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]

),函数的功能是:使数组左下半三角元素中的值全部置成0。

例如:a数组中的值为

,则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

/*29题:该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只

有左边的

i个元素要置为0(每行总是如此)。用外层for()来控制行而内嵌的for()来控

制每行的

左边元素,故而在内嵌for。中j最大只能循环到i(即表示出第i行左边的i

个元素)。*

/

intfun(inta[][N])

{inti,j;

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

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

a[i][j]=0;

)

main()

{inta[N][N],i,j;

clrscr();

printf("***Thearray****\n");

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

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

{a[i][j]=rand()%10;printf("%4d",a[i][j]);}

printf('\n");

)

fun(a);

printf("Theresult'd');

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

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

printf("%4d",a[i][j]);

printf("\n");

)

)

题目30

请编写函数fun,经的功能是:求出1到1000之内能被7或11整除、但不能同

时补7和

11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<conio.h>

#include<stdio.h>

/*30题:该题关键就是如何表示能被7或11整除,但不能同时被7和11整除。

用(说7==

0)〃(i%ll==0)来表示能被7或11整除,用!((设7==0)&&(设11==0))来表示不

同时被7和11整除。

voidfun(int*a,int*n)

{inti,m=0;

for(i=l;i<1000;i++)

if(((i%7==0)//(i%ll==0))&&!((i%7==0)&&(i%U==0)))

{a[m]=i;m+=l;}

*n=m;

)

main()

{intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;k<n;k++)

if((k+l)%10==0)printf("\n");

elseprintf(z,%d,",aa[k]);

题目31

程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int

,函数的功能是:使数组右上半三角元素中的值全部置成0。

例如:a数组中的值为

,则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

Sinclude<stdio.h>

#include<conio.h>

Sinclude<stdlib.h>

#defineN5

/*31题:该题的关键亦是在如何表示右上半角,当从上往下到第i行时要从第

i列(所

以内嵌for()的j从i开始循环)开始替换直到最后一列,本题用外层for。来

控制行,而

用内嵌的for()来控制在每一行内右边元素置0。

intfun(inta[][N])

{inti,j;

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

for(j=i;j<N;j++)

a[i][j]=0;

)

main()

{inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n〃);

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

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

{a[i][j]=rand()%20;printf("%4d",a[i][j]);}

printf("\n");

}

fun(a);

printf("THERESULT'n");

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

{for(j=0;j<N;j++)printf("%4d",a[i][j]);

printf('\n");

题目32

编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不

是偶

数的各整数,并放在PP所指的数组中,这些除数的个数通过形参n返回。

例如,若x中的值为:30,则有4个数符合要求,它们是

1,3,5,15o

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<conio.h>

#include<stdio.h>

/*32题:由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好

保正i永远

的奇数。这里也要注意存放结果的数组PP的下标变化方式。*/

voidfun(intx,intpp[],int*n)

{inti,j=0;

for(i=l;i<=x;i=i+2)

if(x%i==0)

pp[j++]=i;

*n=j;

)

main()

{intx,aa[1000],n,i;

printf(/z\npleaseenteranintegernumber:\n");scanf("%d

”,&x);

fun(x,aa,&n);

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

printf(/z%d”,aa[i]);

printf("\n");

)

题目33

序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int

ntn),函数的功能是:使数组右上半三角元素中的值乘以m。例如:若m的值

为2,a数组

中的值为

,则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<stdio.h>

Sinclude<conio.h>

Sinclude<stdlib.h>

#defineN5

/*33题:该题的关键也是在如何表示右上半角(可以与31题相同),本题采

用的是在一

行内从最后一列的元素开始往前乘,只有「与时才改变(原理与31题相同)。

*/

intfun(inta[][N],intm)

{inti,j;

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

for(j=N-l;j>=i;j—)

a[i]

)

main()

{inta[N][N],m,i,j;

printf("****thearray****\n");

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

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

{a[i][j]=rand()%20;printf("%4d",a[i][j]);}

printf("\n");

)

dom=rand()%10;while(m>=3);

printf("m=%4d\n”,m);

fun(a,m);

printf(z/theresult\n");

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

{for(j=0;j<N;j++)printf(级4d”,a[i][j]);

printf("\n");

)

)

题目34

编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中‘a'至『z'

26

个字母各自出现的次数,并依次放在pp所指数组中。

例如,当输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:

33322110000000000000000000

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

#include<conio.h>

#include<stdio.h>

/*34题:本题采用的是字母的ASCH码值与数组pp下标的对应转换关系分别

求出对应字

母的个数。第一个for()是给pp赋初值0,第二个for。用于控制在字符串内从

头到尾移动

o由于字母'a'的ASCH码值为97而它的个数要放在pp[0]中,而'a'-97的值正

好为0

,其它的依此类推。*/

voidfun(char*tt,intpp[])

{inti;

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

pp[i]=o;

for(;*tt;tt++)

if(*tt<=,z'&&*tt>='a)

pp[*tt-97]++;

}

main()

{charaa[1000];

intbb[26],k;

clrscr();

printf("\nPleaseenteracharstring:");scanf(“*s",aa)

T

fun(aa,bb);

for(k=0;k<26;k++)printfbb[k]);

printf("\n");

)

题目35

序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int

a[][N],in

tn),函数的功能是:使数组左下半三角元素中的值乘以n。例如:若n的值为

2,a数组

中的值为

,则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中

填入你编写

的若干语句。

试题程序。

^include<stdio.h>

Sinclude<conio.h>

Winclude<stdlib.h>

^defineN5

/*35题:本题与29题相似,只要能表示出左下半角的元素即可。*/

intfun(inta[][N],intn)

{inti,j;

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

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

a[i][j]*=n;

)

main()

{inta[N][N],n,i,j;

printf("****thearray****\n");

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

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

{a[i][j]=rand()%10;printf(z,%4d/z,a[i][j]);}

printf("\n");

}

don=rand()%10;while(n>=3);

printf(/zn=%4d\n”,n);

fun(a,n);

printf(''****theresult****\n");

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

{for(j=0;j<N;j++)printf("%4d”,a[i][j]);

printf("\n");

)

)

题目36

数fun的功能是:将两个两位数的整数a、b合并形成一个整数放在c中。合并

的方式

是:将a的十位和个位数依次放在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论