云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 全国计算机等级考试二级C语言资料(机试) - 图文

全国计算机等级考试二级C语言资料(机试) - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/3 16:26:01

fun (a,3);

printf(\ for(i=0;i

for ( j=0; j

printf( \ printf(\ } }

【参考答案】

void fun ( int a[][N], int n ) {

int i, j ;

for(i=0 ; i

for(j=0 ; j<=i ; j++) a[i][j]=a[i][j]*n ; }

【解题思路】针对二维数组元素a[i][j],如果i>=j,也即行号大于等于列号时,是对角线下半三角的元素,相反i<=j,也即行号小于等于列号时,是对角线上半三角的元素,而i==j,即行号等于列号时,正好是对角线上的元素。 ? 题型三:二维数组转一维数组

3、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中, 一维数组中数据的个数存放在形参n所指的存储单元中。

例如, 二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55

则一维数组中的内容应是:

33 33 33 33 44 44 44 44 55 55 55 55。 #include

void fun(int (*s)[10], int *b, int *n, int mm, int nn) 第 21 页 { }

main()

{ int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ; int a[100] = {0}, n = 0 ;void printf(\ for(i = 0 ; i < 3 ; i++)

{ for(j = 0 ; j < 4 ; j++) printf(\ printf(\ }

fun(w, a, &n, 3, 4) ;

printf(\

for(i = 0 ; i < n ; i++) printf(\}

【参考答案】

void fun (int (*s)[10], int *b, int *n, int mm, int nn) { int i,j,k=0;

for(i=0;i

b中*/

for(j=0;j

*n=k; /*通过指针返回元素个数*/ }

【解题思路】我们可以用两个循环来处理问题,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标; 若改成按列的顺序取出,则循环应改成: for(i=0;i

注意s[j][i]的下标,不能用s[i][j]。

? 题型四:二维数组转置问题(即行列互换)

4、请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置,

共 30 页

存放在矩阵B中。计算结果在 main 函数中输出。例如,输入下面的矩阵: 【解题思路】行列数相等的二维数组的转置就是行列互换,即转置后的第i行第j其转置矩阵为: 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9 程序输出: 2 6 10 6 10 14 10 14 18 #include void fun ( int a[3][3], int b[3][3]) { } main( ) /* 主程序 */ { int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ;

int i, j ;

void fun(a, t) ; for (i = 0 ; i < 3 ; i++) { for (j = 0 ; j < 3 ; j++) printf(\ printf(\ } } 【参考答案】 void fun (int a[3][3], int b[3][3]) { int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) b[i][j]=a[i][j]+a[j][i]; /*把矩阵a加上a的转置,存放在矩阵b中*/ } 第 22 页 列正好对应原矩阵的第j行第i列。 (1)若要将矩阵a转置后还存入a中,可用程序: int i,j,t; for(i=0;i #include long fun ( char *p) { } main() /* 主函数 */ { char s[6];void long n; printf(\ gets(s); n = fun(s); printf(\

共 30 页

}

【参考答案】

long fun(char *p) {

long n=0; int flag=1;

if(*p=='-') /*负数时置flag为-1*/ {p++;flag= -1;}

else if(*p=='+') /*正数时置flag为1*/ p++;

while(*p!='\\0')

{ n=n*10+*p-'0';/*将字符串转成相应的整数*/ p++; }

return n*flag; }

【解题思路】if( )的作用是判断它应该是正数还是负数,变量t为1或-1作为符号标示。while( )循环的作用是将字符串转成相应的整数。

注意: p[i]的值是一个字符(如'9'、'4'),并不是一个数,要将其转成相应的数字必须令其减去'0'(不是'\\0'),即*p-'0' 就得到*p这个字符的相应数字,如'0'-'0'=0、'8'-'0'=8等。 ? 题型二:“回文”字符串

2、请编写函数fun, 函数的功能是: 判断字符串是否为回文?若是, 函数返回1,主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。

例如, 字符串LEVEL是回文, 而字符串123312就不是回文。 #include #include #define N 80 int fun(char *str) { } 第 23 页 main()

{ char s[N] ;void

printf(\ printf(\ if(fun(s)) printf(\ else printf(\}

【参考答案】

int fun(char *str) { int i,n=0,fg=1; char *p=str; n=strlen(str);

for(i=0;i

return fg; }

? 题型三:字符串统计问题

3、请编写一个函数 void fun(char *tt, int pp[]),统计在tt所指字符串中'a' 到 'z' 26个小写字母各自出现的次数,并依次放在pp所指数组中。 例如,当输入字符串:abcdefgabcdeabc 后,程序的输出结果应该是: 3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #include #include

void fun(char *tt, int pp[]) { }

main( )

{ char aa[1000] ;

共 30 页

int bb[26], k ; void

printf( \ fun(aa, bb ) ;

for ( k = 0 ; k < 26 ; k++ ) printf (\ printf( \}

【参考答案】

void fun(char *tt, int pp[]) { int i;

for(i=0;i<26;i++)

pp[i]=0; /*初始化pp所指数组,使其所有值均为0*/

for(i=0;tt[i];i++) /*控制条件也可是tt[i]!=‘\\0’或tt[i]!=0 */ pp[tt[i]-‘a’]++; /*tt[i]-‘a’ 的值,即为字符tt[i]的个数存放在pp所指数组中对应的下标*/ }

【解题思路】26个字母的个数在pp所指数组中为0-25,其中数组下标可以通过某一个字符的ASCII值减去97或直接减'a'也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为'b'-'a'=1,就是实际存放的位置。 另附统计子字符串的个数 如:编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。

例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为as,则应输出6。 #include #include

int fun(char *str,char *substr) { }

main() {

char str[81],substr[3]; int n; 第 24 页 printf(\输入主字符串: \ gets(str);

printf(\输入子字符串: \ gets(substr); puts(str); puts(substr);

n=fun(str,substr); printf(\}

【参考答案】

int fun(char *str,char *substr) {

int n;

char *p , *r; n=0;

while ( *str ) {

p=str; r=substr; while(*r)

if(*r==*p) {

r++; p++; } else

break; if(*r=='\\0') n++; str++; }

return n;

共 30 页

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

fun (a,3); printf(\ for(i=0;i=j,也即行号大于等于列号时,是对角线下半三角的元素,相反i<=j,也即行号小于等于列号时,是对角线上半三角的元素,而i==j,即行号等于列号时,正好是对角线上的元素。 ? 题型三

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com