c语言试题及答案.docx
《c语言试题及答案.docx》由会员分享,可在线阅读,更多相关《c语言试题及答案.docx(17页珍藏版)》请在冰点文库上搜索。
c语言试题及答案
理论考试(120分钟)
一、单项选择题(在每小题的4个备选答案中,选出一个最佳答案,共15小题;每小题2分,共30分)
1.一个C程序的执行是从(A)
A.本程序的main函数开始,到main函数结束
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C.本程序的main函数开始,到本程序文件的最后一个函数结束
D.本程序文件的第一个函数开始,到本程序main函数结束
2.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是(B)
if(x>y)z=x;x=y;y=z;
A.10,20,30B.20,30,30C.20,30,10D.20,30,20
3.inta=1,b=2,x=3;表达式:
x*=a+b计算后x的值为:
(B)
A.5B.9C.3D.6
4.下列选项,在C语言中能作为合法标识符的是(D)
A.%xB.a+bC.2_int_12_D.int_2_
5.#include(A)
voidmain()
{
intsum,pad;
sum=pad=5;
pad=sum++;
pad++;
++pad;
printf("%d%d\n",pad,sum);
}
A.76B.65C.75D.66
6.若有说明:
inta[10];则对a数组元素的正确引用是(D)
A.a[10]B.a[3,5]C.a(5)D.a[10-10]
7.请读程序
#include
#defineMUL(x,y)(x)*y
{inta=3,b=4,c;
c=MUL(a++,b++);
printf("%d\n",c);
上面程序的输出结果是(A)。
A.12B.15C.20D.16
8.若用数组名作为函数调用的实参,传递给形参的是数组的(A)
A.数组的首地址B.数组第一个元素的值
C.数组中全部元素的值D.数组元素的个数
9.阅读以下程序
{inta=5,b=0,c=1;
if(a=b+c)printf(“***\n”);
elseprintf(“$$$\n”);
以上程序(C)
A.语法有错不能通过编译B.可以通过编译但不能通过连接
C.输出***D.输出$$$
10.下列关于函数定义正确的是(D)
A.fun(intx,y){intz;returnz;}
B.voidfun(intx,inty){returnx+y;}
C.fun(x,y){intx,y;doublez;z=x+y;returnz;}
D.doublefun(intx,inty){doublez;z=x+y;returnz;}
11.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B)
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传回实参D.传递方式由用户指定
12.具有相同基类型的指针变量P和数组Y,下列写法中不合法的是(D)
A.P=YB.*P=Y[i]
C.P=&Y[i]D.P=&Y
13.设x和y均为int型变量,则下列语句:
x+=y;y=x-y;x-=y;的功能是(D)
A.把x和y按从大到小排列。
B.把x和y按从小到大排列。
C.无确定的结果。
D.交换x和y中的值
14.若已定义:
chars[10];则在下面表达式中不表示s[1]的地址的是(B)
A.s+1B.s++C.&s[0]+1D.&s[1]
15.以下定义语句中,错误的是(D)
A.inta[]={1,2};B.char*a[3];
C.chars[10]="text";D.intn=5,a[n];
二、完善程序(本大题5小题,每空1分,共10分)
1.下面程序是将一个字符串的内容颠倒过来,请补充完整程序。
voidchange(charstr[])
(1)/*函数头*/
intlen,i,j;
charc;
len=strlen(str);
for(i=0,j=len-1;i{c=str[i];str[i]=str[j](2);str[j]=c;}}voidmain(){charstr[80];printf("Enterstring:");gets(str);change(str);printf("\nresultis:%s\n",str);}2.输入一个整数,并在数组中查找这个数。如果找到这个数,就将对应元素的取值改变为它的相反数。voidmain(){inti,x,a[]={3,5,8,2,5,7,9,4};scanf("%d",&x);/*输入所要查找的数,并把这个数赋值给x*/for(i=0;i<8;i++)/*在数组中查找这个数*/if(a[i]==x)a[i]=-x;}3.用折半查找法填空(需要查找的数为m):intbinary(inta[10],intm){intlow=0,high=9,mid;while(low<=high){mid=(low+high)/2;if(melseif(m>a[mid])mid=low(6);elsereturn(mid);}return(-1);}4.下面程序是判断输入的字符串是否是回文(顺读和倒读都一样的字符串称为回文),请完成程序。voidmain(){chars[81],*p1,*p2;intn;gets(s);n=strlen(s);p1=s;p2=s[n-1];while(p1{if(*p1!=*p2)break;else{p1++;p2--(8);}}if(p1elseprintf("Yes\n");}5.下面程序由终端键盘输入字符,存放到文件中去,用!结束输入。完善程序。#include"stdio.h"voidmain(){FILE*fp;charch,fname[10];printf("Inputnameoffile\n");gets(fname);if((fp=fopen(fname,"w"))==NULL){printf("cannotopenthisfile!\n");exit(0);}printf("Enterdata:\n");while((ch=getchar())!='!')fputc(ch,fp);fclose(fp);}三、读程序写结果(本大题5小题,每题4分,共20分)1.以下程序的输出结果是2143。voidfun(int*x,int*y){printf(“%d%d”,*x,*y);*x=3;*y=4;}voidmain(){intx=1,y=2;fun(&y,&x);printf(“%d%d”,x,y);}2.以下程序的输出结果是249。#includeintfun(intn){staticintf=1;intm=2;f=f*n;m++;return(f+n);}voidmain(){inti;for(i=1;i<=3;i++)printf("%d",fun(i));}3.若输入的值是-125,以下程序的运行结果是-125=-5*5*5。#include"math.h"voidmain(){intn;scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}fun(intn){intk,r;for(k=2;k{r=n%k;while(r==0){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0136。#includevoidmain(){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("\n");}intsub(int*s){staticintt=0;t=*s+t;returnt;}5.以下程序段的输出结果是70,10。#include"stdio.h"struct sp{inta;intb;}*p,*q;structspt[3]={70,10,80,20,90,30};voidmain(){ p=t;q=p++;printf("%d,%d",q->a,q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。(简单,自己写)#includevoidmain(){intscore[10],i,j=0,sum=0;floatavg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d",score[i]);j++;}sum+=score[i];}avg=sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。#include#includevoidmain(){inttemp,a;intnum=0;chars;printf("输入数字字符串:");while((s=getchar())!='\n'){temp=0;a=s-48;num=num*10+a;}printf("num=%d\n",num);}3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。#include#includeintss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/{inti;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0)return0;return1;}intmain(void){FILE*fp;fp=fopen("data.txt","w");inti,j=0;for(i=2;i<=100;i++)if(ss(i)){j++;fprintf(fp,"%5d",i);}fclose(fp);return0;}4.动态创建链表并打印链表各结点信息。链表每个结点包含学号、姓名、性别三个信息。当输入学号为-1时表示输入结束。#include#defineNULL0#defineLENsizeof(structstudent)structstudent{intNo;charname[10];charsex;structstudent*next;};intn;structstudent*create(void){structstudent*head,*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);head=NULL;while(p1->No!=-1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);}p2->next=NULL;return(head);}voiddisplaylist(structstudent*head){structstudent*p;p=head;do{printf("%d%s%d\n",p1->No,p1->name,p1->sex);p=p->next;}while(p!=NULL);}voidmain(){structstudent*head,*p;head=create();displaylist(head);} 实验考试(120分钟)一、改错题(本题共有5处错误,每处错误6分,计30分)下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。例如,对于123458899678910搬移一次后的格局为:881234567891099。最后运行结果为:345881291099678请改正程序中的错误,使它能得出正确结果。注意:1、不得增行或删行;2、不得更改程序的结构。3、在运行时如果遇到死循环,按Ctrl+Break键结束运行#include#defineN12intmove(intp[],intm){intk,x;k=m/2;if(m%2==0)k--;x=p[k];for(;k>0;k--)p[k]=p[k-1];p[k]=x;k=m/2;if(m%2==1)k++;x=p[k];for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
c=str[i];
str[i]=str[j]
(2);
str[j]=c;
charstr[80];
printf("Enterstring:
");
gets(str);
change(str);
printf("\nresultis:
%s\n",str);
2.输入一个整数,并在数组中查找这个数。
如果找到这个数,就将对应元素的取值改变为它的相反数。
{inti,x,a[]={3,5,8,2,5,7,9,4};
scanf("%d",&x);/*输入所要查找的数,并把这个数赋值给x*/
for(i=0;i<8;i++)/*在数组中查找这个数*/
if(a[i]==x)
a[i]=-x;
3.用折半查找法填空(需要查找的数为m):
intbinary(inta[10],intm)
{intlow=0,high=9,mid;
while(low<=high)
{mid=(low+high)/2;
if(melseif(m>a[mid])mid=low(6);elsereturn(mid);}return(-1);}4.下面程序是判断输入的字符串是否是回文(顺读和倒读都一样的字符串称为回文),请完成程序。voidmain(){chars[81],*p1,*p2;intn;gets(s);n=strlen(s);p1=s;p2=s[n-1];while(p1{if(*p1!=*p2)break;else{p1++;p2--(8);}}if(p1elseprintf("Yes\n");}5.下面程序由终端键盘输入字符,存放到文件中去,用!结束输入。完善程序。#include"stdio.h"voidmain(){FILE*fp;charch,fname[10];printf("Inputnameoffile\n");gets(fname);if((fp=fopen(fname,"w"))==NULL){printf("cannotopenthisfile!\n");exit(0);}printf("Enterdata:\n");while((ch=getchar())!='!')fputc(ch,fp);fclose(fp);}三、读程序写结果(本大题5小题,每题4分,共20分)1.以下程序的输出结果是2143。voidfun(int*x,int*y){printf(“%d%d”,*x,*y);*x=3;*y=4;}voidmain(){intx=1,y=2;fun(&y,&x);printf(“%d%d”,x,y);}2.以下程序的输出结果是249。#includeintfun(intn){staticintf=1;intm=2;f=f*n;m++;return(f+n);}voidmain(){inti;for(i=1;i<=3;i++)printf("%d",fun(i));}3.若输入的值是-125,以下程序的运行结果是-125=-5*5*5。#include"math.h"voidmain(){intn;scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}fun(intn){intk,r;for(k=2;k{r=n%k;while(r==0){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0136。#includevoidmain(){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("\n");}intsub(int*s){staticintt=0;t=*s+t;returnt;}5.以下程序段的输出结果是70,10。#include"stdio.h"struct sp{inta;intb;}*p,*q;structspt[3]={70,10,80,20,90,30};voidmain(){ p=t;q=p++;printf("%d,%d",q->a,q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。(简单,自己写)#includevoidmain(){intscore[10],i,j=0,sum=0;floatavg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d",score[i]);j++;}sum+=score[i];}avg=sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。#include#includevoidmain(){inttemp,a;intnum=0;chars;printf("输入数字字符串:");while((s=getchar())!='\n'){temp=0;a=s-48;num=num*10+a;}printf("num=%d\n",num);}3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。#include#includeintss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/{inti;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0)return0;return1;}intmain(void){FILE*fp;fp=fopen("data.txt","w");inti,j=0;for(i=2;i<=100;i++)if(ss(i)){j++;fprintf(fp,"%5d",i);}fclose(fp);return0;}4.动态创建链表并打印链表各结点信息。链表每个结点包含学号、姓名、性别三个信息。当输入学号为-1时表示输入结束。#include#defineNULL0#defineLENsizeof(structstudent)structstudent{intNo;charname[10];charsex;structstudent*next;};intn;structstudent*create(void){structstudent*head,*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);head=NULL;while(p1->No!=-1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);}p2->next=NULL;return(head);}voiddisplaylist(structstudent*head){structstudent*p;p=head;do{printf("%d%s%d\n",p1->No,p1->name,p1->sex);p=p->next;}while(p!=NULL);}voidmain(){structstudent*head,*p;head=create();displaylist(head);} 实验考试(120分钟)一、改错题(本题共有5处错误,每处错误6分,计30分)下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。例如,对于123458899678910搬移一次后的格局为:881234567891099。最后运行结果为:345881291099678请改正程序中的错误,使它能得出正确结果。注意:1、不得增行或删行;2、不得更改程序的结构。3、在运行时如果遇到死循环,按Ctrl+Break键结束运行#include#defineN12intmove(intp[],intm){intk,x;k=m/2;if(m%2==0)k--;x=p[k];for(;k>0;k--)p[k]=p[k-1];p[k]=x;k=m/2;if(m%2==1)k++;x=p[k];for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
elseif(m>a[mid])mid=low(6);
elsereturn(mid);
return(-1);
4.下面程序是判断输入的字符串是否是回文(顺读和倒读都一样的字符串称为回文),请完成程序。
{chars[81],*p1,*p2;
intn;gets(s);n=strlen(s);
p1=s;p2=s[n-1];
while(p1{if(*p1!=*p2)break;else{p1++;p2--(8);}}if(p1elseprintf("Yes\n");}5.下面程序由终端键盘输入字符,存放到文件中去,用!结束输入。完善程序。#include"stdio.h"voidmain(){FILE*fp;charch,fname[10];printf("Inputnameoffile\n");gets(fname);if((fp=fopen(fname,"w"))==NULL){printf("cannotopenthisfile!\n");exit(0);}printf("Enterdata:\n");while((ch=getchar())!='!')fputc(ch,fp);fclose(fp);}三、读程序写结果(本大题5小题,每题4分,共20分)1.以下程序的输出结果是2143。voidfun(int*x,int*y){printf(“%d%d”,*x,*y);*x=3;*y=4;}voidmain(){intx=1,y=2;fun(&y,&x);printf(“%d%d”,x,y);}2.以下程序的输出结果是249。#includeintfun(intn){staticintf=1;intm=2;f=f*n;m++;return(f+n);}voidmain(){inti;for(i=1;i<=3;i++)printf("%d",fun(i));}3.若输入的值是-125,以下程序的运行结果是-125=-5*5*5。#include"math.h"voidmain(){intn;scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}fun(intn){intk,r;for(k=2;k{r=n%k;while(r==0){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0136。#includevoidmain(){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("\n");}intsub(int*s){staticintt=0;t=*s+t;returnt;}5.以下程序段的输出结果是70,10。#include"stdio.h"struct sp{inta;intb;}*p,*q;structspt[3]={70,10,80,20,90,30};voidmain(){ p=t;q=p++;printf("%d,%d",q->a,q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。(简单,自己写)#includevoidmain(){intscore[10],i,j=0,sum=0;floatavg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d",score[i]);j++;}sum+=score[i];}avg=sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。#include#includevoidmain(){inttemp,a;intnum=0;chars;printf("输入数字字符串:");while((s=getchar())!='\n'){temp=0;a=s-48;num=num*10+a;}printf("num=%d\n",num);}3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。#include#includeintss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/{inti;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0)return0;return1;}intmain(void){FILE*fp;fp=fopen("data.txt","w");inti,j=0;for(i=2;i<=100;i++)if(ss(i)){j++;fprintf(fp,"%5d",i);}fclose(fp);return0;}4.动态创建链表并打印链表各结点信息。链表每个结点包含学号、姓名、性别三个信息。当输入学号为-1时表示输入结束。#include#defineNULL0#defineLENsizeof(structstudent)structstudent{intNo;charname[10];charsex;structstudent*next;};intn;structstudent*create(void){structstudent*head,*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);head=NULL;while(p1->No!=-1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);}p2->next=NULL;return(head);}voiddisplaylist(structstudent*head){structstudent*p;p=head;do{printf("%d%s%d\n",p1->No,p1->name,p1->sex);p=p->next;}while(p!=NULL);}voidmain(){structstudent*head,*p;head=create();displaylist(head);} 实验考试(120分钟)一、改错题(本题共有5处错误,每处错误6分,计30分)下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。例如,对于123458899678910搬移一次后的格局为:881234567891099。最后运行结果为:345881291099678请改正程序中的错误,使它能得出正确结果。注意:1、不得增行或删行;2、不得更改程序的结构。3、在运行时如果遇到死循环,按Ctrl+Break键结束运行#include#defineN12intmove(intp[],intm){intk,x;k=m/2;if(m%2==0)k--;x=p[k];for(;k>0;k--)p[k]=p[k-1];p[k]=x;k=m/2;if(m%2==1)k++;x=p[k];for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
{if(*p1!
=*p2)break;
else
p1++;p2--(8);
if(p1elseprintf("Yes\n");}5.下面程序由终端键盘输入字符,存放到文件中去,用!结束输入。完善程序。#include"stdio.h"voidmain(){FILE*fp;charch,fname[10];printf("Inputnameoffile\n");gets(fname);if((fp=fopen(fname,"w"))==NULL){printf("cannotopenthisfile!\n");exit(0);}printf("Enterdata:\n");while((ch=getchar())!='!')fputc(ch,fp);fclose(fp);}三、读程序写结果(本大题5小题,每题4分,共20分)1.以下程序的输出结果是2143。voidfun(int*x,int*y){printf(“%d%d”,*x,*y);*x=3;*y=4;}voidmain(){intx=1,y=2;fun(&y,&x);printf(“%d%d”,x,y);}2.以下程序的输出结果是249。#includeintfun(intn){staticintf=1;intm=2;f=f*n;m++;return(f+n);}voidmain(){inti;for(i=1;i<=3;i++)printf("%d",fun(i));}3.若输入的值是-125,以下程序的运行结果是-125=-5*5*5。#include"math.h"voidmain(){intn;scanf("%d",&n);printf("%d=",n);if(n<0)printf("-");n=fabs(n);fun(n);}fun(intn){intk,r;for(k=2;k{r=n%k;while(r==0){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0136。#includevoidmain(){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("\n");}intsub(int*s){staticintt=0;t=*s+t;returnt;}5.以下程序段的输出结果是70,10。#include"stdio.h"struct sp{inta;intb;}*p,*q;structspt[3]={70,10,80,20,90,30};voidmain(){ p=t;q=p++;printf("%d,%d",q->a,q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。(简单,自己写)#includevoidmain(){intscore[10],i,j=0,sum=0;floatavg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d",score[i]);j++;}sum+=score[i];}avg=sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。#include#includevoidmain(){inttemp,a;intnum=0;chars;printf("输入数字字符串:");while((s=getchar())!='\n'){temp=0;a=s-48;num=num*10+a;}printf("num=%d\n",num);}3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。#include#includeintss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/{inti;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0)return0;return1;}intmain(void){FILE*fp;fp=fopen("data.txt","w");inti,j=0;for(i=2;i<=100;i++)if(ss(i)){j++;fprintf(fp,"%5d",i);}fclose(fp);return0;}4.动态创建链表并打印链表各结点信息。链表每个结点包含学号、姓名、性别三个信息。当输入学号为-1时表示输入结束。#include#defineNULL0#defineLENsizeof(structstudent)structstudent{intNo;charname[10];charsex;structstudent*next;};intn;structstudent*create(void){structstudent*head,*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);head=NULL;while(p1->No!=-1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);}p2->next=NULL;return(head);}voiddisplaylist(structstudent*head){structstudent*p;p=head;do{printf("%d%s%d\n",p1->No,p1->name,p1->sex);p=p->next;}while(p!=NULL);}voidmain(){structstudent*head,*p;head=create();displaylist(head);} 实验考试(120分钟)一、改错题(本题共有5处错误,每处错误6分,计30分)下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。例如,对于123458899678910搬移一次后的格局为:881234567891099。最后运行结果为:345881291099678请改正程序中的错误,使它能得出正确结果。注意:1、不得增行或删行;2、不得更改程序的结构。3、在运行时如果遇到死循环,按Ctrl+Break键结束运行#include#defineN12intmove(intp[],intm){intk,x;k=m/2;if(m%2==0)k--;x=p[k];for(;k>0;k--)p[k]=p[k-1];p[k]=x;k=m/2;if(m%2==1)k++;x=p[k];for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
elseprintf("Yes\n");
5.下面程序由终端键盘输入字符,存放到文件中去,用!
结束输入。
完善程序。
#include"stdio.h"
{FILE*fp;
charch,fname[10];
printf("Inputnameoffile\n");gets(fname);
if((fp=fopen(fname,"w"))==NULL)
{printf("cannotopenthisfile!
\n");
exit(0);
printf("Enterdata:
while((ch=getchar())!
='!
')fputc(ch,fp);
fclose(fp);
三、读程序写结果(本大题5小题,每题4分,共20分)
1.以下程序的输出结果是2143。
voidfun(int*x,int*y)
printf(“%d%d”,*x,*y);
*x=3;
*y=4;
{intx=1,y=2;
fun(&y,&x);
printf(“%d%d”,x,y);
2.以下程序的输出结果是249。
intfun(intn)
staticintf=1;
intm=2;
f=f*n;
m++;
return(f+n);
inti;
for(i=1;i<=3;i++)
printf("%d",fun(i));
3.若输入的值是-125,以下程序的运行结果是-125=-5*5*5。
#include"math.h"
{intn;scanf("%d",&n);
printf("%d=",n);
if(n<0)printf("-");
n=fabs(n);
fun(n);
fun(intn)
{intk,r;
for(k=2;k{r=n%k;while(r==0){printf("%d",k);n=n/k;if(n>1)printf("*");r=n%k;}}if(n!=1)printf("%d\n",n);}4.以下程序的运行结果是0136。#includevoidmain(){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("\n");}intsub(int*s){staticintt=0;t=*s+t;returnt;}5.以下程序段的输出结果是70,10。#include"stdio.h"struct sp{inta;intb;}*p,*q;structspt[3]={70,10,80,20,90,30};voidmain(){ p=t;q=p++;printf("%d,%d",q->a,q->b);}四、编程题(本大题共4题,每小题10分,共40分)1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。(简单,自己写)#includevoidmain(){intscore[10],i,j=0,sum=0;floatavg=0;for(i=0;i<10;i++){scanf("%d",&score[i]);}for(i=0;i<10;i++){if(score[i]<60){printf("%d",score[i]);j++;}sum+=score[i];}avg=sum/10.0;printf("\n平均分为%f,不及格人数为%d",avg,j);}2.编写程序,实现把键盘输入的数字串转换成对应的整数。#include#includevoidmain(){inttemp,a;intnum=0;chars;printf("输入数字字符串:");while((s=getchar())!='\n'){temp=0;a=s-48;num=num*10+a;}printf("num=%d\n",num);}3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。#include#includeintss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/{inti;for(i=2;i<=(int)sqrt((double)n);i++)if(n%i==0)return0;return1;}intmain(void){FILE*fp;fp=fopen("data.txt","w");inti,j=0;for(i=2;i<=100;i++)if(ss(i)){j++;fprintf(fp,"%5d",i);}fclose(fp);return0;}4.动态创建链表并打印链表各结点信息。链表每个结点包含学号、姓名、性别三个信息。当输入学号为-1时表示输入结束。#include#defineNULL0#defineLENsizeof(structstudent)structstudent{intNo;charname[10];charsex;structstudent*next;};intn;structstudent*create(void){structstudent*head,*p1,*p2;n=0;p1=p2=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);head=NULL;while(p1->No!=-1){n++;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf("InputNoNameandSex\n");scanf("%d%s%s",&p1->No,p1->name,p1->sex);}p2->next=NULL;return(head);}voiddisplaylist(structstudent*head){structstudent*p;p=head;do{printf("%d%s%d\n",p1->No,p1->name,p1->sex);p=p->next;}while(p!=NULL);}voidmain(){structstudent*head,*p;head=create();displaylist(head);} 实验考试(120分钟)一、改错题(本题共有5处错误,每处错误6分,计30分)下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。例如,对于123458899678910搬移一次后的格局为:881234567891099。最后运行结果为:345881291099678请改正程序中的错误,使它能得出正确结果。注意:1、不得增行或删行;2、不得更改程序的结构。3、在运行时如果遇到死循环,按Ctrl+Break键结束运行#include#defineN12intmove(intp[],intm){intk,x;k=m/2;if(m%2==0)k--;x=p[k];for(;k>0;k--)p[k]=p[k-1];p[k]=x;k=m/2;if(m%2==1)k++;x=p[k];for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
{r=n%k;
while(r==0)
{printf("%d",k);n=n/k;
if(n>1)printf("*");
r=n%k;
if(n!
=1)printf("%d\n",n);
4.以下程序的运行结果是0136。
{inti,k;
for(i=0;i<4;i++)
{k=sub(&i);
printf("%3d",k);
printf("\n");
intsub(int*s)
{staticintt=0;
t=*s+t;returnt;
5.以下程序段的输出结果是70,10。
struct sp
{inta;
intb;
}*p,*q;
structspt[3]={70,10,80,20,90,30};
{ p=t;
q=p++;
printf("%d,%d",q->a,q->b);
四、编程题(本大题共4题,每小题10分,共40分)
1.编写程序,从键盘上输入10个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。
(简单,自己写)
voidmain(){
intscore[10],i,j=0,sum=0;
floatavg=0;
for(i=0;i<10;i++){
scanf("%d",&score[i]);
if(score[i]<60){
printf("%d",score[i]);
j++;
sum+=score[i];
avg=sum/10.0;
printf("\n平均分为%f,不及格人数为%d",avg,j);
2.编写程序,实现把键盘输入的数字串转换成对应的整数。
inttemp,a;
intnum=0;
chars;
printf("输入数字字符串:
while((s=getchar())!
='\n'){
temp=0;
a=s-48;
num=num*10+a;
printf("num=%d\n",num);
3.找出100以内的所有素数,找出的素数输出到data.txt文件中,要求用自定义函数实现判断素数的功能。
intss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/
for(i=2;i<=(int)sqrt((double)n);i++)
if(n%i==0)
return0;
return1;
intmain(void)
FILE*fp;
fp=fopen("data.txt","w");
inti,j=0;
for(i=2;i<=100;i++)
if(ss(i))
fprintf(fp,"%5d",i);
4.动态创建链表并打印链表各结点信息。
链表每个结点包含学号、姓名、性别三个信息。
当输入学号为-1时表示输入结束。
#defineNULL0
#defineLENsizeof(structstudent)
structstudent{
intNo;
charname[10];
charsex;
structstudent*next;
};
intn;
structstudent*create(void){
structstudent*head,*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(LEN);
printf("InputNoNameandSex\n");
scanf("%d%s%s",&p1->No,p1->name,p1->sex);
head=NULL;
while(p1->No!
=-1){
n++;
if(n==1)
head=p1;
p2->next=p1;
p2=p1;
p1=(structstudent*)malloc(LEN);
p2->next=NULL;
return(head);
voiddisplaylist(structstudent*head){
structstudent*p;
p=head;
do{
printf("%d%s%d\n",p1->No,p1->name,p1->sex);
p=p->next;
}while(p!
=NULL);
structstudent*head,*p;
head=create();
displaylist(head);
实验考试(120分钟)
一、改错题(本题共有5处错误,每处错误6分,计30分)
下面程序功能是将一个数组从二分之一处切开(元素个数为奇数时,正中间元素不动;元素个数为偶数时,无正中间元素),然后将中间的元素向两头搬移,同时两头元素向中间平移,共移动了4次。
例如,对于123458899678910
搬移一次后的格局为:
881234567891099。
最后运行结果为:
345881291099678
请改正程序中的错误,使它能得出正确结果。
注意:
1、不得增行或删行;
2、不得更改程序的结构。
3、在运行时如果遇到死循环,按Ctrl+Break键结束运行
#defineN12
intmove(intp[],intm)
intk,x;
k=m/2;
if(m%2==0)k--;
x=p[k];
for(;k>0;k--)
p[k]=p[k-1];
p[k]=x;
if(m%2==1)k++;
for(;kp[k+1]=p[k];p[k]=x;returnp[k];}voidmain(){intk;inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};for(k=0;k<6;k++)move(a,N);for(k=0;k<12;k++)printf("%d",*(a+k));putchar('\n');}二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。字符串s通过键盘输入。例如:输入字符串abc123def4567ghf,执行程序后输出结果为1234567。 #include#includevoid main(){ char s[80], d[80]; int i, j; gets(s); for(i=j=0; s[i]!='\0';i++)if(s[i]>=48&&s[i]<=57){ d[j]=s[i]; j++;} d[j]='\0'; puts(d); } 2、求1!+2!+3!+...+20!,其中计算阶乘编写一个自定义函数fact,在main函数中调用。 #include long fact(int n){ int i; long p=1; for(i=1;i<=n;i++) p*=i; return p;}void main(){ long s=0; int i; for(i=1;i<=20;i++) s+=fact(i); printf("%ld\n",s);}3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。(30分)。#includevoid main(){ struct Student{ int no; char name[20]; int ch; int ma; int eng; int sum; }; struct Student stu[5]; int i; FILE *fp; for(i=0;i<5;i++){ printf("Please Input Student Information [%d]\n",i+1); scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng); stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng; } if((fp=fopen("stuinfo.txt","wb+"))==NULL){ printf("Open File Error!");return; } fwrite(stu,sizeof(stu),1,fp);}
p[k+1]=p[k];
returnp[k];
intk;
inta[N]={1,2,3,4,5,88,99,6,7,8,9,10};
for(k=0;k<6;k++)move(a,N);
for(k=0;k<12;k++)
printf("%d",*(a+k));
putchar('\n');
二、编程题(本题共3小题,第1,2题各20分;第3题,30分,计70分)
1、编写一程序,将字符串s中的数字字符放入d数组中,最后输出d中的字符串。
字符串s通过键盘输入。
例如:
输入字符串abc123def4567ghf,执行程序后输出结果为1234567。
void main(){
char s[80], d[80];
int i, j;
gets(s);
for(i=j=0; s[i]!
='\0';i++)
if(s[i]>=48&&s[i]<=57){
d[j]=s[i];
d[j]='\0';
puts(d);
2、求1!
+2!
+3!
+...+20!
,其中计算阶乘编写一个自定义函数fact,在main函数中调用。
long fact(int n){
int i;
long p=1;
for(i=1;i<=n;i++)
p*=i;
return p;
void main()
long s=0;
for(i=1;i<=20;i++)
s+=fact(i);
printf("%ld\n",s);
3、有5个学生,每个学生有三门课程的成绩,从键盘输入学生信息(包括学号、姓名、语文成绩、数学成绩、英语成绩),计算每个学生的总分,将原有数据和计算出的总分存放在磁盘文件“stuinfo.txt”中。
(30分)。
struct Student{
int no;
char name[20];
int ch;
int ma;
int eng;
int sum;
struct Student stu[5];
FILE *fp;
for(i=0;i<5;i++){
printf("Please Input Student Information [%d]\n",i+1);
scanf("%d%s%d%d%d",&stu[i].no,&stu[i].name,&stu[i].ch,&stu[i].ma,&stu[i].eng);
stu[i].sum=stu[i].ch+stu[i].ma+stu[i].eng;
if((fp=fopen("stuinfo.txt","wb+"))==NULL){
printf("Open File Error!
return;
fwrite(stu,sizeof(stu),1,fp);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2