最新全国计算机等级考试二级C语言上机编程题参考答案

  • 格式:doc
  • 大小:238.50 KB
  • 文档页数:7

(1)将两个两位的正整数a、b合并形成一个整数放c中:将a的十位和个位数放在c的千位和十位,的十位和个位数放在c的百位和个位。

例如:若,使c = 4152。

void fun(int a, int b, int *c) // c是指针{*c = a/10*1000+b/10*100+a%10*10+b%10;}(2)判断整数x是否是同构数(规定x是不大于100的正整数)。

若是,函数返回1,否则返回0。

如果某个整数能够在它的平方数的最右边出现,就是“同构数”。

例如:5的平方数是25,5是25右边的数,所以5是同构数。

int fun(int x){return (x < 10 && x*x%10 == x)|| (x >= 10 && x*x%100 == x);}(3)w是大于10的无符号整数,求w后n-1位的数作为函数值返回。

例如:若w是234,则返回34。

unsigned fun(unsigned w){unsigned t = w, m = 1;while (t){ t /= 10; m *= 10; }return w % (m / 10);}(4)对变量x中的值保留2位小数,并对第3位进行四舍五入(规定x中的值为正数)。

double fun(double x){return (int)(x * 100 + 0.5) / 100.0;}(5)求n以内(不包括n)同时能被3和7整除的所double fun(int n){int i;double s = 0;for (i = 1; i < n; i++)if (i % 3 == 0 && i % 7 == 0)s += i;return sqrt(s); //平方根}(6)求1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过函数返回这些数的个数。

int fun(int *a, int m){int i, j = 0;for (i = 1; i <= m; i++)if (i % 7 == 0 || i % 11 == 0)a[j++] = i; // j++模式return j;}(7)求3到n之间所有素数的平方根之和,并返回。

double fun(int n){int i, k;double s = 0;for (i = 3; i <= n; i++){for (k = 2; k < i; k++) //判断素数if (i % k == 0) break; //整除中止if (i == k) s += sqrt(i); //是素数}return s;}(8)求出小于或等于lim的所有素数并放在a数组中,该函数返回所求的素数的个数。

int fun(int lim, int a[MAX]){int i, k, j = 0;for (i = 2; i <= lim; i++){for (k = 2; k < i; k++)if (i % k == 0) break;if (k == i) a[j++] = i; // j++模式}return j;}(9)将大于整数m且紧靠m的n个素数存入x所指的数组中。

void fun(int m, int n, int x[ ]){int i, k, j = 0;for (i = m + 1; j < n; i++){for (k = 2; k < i; k++)if (i % k == 0) break;if (k == i) x[j++] = i; // j++模式}}(10)求数组前n个数的小数部分的和,并返回。

double fun(int n, double a[ ]){int i;double s = 0;for (i = 0; i < n; i++)s += a[i] - (int)a[i]; //原数-整数return s;}(11)把a数组的n个数的平方值,与b数组中逆序的n个数的平方值一一对应相加,存放在c数组中。

void fun(int a[ ], int b[ ], int c[ ], int n){int i;for (i = 0; i < n; i++)c[i] = a[i] * a[i] + b[n-1-i] * b[n-1-i];}(12)计算并返回a数组中n门课程的平均分。

double fun(int *a, int n){int i;double s = 0;for (i = 0; i < n; i++)s += a[i];return s / n;}(13)返回a数组n个学生中低于平均分的人数,并将低于平均分的分数放在b所指的数组中。

int fun(int a[ ], int n, int b[ ]){int i, j = 0;double s = 0;for (i = 0; i < n; i++)s += 1.0 * a[i] / n; //平均分for (i = 0; i < n; i++)if (a[i] < s) b[j++] = a[i]; // j++模式return j;}(14)求N×N的二维数组周边元素的平均值并作为函数值返回给主函数。

double fun(int a[N][N]){int i, k;double s = 0;for (i = 0; i < N; i++)for (k = 0; k < N; k++)if (i==0 || k==0 || i==N-1 || k==N-1)s += a[i][k];return s / (4*N-4); //除以个数}(15)求出s数组t个元素中最大元素在数组中的下标,并存放在k所指的存储单元中。

void fun(int *s, int t, int *k){int i, m = 0;for (i = 1; i < t; i++)if (s[i] > s[m]) m = i;*k = m;}(16)求出数组a[M][N]里每列中的最小元素,并依次放入b[N]数组中。

void fun(int a[M][N], int b[N]){int i, k, m;for (k = 0; k < N; k++) //共N列{m = a[0][k];for (i = 0; i < M; i++) //每列M行if (a[i][k] < m) m = a[i][k];b[k] = m;}} (17)求Fibonacci数列中大于t的最小的一个数,果由函数返回。

其中数列f(n)的定义为:f(0) = 0,f(1) = 1,f(n) = f(n-1) + f(n-2)int fun(int t){int a = 0, b = 1, c = 0;while (c <= t){c = a + b; a = b; b = c;}return c;}(18)根据以下公式求P的值,结果由函数值带回。

float fun(int m, int n){int i;float x = 1, y = 1, z = 1;for (i = 1; i <= m; i++) x *= i; // m!for (i = 1; i <= n; i++) y *= i; // n!for (i = 1; i <= m-n; i++) z *= i; // (m-n)!return x / y / z;}(19)根据以下公式计算s,结果由函数值返回。

double fun(int m){int i;double s = 0;for (i = 1; i <= m; i++)s += log(i);return sqrt(s); //平方根}(20)计算下列级数和,结果由函数值返回。

若x = 0.3,n = 10,则函数值为1.349859。

double fun(double x, int n){int i;double s = 1, z = 1, m = 1;for (i = 1; i <= n; i++)s += (z *= x) / (m *= i);return s;}(21)根据以下公式计算s,结果由函数值返回。

float fun(int n){int i, t = 0; // t作分母float s = 0;⒌数学公式求值for (i = 1; i <= n; i++){t += i; s += 1.0 / t;}return s;}(22)根据以下公式计算x的值,某项小于e时停止迭代:若e的值是0.0005,则返回3.14…double fun(double e){double n = 1, v = 1, s = 0;while (v >= e){s += v;v *= n++ / (2*n+1);}return s * 2;}(23)求给定10个数的方差,结果作为函数值返回:其中X'是10个数的平均值。

double fun(double x[10]){int i;double v = 0, s = 0;for (i = 0; i < 10; i++)v += x[i] / 10; // v是平均值for (i = 0; i < 10; i++)s += (x[i] - v) * (x[i] - v);return sqrt(s / 10);}(24)求方程cos(x)-x=0的一个实根。

步骤:①x1初值0.0;②x0=x1;③x1=cos(x0);④若x0-x1的绝对值小于0.000001,执行步骤5,否则执行步骤2;⑤x1就是实根,作为函数值返回。

double fun(){double x1 = 0.0, x0;do{x0 = x1; x1 = cos(x0);} while (fabs(x0-x1) >= 1e-6);return x1;}(25)把二维数组左下角元素全置为0。

如:原来值为:4 9 2 则返回:0 9 23 5 7 0 0 78 1 6 0 0 0void fun(int a[N][N]){int i, k;for (i = 0; i < N; i++)for (k = 0; k <= i; k++) //循环至i列a[i][k] = 0;}(26)矩阵转置,如:输入 10 20 30 输出10 40 70 (即行列互换)40 50 6020 50 8070 80 9030 60 90 void fun(int a[N][N]){int i, k, t;for (i = 0; i < N; i++)for (k = 0; k < i; k++) //至i-1列{t = a[i][k]; a[i][k] = a[k][i]; a[k][i] = t;}}(27)将M行N列的二维数组中的字符数据,按列的'A' 'B' 'C' 'D' '\0''E' 'F' 'G' 'H' '\0' 则a中应保存"AEBFCGDH"。