计算机二级南开100题二级C.docx

上传人:无*** 文档编号:68340323 上传时间:2022-12-27 格式:DOCX 页数:135 大小:262.61KB
返回 下载 相关 举报
计算机二级南开100题二级C.docx_第1页
第1页 / 共135页
计算机二级南开100题二级C.docx_第2页
第2页 / 共135页
点击查看更多>>
资源描述

《计算机二级南开100题二级C.docx》由会员分享,可在线阅读,更多相关《计算机二级南开100题二级C.docx(135页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、南开100题二级cfun (a);题目1编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。例子如:字符串中原有的内容为: abcdefg,则调用该函数后,串中的内容为:gfedcbaO试题程序:#include #include #include #define N 81/*注:该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+is+n-l-i来控制)。由于s+i中一个地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*)*/fun (char *s) int i=0,t,n=strlen(s);fb

2、r(;s+is+n-l-i;i+)t=*(s+i);*(s+i)=*(s+n-l-i);*(s+n-l-i)= t;)main() char aN;clrscrQ;printf(Enter a string:); gets (a);printf(The original string is:);put s(a);printf(HnM);printf(MThe string after modified:);puts (a);)题目2写程序,实现矩阵(3行3歹IJ)的转置(即行列互换)。例如,输入一面的矩阵:程序输出:试题程序:#include #include /*这题的关键在于进行行列下标转

3、换的算法,由矩阵的对称性我们不难看出在进行行列互换时aj在好是与互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;i+)再套 for(j=i+l;j3;j+)来完成左上角的走动。*/int fun(int array33) intfor(i=0;i2;i+) for(j=i+l;j3;j+)t=array ij;arrayij=array ji;arr ayji尸 t;mainQ int i,j;int array33=l00,200,300,400,500,600,700,800,900;clrscrQ;for(i=0;i3;i+)for(j=0;j3;j+) print

4、f(%7d,arrayij);printf(n);)fun (array);printf(Converted array:n);for(i=0;i3;i+)for(j=0;j3;j+) printf(%7d,arrayij);printf(n);题目3请编一个函数 fun(int *a,int n,int *odd,int *even ),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数:利用指针。dd返回奇数之和,利用指针even返回偶娄这和。例如:数组中的值依次为:1,8,2,3,11,6;则利用指针。dd返回奇数之和24;利用指针even返回偶数之和8。

5、试题程序。#include #include #define N 20/*注:该题的算法是:用for。循环一步一步地找元素,用 if(!a%2)来判断是否是奇数,运算是求余运算,当对2求余为1时表示原数为奇数,否则为偶数。*/fun(int *a,int n,int *oddjnt *even ) int i;*even=0;*odd=0;for(i=0;in;i+)if(!(ai%2)*even+=ai;else*odd+=ai;mainQ int aN=1,9,2,3,11,6,i,n=6,od d,even;clrscrQ;printfThe original data is:nn);

6、for(i=0;in;i+) printf(M%5dM*(a +i);printf(,nnn);fun(a,n,&odd,&even);printf(nThe sum of odd numbers:%dnn,odd);printf(The sum of even number:%dnn,even);题目4要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在 fun函数中实现,请给出该函数的定义。试题程序。#include #include #define VSIZE 20int vectorVSIZE;/*注:该题的算法是用一个变量(j)来存储最

7、小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较如发现更小的则让j重新拥有最小值元素的下标(尸i)。*/int fun(int list。,int size) int i,j=0;for(i=l;isizey+)if(listilistj)j二i;return j;)mainQ(int i;clrscrQ;for(i=0;iVSIZE;i+)(vector i=rand 0;printf(Vector%d=%6dn,i,vectoHi);)i=fun(vector,VSIZE);printf(nnMininum:vector%d=:%6 dnn,i,vectori);题目5请

8、编一个函数 float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h 中的值为正数)。例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。试题程序。#include #include /*注:h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时o如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)o进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除1。,这样又出现

9、了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成。*/float fun(float h) long t;h=h*1000;t=(h+5)/10;return (float) t/100;)main()(float a;clrscrQ;printf(nEnter a:); scanf(n%f&a);printf(HThe original data is:); printf(M%fnnH,a);printf(nThe result :%6.2fnn,fun(a);)题目6编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。若程

10、序执行时,输入字符串为: turbo c and Borland c+从键盘上输入字符:n,则输出后变为:turbo c ad borlad c+如果输入的字符串不存在,则字符串照原样输出。试题程序。#include #include /*注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果si不是要删的字符,则将其按顺序放到新串中(新串亦是用S来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。*/int fun (char s,int c)int i,k=0;for(i=0;si;i+)if(si!=c) sk+

11、=si;sk=0;mainQ static char str|二turbo c and borland c+”;char ch;clrscrQ;printff1:%snn,str);printfC :”);scanf(%c,&ch);fun(str,ch);printf(,str=%snn,str);)题目7请编写一个 unsigned fun(unsigned w), w 是一个大于10的无符号整数,若w 是n (n=2)位的整数,函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923; w值为923则函数返回23。试题程序。#include #include /*

12、注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于 return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if。语句。*/unsigned fun( unsigned w ) if(wzz 10000) return w%10000;if(w=1000) return w%1000; if(w=100) return w%100;return w%10;)main。 unsigned x;printf(enter a unsi

13、gned integer number :);scanf(%u,&x);if(x10) printf(Hdata error!);else printf (the result :%unn, f un(x);)题目8编写函数 int fun(int lim,int aaMAX), i祸数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。试题程序。#include #include #define MAX 100/*注:循环 forG=2;i=k)用于判断在上一个for。循环中i能否走到k,如果能则表示在2到kJ的数都不能整除k,即k为素数。*/int fun( in

14、t lim, int aaMAX|) int i,j=O,k;fbr( k=2; klim; k+) fbr( i=2; i=k) aaj+=k;return j;)mainQ int limit,i,sum;int aafMAX;printf(nn input a integer numberscanf(%dn,&limit);sum=fun (limit,aa);fbr(i=O; isum; i+) if(i%10=0&i!=0)printff,nn);printfC,%5dM, aai);题目9请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数

15、中赋予。例如:二维数组中的值为则函数值为61 o 试题程序。#include #include #define M 4#define N 5/*注:该题的第一个for。循环是计算矩阵的最上一行和最下一行的总和,第二个for。是计算除两头元素以外的最左一列和最右一列的兀素的和,最后 sun就是周边元素的和。*/int fun(int aMN)int sum=0,i;for(i=0;iN;i+) sum-+-=aOi+aM-li;for(i=l;iM-l;i+); sum+=aiO+aiN-l; return sum ;) mainQ int aaMN=l,3,5,7,9,2,9,9,9,4,6,

16、9,9,9,8,13,5,7,0;int i,j,y;clrscrQ;printffThe original data is :n);for(i=0;iM;i+)for(j=0;jN;j+) printf(%6d,aa iDD;printf(n);)y=fun(aa);printffXnThe sum:%dn,y);printffXn);题目10请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca ,排序后输出为 CedcEAao试题程序。#include #include #include /*该题采用的排序法是选择法进行降

17、序排序,算法是用外for。循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for。循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for。循环中从1开始,只至(j num-2即可。*/ int fun (char *s,int num) int i,j,t;for(i=1;inum-2;i+) for(j =i+1;jnum-l ;j+) if(sisj) t=si;si=sj;sj=t;main。 char s10;clrscrQ;printf(输入7个字符的字符串巧;gets(s);fun(s,7);pr

18、intf(n%s,s);)题目11请编一函数 void fun(int ttMN,int ppN), tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。试题程序。#include Hconio.hH#include stdio.h#define M 3#define N 4/*注:该题用 fbr(i=O;ivN;i+)来控制一列一列地找,而内嵌循环for(j=0;jM;j+)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在多

19、数题目中都要用到多重循环(一般为二重)。*/void fun(int ttMN,int ppN) int i, j;for(i=0;iN;i+) pp=ttOi;for(j=O;jM;j+)if(ttjippi) ppi=ttOi; mainQ int tMN=22,45,56,30,19,33,45,38,20,22,66,40;int pN,i,j,k;clrscrQ;printf(the original data is:n); for(i=0;iM;i+)for(j=0;jN;j+) printf(%6d,tij);printf(n);)fun(t,p);printf(nthe res

20、ult is:n);for(k=0;kN;k+) printf(%4d,pk);printf(nnn);)题目12写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max 传回该串地址。(注意:用*作为结束输入的标志。)试题程序。#include stdio.h#include string.h#include nconio.hn/*函数strlenO用于求出字符串的长度,这个题中主要是*max=p;不能换成max=&p;如果用maz=&p;则只改变了 max的指向,它不能传回给实参。因此我们要改变max指向地址中的内容,这才能使得实参ps有正确的值。*/fun (cha

21、r (*a)81, int num,char * max) char *p=a0;int i;fbr(i=1;istrlen (p)P=ai;*max=p;)mainQ char ss1081,*ps;int n,i-0;clrscrQ;printf(nenter string:n);gpts(ssi);puts(ssi);while(!strcmp(ssi,*)=O)i+;gets(ssi);puts(ssi);)n=i;fun(ss,n,&ps);printf(1,nmax=%snH,ps);)题目13请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值

22、为y的元素。数组元素中的值和y的值由主函数通过健盘读入。试题程序。#include #include #define M 20/*注:该题的算法是,用for。循环控制元素逐一判断数组元素是否等于y,若不等则赋给新数bb,由于删除的关系j总是小于或等于i,故而可用bb作为新数组,与第6题相似。还要注意*n=j;如果没有这个语句则不能传回新数组的个数,另外也不能换成n=&j;这点是用指针时常犯的错误,切记!*/void fun (int bb int *njnt y) int i, j=0;for( i=0; i*n; i+)if(bbi!=y) bbj+=bbi;*n=j;)mainQ int

23、aaM,n,y,k;printff*nplease enter n:n); scanf(%d,&n);printf(Hnenter %d positive numb er:nn, n);for( k=0; kn; k+) scanf(%d H,&aak);printf(nthe original data is:nn); for( k=0; kn; k+) printf(n %5 dn, aak);printf(nenter a number to del eted:);scanf(%d,&y);fun(aa,&n,y);printf(nthe data after deleted %d:n,

24、 y);for(k=0; kn; k+) printf(%4d, aak);printf(n);)题目14编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数 o例如,假定输入的字符串为: asd asasdfg asd as zx67 asd mkl O,子字符串为:as ,则应输出6。试题程序。#include stdio.h#include string.h#include conio.h/*注:由于小串中只有2个字符所以可用 stri=sbustrO&stri+l=subs杜来判断小串是否与长串当前 W (stri)相同(即出现一次)。因而只要让长串当前位置逐一向

25、后移即可(用 for。循环来完成)。*/int fun(char *str,char *substr) int i,n=O,s=strlen(str);br(i=0;i100)printf(ndata eror!nn);exi t(0);)y=fun(x);if(y) printfC%d yesn,x);else printf (%d no!n,x);题目16请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。注意:部分源程序给出如下。#include /*注:该题用while。循环来控制原字符串从头走到

26、尾,在走动过程中判断是当前字符是否是数字,若是则在新串中先连一个$然后再连原字符,否则直接连原字符。一1定要注意指针和卜标的变化。最后要把新串拷贝到s所指的地址中,注意不能用s=a;若用了,则实参数组还是原字符串。*/ void fun( char *s)char a100;int i=0;while(*s)if(*s=0&*s=9)ai+=T; ai+=*s+;else ai+4-=*s+;a=0;strcpy(s,a);mainQ char s80;printf(enter a string:); scanf(%s, s);fun(s);printf(the result:%sn, s);

27、)题目17请编一个函数fun (char *s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:原有的字符串为: Mn.l23xyZ,则调用该函数后,串中的内容为:n.l23xyZM0试题程序。#include conio.h#include stdio.h#define N 81/*注:该题要先将字符串的头元素存到某一变量(用c=*s)中,然后后面的字符依向前移卵forO循环),要记得在串的未尾加一个结束符。*/ fun (char *s) char c=*s;for(;*(s+l);s+)*s=*(s+l);*s=c;*(s+l 尸0;)mainQ char

28、 aN;clrscrQ;printf(nenter a string:n);gets(a);printfthe original string is:);puts (a);fun (a);printfthe string after modified:)puts (a);)题目18请编写函数fun,函数的功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:9和46891012141516。试题程序。#include #include /*注:内嵌的for。循环用于判断是否是素数,在ji的情况下,只要j对i求余,余数为。则表示i不是素数

29、,则将 i存入xx数组中。break;语句只是让它提前结束循环。不用亦可。*/void fun( int m, int *k, int xx) int i,j;*k=0;for( i=2; im; i+)for( j=2; ji; j+)if( i%j=0) xx(*k)+=i; break;mainQ int m, n,zz100;printf(Mn please enter an integer number between 10 and 100:“);scanf( H%dn,&n);fun(n,&m,zz);printf(Mnn there are %d non-pr ime numbe

30、rs less than %d:, m,n);fbr(n=0; nm; n+)printf(nn %4dM,zzn);)题目19请编一个函数fun(char *s),函数的功能是把字符串中所有的字母改写成该字母的下一个字母,最后一个字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他的字符不变。例如:原有的字符串为: Mn.l23zyZ,则调用该函数后,串中的内容为:No.l23yzAo 试题程序。#include Hconio.hH#include string.h#include stdio.h#include ctype.h#define N 81/*该题的思路较为明显,

31、用for。循环一个字符一个字符地走动,移动过程中判断是否在a到y之间,若是则加1(即下移一个字母),若是z则换成对应的a */fun (char *s) int i,n=strlen(s);fbr(i=0;i=,A,&si=k;z)si=si+ l;else if(s=z) si=a;else if(si=Z) si=A;)mainQ char aN;clrscrQ;printfenter a string:n);gets(a);printfthe original string is:n);put s(a);fun (a);printf(nthe string after modified?

32、*)puts (a);)题目20请编写函数fun,函数的功能是:将s所指字符串中、下标为奇数位置上的大写字母转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母Zo例如,输入:ABCdxZZZ,则输出为:AcCdXzZz o试题程序。#include stdio.h#define N 80/*该题的算法与上一题相似,注意同一个字母小写要比大写在 ASCH值上大32o */ void fun(char *s)(int i;for(i=l;i=A&siZ,) si+=32+l;else if(si=Z) si+=32;)mainQ(char

33、sN;printf(Mnenter a string:jscanff1%s”,s);fun(s);printf(nnthe result:%snn,s);)题目21程序定义了 N*N的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:给数组周边元素置0值。例如:a数组中的值为则返回主程序后a数组中的值应为注意:部分源程序给出如下。请勿改动主函数main和其它函数中的任何去何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序。#include #include #include #define N 5/*由于是赋值0,因而只要能表示出周边元素即好办,它与求和不同在于求和不

34、能重复对某个元素进行运算,而赋值则可重复赋值。所以这里只用了一个forO循环来找出所有的周边元素。*/fun(int wN) int i ;fbr(i=0;iN;i+) wi0=0;wiN-l=0;w0i=0;wN-li=0;mainQ int aNN,i,j;clrscrQ;printf。* The array *n);for(i=0;iN;i+) for(j=O;jN;j+) aij=rand()%10;printf(%4d,aij);printf(MnH);) fun (a);printf(* The result *nn)for(i=O;iN;i+) M=O;jN;j+) printf

35、(%4d,aij); printf(n);)题目22请编写函数fun,它的功能是:求出ss所指字符串中、指定字符的个数,并返回此值。例如:若输入字符串:123412132,输入字符为:1,则输出:3o 试题程序。#include#include#define M 81/*注:本题用while。循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss=。)是否为指定的字母,若是则个数加lo这里要注意如何让 SS指针向下走动(ss+)0*/int fun (char *ss,char c)int num=0;while(*ss!=,0,)if(*ss=c) num+;ss+;return(n

36、um);mainQchar aM,ch;clrscrQ;printf(unPlease enter a strint:n);g ets(a);printffnPlease enter a char:n);ch =getcharQ;printfnThe number of the cha r is:%dnn,fun(a,ch);)题目23程序定义了 N*N的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的So 例如:a数组中的值为则返回主程序后s的值应为:3.375。试题程序。#include #include #include

37、#define N 5/*注意不能重复计算,它与题21不同,第一个for。循环求出第一列与最后一列的和,第二个for。循环求出第一行与最后一行(已除去两头元素),要注意第二个for()中起始为1,最后为N-2o */ double fun (int wN) int i,t=0;double s=0;for(i=0;iN;i+)s+=wi0+wiN-l; t+=2; for(i=l;iN-l;i+)s+=wOi+wN-lli; t+=2; s=s/t;return s;) mainQ int aNN=0,l,2,7,9,l,9,7,4,5,238,3,1,4,5,6,8,2,5,9,1,4,1;

38、int i,j;double s;clrscrQ;printf(* The array *n);for(i=0;iN;i+)for(j=O;jN;j+) printf(%4d,aij); printf(n);) s=fun(a);printf(* The result *n”)printf(HThe sum is %lfnn,s);)题目24编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat)例如,分别输入下面两个字符串:FirstS rting- SecondString 程序输出:FirstS tring-SecondString 注意:部分源程序给出如下。请勿改动主函数main和其它函数中的任何去何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序。#include#include/*注:第一个for。循环用于让 i成为第一个字符串的结束符的下标,要注意在这个for0后要有一个分号否则出错。第二个for。的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有 pli-0;来给字符串加上结束符。*/void fun(char pl ,char p2)int i,j;for(i=O;pli;i+); for(j=0;p2j;j+)pl|l+=p20;pli=0;mainQ char sl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com