1、1编一个函数funchars函数的功能是把字符串中的内容逆置1、 编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。例子如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:gfedcba。试题程序:#include #include #include #define N 81/*注:该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+is+n-1-i来控制)。由于s+i中一个地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*) */fun(char *s) int i=0,t,n=
2、strlen(s);for(;s+is+n-1-i;i+)t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;main() char aN;clrscr();printf(Enter a string:); gets(a);printf(The original string is:);puts(a);fun(a);printf(n);printf(The string after modified:);puts(a); 2、 写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,输入一面的矩阵:程序输出:试题程序:#include #include /*这题的关
3、键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时aj在好是与aji互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;i+)再套for(j=i+1;j3;j+)来完成左上角的走动。*/int fun(int array33) int i,j,t;for(i=0;i2;i+)for(j=i+1;j3;j+)t=arrayij;arrayij=arrayji;arrayji=t;main() int i,j;int array33=100,200,300,400,500,600,700,800,900;clrscr();for(i=0;i3;i+)for(
4、j=0;j3;j+)printf(%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给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶娄这和。例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针ev
5、en返回偶数之和8。试题程序。#include #include #define N 20/*注:该题的算法是:用for()循环一步一步地找元素,用if(!ai%2)来判断是否是奇数,%运算是求余运算,当对2求余为1时表示原数为奇数,否则为偶数。*/fun(int *a,int n,int *odd,int *even) int i; *even=0;*odd=0;for(i=0;in;i+)if(!(ai%2)*even+=ai;else*odd+=ai;main() int aN=1,9,2,3,11,6,i,n=6,odd,even;clrscr();printf(The origina
6、l data is:n);for(i=0;in;i+) printf(%5d,*(a+i);printf(nn);fun(a,n,&odd,&even);printf(The sum of odd numbers:%dn,odd);printf(The sum of even number:%dn,even);4、 要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。试题程序。#include #include #define VSIZE 20int vectorVSIZE;/*注:该题的算法是用一个变量(j
7、)来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较(if(listilistj),如发现更小的则让j重新拥有最小值元素的下标(j=i)。*/int fun(int list,int size) int i,j=0;for(i=1;isize;i+)if(listilistj)j=i;return j;main()int i;clrscr();for(i=0;iVSIZE;i+)vectori=rand();printf(Vector%d=%6dn,i,vectori);i=fun(vector,VSIZE);printf(nMininum:vector%d=%6dn,
8、i,vectori);5、 请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。试题程序。#include #include /*注:h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对
9、整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0 。*/float fun(float h) long t;h=h*1000;t=(h+5)/10;return (float)t/100;main()float a;clrscr();printf(Enter a:); scanf(%f,&a);printf(The original data is:);printf(%fnn,a);printf(The result :%6.2fn,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)
11、 sk+=si; sk=0;main() static char str=turbo c and borland c+;char ch;clrscr();printf( :%sn,str);printf( :);scanf(%c,&ch);fun(str,ch);printf(str=%sn,str);7、 请编写一个unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n=2)位的整数,函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;w值为923则函数返回23。试题程序。#include #include /* 注:由于u
12、nsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if()语句。 */unsigned fun( unsigned w ) if(w=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 unsigned i
13、nteger number : );scanf( %u,&x);if(x10) printf(data error!);else printf (the result :%un, fun(x);8、 编写函数int fun(int lim,int aaMAX),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。试题程序。#include #include #define MAX 100/*注:循环for(i=2;i=k)用于判断在上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。*/int fun( int lim, i
14、nt aaMAX) int i,j=0,k;for( k=2; klim; k+) for( i=2; i=k) aaj+=k;return j;main() int limit,i,sum;int aaMAX;printf(n input a integer number:);scanf( %d,&limit);sum=fun(limit,aa);for(i=0; isum; i+) if(i%10=0&i!=0)printf(n);printf(%5d, aai);9、 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:二维数组中的
15、值为则函数值为61。试题程序。#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+=a0i+aM-1i;for(i=1;iM-1;i+);sum+=ai0+aiN-1;return sum ;main() int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0;in
16、t i,j,y;clrscr();printf(The original data is :n);for(i=0;iM;i+)for(j=0;jN;j+) printf(%6d,aaij);printf(n);y=fun(aa);printf(nThe sum: %dn,y);printf(n);10、 请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。试题程序。#include #include #include /*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端
17、往后端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for()循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for()循环中从1开始,只到num-2即可。*/int fun(char *s,int num) int i,j,t;for(i=1;inum-2;i+)for(j=i+1;jnum-1;j+)if(sisj) t=si;si=sj;sj=t;main() char s10;clrscr();printf(输入7个字符的字符串:);gets(s);fun(s,7);printf(n%s,s);11、 请编一函数void
18、fun(int ttMN,int ppN),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。试题程序。#include conio.h#include stdio.h#define M 3#define N 4/*注:该题用for(i=0;iN;i+)来控制一列一列地找,而内嵌循环for(j=0;jM;j+)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在多数题目中都要用到多重循环(一般为二重)。*/void fun(in
19、t ttMN,int ppN) int i, j;for(i=0;iN;i+) pp=tt0i;for(j=0;jM;j+)if(ttjippi) ppi=ttji;main() int tMN= 22,45,56,30,19,33,45,38,20,22,66,40;int pN,i,j,k;clrscr();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 result is:n);for(k=0;kN;k+)printf(%4d
20、,pk);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, int num,char *max) char *p=a0;i
21、nt i;for(i=1;istrlen(p)p=ai; *max=p;main() char ss1081,*ps;int n,i=0;clrscr();printf(enter string:n);gets(ssi);puts(ssi);while(!strcmp(ssi,*)=0)i+;gets(ssi);puts(ssi);n=i;fun(ss,n,&ps);printf(nmax=%sn,ps);13、 请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。试题程序。#include #incl
22、ude #define M 20/*注:该题的算法是,用for()循环控制元素逐一判断数组元素是否等于y,若不等则赋给新数bb,由于删除的关系j总是小于或等于i,故而可用bb作为新数组,与第6题相似。还要注意*n=j;如果没有这个语句则不能传回新数组的个数,另外也不能换成n=&j;这点是用指针时常犯的错误,切记!*/void fun (int bb, int *n,int y) int i,j=0;for( i=0; i*n; i+)if(bbi!=y) bbj+=bbi;*n=j;main() int aaM,n,y,k;printf(nplease enter n:);scanf(%d,&
23、n);printf(nenter %d positive number:n, n);for( k=0; kn; k+) scanf( %d,&aak);printf(the original data is: n);for( k=0; kn; k+) printf( %5d, aak);printf( nenter a number to deleted:);scanf(%d,&y);fun(aa,&n,y);printf(the data after deleted %d:n, y);for(k=0; kn; k+) printf(%4d,aak);printf(n);4、 编写一个函数,该
24、函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为:as,则应输出6。试题程序。#include stdio.h#include string.h#include conio.h/*注:由于小串中只有2个字符所以可用stri=sbustr0&stri+1=substr1来判断小串是否与长串当前位置(stri)相同(即出现一次)。因而只要让长串当前位置逐一向后移即可(用for()循环来完成)。*/int fun(char *str,char *substr) int i,n=0,s=strlen(str);for(i=0;i100)printf(data eror!n);exit(0);y=fun(x);if(y) printf(%d yesn,x);else printf (%d no!n,x);16、 请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。注意:部分源程序给出如下。#include /*注:该题用while()循环来控制原字符串从头走到尾,在走动过程中判断是当前字符是
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1