上机100套题及答案91100.docx
- 文档编号:23300415
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:59
- 大小:38.35KB
上机100套题及答案91100.docx
《上机100套题及答案91100.docx》由会员分享,可在线阅读,更多相关《上机100套题及答案91100.docx(59页珍藏版)》请在冰豆网上搜索。
上机100套题及答案91100
2009年4月上机100套题91-100
第九十一套
请补充main函数,该函数的功能是:
从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。
例如,当str1="cdefghij",则str2="cegi"。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
#defineLEN80
voidmain()
{
charstr1[LEN],str2[LEN];
char*p1=str1,*p2=str2;
inti=0,j=0;
system("CLS");
printf("Enterthestring:
\n");
scanf(【1】);
printf("***theorigialstring***\n");
while(*(p1+j))
{
printf("【2】",*(p1+j));
j++;
}
for(i=0;i *p2++=*(str1+i); *p2='\0'; printf("\nThenewstringis: %s\n",【3】); } 【参考答案】 (1)"%s",str1 (2)%c(3)str2 【解题思路】填空1: 本题考查标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为"%s",题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。 填空2: 本题考查标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为"%c"。 填空3: 题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str2。 下列给定程序中,函数fun的功能是: 将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。 例如,在调用fun函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABCDEFGHIJK。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include voidfun(char*p,char*b) {inti,k=0; while(*p) /*************found**************/ {i=1; /*************found**************/ while(i<3||*p) { b[k]=*p; k++;p++;i++; } if(*p) /*************found**************/ {b[k]='';} } b[k]='\0'; } voidmain() {chara[80],b[80]; printf("Enterastring: "); gets(a); printf("Theoriginalstring: "); puts(a); fun(a,b); printf("\nThestringafterinsertspace: "); puts(b);printf("\n\n"); } 【参考答案】 (1)错误: i=1;正确: i=0; (2)错误: while(i<3||*p)正确: while(i<3&&*p) (3)错误: b[k]='';正确: b[k++]=''; 【解题思路】 该题考查字符串复制程序的构造方法,题中插入空格字符的定义条件是while(i<3||*p),同时满足i<3和*p两个条件后才能执行{b[k++]='';}语句,该语句的含义是在输出结果中置入空格字符。 请编写函数fun,该函数的功能是: 将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。 例如,若二维数组中的数据为: 33333333 44444444 55555555 则一维数组中的内容应该是333333334444444455555555 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include voidfun(int(*s)[10],int*b,int*n,intmm,intnn) { } voidmain() { FILE*wf; intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j; inta[100]={0},n=0; printf("Thematrix: \n"); for(i=0;i<3;i++) {for(j=0;j<4;j++) printf("%3d",w[i][j]); printf("\n"); } fun(w,a,&n,3,4); printf("TheAarray: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\n"); /******************************/ wf=fopen("out.dat","w"); for(i=0;i fprintf(wf,"%3d",a[i]); fclose(wf); /*****************************/ } 【参考答案】 voidfun(int(*s)[10], int*b,int*n,intmm,intnn) { inti,j,k=0; for(i=0;i /*将二维数组s中的数据按行的顺序依次放到一维数组b中*/ for(j=0;j b[k++]=s[i][j]; *n=k; /*通过指针返回元素个数*/ } 【解题思路】 我们可以用两个循环来处理问题,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成: for(i=0;i for(j=0;j b[k++]=s[j][i]; 注意s[j][i]的下标,不能用s[i][j]。 若按行取出则列标变化最快,若按列取出则行标变化最快。 循环嵌套时,越在内层的循环,其循环变量变化越快。 上题程序中只有当j从头到尾变化完时,i才变化一次(即加1);由于二维数组的第1个下标为行下标,第2个下标为列下标,所以第1个程序列变化最快,第2个程序行变化最快。 第九十二套 请补充main函数,该函数的功能是: 把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。 例如,如果str[3]={"efjh","efknls","owys"},则s="jsy"。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include voidmain() { intI=0; char*str[3]={"efjh","efknls","owys"}; char**p; chars[8]; system("CLS"); 【1】; for(I=0;I<3;I++) { s[I]=*p[I]; while(*p[I]) { if(s[I]<*p[I]) s[I]=*p[I]; 【2】; } } 【3】; printf("newstring\n"); puts(s); } 【参考答案】 (1)p=str (2)p[i]++(3)s[i]='\0' 【解题思路】 填空1: str是一个大小为3的指针数组,每个指针指向一个字符串,p是指向指针的指针,首先要使指针p指向数组str的首地址。 填空2: 通过p[i]++使p[i]指向第i个字符串的下一个字符。 填空3: 将每行字符串的最大字符都拷贝到字符数组s中,不要忘了在数组s最后加上字符串结束标记符'\0'。 下列给定程序中,函数fun的功能是: 将 个字符串连接起来,组成一个新串,放入pt所指字符串中,例如,把3个串abc、CD、EF串联起来,结果是abcCDEF。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include /*************found**************/ intfun(charstr[][10],intm,char*pt) {intk,q,i,j=0; for(k=0;k {q=strlen(str[k]); j+=q; for(i=0;i /*************found**************/ pt[i]=str[k,i]; pt+=q; pt[0]=0; } pt-=j; } voidmain() {intm,h; chars[10][10],p[120]; system("CLS"); printf("\nPleaseenterm: "); scanf("%d",&m);gets(s[0]); printf("\nPleaseenter%dstring: \n",m); for(h=0;h fun(s,m,p); printf("\nTheresultis: %s\n",p); } 【参考答案】 (1)错误: intfun(charstr[][10],intm,char*pt) 正确: voidfun(charstr[][10],intm,char*pt) (2)错误: pt[i]=str[k,i]; 正确: pt[i]=str[k][i]; 【解题思路】 本题中的两例错误我们已经在前面的讲解中详细阐述,一般这样的字符串连接函数在C语言的考试中肯定不让使用strcat函数,但是,直接用if和while的循环嵌套也是很容易解决问题的。 请编写函数fun,该函数的功能是: 将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。 例如,若字符串数组中的M个字符串为 AAAA BBBBBBB CC 则合并后的字符串内容应该是AAAABBBBBBBCC 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #defineM3 #defineN20 voidfun(chara[M][N],char*b) { } voidmain() { FILE*wf; charw[M][N]={"AAAA","BBBBBBB","CC"},i; chara[100]={"##############################"}; printf("Thestring: \n"); for(i=0;i puts(w[i]); printf("\n"); fun(w,a); printf("TheAstring: \n"); printf("%s",a); printf("\n\n"); /******************************/ wf=fopen("out.dat","w"); fprintf(wf,"%s",a); fclose(wf); /*****************************/ } 【参考答案】 voidfun(chara[M][N],char*b) { inti,j,k=0; for(i=0;i /*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/ for(j=0;a[i][j]! ='\0';j++) b[k++]=a[i][j]; b[k]='\0'; /*在字符串最后加上结束标志符*/ } 【解题思路】本程序中第1个for循环的作用是对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j]。 第九十三套 请补充函数fun,该函数的功能是: 把数组bb中的数按从大到小排列。 数组的值及元素个数从主函数中输入。 例如,输入21354,结果为12345。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #defineN100 voidfun(intbb[],intn) { intI,j,t; for(I=0;【1】;I++) for(j=0;【2】;j++) if(bb[j]>bb[j+1]) { t=bb[j]; bb[j]=bb[j+1]; bb[j+1]=t; } } voidmain() { inti=0,n=0; intbb[N]; system("CLS"); printf("\nInputn: \n"); scanf("%d",&n); printf("\nInputdata: \n"); while(i { printf("bb[%d]=",i); scanf("%d",&bb[i]); i++; } fun(bb,n); printf("\n***theresult***\n"); for(i=0;i printf("%4d",bb[i]); } 【参考答案】 (1)i 【解题思路】 填空1: 本题采用冒泡法进行排序。 冒泡法的思路是: 如果对n个数从大到小排序,则要进行n轮比较,在每一轮比较中要进行n-1次两两比较。 所谓两两比较就是从尾到头依次将相邻两个数进行比较,并将比较大的数放在前面,即两两比较后这两个数要形成题中所要求的顺序。 理解冒泡法的思路,则此空应填i 填空2: 理解冒泡法的思路,则此空应填j 下列给定的程序中,函数fun的功能是: 判断字符ch是否与str所指字符串中的某个字符相同;若相同,则什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include /*************found**************/ voidfun(charstr,charch) {while(*str&&*str! =ch)str++; /*************found**************/ if(*str==ch) {str[0]=ch; /*************found**************/ str[1]=′0′; } } voidmain() {chars[81],c; system("CLS"); printf("\nPleaseenterastring: "); gets(s); printf("\nPleaseenterthecharactertosearch: "); c=getchar(); fun(s,c); printf("\nTheresultis%s\n",s); } 【参考答案】 (1)错误: voidfun(charstr,charch) 正确: voidfun(char*str,charch) (2)错误: if(*str==ch) 正确: if(*str=='\0') (3)错误: str[1]='0'; 正确: str[1]='\0'; 【解题思路】 该题的重点在while的循环嵌套语句中,由题干信息"若相同,则什么也不做"很容易就能看出if(*str==ch)后面的执行语句是错误的。 另外,void指针具有一般性,它们可以指向任何类型的数据。 目前,绝大多数C编译所提供的这类函数都返回char指针,再由题目中的定义得出voidfun(charstr,charch)的错误信息;str[1]='0';是一个简单的语法错误。 请编写函数fun,该函数的功能是: 移动一维数组中的内容,若数组中有n个整数,要求把下标从0到 的数组元素平移到数组的最后。 例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。 移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #defineN80 voidfun(int*w,intp,intn) { } voidmain() { FILE*wf; inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},b[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; inti,p,n=15; printf("Theoriginaldata: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\nEnterp: "); scanf("%d",&p); fun(a,p,n); printf("\nThedataaftermoving: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\n"); /******************************/ wf=fopen("out.dat","w"); fun(b,3,n); for(i=0;i fprintf(wf,"%3d",b[i]); fclose(wf); /*****************************/ } 【参考答案】 voidfun(int*w,intp,intn) { inti,j,t; for(i=0;i<=p;i++) /*循环左移p+1次*/ { t=w[0]; for(j=1;j /*实现循环左移*/ w[j-1]=w[j]; w[j-1]=t; } } 【解题思路】 本题采用"循环左移"的算法,即从第2个字符开始以后的每个字符都依次前移一个字符,而原来的第1个字符放在串中的最后一个字符。 当要平移p个字符时,则要进行p次的循环左移。 第九十四套 请补充函数fun,该函数的功能是: 比较字符串str1和str2的大小,并返回比较的结果。 例如,当str1="cdef",str2="cde"时,函数fun返回">"。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include #defineN80 char*fun(char*str1,char*str2) { char*p1=str1,*p2=str2; while(*p1&&*p2) { if(【1】) return"<"; if(【2】) return">"; p1++; p2++; } if(*p1==*p2) return"=="; if(*p1==【3】) return"<"; else return">"; } voidmain() { charstr1[N],str2[N]; system("CLS"); printf("Inputstr1: \n"); gets(str1); printf("Inputstr2: \n"); gets(str2); printf("\n*****theresult*****\n"); printf("\nstr1%sstr2",fun(str1,str2)); } 【参考答案】 (1)*p1<*p2 (2)*p1>*p2(3)'\0' 【解题思路】 填空1: 比较两个字符串的大小,是从第一个字符开始比较,如果两个字符不相等,则由字符的大小决定字符串的大小;如果两个字符相等,则继续比较下一个字符;如果所有字符都相等,则两个字符串相等。 指针p1指向字符串str1,指针p2指向字符串str2,如果p1所指的字符小于p2所指的字符,则字符串str1小于字符串str2。 填空2: 如果p1所指的字符大于p2所指的字符,则字符串str1大于字符串str2。 填空3: 如果str1是str2的前一部分,则str1的所有字符都等于str2中的对应字符,而字符串结束标记符'\0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 100 答案 91100
![提示](https://static.bdocx.com/images/bang_tan.gif)