当前位置:首页 > 2014年C语言答案(伊诺版)
2014年C语言答案(伊诺版)
好吧,我又来了= =。本来想着14年网上是有答案就不传上来了,但发现有几题差异较大,传上来供大家参考参考,题源为《2014计算机C语言笔试题目(回忆版by松)》。欢迎大家指出错误!
——伊诺
2015年3月16日
一、指出程序中的错误,说明原因并修正。 1、
Int *p,*q;
p=malloc(sizeof(int)*20); q=malloc(sizeof(int)*10); … q=p; …
free(p); free(q);
答:由于free(p);已经将p所指内存区域释放掉,又q和p都指向同个内存区域,之后free(q);试图释放一个已经被释放的内存区域,会使程序崩溃。此外原来q指向的内存区域由于指针丢失,会导致内存泄露。 修正方法:删除语句q=p; 2、交换两个字符串
Void swap(char *p, char *q) { Char *temp; *temp=*p; *p=*q; *q=*temp; }
答:*temp、*p、*q都是指向的一个字符,所以该函数只实现了交换两个字符串的首字符而已。修正:
void swap(char *p, char *q) { }
char temp[100]; strcpy(temp, p); strcpy(p, q); strcpy(q, temp);
此外:由于题目要求的是字符数组,如果是字符串,可以用以下解法:
void swap(char **p, char **q) {
char *temp; temp=*p; *p=*q; *q=temp;
}
int main() { }
char *a=\; char *b=\; swap(&a, &b);
printf(\, a, b); return 0;
二、简答题
1、arr为整型数组,N为数组长度-1,enumb为整型变量,下列函数负责找出arr数组中等于enumb的元素所在位置。 For(i=N-1;arr[i]!=enumb;--i) Printf(“%d”,i); 指出程序会出现的3种异常,并说明原因。
答:①根据函数期望实现的功能,函数负责找出arr数组中等于enumb的元素所在位置,但是函数在每次循环时都有输出,与题意不合。
②当arr数组中没有enumb元素时,i会越界,故限制条件还要加个i>=0。 ③当未找到enumb元素时,i的值为-1,需要对其进行判断。 综上,程序应该修改成:
for(i=N-1;i>=0 && arr[i]!=enumb;--i); if(i == -1)
printf(\); printf(\,i); else
2、if(B) s1 else s2;请用显式结构语言表示该程序段,用伪代码写出来(注明条件跳转和强制跳转)。
答:if(B!=0)
执行语句s1; else //如果B==0
执行语句s2;
3、C语言中,常量存储在哪儿?static 全局变量和static 局部变量存储在哪儿?
答:常量存储在常量区,该区数据可读不可写。static 全局变量和static 局部变量都存储在全局数据区。
三、填空题(没做,下面是原版答案) 1. 选择排序法的链表实现
(答案大概是 while(p->next) ..p=p->next head=head->next return head) 2. 快速排序法求某个数组前n个元素第k大的数
(答案大概是 i 3. 100个人围成圈,从第一个人开始,1~3报数,数到3的人退出,问剩下来的人编号是多 扫? 约瑟夫环数组实现(答案大概是 p=a+N ,k=N, p>a+N, i<3 ,i%3, a[i]!=0 ) 4. 完美乘法,a*b=c,abc中只出现0~9的数字,且每个数字在这个等式中只出现一遍。 (答案大概是 c=a*b while(y>0) y=y/10; if(f[x]!=1) t=1; if(t==0) n++ 这题看着麻烦,其实最简单) 四、程序题 1、编写函数,实现字符串的逆序,不允许申请新的数组空间 void reverse(char *str) { } while(str[j])j++; j--; while(i c=str[i]; str[i]=str[j]; str[j]=c; i++;j--; int i=0, j=0; char c; 2、身份证长度是18,其中第7至14个数字是生日,编写完整程序判断2个身份证号的出生日期先后。 注:三行结束战斗版,主程序就不写了 int isbothsame(char str1[19], char str2[19]) { } int low=6, hight=13; while(low 3、编写完整程序,计算1-x+x^2/2!-x^3/3!+…+x^n/n!,只允许有Main函数,不允许定义其他函数,x是单浮点数,n是整数。 注:网上看到很多答案都是暴力解的,其实这道题可以用动态规划的思想来做。 int main() { float sum=1, x, item=1; int n, i; scanf(\,&x, &n); for(i=1; i<=n; i++) { item *= -1*x/i; sum += item; } } printf(\, sum); return 0; 4、编写完整程序,一个链表,找出其中数据项最大的结点,然后将其移动到链表尾部(结点node由整型data和节点指针next构成),不允许申请新的结点。 void movemax(node *L) { } node *p=L->next, *pre=L, *max=p; while(p) { } int temp = pre->data; pre->data = max->data; max->data = temp; if(p->data>max->data)max=p; pre=p; p=p->next; 五、从提高程序执行效率的角度,说明C语言采取哪些措施并指出原因。
共分享92篇相关文档