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

发布时间 : 星期二 文章最新全国计算机等级考试二级C语言上机编程题参考答案更新完毕开始阅读819fded426284b73f242336c1eb91a37f0113231

精品文档

(1)将两个两位的正整数a、b合并形成一个整数放在c中:将a的十位和个位数放在c的千位和十位,b的十位和个位数放在c的百位和个位。例如:若a = 45, b = 12,使c = 4152。 void fun(int a, int b, int *c) // c是指针 {

*c = a/10*1000+b/10*100+a*10+b; (7)求3到n之间所有素数的平方根之和,并返回。 double fun(int n) { int i, k; double s = 0; for (i = 3; i <= n; i++) {

⒈整数分离与合并 }

(2)判断整数x是否是同构数(规定x是不大于100的正整数)。若是,函数返回1,否则返回0。如果某个整数能够在它的平方数的最右边出现,就是“同构数”。例如:5的平方数是25,5是25右边的数,所以5是同构数。 int fun(int x) { return (x < 10 && x*x == x) || (x >= 10 && x*x0 == 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; } 精品文档

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 2 ⒍矩 3 5 7 0 0 7 阵问 8 1 6 0 0 0 题 void 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 60 20 50 80 70 80 90 30 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列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如:s数组中存放

'A' 'B' 'C' 'D' '\\0' 'E' 'F' 'G' 'H' '\\0' 则a中应保存\。 void fun(char s[M][N], char *a) {

int i, k, j = 0;

for (k = 0; k < N - 1; k++) //跳过'\\0'列 for (i = 0; i < M; i++) a[j++] = s[i][k]; // j++模式 a[j] = '\\0'; //串尾添'\\0' }

(28)一维数组a中有n个整数,把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。 void fun(int a[ ], int p, int n)

{

⒎移 int i, k, t; 动数 for (k = 0; k <= p; k++) { 组元 t = a[0];

素 for (i = 1; i < n; i++) a[i-1] = a[i]; //数据前移 a[n-1] = t; } }

(29)假定输入的字符串中只包含字母和*号,将字符串中的前导*号全部移到字符串的尾部。 void fun(char *a) { int i, n = strlen(a); while (a[0] == '*') {

for (i = 1; i < n; i++) a[i-1] = a[i];

a[n-1] = '*'; //尾部添*号

} }

精品文档

(30)统计一个长度为2的字符串a在另一个字符串b中出现的次数。

int fun(char *a, char *b) {

int i, n = 0; //计数器置0 存到b[5]中。

void fun(char *a, int b[ ]) { int i; b[0] = b[1] = b[2] = b[3] = b[4] = b[5] = 0; ⒏统计子串个 for (i = 0; i < strlen(b); i++)

数 if (b[i] == a[0] && b[i+1] == a[1]) n++; return n; }

(31)统计字符串中单词的个数,作为函数值返回。字符串在主函数中输入,规定单词之间由若干空格隔开,一行的开始和结束都没有空格。 int fun(char s[ ]) {

int i, n = 0; //计数器置0 for (i = 0; i < strlen(s); i++) if (s[i] != ' ' && (s[i+1] == ' ' || s[i+1] == '\\0')) n++; return n; }

(32)判断字符串是否为回文数。若是则函数返回1,否则返回0。回文是指顺读和倒读都是一样的串。 int fun(char *a) ⒐字 {

符串 int i, m = strlen(a);

回文 for (i = 0; i < m / 2; i++)

if (a[i] != a[m-1-i]) return 0; return 1; }

(33)统计数组a中的各年龄段的人数(N个)。0~9岁的人数放在b[0]中,10~19岁的人数放在b[1]⒑数中,以此类推,100岁及以上的放在b[10]中。 据分 void fun(int *a, int b[11]) 类统 {

计 int i;

for (i = 0; i < 11; i++) b[i] = 0; //计数器置0 for (i = 0; i < N; i++) if (a[i] >= 100) b[10]++; else b[a[i]/10]++; }

(34)统计在t字符串中26个字母'a'到'z'各自出现的次数,并依次放在p所指的数组中。 void fun(char *t, int p[ ]) {

int i;

for (i = 0; i < 26; i++) p[i] = 0; //计数器置0 for (i = 0; i < strlen(t); i++)

if (t[i] >= 'a' && t[i] <= 'z') p[t[i]-'a']++; }

(35)统计在字符串a中,以下字符出现的次数,并存到b数组中,其中:字符'+'出现的次数存到b[0]中,字符'-'出现的次数存到b[1]中,字符'*'出现的次数存到b[2]中,字符'/'出现的次数存到b[3]中,字符'&'出现的次数存到b[4]中,其它字符出现的次数精品文档

for (i = 0; i < strlen(a); i++) if (a[i] == '+') b[0]++; else if (a[i] == '-') b[1]++; else if (a[i] == '*') b[2]++; else if (a[i] == '/') b[3]++; else if (a[i] == '&') b[4]++;

else b[5]++; //其它字符

}

(36)把字符串a中的内容逆置。 void fun(char *a) { char t;

⒒字 int i, m = strlen(a);

符串 for (i = 0; i < m / 2; i++)

转换 { t = a[i]; a[i] = a[m-1-i]; a[m-1-i] = t; } }

(37)将s所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 void fun(char *s) {

int i;

for (i = 1; i < strlen(s); i += 2) if (s[i] >= 'a' && s[i] <= 'z')

s[i] -= 32; //转为大写

}

(38)将一个字符串转换为一个整数,例:把\转换为456,把\转换为-23。 long fun(char *a) {

int i = 0, t = 1; long s = 0;

if (a[0] == '-') { t = -1; i = 1; } //处理负号 for ( ; i < strlen(a); i++) s = s * 10 + a[i] - '0'; return s * t; }

(39)在字符串的所有数字字符前加一个$字符。例如:输入:A1B23CD4,输出:A$1B$2$3CD$4。 void fun(char *s) { char t[N]; int i, j = 0;

for (i = 0; i <= strlen(s); i++) //含'\\0' { if (s[i] >= '0' && s[i] <= '9') t[j++] = '$'; t[j++] = s[i]; // j++模式 } strcpy(s, t); }