2012年9月全国计算机等级考试二级C语言上机题库及答案
第1套
一、填空
给定函数的功能是调用fun 函数建立班级通
讯录。通讯录记录每位学生的编号,姓名和
电话号码。班级的人数和学生的信息从键盘
读入,每个人的信息作为一个数据块写到名
为答案yfile5.dat 的二进制文件中。
答案:1. STYPE 2. FILE 3. fp
二、修改
先将在字符串s 中的字符按正序存放到t
串中,然后把s 中的字符按逆序连接到t
串后面。
答案:1. for(i = 0 ; i < sl ; i++) 2. t[2*sl] =` 0`; 三、程序
将两个两位数的正整数a,答案合并成一个
整数放在c 中。合并的方式是:将a 数的十
位和个位数依次放在 c 数的千位和十位上,答案数的十位和个位数依次放在c 数的百
位和个位上。
答案:*c=(a/10)*1000+(b/10)*100+(a%10)*10
+(b%10);
第 2 套
一、填空
从键盘输入若干行文本(每行不超过80 个字
符),写到文件答案yfile4.txt 中,用-1 作
为字符串输入结束的标记。然后将文件的内
容读出显示在屏幕上。文件的读写分别有自
定义函数ReadText 和WriteText 实现。
答案:*fw str str
二、修改
从低位开始取出长整形变量s 中的奇数位
上的数,依次构成一个新数放在t 中,高位
仍放在高位,低位仍放在低位。
答案:long *t ,sl = sl*10;
三、程序
将两个两位数的正整数a,答案合并成一个
整数放在c 中。合并的方式:将 a 数的十位
和个位数依次放在 c 数的千位和十位上,答
案数的十位和个位数依次放在 c 数的百位
和个位上。
*c=(b/10)*1000+(a%10)*100+(b%10)*10
+(a/10);
第3 套
一、填空
将自然数1~10 以及它们的平方根写到名为
答案yfile3txt 的文本文档中,然后再顺序读
出显示在屏幕上。
答案:(1)fp (2)fclose(fp) (3)fname
二、修改
将n 个无序整数从小到大排序。
答案:for(i=j+1;i 三、程序 将两个两位数的正整数a,答案合并成一个 整数放在c 中。合并的方式是:将a 数的十 位和个位数依次放在 c 数的千位和十位上, 答案数的十位和个位数依次放在c 数的百 位和个位上 *c=(b%10)*1000+(a%10)*100+(b/10)*10 +(a/10); 第4套 一、填空 调用函数fun 将指定源文件中的内容复制 到指定的目标文件中,复制成功时函数返回 值为1,失败时返回值为0,在复制的过 程中,把复制的内容输出到终端屏幕。主函 数中源文件名放在变量sfname 中,目标文件 名放在变量tfname 中 答案:“r”fs ft 二、修改 将长整形数中每一位上为偶数的数依次取出,构成一个新数放在t 中。高位仍在高位仍在 低位。 答案:if(d%2==0) s /= 10; 三、程序 将两个两位数的正整数a,答案合并成一个 整数放在c 中。合并的方式是:将a 数的十 位和个位数依次放在 c 数的千位和十位上, 答案数的十位和个位数依次放在c 数的百 位和个位上。 答案:*c=(a%10)*1000+(b/10)*100+(a/10)*10 +(b%10); 第 5 套 一、填空 把形参x 的值放入一个新结点并插入到链 表中,插入后结点数据域的值仍保持递增有 序。 答案:x p s 二、修改 计算正整数num 的各位上的数字之积。 答案:long k=1; num/=10 ; 三、程序 计算n 门课程的平均分,计算结果作为函数 值返回。 答案:int i; float ave=0.0; for(i=0; i ave=ave+a[i] ; ave=ave/n; return ave; 第 6 套 一、填空 给定程序中已建立一个带有头结点的单向链 表,在答案ain 函数中将多次调用fun 函数,没调用一次fun 函数,输出链表尾部结点中 的数据,并释放该节点,是链表缩短。 答案: next t->data t 二、修改 将字符串中的字符按逆序输出,单补改变字 符串中的内容。 答案:void fun (char *a) printf("%c", *a) ; 三、程序 比较两个字符串的长度(不得调用c 语言提 供的求字符串长度的函数)函数返,回较 长的字符串。若两个字符串长度相同,则返 回第一个字符串。 答案:int i; char *p=s , *q=t; int n=0,m=0; while(*p) {n++;p++;} while(*q) {m++;q++;} if(n>=m) p=s; else p=t; return p; 第7 套 一、填空 删除链表中数据域值相同的结点,使之只保 留一个 答案: q next next 二、修改 用选择法对数组中的n 个元素按从小到大 的顺序进行排序。 答案: p = j; p=i; 三、程序 求出1 到答案之间(含答案)能被7 或11 整除的所有整数放在数组a 中,通过n 返回 这些数的个数。 答案: int i ,j=0; *n=0 ; for(i=1 ; i<=m; i++) if(i%7==0|| i% 11 == 0) { a[j]=i; j++;} *n=j; 第8 套 一、填空 在带有头结点的单向链表中,查找数据域中值为ch 的结点。找到后通过函数值返回改结点在链表中所处的顺序号;不存在,函数返回0 值 答案: NULL n head ,ch 二、修改 删除p 所指字符串中的所有空白字符, 输入字符串是用“#”结束输入。 答案: for(i=0,t=0;p[i];i++) c[t]='\0'; 三、程序 将ss 所指字符串中所有下标为奇数位置上 的字母转换成大写 答案: int i ; for(i=1;i< strlen(ss) ; i+=2) {if(ss[i] >='a'&&ss[i] <= 'z') ss[i] - =32 ;} 同时ASCII 值也为偶数的字符外,其余的全部删除:串中剩余字符所形成的一个新串放在t 所指的数组中 答案: int i, j = 0 ; for(i = 0 ; i < strlen(s) ; i += 2) if(s*i+ % 2 == 0) t*j+++ = s*i+ ; t*j+ =’\ 0’ ; 第9 套 一、填空 统计出带有头结点的单向链表中的个数,存放在形参n 所指的存储单元中。 答案: *n next head 二、修改 求出s 所指字符串中最后一次出现的t 所指子字符串的地址,通过函数返回值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL 答案: a = NULL; if(* r ==*p) 三、程序 将s 所指字符串中除了下标问为偶数,同时ASCII 值也为偶数的字符外,其余的全部删除:串中剩余字符所形成的一个新串放在t所指的数组中 答案:int i,j=0; for(i=0; I (s[i]%2==0) t[j++]=s[i]; t[j]=‘\0’; 第10 套 一填空 计算出带有头结点的单向链表中各结点数据域中值之和作为函数的返回值。 答案: data next head 二、修改 将s 所指字符串中出现的与t1 所指字符 串相同的字串全部替换成t2 所指字符串, 所形成的新串放在w 所指的数组中,在此 处,要求t1 和t2 所指字符串的长度相同。 答案: while(*r) *a=*r ;a++; r++; 三、程序 将s 所指字符串下标为偶数的字符删除,串 中剩余字符形成的新串放在t 所指的数组 中 答案: int i, j = 0 ; for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ; t[j] =`\ 0 `; 第11 套 一填空 找出指定编号人员的数据作为函数值返回, 由主函数输出,若指定编号不存在,返回数 据中的编号为空串 答案: STU std[i].num std[i] 二、修改 从s 所指字符串中,找出与t 所指字符串 相同的字串的个数作为函数返回值 答案: r++; p++;if(*r==’\0’ ) 三、程序 将s 所指字符串中ASCII 值为偶数的字符 删除,串中剩余字符形成一个新串放在t 所 指的数组中 答案: int i, j = 0 ; for(i = 0 ; i < strlen(s); i++) if(s[i] % 2) t[j++] = s[i] ; t[j] = 0 ; 第12 套. 一、填空 找出指定出生年份的人员,将数据放在 形参k 所指的数组,由主函数输出,有 函数值返回满足指定条件的人数 答案: std[i].year std[i] n 二、修改 读入一个整数k(2《k《1000),打印她的所有因子 答案: 分号去掉or Isprime (int n) if (!( n%i )) 三、设计 找出成绩最高的学生记录,通过形参指针传回主函数 答案: int i, max = a[0].s, j = 0; for(i = 1 ; i < N ; i++) if(max < a[i].s) { j = i ; max = a[i].s ; } *s = a[j] ; 第13 套.一、填空 给定程序。将该学生的各科成绩都乘。以一个系数 a 答案: STU score[i] &std 二、修改 求k!(k<13),所求阶乘的值作为函数值返回, 答案: if ( k>0) else if(k= =0) 三、程序 使数组左下三角元素的值乘以n 答案: int i, j; for(i = 0 ; i < N ; i++) for(j = 0 ; j <= i; j++) a[i][j] *= n ; 第14 套 一、.填空将形参所指结构体数组中的三个元素按num 成员进行升序排列 答案: *std PERSON std 二、修改 将m 个字符串连接起来组成一个新串,放入pt 所指存储区中 答案: int k,q,i; pt[i]=str[k][i]; 三、程序 使数组左下三角元素中的值全部值0 答案: int i, j; for(i = 0 ; i < N ; i++) for(j = 0 ; j <= i; j++) a[i][j] =0; 第15 套 一、.填空 将形参std 所指结构体数组中年龄最大者的数 据作为函数值返回,并在主函数中输出 答案: *std std[i].age https://www.sodocs.net/doc/6d11415946.html, 二、修改 实现两个整数的交换 答案:void fun( int *a,int*b) t t= *b; *b= *a ; *a = t; 三、程序 请编写一个函数、指向一个M 行N 、tt 列的二维数组,求二维数组每列中最小元素,并以此放入pp 所指一维数组中。二维数组中的数已在主函数中赋予 答案: int i,j, min, k ; for(i = 0 ; i { min=tt[j][i] ; k = j ; } pp[i] = tt[k][i] ; } 第16 套 一、.填空 程序通过定义。输出这位学生的信息 答案: tt tt.score[i] std 二、修改 求出数组中最大数和次大数,并把最大数和a【0】中的数对调,次最大数和a 【1】中的书对调 答案: m=i; if(a[k]>a[m] )m=k; 三、程序请编写一个程序。是一个大与10 的。w 无符号整数,若w 是n 为的整数,函数求出w 的低n-1 位的数作为函数值返回 答案: unsigned t,s=0, s1=1,p=0; t=w; while(t>10) {if(t/10) p=t%10; s=s+p*s1; s1=s1*10; t=t/10;} return s; 第17 套 一、.填空 对形参ss 所指字符串数组中的M 个字符串按长度由短到长进行排序。ss 所指字符串数组中共有M 个字符串,且串长《N 答案: i+1 k=j t 二、修改判断ch 中字符是否与str 所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后 答案: void fun(char *str,char ch) if(*str != ch) str*1+=’\0’; 三、设计 请编写一个函数把s 所指字符串中的内容逆值 答案: char b[N] ; int i = 0, j ; memset(b,0,N); for(j = strlen(s) - 1 ; j >= 0 ; j--) b[i++] = s[j] ; strcpy(s,b); 第18 套 一、填空 求出形参ss 所指的字符串数组中最长字符串的长度,其余字符串左边用字符* 补齐,使其与最长的字符串等长,字符串数组中共有M 个字符串答案: k len ss[i][j] 二、修改计算整数n 的阶乘 答案: result*=n--; return result; 三、程序 从s 所指的字符串中删除给定字符。同一个字母的大小写按不同字符处理 答案: char*p=s; int i = 0; while(*p) {if(*p!= c) s[i++] = *p ; p++;} s[i] =’\ 0 ‘; 第19 套 一、.填空 求出形参ss 所指字符串数组中最长字符串的长度,将其余字符串右边用字符* 补齐,使其与最长的字符串等长。Ss 所指的字符串数组中共有M 个字符串 答案: ss[i] n+j 1 二、修改 将p 所指字符串中每个单词的最后一个字母改成大写 答案:if(*p==’ ’) *(p-1)=toupper(*(p-1)); 三、程序请编写函数fun 对长多为7 个字符的字符串,除首,尾字符外,将其余5 个字符按ASCII 降序排列 答案: char t ; int i, j ; for(i = 1 ; i < num-2;i++) for(j=i+1;j s[j]=t ;} 第20 套 一、.填空 求ss 所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n 所指变量中。Ss 所指字符串数组中共有M 个字符串 答案: [N] len *n=len 二、修改 根据形参答案,计算如下公式的值 答案: t +=1.0/i; return t; 三、程序 编写一个函数。该函数可以统计一个长度为2 的字符串在另个字符串中出现的次数 答案: int cnt = 0; char *p = str, *q ; while(*p){q=strstr(p,substr); if(q==NULL)break; p=q+strlen(substr); cnt++; } return cnt ; 第21 套 一、.填空 求ss 所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n 所指变量中 答案: M < k 二、修改 将tt 所指字符串中的小写字母都改为对应的大写字母,其他字符不变答 案:if((‘a’<=tt*i+)&&(tt*i+<=’z’)) tt*i+ -= 32; 三、程序 将大于1 小于整数m 的非素数存入xx 所指数组中非素数的个数通过k 传回 答案:int i,j; int t=0; for (i=2;i 将s 所指字符串中的所有数字字符转移到所有非数字字符之后,并保持数字字符和非数字字符 串原有的前后次序 答案: j++ s[i]=t1[i] j 二、修改 用冒泡法对6 个字符串由小到大的顺序进行排序 答案: for(j=i+1 ;j<6 ;j++)*(pstr + i)= *(pstr + j); 三程序 求出ss 所指字符串中指定字符的个数,并返回此值 答案: int cnt = 0 ; char *p= ss ; while(*p) { if(*p == c) cnt++ ; p++ ;} return cnt; 第23 套 一、填空 在形参所指字符串中的每个数字字符之后插入一个*号 答案: && 0 s[j] 二、修改 根据整形形参m,计算如下公式的值 答案:for(i=2;i <=m;i++) y+=1.0/(i*i); 三程序 实现B=A+A’ 即把矩阵A 加上A 的转置,存放到B 中 答案: int c[3][3] ; int i, j ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < 3 ; j++) { c[i][j] = a[j][i] ; b[i][j] = a[i][j] + c[i][j] ; } 第24 套 一、填空 统计形参s 所指字符串中数字字符出现的次数,并存放在形参t 所指的变量中,最后在主函数中输出。 答案: s*i+ ‘9’ *t=n 二、修改 通过某种方式实现俩个变量值的交换,规定不予许增加语句和表达式 答案: t = *x ; *x = y ; return(t) ; 三、程序 求出1 到1000 之间能被7 或11 整除,但不能同时被7 和11 整除的所有整数并将他们放在 a 所指的数组中,通过n 返回这些数的个数答案: int i ; *n = 0 ; for(i = 7 ; i < 1000 ; i++) if(((i % 7) == 0 || (i % 11) == 0) && (i % 77) != 0) a[(*n)++] = i ; 第25 套 一、填空 把形参s 所指字符串中下标为奇数的字符右移 到下一个奇数的位置,最后边被移除字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 答案: 1 s[k] c 二、修改 求s=aa…aa-….aaa-aa-a 答案: long s=0, t=0; t=t/10; 三、程序 请编写一个函数。。统计在tt 所指字符。串中’a’到’z’26 个小写字母各自出现的次数,并依次放在pp 所指数组中 答案: char *p = tt ; int i ; for(i = 0 ; i < 26 ; i++) pp[i] = 0 ; while(*p ) { if(*p >= 'a' && *p <= 'z') pp[*p - 'a'] += 1 ;p++ ; } 第26 套 一、填空. 对形参s 所指字符串中下标为奇数的字符按ascii 码大小递增排序,并将排序后下标为基数的字符取出,存入形参p 所指字符数组中,形成一个新串 答案: t=I i 0 二、填空 用下面公式求π的近似值,直到最后一项的绝对值小于指定的数为止 答案: while (fabs(t)>=num) t=s/n; 三、程序 删除一个字符串中指定下标的字符,其中,a 指向原字符,删除指定字符后的字符串存在 b 所指的数组中,n 中存放指定下标 答案: int p,m=0; for(p=0;p ,b*m+=a*p+; m++;- b*m+=’\0’; 第27 套 一填空 在形参所指字符串中寻找一个字符串与参数 c 相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理 答案: 0 0 c 二修改 计算数组元素中值为正数的平均值 答案: double sum=0.0; sum/=c; 三设计 根据以下公式s,计算结果作为函数返回值,n 通过形参传入 答案: int k; float str =1.0, sum=1.0; for(k=2;k<=n; k++) { sum =sum+k; str =str+1/sum;} return str; 第28 套 一填空 有N*N 的矩阵,根据给定的m 的值,左将每行元素中的值均右移m 个位置,边置为0 答案: i++ m m 二修改 计算并输出high 以内最大的10 个素数之和。High 的值由主函数传给fun 函数 答案: while((2<=high) && (n<10)) yes=0; break; 三设计 利用一下所示的简单迭代方法求方程: 答案: float x0, x1=0.0; do{x0=x1; x1=cos(x0);}while(fabs(x0-x1)>0.000001 ); return x1; 第29套 一填空 将N*N 的矩阵中元素值按列右移1 个位置,右边被移出矩阵的元素绕回左边 答案: N N-1 0 二修改 计算并输出下列的前N 项之和Sn,Sn+1 大于q 为止,q 的值通过形参传入 答案: s=s+(n+1.)/n; return t; 三设计 求Fibon….数列中大于t 的最小的一个数,结果由函数返回, 答案: int f0 = 0, f1 = 1, f ; do { f = f0 + f1 ; f0 = f1 ; f1 = f ; } while(f < t) ; return f ; 第30 套 一填空 有N*N 矩阵,将矩阵的外围元素顺时针逆转,操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行。临时数组中的元素成为最后一列 答案: 0 j- - j 二修改 计算s=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f( n)的值,答案: double f(double x) return s ; 三设计 编写函数fun,他的功能是计算s=ln(1)+ln(2.)..ln(m)开根号 答案: double s = 0.0 ; int i ; for(i = 1 ; i <= m ; i++) s += log(1.0 * i) ; s = sqrt(s) ; return s ; 第31 套 一填空有N*N 矩阵,以主对角线为对称线,对称元素 相加并将结构存放在左下三角元 素中,右上三角元素之位0 答案: [N] t[i][j] t[j][i] 二修改计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y) 的值。其中x 和y 的值不等,z 和y 的值不等答案: ((m)/(n)) return (value); 三设计将字符串中的前导*号全部删除,中间和尾部的*号不删除答案: int j=0; char *p = a ; while(*p == '*') p++ ; while(*p) {a[j++] = *p;p++; } a*j+=’\0’ ; 第32 套 一填空 将N*N 矩阵主对角线元素中的值域反向对角线 对应位置上的元素中的值交换 答案: t[ ][N] i=0;i 二修改 利用折半查找法查找整数答案在整数数组的位置。若找到,返回其下标;反之,返回-1 答案: int fun(int a[],int m) else if (m>a[mid]) 三设计 除了尾部的*号外,将字符串中的*号全部删除,形参p 以指向字符串中最后的一个字符,答案: char *q=a; int j=0; while(*q && q a*j+++ = *q;q++ ; - while(*p) a*j+++=*p++; a*j+=’\0’; 第33 套 一填空 计算N*N 矩阵的主对角线元素和反向对角线元 素之和,并作为函数值返回, 答案: sum=0 t[i][i] 1 二修改 用二分法求方程的一个根,并要求绝对误差不超过0.001 答案: double r; while(fabs(n-m)>0.001) 三设计 除了尾部的*号外,将字符串中的*号全 答案: int j=0; char *q=a; while(*q &&q *q++ ; while(*h&&*p &&h < p) { if(*h != '*') a[j++] = *h ; h++;- while(*p) a*j+++ = *p++ ; a*j+ = ‘\0’; 第34 套 一填空 把形参a 所指数组中的奇数按原顺序依,a【1】….中,偶数从次存放到a【0】数组中删除,奇数个数通过函数值返回 答案: 1 j++ j 二修改 求出连个非零正整数的最大公约数,并作为函数值返回 答案: t=a;a=b;b=t; return (b); 三设计 除了尾部的*号外,将字符串中的*号全部删除,形参答案以指向字符串中最后的一个字母,答案: int j =0 ; char *p=a; while(*p) {if(*p!='*') a[j++]=*p;p++; } a[j]=`\0`; 第35 套 一填空 把形参所指数组中的偶数按原顺序依次存放到a 【0】、a【1】,…中,奇数从数组中删去,偶数个数通过函数值返回 答案: a[i]%2 a[j] j 二修改 按一下递归公式求函数值 答案: int fun(int n ) if(n==1) 三设计 使字符串尾部的*号不得多于n 个;若多于n 个,则删除多于的*号,若少于n 个,则什么也不做,字符串中间和前面的*号不删除 答案:int i=0,j=0; char *p,*t; p=t=a; While(*t) t++; t--;while(*t==’*’){j++;t--;}t++; if(j>n) ,while(*p&&p 第36 套 一填空 把形参a 所指数组中的最小值放在元素a【0】中,按着把形参a 所指数组中的最大值放在a【1】元素中;在把a 所指数组中的次小元素放在a 【2】所指的数组中,把a 所指的数组元素中的次大放在a【3】;其余以此类推 答案: a[i] a[j] a[j] 二修改 用递归算法计算非波拉且数列中第n 项的值,答案:switch(g) case 1:return 1;case 2:return 1; 三设计 求学生的平均分放在记录的ave 成员中 答案: int i ; for(i =0 ; i < N ; i++) a->ave = a->ave+a->s[i] ; a->ave /= N ; 第37 套 一填空 把形参a 所指数组中的最大值放在【1】 a 中,按着求出a 所指数组中的最小值放在a【1】数 组中;把a 所指数组元素的次大值放在a【2】中,把a 数组元素中【3】中;其余以此类推。的次小值放在a 答案: *a 2 i+1 二修改 按顺序给s 所指数组中的元素赋予从2 开始的 偶数,在按顺序对每五个元素求个一平均值,并将这些值依次存放在w 所指的数组中,若s 所 指数组元素的个数不是5 的倍数,多于部分忽略不计 答案: sum=0.0; if((i+1)%5==0) 三设计 把低于平均分的学生数据放在答案所指的数组中,低于平均分的学生人数通过形参n 传回,平均分通过函数值返回 答案: int i ; double ave = 0.0 ; *n = 0 ; for(i = 0; i < N ; i++) ave = ave + a[i].s ; ave/=N;for(i=0;i n]=a[i];(*n)++;} return ave ; 第38 套 一填空 将形参a 所指的数组中的前半部分元素中的值 和后半部分元素中的值兑换,形参n 中存放数组中数据的个数,若n 为奇数,则中间的元素不动答案: 1 i a[p+i] 二修改 把主函数中输入的3 个数,最大的放在 a 中,最小的放在c 中,中间的放在 b 中答案: float k; if(*a<*c) 三设计把分数最高的学生的数据放在 h 所指数组中, 答案: int i, max = a[0].s, n=0; for(i = 1; i < N; i++) if(max < a[i].s) max = a[i].s ; for(i = 0; i < N; i++) if(max==a[i].s) b[n++] = a[i] ; return n; 第39 套 一填空 逆置数组元素中的值。 答案: n/2 i a[n-1-i] 二修改将一个由八进制数字字符组成的字符串 转换为与其面值相等的十进制整数,规定输入的字符串最多只能包含5 为八进制数字字符 答案: n=*p-`0`: n=n*8+*p-‘0’; 三设计 函数返回指定学生的学生数据,指定的学号在主 函数中输入,若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回 答案: STREC c ; int i ; c.num[0] = '\0' ; c.s = -1 ; for(i = 0 ; i < N ; i++) if(strcmp(a[i].num,b)==0) { strcpy(c.num, a[i].num);c.s=a[i].s; break ; } return c ; 第40 套 一填空 函数fun 的功能。进行数字字符转换,若形参ch 中是数字字符0-9,则0 转换为9,转换为8,转换为7…9 转换为1 2 0;其他字符则保持不变;转换后的结果作为函数值返回 答案: char ch<='9' ‘0’ 二修改 将p 所指字符串中的所有字符复制到b 中,每复制三个字符有插入一个空格 答案: b*k+=*p; b*k+++=’ ’; 三设计 求出平均分,由函数值返回 答案: STREC *p=h->next; double av=0.0;int n = 0 ;while(p!=NULL) {av=av+p->s ; p=p->next; n++; } av /= n ; return av; 第41 套 一填空函数fun 的功能。进行字母转换,其他 字符则保持不变, 答案: && 'A' ch 二修改 给一维数组a 输入任意4 个整数,并按下列的规律输入 答案:void fun(int *a) a[j]=a[j-1]; 三设计 计算并输出给定整数n 的所有因子之和,规定n 的值不大于1000 答案: int s = 0, i ; for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ; return s ; 第42套 一填空 计算f(x)=1+x-x2/2…(-1)n-1xn/n!前n 项 答案: 1 -1 t 二修改从3 个红球,5个白球,6个黑球中任意取出8 个作为一组,进行输出。每组,可以没有黑球,但必须有红球和白球, 答案: for(i=1; i<=3; i++) if(k>=0 && k<=6) 三设计 计算Sn=1+1/1!+1/2!...+1/n! 答案:double s=1;long t=1;int i; for(i=1;i<=n;i++) {t=t*i; s+=1./t; } return s; 第43 套 一填空 计算f(x)=1+x-x2/2!..(-1)xn/n! 至到|xn/n!|<10-6 答案: x n fabs(t) 二修改 求整数x 的y 次方的低3 为的值, 答案: <= % 三设计 计算并输出x《0.97 时下列多项式的值 答案: int n=1; double sn=1, double xn=1;xn1=0; while(fabs(xn-xn1)>=0.000001){xn=xn* x*(0.5-n+1)/n; n+=1; sn+=xn; } return(sn); 第44 套 一填空 计算f(x)=1+x+x2/2!...xn/n! 的前n 项, 答案: 1 1 i 二修改 找出100 至n 之间三位数字相等的所有整数,把这些整数放在s 所指数组中,个数作为函数值返回 答案: k=i; c=k%10; 三设计 计算并输出给定10 个数的方差 答案: int i; double avg=0.0, sum=0.0,abs=0.0, fc; for (i=0;i<10;i++) sum+=x[i];avg=sum/10;for (i=0;i<10;i++) abs+=(x[i]-avg)*(x[i]-avg); fc=sqrt(abs/10) ; return fc; 第45 套 一填空 计算f(x)=1+x+x2/2!+..xn/n!至到|xn/n!|<10-6 答案: x n t 二修改 计算n 的5 次方的值,通过形参指针传回主函数;计算该值的个位,十位,百位上数字之和作为函数值返回 答案: d=1; s=0; d=d/10; 三设计 计算并输出给定数组中每相邻两个元素之平均值的平方根之和 答案:int i; double avg=0.0,sum=0.0; for(i=0;i<8;i++){avg=(x[i]+x[i+1])/2; sum+=sqrt(avg);} return sum; 第46 套 一填空 统计所有小于等于n 的素数的个数,素数的个数作为函数值返回 答案: j=3 i j 二修改 计算前n 项的累加和;没累加一次把被4 除后余2 的当前累加值放入数组中, 答案: sum=0;j=0; if(sum%4==2) 三设计 计算Sn=1-2/2+1/3-1/4..+1/2n-1-1-1/2n 答案: int i; double sum=0.0; if (n>1 && n<=100) { for(i=1; i<=n; i++) sum+=1.0/(2*i-1)-1.0/(2*i);} return sum; 第47 套 一填空 统计长整形数n 的各个位上出现数字1、2、3 的次数,并通过外部变量c1、c2、c3 返回主函数答案: n%10 break break 二修改 统计一个无符号整数中各个数字值为零的个数,通过形参传回主函数,把整数中最大的数字值作为函数值返回 答案:if( t==0) *zero=count; 三设计 计算S=1+1/1*2+1/1*2*3… 答案: double s=0, t=1; int i ; for(i=1; i<=n; i++) {t *= i; s+= 1./t;} return s; 第48 套 一填空 首先从素数2 开始。用筛选法可得到2-n 之间的所有素数,方法是:首先从素数2 开始,将所有2 的倍数的数…… 答案: a[i] a[i] 0 二修改 为一个偶数寻找两个素数。这两个素数之和等于该偶数,并将各两个素数通过形参指针传回主函数 答案: y=1; d=a-i; 三设计 计算并输出n 以内的能被5 或9 整除的所有自然数的倒数之和 答案: int i; double sum=0.0; for(i=1; i<=n; i++) if(i%5 == 0 || i%9 == 0) sum+=1.0/i; return sum; 第49 套一填空甲乙丙丁四人同时开始放鞭炮,甲每个t1 秒放一次…… 答案: i t++ count 二修改 根据输入的三个边长,判断能否构成三角形,构成的是等边三角形,还是等腰三角形。若能构成等边三角形,函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0 答案: int fun(int a,int b,int c) else return 1; 三设计 计算3 到n 之间所有素数的平方根之和 答案: int i,j=0; double s=0; for (i=3; i<=n; i++) { for (j=2; j 第50 套 一填空 从三个形参中找出中间的那个数,作为函数值返回 答案: a a b 二修改 首先将大写字母转换为对应的小写字母,若小写字母为a-u 字将其转换为其后的第5 个字母,若小写字母为v-z,使其值减21.转换后的小写字母作为函数值返回 答案: c=c+32; c=c+5; 三设计 计算S=1+(1+|2|)+(1+|2|+|3|)…(!+|2|..|n|) 答案: int i; double fac=1.0; double sum=1.0;for(i=2;i<=n;i++) { fac+=sqrt(i); sum+=fac; } return sum; 第51 套 一填空 找出1000 至x 之间个位上数字之和为15 的所有整数,然后输出:符合条件的整数个数作为函数值返回 答案: 0 x t++ 二修改 先将s 所指字符串中的字符按逆序存放到t 所指字符串中,然后把s 所指字符正序连接到t 所指串的后面 答案: int i,s1; t[i] = s[sl-i-1]; 三设计 将ab 中的两个两位正整数合并形成一个新的正 整数放在c 中,合并方式是:将 a 中的十位和个位数依次放在变量c 的百位和个位上,b 中的十位数和各位数一次放在变量 c 的千位和十位上 答案:*c=(b/10)*1000+(a/10)*100+(b%10)*10+ (a%10); 第52 套 一填空 找出100-999 之间所有整数中各位上数字之和为x 的整数,然后输出,符合条 答案: 999 t/10 x 二修改 从低位开始取出长整形变量s 中的偶数为上的数,依次构成一个新数放在t 中, 答案: void fun(long s,long *t) while(s>0) 三设计 按分数的高低排列学生记录,高分在前