for(i=0;i { a[i][j]=rand( ); printf(\ fun(a); printf(\ for(i=0;i for(j=0;j 01a?245193592786174384951 21则返回主程序后s的值应为3.375。注意不能重复计算,第一个for循环求出第一列与最后一列的和,第二个for循环求出第一行与最后一行(已除去两头元素),要注意第二个for中起始为1,最后为N-2。 #include { int a[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};int i,j;double s; printf(\ for(i=0;i printf(\ s=fun(a); printf(\ printf(\13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。该题用for(i=0;i -6- 中都要用到多重循环(一般为二重)。 #include \ #include \ #define M 3 #define N 4 void fun(int tt[M][N],int pp[N]) { int i,j; for(i=0;i { int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}}; int p[N],i,j,k; printf(\ for(i=0;i for(j=0;j printf(\ for(k=0;k 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为61。 该题的第一个for循环是计算矩阵的最上一行和最下一行的总和,第二个for是计算除两头元素以外的最左一列和最右一列的元素的和,最后sum就是周边元素的和。 #include { int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}}; int i,j,y; printf(\ for(i=0;i for(j=0;j printf(\ -7- 15.请编写一个函数 unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if语句。 #include { unsigned x; printf( \ scanf( \ if(x<10) printf(\ else printf (\16.请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0。 #include return (float)t/100; } main( ) { float a; printf(\ scanf(\ printf(\ printf(\ printf(\ 17.请编一个函数fun(char *s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+i #include -8- #include { int i=0,t,n=strlen(s); for(;s+i { t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;} } main( ) { char a[N]; printf(\ printf(\fun(a); printf(\ printf(\puts(a); } 18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵: 100 200 300 则程序输出 100 400 700 400 500 600 200 500 800 700 800 900 300 600 900 这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时a[j]在好是与a[j][i]互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。 #include 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( ) { int i,j; int array[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(\printf(\fun(array); printf(\for(i=0;i<3;i++) {for(j=0;j<3;j++) -9- printf(\printf(\} 19.编写函数fun,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。 例如:若程序执行时输入字符串为:turbo c and borland c++ 从键盘上输入字符n,则输出后变为:turbo c ad borlad c++ 如果输入的字符在字符串中不存在,则字符串照原样输出。 注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。 #include for(i=0;s[i];i++) if(s[i]!=c) s[k++]=s[i]; s[k]='\\0'; } main( ) { static char str[]=\char ch; clrscr(); printf(\printf(\ scanf(\fun(str,ch); printf(\} 20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。 注:循环for(i=2;i int fun( int lim, int aa[MAX]) { int i,j=0,k; for( k=2; k -10-
全国计算机二级C上机 编程题(2)
2019-03-29 14:34
全国计算机二级C上机 编程题(2).doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!