
2021年全国计算机等级考试二级c语言上机真题汇编.pdf
34页学习必备欢迎下载全国计算机等级考试二级c 语言上机真题汇编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=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 /*这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时 aj在好是与aj i互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;i+)再套for(j=i+1;j3;j+)来完成左上角的走动 */ int fun(int array 3 3) int i,j,t; for(i=0;i2;i+) for(j=i+1;j3;j+) t=arrayi j;arrayi j=arrayj i;arrayj i=t; main() int i,j; int array33=100,200,300,400,500,600,700,800,900; clrscr(); for(i=0;i3;i+) for(j=0;j3;j+) printf(%7d,array i j); printf(n); fun(array); printf(Converted array:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%7d,array i j); printf(n); 3 、请 编 一 个 函 数fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参 n 给了数组中数据的个数:利用指针odd 返回奇数之和,利用指针even 返回偶娄这和例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd 返回奇数之和24;利用精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 1 页,共 34 页 - - - - - - - - -学习必备欢迎下载指针 even 返回偶数之和8试题程序include #include #define N 20 /*注:该题的算法是:用for()循环一步一步地找元素,用 if(!a i%2)来判断是否是奇数, %运算是求余运算,当对2 求余为 1 时表示原数为奇数,否则为偶数/ fun(int *a,int n,int *odd,int *even) int i; *even=0;*odd=0; for(i=0;in;i+) if(!(a i%2) *even+=ai; else *odd+=a i; main() int a N=1,9,2,3,11,6,i,n=6,odd,even; clrscr(); printf(The original 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 20 int vectorVSIZE ; /*注:该题的算法是用一个变量(j) 来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较(if(list ilistj),如发现更小的则让j 重新拥有最小值元素的下标(j=i)/ int fun(int list ,int size) int i,j=0; for(i=1;isize;i+) if(list i listj ) j=i; return j; main() int i; clrscr(); for(i=0;iVSIZE;i+) vectori=rand(); printf(Vector %d=%6dn,i,vector i); i=fun(vector,VSIZE); printf(nMininum:vector %d =%6dn,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 再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成 0 / 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 2 页,共 34 页 - - - - - - - - -学习必备欢迎下载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,函数的功能是:从字符串中删除指定的字符。
同一字母的大、小写按不同字符处理若程序执行时,输入字符串为: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;s i;i+) if(si!=c) 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 /* 注:由于 unsigned 型整数在 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 integer number : ); scanf( %u,&x); if(x10) printf(data error!); else printf (the result :%un, fun(x); 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 3 页,共 34 页 - - - - - - - - -学习必备欢迎下载8、 编写函数 int fun(int lim,int aa MAX ),该函数的功能是求出小于lim 的所有素数并放在 aa 数组中,该函数返回所求出素数的个数。
试题程序include #include #define MAX 100 /*注:循环 for(i=2;i=k) 用于判断在上一个 for() 循环中 i 能否走到 k, 如果能则表示在2到 k-1 的数都不能整除k,即 k 为素数/ int fun( int lim, int aa MAX ) int i,j=0,k; for( k=2; klim; k+) for( i=2; i=k) aa j+=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, aa i); 9、 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回二维数组中的值在主函数中赋予例如:二维数组中的值为则函数值为61试题程序include #include #define M 4 #define N 5 /*注:该题的第一个for() 循环是计算矩阵的最上一行和最下一行的总和,第二个for() 是计算除两头元素以外的最左一列和最右一列的元素的和,最后sun 就是周边元素的和。
/ int fun(int a M N) int sum=0,i; for(i=0;iN;i+) sum+=a0 i+aM-1 i; for(i=1;iM-1;i+); sum+=ai 0+ai N-1 ; return sum ; main() int aa M N=1,3,5,7,9, 2,9。
