当前位置:文档之家› c语言机试题

c语言机试题

(1)/*程序修改题目要求:下列给定程序中,fun函数的功能是:求a=xx…xx-…-xx-xx-x(此处xx…xx表示n个x,x和n的值在1至9之间)。

例如:x=3,a=6,则以上表达式为:a=333333-33333-3333-333-33-3其值是296298。

x和n是fun函数的参数,表达式的值作为函数值传回main函数。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

每处3分,共9分*/#include <conio.h>#include <stdio.h>long fun(int x,int n){int j;/*********found*********/long a=0,t=1;/*********found*********/for(j=0;j<=n;j++)t=t*10+x;a=t;for(j=1;j<n;j++){ /*********found*********/t=t/10;a=a-t;}return(a);}main(){int x,n;printf("\nplease enter x and n:");scanf("%d%d",&x,&n);printf("The value of fun is %ld\n",fun(x,n));}答案:1.错误long a=0,t=1; 正确long a=0,t=0;2.错误for(j=0;j<=n;j++) 正确for(j=0;j<n;j++)3.错误t=t%10; 正确t=t/10;(2)/*本题每空5分,共15分。

程序填空题目要求:十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。

然后所有的小孩同时将自己手中的糖分一半给左边的小孩;糖块数为奇数的人可向老师要一块。

问经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖?请在程序的下划线处填入正确的内容并把下划线删除,使得程序得出正确的结果。

注意:源程序不得增行或删行,也不得更改程序的结构!*/#include <stdio.h>main(){inti,count=0,a[11]={0,10,2,8,22,16,4,10,14,20};/******found*****/while(__1__){for(i=1;i<=10;i++)a[i-1]=a[i-1]/2+a[i]/2;a[10]=a[10]/2+a[0];for(i=1;i<=10;i++)/******found*****/if(__2__)a[i]++;for(i=1;i<10;i++)/******found*****/if(a[i]!=a[i+1])__3_;if(i==10)break;else{a[0]=0;count++;}}printf("count=%d number=%d\n",count,a[1]);}答案:1.2. a[i]%2==13. break(3)/*编程题目要求:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

注意:部分程序段已给出,请勿改动仅在两个found中填入你编写的若干语句。

本题14分*/#include<stdio.h>void main(){/*******found******/答案:char ch1,ch2;printf("请输入第一个字母:");ch1 = getchar();getchar(); // 吸收换行符if(ch1 == 'S'){printf("请输入第二个字母:");ch2 = getchar();switch(ch2){case 'a': printf("星期六\n");break;case 'u': printf("星期日\n");break;}}else if(ch1 == 'T'){printf("请输入第二个字母:");ch2 = getchar();switch(ch2)1{case 'h': printf("星期四\n");break;case 'u': printf("星期二\n");break;}}else{switch(ch1){case 'M': printf("星期一\n");break;case 'W': printf("星期三\n");break;case 'F': printf("星期五\n");break;}}return 0;}/*********found*****/}(4)/*程序修改题目要求给定程序中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

每处3分,共6分*/#include <stdio.h>#include <stdlib.h>typedef struct aa{int data;struct aa *next;}NODE;NODE *Creatlink(int n,int m){NODE *h=NULL,*p,*s;int i;/********found********/p=(NODE )malloc(sizeof(NODE));h=p;p->next=NULL;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->next=p->next;p->next=s;p=p->next;}/********found********/return p;}outlink(NODE *h){NODE *p;p=h->next;printf("\n\nThe list :\n\nhead");while(p){printf("->%d",p->data);p=p->next;}printf("\n");}main(){NODE *head;head=Creatlink(8,22);outlink(head);}答案:1. 错误p->next=NULL; 正确p=s;2. 错误s->data=rand()%m; 正确s->data=rand()%(m-1);3. 错误return p; 正确return h;(5)/*本题20分程序设计题目要求题目:有n个人围成一圈,顺序排号。

从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

注意:部分程序段已给出,请勿改动仅在两个found中填入你编写的若干语句。

*/#define nmax 50main(){int i,k,m,n,num[nmax],*p;printf("please input the total of numbers:");scanf("%d",&n);p=num;/*********found*******/答案:for(i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m<n-1){if(*(p+i)!=0)k++;if(k==5){*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;}while(*p==0)p++;printf("The people whose number is %d is left\n",*p);/*********found*******/}(6)/*程序填空题目要求在给定程序中,函数fun的功能是:将N×N矩阵2中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。

例如,N=3,有下列矩阵:1 2 34 5 67 8 9计算结果为:3 1 26 4 59 7 8请在程序的下划线处填入正确的内容并把下划线删除,使得程序得出正确的结果。

注意:源程序不得增行或删行,也不得更改程序的结构!每空5分,共15分*/# include <stdio.h># define N 3void fun(int (*a)[N]){int i,j,t;/*************found***************/for(i=0;i<__N_;i++){/*************found***************/t=a[i][__N-1_];for(j=N-1;j>0;j--)a[i][j]=a[i][j-1];/*************found***************/_a[i][0]_ __=t;}}main(){int i,j,a[][N]={1,2,3,4,5,6,7,8,9};printf("The original array:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d ",a[i][j]);printf("\n");}fun(a);printf("\nThe result is:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d ",a[i][j]);printf("\n");}}(7)/*程序修改题目要求:下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。

函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。

相关主题