C语言下期考试题库.doc

上传人:坚持 文档编号:4208302 上传时间:2019-10-04 格式:DOC 页数:24 大小:171.51KB
下载 相关 举报
C语言下期考试题库.doc_第1页
第1页 / 共24页
C语言下期考试题库.doc_第2页
第2页 / 共24页
C语言下期考试题库.doc_第3页
第3页 / 共24页
C语言下期考试题库.doc_第4页
第4页 / 共24页
C语言下期考试题库.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、改错. 1.程序 D8.c 的功能是打开文件 d:te.c 用于读并判断打开是否成功 【此部分在计算中心已公布的题库中,未 标明正确答案,同学们自己做】 #include int main(void) FILE *fp; /*Found*/ char fileName = “d:te.c“; /*Found*/ fp = fopen(fileName, “r“); /*Found*/ if (fp = NULL) puts(“File Open Error!“); return 1; putchar(fgetc(fp); fclose(fp); return 0; 2.程序 D9.c 的功能是

2、申请 100 个字节的内 存空间,显示其首地址,然后释放申请到 的内存空间 #include #include int main(void) /*Found*/ char *pch2; /*Found*/ if (pch = (char *)malloc(100) = NULL) printf(“malloc memory fail!n“); return 1; printf(“%pn“, pch); /*Found*/ free(pch); return 0; 3.程序 D10.c 的功能是将字符串 str2 显示 在屏幕上 #include /*Found*/ #define START

3、/*Found*/ #define NEXT int main(void) char *str2 = “13125176247“; const int i = 0; for (printf(“n“); str2i; ) START putchar(str2i); /*Found*/ p+; NEXT return 0; 4.程序 D16.c 的功能是 worker2 的信息使 用结构体存储,从键盘读入其各项信息并 显示。 #include int main(void) struct WKER long ID; long int num; char name20; char sex; /*Fou

4、nd*/ worker2 ; worker2.ID = 1L; /*Found*/ scanf(“%ld%s %c“, /*Found*/ printf(“workers info: num=%ld name=%s sex=%cn“, worker2.num, worker2.name, worker2.sex); return 0; 程序 D19.c 的功能是将 inBuf 中字符串拆 分成一个个的单词。 程序说明: (1)单词之间的分隔符由串 divChar,程序中定义为“;?!,./”。 (2)函数 getStrFromBuf 的功能是从 Buf 的开始处寻找第一个单词,将找到的 单词作

5、为一个字符串复制到 Str 处,divStr 指明单词间的分隔符。GetStrFromBuf 的 返回值指向已找到单词的下一个字符。 (3)函数 charInStr 的功能是判断 字符 t 是否出现在串 Str 中。 (4)主程序的功能是将 inBuf 中的 所有单词在屏幕上显示出来。 #include #define Yes 1 #define No 0 char *getStrFromBuf(char *Buf, char *Str, char *divStr); int charInStr(char *Str, char t); int main(void) char inBuf100

6、= “how old are/ you?“, *point, oneWord20; char divChar = “ ;?!,./“; point = inBuf; while (*point) /*Found*/ P=getStrFromBuf(point, oneWord, divChar); if (*oneWord) puts(oneWord); return 0; int charInStr(char *Str, char t) for (; *Str; Str+) /*Found*/ if (*Str = *t)(去掉*) /*Found*/ return Yes; /*Found

7、*/ return No; char *getStrFromBuf(char *Buf, char *Str, char *divStr) for (; *Buf; Buf+) if (charInStr(divStr, *Buf) = No) break; for (; *Buf; Buf+) if (charInStr(divStr, *Buf) = Yes) break; /*Found*/ *Str = *Buf; Str+; /*Found*/ *Str = 0; /*Found*/ return Buf; 填空题【附带正确答案】 一: #define M 10 main() int

8、 sub_max(); int i,aM,*ptr=a; int max; for(i=0;iname,student-num,student- birthday.year,student- birthday.month,student-birthday.day); 十五 struct data int day, month, year; ; struct stu char name20; long num; struct data birthday; ; main() int i; struct stu *p, student4=“liying“,1,1978,5,23, “wangping

9、“,2,1979,3,14,“libo“,3,1980,5, 6, “xuyan“,4,1980,4,21; p=student; printf(“n1-Output name,number,year,month,dayn“ ); for(i=0;iname,(p+i)-num,(p+i)- birthday.year,(p+i)- birthday.month,(p+i)-birthday.day); 十六、编写一个 creat( )函数,按照规定的 节点结构体,创建一个单链表(链表中的 节点个数不限,以输入学号 0 作结束) 。 #include #include #define LEN

10、sizeof(struct student) #define NULL 0 struct student long num; int score; struct student *next; ; int n; struct student *creat() struct student *head=NULL,*tail,*newp; n=0; newp= (struct student *) malloc(LEN); printf(“input Number and Scoren“); scanf(“%ld,%d”, tail=newp; while(newp-num!=0) n+; if(n

11、=1) head=newp; else tail-next=newp; tail=newp; newp=(struct student *)malloc(LEN); printf(“input Number and Scoren“); scanf(“%ld,%d”, tail-next=NULL; return(head); main() struct student *head; printf(“Please creat the listn“); head=creat(); 十七、输出链表的某节点数据 typedef struct student char name10; int score

12、; struct student *next; NODE; void print_list(NODE *head) NODE *p=head; while (p!=NULL) printf(“n%s %d“,p-name,p-score); p=p-next; 十八。该子函数的功能是统计链表节点的 个数 typedef struct student char name10; int score; struct student *next; NODE; int count_list(NODE *head) NODE *p=head; int count=0; while (p!=NULL) co

13、unt+; p=p-next; return(count); 十九,该子函数的功能是删除链表中的某 节点 struct node int num; char str20; struct node *next; ; struct node *delet(struct node * head, char * pstr) /*以 head 为头指针,删除 pstr 所在 节点*/ struct node *temp,*p; temp=head; if (head=NULL) printf(“nList is null!n“); else temp=head; while(strcmp(temp-st

14、r,pstr)!=0 temp=temp-next; /*跟踪链表的节点,即指针后移 */ if(strcmp(temp-str,pstr)= =0 ) if (temp=head) printf(“deletestring :%sn“,temp-str); head=head-next; free(temp); else /*表中节点或最后节点*/ p-next=temp-next; printf(“delete string :%sn“,temp-str); free(temp); else printf(“nno find string!n“); /*没找到要 删除的字符串*/ retu

15、rn(head); /*返回表头指针 */ 二十、以学号为顺序建立链表,插入某节 点 struct node *insert(struct node * head, char * pstr, int n) /*插入学号为 n、姓名为 pstr 的节点*/ struct node *p1,*p2,*p3; p1=(struct node*)malloc(sizeof(struct node); strcpy(p1-str,pstr); /*写入节点的姓名字串*/ p1-num=n; p2=head; if(head=NULL) head=p1; p1-next=NULL; /*新节点插入表头*/

16、 else /*非空表*/ while(np2-num p2=p2-next; /*跟踪链表增长*/ if (nnum) /*找到插入位置*/ if (head=p2) head=p1; p1-next=p2; /*插入位置在表头*/ else p3-next=p1; p1-next=p2; /*插入位置在表中*/ else p2-next=p1; p1-next=NULL; /*插入位置在表尾 */ return(head); /*返回链表的头指针*/ 二十二、打开 d 盘根下的 myfile.c 文件,验 证文件能否正确打开. include void main() FILE *fa; i

17、f(fa=fopen(“d:myfile.c”, “r”)=NULL) printf(“n Cannot open the file!”); exit(0); else printf(“ n Open! ”); fclose(fa); 二十三【编程题】 、将键盘上输入的一个字 符串(以#作为结束字符) ,存储到一个文 件中。 #include “stdio.h” main( ) char ch,filename10; printf(“Enter the file name:”); scanf(“%s“,filename); if (fp=fopen(filename,“w”) = = NULL

18、) printf(“can not open this filen“); exit(0); ch=getchar( ); /*输入字符并存储到文件中*/ while(ch!=#) fputc(ch,fp); ch=getchar( ); fclose(fp); 二十四、 【编程题】将一个磁盘文件的信息 复制到另一个文件中并显示在屏幕上。 #include “stdio.h“ main( ) FILE *in,*out; char ch, infile20, outfile20; printf(“Enter the infile name:“); scanf(“%s“,infile); prin

19、tf(“Enter the outfile name:“); scanf(“%s“,outfile); if (in=fopen(infile,“r“)=NULL) printf(“can not open infilen“); exit(0); if (out=fopen(outfile,“w“)=NULL) printf(“can not open outfilen“); exit(0); while (!feof(in) ch fgetc(in); fputc(ch,out); putchar(ch) ; fclose(in); fclose(out); 二十五、编写一个程序,实现 DO

20、S 中的 type 命令的功能。 命令格式如下: c:type d:file1.cpp #include #include void main(int argc,char *argv) FILE *fp; char c; if (argc0) fputs(string,fp); fputs(“n“,fp); fclose(fp); if(fp=fopen(“file1.txt“,“r“)=NULL) printf(“cannt open file“);exit(0); while(fgets(string,81,fp)!=NULL) fputs(string,stdout); fclose(f

21、p); 二十七、 【编程题】把文件 1 的内容追 加到文件 2 #include #include #define BUFSIZE 256 void main(int argc,char *argv) int i; char buffBUFSIZE; FILE *fp1,*fp2; if(argc=1) printf(“Rsage: fcat filename linke_fnamelink_fname.“); printf(“n“); exit(0); if(fp1=fopen (argv1,“a“)=NULL) printf(“file %s cannot opened.n“,argv1)

22、; exit(1); for(i=2;inum,pp-age,pp-addr); fclose(fp); 从文件 stud. dat 中,按指定的格式 ,将学生信 息读出并显示到屏幕上. #include struct student char name10; int num; int age; char addr15; ;void main() FILE *fp; char ch, filename20; int i; struct student boy2,*pp=boy; printf(“nfilename:“); gets(filename); fp=fopen(filename,“r

23、“); for(i=0;iname, printf(“nnnametnumber agetaddrn“); pp=boy; for(i=0;iname,pp-num,pp-age,pp-addr); fclose(fp); 三十二、 【编程题】有一个文本文件,第一 次将它的内容显示在屏幕上,第二次把它 复制到另一个文件中 #include “stdio.h“ main( ) FILE *fp1,*fp2; fp1=fopen(“file1.c“,“r“); fp2=fopen(“file12.c“,“w“); while (!feof(fp1) putchar(fgetc(fp1); rewi

24、nd(fp1); while (!feof(fp1) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2); 三十三。 【编程题】在一个文件上存放 了 4 个学生的数据,要求将第一个和第 三个学生的信息在屏幕上显示出来。 #include “stdio.h“ #define SIZE 4 typedef struct char name10; int num; int age; char addr15; stutype; stutype studentSIZE; void main( ) FILE *fp; int i; if (fp=fopen(“s

25、tudent.dat“,“rb“)=NULL) printf(“can not open this filen“); exit(0); for (i=0;iage; printf(“%s,%d“,(*q).name,(*q).age); 题目 取一个整数 a 从右端开始的 47 位。 程序分析: 【12 章的位运算非重点但会涉 及考查】 (1)先使 a 右移 4 位。 (2)设置一个低 4 位全为 1,其余全为 0 的数。 可用(0n3) swap(pointer1,pointer3); if(n2n3) swap(pointer2,pointer3); printf(“the sorted

26、numbers are:%d,%d,%dn“,n1,n2,n3); swap(p1,p2) int *p1,*p2; int p; p=*p1;*p1=*p2;*p2=p; 题目:输入数组,最大的与第一个元素交 换,最小的与最后一个元素交换,输出数 组。 main() int number10; input(number); max_min(number); output(number); input(number) int number10; int i; for(i=0;i0) move(array,n,m); 题目:有 n 个人围成一圈,顺序排号。从 第一个人开始报数(从 1 到 3 报

27、数) ,凡报 到 3 的人退出 圈子,问最后留下的是原来第几号 的那位。 #define nmax 50 main() int i,k,m,n,numnmax,*p; printf(“please input the total of numbers:“); scanf(“%d“, p=num; for(i=0;inext=(link)malloc(sizeof(node); if(i=4) ptr-next=NULL; else ptr=ptr-next; ptr=head; while(ptr!=NULL) printf(“Thevalue is =%dn“,ptr-data); ptr=

28、ptr-next; 题目:反向输出一个链表。 #include “stdlib.h“ #include “stdio.h“ struct list int data; struct list *next; ; typedef struct list node; typedef node *link; void main() link ptr,head,tail; int num,i; tail=(link)malloc(sizeof(node); tail-next=NULL; ptr=tail; printf(“nplease input 5 data=n“); for(i=0;idata=

29、num; head=(link)malloc(sizeof(node); head-next=ptr; ptr=head; ptr=ptr-next; while(ptr!=NULL) printf(“Thevalue is =%dn“,ptr-data); ptr=ptr-next; 【程序 74】 题目:连接两个链表。 #include “stdlib.h“ #include “stdio.h“ struct list int data; struct list *next; ; typedef struct list node; typedef node *link; link dele

30、te_node(link pointer,link tmp) if (tmp=NULL) /*delete first node*/ return pointer-next; else if(tmp-next-next=NULL)/*delete last node*/ tmp-next=NULL; else /*delete the other node*/ tmp-next=tmp-next-next; return pointer; void selection_sort(link pointer,int num) link tmp,btmp; int i,min; for(i=0;id

31、ata; btmp=NULL; while(tmp-next) if(mintmp-next-data) min=tmp-next-data; btmp=tmp; tmp=tmp-next; printf(“40: %dn“,min); pointer=delete_node(pointer,btmp); link create_list(int array,int num) link tmp1,tmp2,pointer; int i; pointer=(link)malloc(sizeof(node); pointer-data=array0; tmp1=pointer; for(i=1;i

32、next=NULL; tmp2-data=arrayi; tmp1-next=tmp2; tmp1=tmp1-next; return pointer; link concatenate(link pointer1,link pointer2) link tmp; tmp=pointer1; while(tmp-next) tmp=tmp-next; tmp-next=pointer2; return pointer1; void main(void) int arr1=3,12,8,9,11; link ptr; ptr=create_list(arr1,5); selection_sort

33、(ptr,5); 题目:编写一个函数,输入 n 为偶数时, 调用函数求 1/2+?+.+1/n,当输入 n 为奇数 时,调用函数 1/1+1/3+.+1/n(利用指针函数) main() #include “stdio.h“ main() float peven(),podd(),dcall(); float sum; int n; while (1) scanf(“%d“, if(n1) break; if(n%2=0) printf(“Even=“); sum=dcall(peven,n); else printf(“Odd=“); sum=dcall(podd,n); printf(“%

34、f“,sum); float peven(int n) float s; int i; s=1; for(i=2;i0) swap(str1,str3); if(strcmp(str2,str3)0) swap(str2,str3); printf(“after being sortedn“); printf(“%sn%sn%sn“,str1,str2,str3); char swap(p1,p2) char *p1,*p2; char *p20; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); 题目:八进制转换为十进制 main() char *p,s6;i

35、nt n; p=s; gets(p); n=0; while(*(p)!=0) n=n*8+*p-0; p+; printf(“%d“,n); 题目:计算字符串中子串出现的次数 #include “string.h“ #include “stdio.h“ main() char str120,str220,*p1,*p2; int sum=0; printf(“please input two stringsn“); scanf(“%s%s“,str1,str2); p1=str1;p2=str2; while(*p1!=0) if(*p1= =*p2) while(*p1= =*p2 p2+

36、; else p1+; if(*p2= =0) sum+; p2=str2; printf(“%d“,sum); getch(); 题目:从键盘输入一些字符,逐个把它们 送到磁盘上去,直到输入一个#为止。 #include “stdio.h“ main() FILE *fp; char ch,filename10; scanf(“%s“,filename); if(fp=fopen(filename,“w“)=NULL) printf(“cannot open filen“); exit(0); ch=getchar(); ch=getchar(); while(ch!=#) fputc(ch

37、,fp);putchar(ch); ch=getchar(); fclose(fp); 题目:从键盘输入一个字符串,将小写字 母全部转换成大写字母,然后输出到一个 磁盘文件“test”中保存。 输入的字符串以!结束。 #include “stdio.h“ main() FILE *fp; char str100,filename10; int i=0; if(fp=fopen(“test“,“w“)=NULL) printf(“cannot open the filen“); exit(0); printf(“please input a string:n“); gets(str); whil

38、e(str!=!) if(str=a fputc(str,fp); i+; fclose(fp); fp=fopen(“test“,“r“); fgets(str,strlen(str)+1,fp); printf(“%sn“,str); fclose(fp); 题目:有两个磁盘文件 A 和 B,各存放一行字 母,要求把这两个文件中的信息合并(按字母 顺序排列), 输出到一个新文件 C 中. #include “stdio.h“ main() FILE *fp; int i,j,n,ni; char c160,t,ch; if(fp=fopen(“A“,“r“)=NULL) printf(“f

39、ile A cannot be openedn“); exit(0); printf(“n A contents are :n“); for(i=0;(ch=fgetc(fp)!=EOF;i+) ci=ch; putchar(ci); fclose(fp); ni=i; if(fp=fopen(“B“,“r“)=NULL) printf(“file B cannot be openedn“); exit(0); printf(“n B contents are :n“); for(i=0;(ch=fgetc(fp)!=EOF;i+) ci=ch; putchar(ci); fclose(fp)

40、; n=i; for(i=0;i0) move(array,n,m); 2. 输入一行文字,找出其中大写字母,小 写字母,空格,数字以及其他各字符的 个数,用指针实现。 #include main() int upper=0,lower=0,digit=0,space=0,other=0,i =0; char *p,s20; printf(“input string:“); while (si=getchar()!=n) i+; p= while(*p!=n) if(A=0) k=1; while(kj) elo=1; for(m=1;m0) digit=*(pstr+i-1)-48; k=1

41、; while(kj) elo=1; for(m=1;m=k;m+) elo=elo*10; digit=digit+(*(pstr+i-1-k)-48)*elo; k+; *pa=digit; ndigit+; j=0; printf(“There are %d numbers in this line.They are:n“,ndigit); j=0; pa= for(j=0;jndigit;j+) printf(“%d “,*(pa+j); printf(“n“); 5.用结构体变量计算某日在本年中式第几天, 注意闰年问题。 #include struct y_m_d int year;

42、 int month; int day; date; main() int days(int,int,int); int i,day_sum; printf(“input year,month,day:“); scanf(“%d,%d,%d“, day_sum=days(date.year,date.month,date.d ay); printf(“n%d/ %d is the %dth day in %d.“,date.month,date.day,day_sum,date.ye ar); days(int year,int month,int day) int day_sum,i; in

43、t day_tab13=0,31,28,31,30,31,30,31,31,30,3 1,30,31; day_sum=0; for(i=1;i=3) day_sum+=1; return(day_sum); 6.题目:编写 input()和 output()函数输入, 输出 5 个学生的数据记录。用结构体实现。 #define N 5 struct student char num6; char name8; int score4; stuN; input(stu) struct student stu; int i,j; for(i=0;iN;i+) printf(“n please in

44、put %d of %dn“,i+1,N); printf(“num: “); scanf(“%s“,stui.num); printf(“name: “); scanf(“%s“,stui.name); for(j=0;j3;j+) printf(“score %d.“,j+1); scanf(“%d“, printf(“n“); print(stu) struct student stu; int i,j; printf(“nNo. Name Sco1 Sco2 Sco3n“); for(i=0;iN;i+) printf(“%-6s%- 10s“,stui.num,stui.name); for(j=0;j3;j+) printf(“%-8d“,stui.scorej); printf(“n“); main() input(); print();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 参考答案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。