2012年3月全国计算机等级考试二级C语言上机真题

发布时间:2021-09-03 18:20:39

2012年3月全国计算机等级考试二级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  (b); 

第 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)*100 (b)*10  (a/10);

 第 3 套 

一、填空 将自然数 1~10 以及它们的平方根写到 名为答案 yfile3txt 的文本文档中,然后 再顺序读出显示在屏幕上。 答案: (1)fp (2)fclose(fp) (3)fname 

二、修改 将 n 个无序整数从小到大排序。 答案: for(i=j 1;i计算正整数 num 的各位上的数字之积。 答案:long k=1; num/=10 ; 

三、程序 计算 n 门课程的平均分,计算结果作为 函数值返回。 答案:int i; float ave=0.0; for(i=0; idata 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]=’’; 

三、程序 将 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 


二、修改 实现两个整数的交换 答案: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 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; 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]=’’; 

三、设计 请编写一个函数把 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 


二、修改 根据形参答案,计算如下公式的值 答案: 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 

二 修改
用递归算法计算非波拉且数列中第 n 项 的值, 答案:switch(g) case 1:return 1;case 2:return 1; 

三 设计 求学生的平均分放在记录的 ave 成员中 答案: int i ; for(i =0 ; i 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 

 三 设计 将 ab 中的两个两位正整数合并形成一 个新的正整数放在 c 中,合并方式是: 将 a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位数和各位 数一次放在变量 c 的千位和十位上 *c=(b/10)*1000 (a/10)*100 (b)*10  (a); 

 第 52 套 

一.填空找出 100-999 之间所有整数中各位上数 字之和为 x 的整数,然后输出,符合条 答案: 999 t/10 x

 二 修改 从低位开始取出长整形变量 s 中的偶数 为上的数,依次构成一个新数放在 t 中, 答案: void fun(long s,long *t) while(s>0)

 三 设计 按分数的高低排列学生记录,高分在前 答案: STREC tmp; int i,j; for(i = 0; i 

二 修改 根据整型变量 m,计算如下公式 答案: double fun(int m) for(i=100;i


二 修改 由形参给定 n 个实数,输出平均值,并 统计在平均值以上的实数个数。 答案: int j,c=0; double xa=0.0; if(x[j]>=xa) 

三 设计 根据以下公式求 P 的值,结果由函数值 带回,M 于 n 为两个正整数且要求 m>n,P=m!/n!(m-n)!. 答案:float result,temp=1.0; int i ; for(i=1;i

 第 89.套 

一 填空程序。。 。 将存放学生数据的结构体数组, 按照姓名的字典序(从小到大)排序。 答案: struct student n-1 a[i].name,a[j].name 

 二修改 在 p 所指的字符串找出 ASCII 码值最大 的字符,将其放在第一个位置上;并将 该字符前的原字符向后顺序移动。 答案: q=p i; while(q>p) 

三 设计 把指定分数范围内的学生数据放在答案 所指的数组中,分数范围内的学生人数 由函数值返回。 答案: int i,j = 0 ; for(i = 0 ; i = l && a[i].s s; STREC *p; p=h->next; while(p) { if(p->s>max ) max=p->s; p=p->next; } return max; 

第 91.套

一 填空 给定程序中用函数指针指向要调用的函 数, 答案: double f1 f2 

二 修改 给定程序中将单向链表结点(不包括头 结点)数据域为偶数的值累加起来, 答案: p=h->next; p=p->next; 

三 设计 判断字符串是否为回文?若是,函数返 回 1, 主函数中输出: YES, 否则返回 0, 主函数中输出 NO。回文是指顺读和倒 读都一样的字符串。 答案: int i,n=0,flag=1; flag=1 char*p=str; while(*p) { n ;p ;} for(i=0;inext p->next >= 

二 修改 给定程序求出单向链表结点数据域中的 最大值,并且作为函数值返回。 答案: p=h->next; p=p->next 

三 设计 将 M 行 N 列的二维数组中的数据,按 行的顺序依次放到一维数组中,一维数 组中的数据的个数存放在形参 n 的所指 的存储单元中。 答案: int i,j; for(i=0;i

阅读更多其他试题,请访问生活日记网 用日志记录点滴生活!考试试题频道。
喜欢考试试题,那就经常来哦

该内容由生活日记网提供.