计算机二级C语言10套上机题.docx
- 文档编号:29055226
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:50
- 大小:32.59KB
计算机二级C语言10套上机题.docx
《计算机二级C语言10套上机题.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言10套上机题.docx(50页珍藏版)》请在冰豆网上搜索。
计算机二级C语言10套上机题
试卷一
1.填空题
下列给定程序中,函数fun()的作用是:
将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。
例如,若输入"Ab,cD",则输出"ab,cd"。
试题程序:
#include
#include
#include
char【1】fun(chartt[])
{
inti;
for(i=0;tt[i];i++)
{
if((tt[i]>='A')&&(tt[i]<=【2】))
tt[i]+=32;
}
return(tt);
}
main()
{
chartt[81];
printf("\nPleaseenterastring:
");
gets(tt);
printf("\nTheresultstringis:
\n%s",fun(【3】));
}
1.填空题
【1】*【2】'Z'【3】tt
【解析】填空1:
由return语句可以看出,该函数的返回值类型是指向字符串的指针,所以应该使用符号"*"。
填空2:
从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准是ASCII码值是否介于A和Z之间。
填空3:
根据题目的意思这里应该调用函数fun对字符串tt进行转换,所以应该使用tt作为函数的参数。
2.改错题
下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:
a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
voidfun(char*p,char*q,char*c)
{intk=0;
while(*p||*q)
/**********************found***********************/
{if(*p<=*q)
c[k]=*q;
elsec[k]=*p;
if(*p)p++;
if(*q)q++;
/**********************found***********************/
k++
}
}
main()
{chara[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("Thestringa:
");puts(a);
printf("Thestringb:
");puts(b);
printf("Theresult:
");puts(c);
}
2.改错题
(1)错误:
{if(*p<=*q)
正确:
{if(*p>=*q)
(2)错误:
k++
正确:
k++;
【解析】错误1:
依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为">="。
错误2:
C语言规定,每个语句要用分号结束。
3.编程题
请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
例如,当a=16,b=35,调用该函数后,c=5361。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
voidfun(inta,intb,long*c)
{
}
main()
{
inta,b;
longc;
clrscr();
printf("Inputa,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%ld\n",c);
}
3.编程题
voidfun(inta,intb,long*c)
{
*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;
}
【解析】语句*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;是将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
注意"/"和"%"的用法。
试卷二
1.填空题
下列给定程序中,函数fun()的功能是:
按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。
若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
试题程序:
#include
#defineSIZE20
fun(double*s,double*w)
{intk,i;doublesum;
for(k=2,i=0;i {s[i]=k;k+=2;} sum=0.0; for(k=0,i=0;i {sum+=s[i]; if((i+1)【1】5==0) {w[k]=sum/5;sum=0;k++;} } 【2】k; } main() {doublea[SIZE],b[SIZE/5]; intI,k; k=fun(a,b); printf("Theoriginaldata: \n"); for(i=0;i { if(i%5==0)printf("\n"); printf("%4.0f",a[i]); } printf("\n\nTheresult: \n"); for(i=0;i printf("\n\n"); } 1.填空题 【1】%【2】return【3】b[i] 【解析】填空1: 根据题目的意思,这里是执行按顺序对每5个元素求一个平均值的操作,所以应该使用取余符号"%",如果是5的倍数,则该式子的值为零。 填空2: 根据C语言的规定,除了使用关键字void的任何一个子函数都应该有返回值,所以应该使用关键字return把变量k的值返回主函数。 填空3: 由题目的意思可知这里是把存在数组b中的内容依次循环输出,所以后面的变量名应该使用b[i]。 2.改错题 下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。 y=1-1/(2×2)+1/(3×3)-1/(4×4)+… 例如: m中的值为5,则应输出是1-1/4+1/9-1/16+1/25=0.838611。 请改正程序中的错误,使它能得到正确结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include doublefun(intm) {doubley=1.0; /**********************found***********************/ intj=1; intI; for(i=2;i<=m;i++) { j=-1*j; /**********************found***********************/ y+=1/(I*i); } return(y); } main() { intn=5; clrscr(); printf("\nTheresultis%lf\n",fun(n)); } 2.改错题 (1)错误: intj=1; 正确: doublej=1.0; (2)错误: y+=1/(i*i); 正确: y+=j/(i*i); 【解析】错误1: 为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。 错误2: 题中公式是加减相间的运算,通过j来实现。 3.编程题 请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。 二维数组中的数已在主函数中给出。 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #defineM3 #defineN4 voidfun(inttt[M][N],intpp[N]) { } main() { intt[M][N]={{68,32,54,12},{14,24,88,58},{42,22,44,56}}; intp[N],i,j,k; clrscr(); printf("Theriginaldatais: \n"); for(i=0;i { for(j=0;j printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\nTheresultis: \n"); for(k=0;k printf("%4d",p[k]); printf("\n"); } 3.编程题 voidfun(inttt[M][N],intpp[N]) { intI,j,max; for(j=0;j { max=tt[0][j];/*假设各列中的第一个元素最大*/ for(i=0;i if(tt[i][j]>max)/*如果各列中的其他元素比最大值还大, 则将这个更大的元素看作当前该列中最大的元素*/ max=tt[i][j]; pp[j]=max;/*将各列的最大值依次放入pp数组中*/ } } 试卷三 1.填空题 给定程序中,函数fun的功能是: 将形参n中各位上为偶数的数取出,按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数27638496,函数返回值为26846。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include unsignedlongfun(unsignedlongn) { unsignedlongx=0,s,i; intt; s=n; i=【1】; while(【2】) { t=s%10; if(t%2==0) { x=x+t*i;i=【3】; } s=s/10; } returnx; } main() { unsignedlongn=-1; while(n>99999999||n<0) { printf("input(0 "); scanf("%ld",&n); } printf("\nTheresultis: %ld\n",fun(n)); } 1.填空题 【1】1或1L【2】s>0或s! =0或s【3】i*10 【解析】填空1: 从x=x+t*I;语句,可以看到i是将t放到正确数位上的幂指数,相当于t*10n,空1给i赋初值,连乘的初值为1,因此应填入: 1或1L。 填空2: 空2是考查对循环条件表达式的判断,由于是取s每一位上的数给t,判断是否为偶数,同时s除以10,显然s的值越来越小,当s不为零时,继续循环,因此应填入: s>0或s! =0或s。 填空3: 空3是对i进行操作,由于随着循环的进行,所取出的数t的幂指数越来越大,每次增大10,因此应填入: i*10。 2、改错题 给定程序中,函数fun的功能是: 求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。 例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。 当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息notbefound! 。 请改正程序中的错误,使其能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include #include char*fun(char*s,char*t) { char*p,*r,*a; /**********************found***********************/ a=Null; while(*s) { p=s;r=t; while(*r) /**********************found***********************/ if(r==p) {r++;p++;} elsebreak; if(*r=='\0')a=s; s++; } returna; } main() { chars[100],t[100],*p; printf("\nPleaseenterstringS: "); scanf("%s",s); printf("\nPleaseentersubstringt: "); scanf("%s",t); p=fun(s,t); if(p)printf("\nTheresultis: %s\n",p); elseprintf("\nNotfound! \n"); } 2.改错题 (1)错误: a=Null; 正确: a=NULL; (2)错误: if(r==p) 正确: if(*r==*p)。 【解析】错误1: 二级C是区分大小写的,在仔细阅读程序后,发现Null是一个错误的标识符。 给a指针赋空值,空值的宏定义符号是NULL,因此应该改为: a=NULL; 错误2: 按照语义是判断r和p指针是否相等,显然是错误的。 因为本题是判断子串t是否在串s中出现,应该判定r和p所指内存中字符是否相同,因此应该改为if(*r==*p)。 3.编程题 函数fun的功能是: 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。 最后,t所指的数组中的内容应是“246”。 注意: 部分源程序已给出。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include #include voidfun(char*s,chart[]) { } main() { chars[100],t[100]; printf("\nPleaseenterstringS: "); scanf("%s",s); fun(s,t); printf("\nTheresultis: %s\n",t); } 3.编程题 (1)本题主要考查对奇偶数的判断以及库函数strlen的使用。 根据题意可知,只保留下标为偶数、同时ASCII值也为偶数的字符,这就需要用循环变量k将字符串查看一遍,逐个字符判断是否满足条件k%2==0&&s[k]%2==0,并将满足条件的字符复制到t中,再设一个计数器变量n,统计复制到t的字符数。 复制完毕,在串尾设字符串结束符'\0'。 (2)按上述解析写出的函数是: voidfun(char*s,chart[]) { intk,n=0; for(k=0;k if(k%2==0&&s[k]%2==0) t[n++]=s[k]; t[n]='\0'; } 试卷四 1、填空题 给定程序中,函数fun的功能是: 找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 不得增行或删行,也不得更改程序的结构! #include #defineN4 voidfun(int(*a)[N],int*b) { inti,j; for(i=0;i { b[i]=【1】; for(j=1;j if(b[i]【2】a[j][i]) b[i]=a[j][i]; } } main() { intx[N][N]={{12,5,8,7},{6,1,9,3}, {1,2,3,4},{2,8,4,3}},y[N],i,j; printf("\nThematrix: \n"); for(i=0;i { for(j=0;j printf("%4d",x[i][j]); printf("\n"); } fun(【3】); printf("\nTheresultis: "); for(i=0;i printf("\n"); } 1.填空题 【1】a[0][i]【2】<或<=【3】x,y 【解析】填空1: b是一维数组,存放N×N矩阵中每列元素中的最大值,循环开始,第i列的b[i]应该首先赋值为每列的第一个元素a[0][i],再循环与本列其他元素比较,最后找出每列元素中的最大值。 因此空1中应该填入: a[0][i]。 填空2: for(j=1;j <或<=。 填空3: 空3是调用函数fun,由上下文可知,应该填入: x,y。 2、改错题 给定程序中,函数fun的功能是: 依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。 请改正程序中的错误,使其能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include voidfun(char*s) { inti,j; for(i=0,j=0;s[i]! ='\0';i++) if(s[i]>='0'&&s[i]<='9') /**********************found***********************/ s[j]=s[i]; /**********************found***********************/ s[j]="\0"; } main() { charitem[80]; printf("\nEnterastring: "); gets(item); printf("Thestringis: %s\n",item); fun(item); printf("Thestringofchangingis: %s\n", item); } 2.改错题 (1)错误: s[j]=s[i]; 正确: s[j++]=s[i]; (2)错误: s[j]="\0"; 正确: s[j]='\0'; 【解析】错误1: 第1处错误的前一语句是if(s[i]>='0'&&s[i]<='9'),含义是当s[i]是数字时保留,形成新字符串,覆盖原来的字符串。 j是新字符串的字符个数计数器,每次赋值应该加1,因此s[j]=s[i];应该改为s[j++]=s[i];。 错误2: 由于j是新字符串的字符个数计数器,这里是给新字符串输入一个结束符,应该是'\0'而不是"\0",因此应该改为s[j]='\0';。 3、编程题 请编写函数fun,其功能是: 比较两个字符串的长度,函数返回较长的字符串。 若两个字符串长度相等,则返回第1个字符串(不得使用C语言提供的求字符串长度的函数)。 例如,输入beijing 注意: 部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include char*fun(char*s,char*t) { } main() { chara[20],b[10],*p,*q; intI; printf("Input1thstring: "); gets(a); printf("Input2thstring: "); gets(b); printf("%s",fun(a,b)); } 3、编程题 (1)本题主要考查for循环语句的概念。 根据题意知,需要使用两个循环来实现,即第1个for循环的作用是求字符串s中字符的个数;第2个for循环的作用是求字符串t中字符的个数。 然后进行比较即可。 由于任何for循环都要控制一条语句,因此在每个for循环条件后面必须要加一个分号。 (2)按上述解析写出的函数是: char*fun(char*s,char*t) { inti,j; for(i=0;s[i]! ='\0';i++); /*求字符串s的长度*/ for(j=0;t[j]! ='\0';j++); /*求字符串t的长度*/ if(i>=j) returns; else returnt; } 试卷五 1、填空题 给定程序中,函数fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。 即若原链表结点数据域从头至尾的数据为: 16、3、1、7、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 10 上机
![提示](https://static.bdocx.com/images/bang_tan.gif)