




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章一、 单选题1 下面语句中,错误的是【 B 】。Am=ca0;Dw+=-m?0:1;2 以下程序段的输出结果是【 A 】。int u=020, v=0x20, w=20;printf(“%d,%d,%dn”,u,v,w);A16,32,20B20,20,20C16,16,20D32,16,203 下面的程序在运行时,如果从键盘上输入98765432156(表示按回车键),则程序的输出结果是【 B 】。#include void main() int a; float b,c; scanf(“%2d%3f%4f”,&a,&b,&c); printf(“na=%d,b=%f,c=%fn”,a,b,c);Aa=98,b=765,c=4321Ba=98,b=765.000000,c=4321.000000Ca=98,b=765.0,c=4321.56Da=98,b=765.0,c=4321.04 已知 int a=8, b=10, c=16; 执行下面的程序段后a、b、c的值是【 D 】。if (ab) c=a; a=b; b=c;A8,10,6B10,10,16C10,16,8D10,16,165 执行以下程序,输出结果为【 D 】。#include void main()int a=10,b=0;if (a=10)a=a+1;b=b+1;elsea=a+4;b=b+4;printf(“%d,%dn”,a,b);A11,1B14,1C14,4D有语法错误6 以下关于switch语句的叙述中,错误的是【 B 】。Aswitch语句允许嵌套使用B语句中必须有default部分,才能构成完整的switch语句C只有与break语句结合使用,switch语句才能实现程序的选择控制D语句中各case与后面的常量表达式之间必须有空格7 下面程序段的内循环体一共需要执行【 C 】次。for (i=5; i; i-)for (j=0; j2)fn= 程序:#include stdio.hvoid main( ) int i; long f30=1,1; for (i=2; i30; i+) fi=fi-2+fi-1; for (i=0; i30; i+) if(i%5=0) printf(n); printf(%12ld,fi); printf(n);输出结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 8320402。程序:#include stdio.hvoid main( ) int i,j,t; char str10; for (i=0; i10; i+) scanf(%c,&stri); for (j=1; j10; j+) for (i=0; istri+1) t=stri; stri=stri+1; stri+1=t; for (i=0; i末尾元素T F将n插在 for (i=0; in T F 从a9ai依次后移一个位置将n插入到ai处输出结果#include stdio.hvoid main( ) int a11=2,4,5,6,8,10,23,36,47,68, n,i,j; printf(array a:n); for (i=0; ia9) a10=n; else for (i=0; in) for (j=9; j=i; j-) aj+1=aj; ai=n; break; printf(Now,array a:n); for (i=0; i末尾元素T F将n插在 for(i=0;in T F 将n插入到ai处 从aia9依次后移一个位置输出结果图5-2插入法排序方法2 int a11=2,4,5,6,8,10,23,36,47,68; int t1,t2,n,i,j; printf(narray a:n); for (i=0; ia9) a10=n; else for (i=0; in) t1=ai; ai=n; for (j=i+1; j11; j+) t2=aj; aj=t1; t1=t2; break; printf(Now,array a:n); for (i=0; i11; i+) printf(%5d,ai); printf(n);4思路:N阶方阵就是N行N列的矩阵,矩阵左对角线上的元素是aii(i=0N-1),右对角线上的元素是aij(其中:i=0N-1,j=N-1-i)。由于j的值取决于i,因此只要一个for循环即可。例如三阶方阵1 2 31 3 52 4 6 a=左对角线元素之和是:1+3+6=10,右对角线上元素之和是3+3+2=8。程序:#include stdio.hvoid main( ) int a33=1,2,3,1,3,5,2,4,6,sum1,sum2,i; sum1=sum2=0; for (i=0; i3; i+) sum1=sum1+aii; sum2=sum2+ai3-1-i; printf(sum1=%d sum2=%dn,sum1,sum2);运行结果:sum1=10 sum2=8 5打印出以下的杨辉三角形(要求打印出6行)。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1算法:如图5-3所示 使数组第一列和对角线元素值为1其他各元素:aij=ai-1j-1+ai-1j(用双重for循环控制i和j的变化)输出结果图5-3 输出杨辉三角形程序:#define N 7#include stdio.hvoid main( ) int aNN,i,j; for (i=1; iN; i+) aii=1; ai1=1; for (i=3; iN; i+) for (j=2; ji; j+) aij=ai-1j-1+ai-1j; for (i=1; iN; i+) for (j=1; j=i; j+) printf(%5d,aij); printf(n); printf(n);6算法:如图5-4所示。输入一字符串给str数组i=0,num=0,word=0当 stri0stri= T F word=0word=0 T F word=1 num=num+1 i=i+1输出:num图5-4 统计单词程序:#include stdio.hvoid main( ) int i,num=0,word=0; char str80; gets(str); for (i=0; stri!=0; i+) if (stri= ) word=0; else if (word=0) word=1; num+; printf(%dn,num);运行情况如下:Chinese Materials Research Society4第六章三、阅读程序,写结果1. #include void fact(int m, int n, int *p1, int *p2)*p1=2*m+n;*p2=m-n/2;main()int a,b,c,d;a=4; b=7;fact(a,b,&c,&d);printf(“%d%dn”,c,d);【答案】15 12. #include main()char str=”abcxyz”,*p;for (p=str;*p;p+=2)printf(“%s”,p);printf(“n”);【答案】abcxyzcxyxyz3. #include main()static int x=1,2,3;int s,i,*p=NULL;s=1;p=x;for(i=0;i3;i+)s*=*(p+i);printf(“%dn”,s);【答案】64. #include main()int a=1,2,3,4,5;int *p=NULL;p=a;printf(“%d, ”,*p);printf(“%d, ”,*(+p);printf(“%d, ”,*+p);printf(“%d, ”,*(p-);printf(“%d, ”,*p+);printf(“%d, ”,*p);printf(“%d, ”,+(*p);printf(“%d, ”,*p);【答案】1, 2, 3, 3, 2, 3, 4, 4, 5. #include char b=”program”;char *a=”PROGRAM”;main()int i=0;printf(“%c%sn”,*a,b+1);while(putchar(*(a+i)i+;printf(“i=%dn”,i);while(-i)putchar(*(b+i);printf(“n%sn”,&b3);【答案】ProgramPROGRAM i=7margorgram四、编程题1. 编写函数,对传送过来的三个数选出最大和最小值,并通过形参传回调用函数。【参考程序】#include void find_maxmin(int a,int b,int c,int *max,int *min)*max=*min=a;if (*maxb) *min=b;if (*maxc) *min=c;return;void main()int a, b, c;int max, min;printf(Please input 3 numbers:);scanf(%d%d%d,&a,&b,&c);find_maxmin(a,b,c,&max,&min);printf(n the max is %d, the min is %dn,max,min);2. 求一个33二维数组主对角线元素之和。【参考程序】#include void main()int a33,i,j;int sum;/输入33二维数组printf(Please input 3*3 numbers:);for (i=0;i3;i+)for (j=0;j3;j+)scanf(%d,&aij);sum=0;/求主对角线元素之和for (i=0;i3;i+)sum+=aii;printf(n the main diagonal sum is %dn,sum);3. 有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数,见图?。写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。 n-m m图 6-22 题3示意【参考程序】#include #define N 5void move_num(int *a, int m)int i,bN;/将a数组复制到b数组for (i=0;iN;i+)bi=ai;/将b数组的元素移动m位复制到a数组for (i=0;iN;i+)a(i+m)%N=bi;void main()int aN,m,i;printf(Please input %d numbers:,N);for (i=0;iN;i+)scanf(%d,&ai);printf(nPlease input move number:);scanf(%d,&m);move_num(a,m);printf(nafter move:);for (i=0;iN;i+)printf(%d ,ai);4. 用指针参数编写一个字符串连接的函数 radd(char *s,char *t,int f),其中f为标志变量,当f=0时,将s指向的字符串连接到t指向的字符串的后面;当f=1时,将t指向的字符串连接到s指向的字符串的后面。并写出调用该函数的完整程序。【参考程序】#include #include void radd(char *s,char *t,int f)char *tmp;int i=0;if (f=0) /标志变量为0,交换s和t的指向tmp=t;t=s;s=tmp;while (*s!=0) s+;/将s移动到字符串末尾while (*(t+i)!=0) /将t字符串复制到s中*(s+i)=*(t+i);i+; *(s+i)=0;/加上字符串结束标志void main()char s40, t40;int f;printf(Please input 2 strings:);gets(s);gets(t);printf(Please select string add direction:);scanf(%d,&f);radd(s,t,f); printf(nafter string add:);puts(s);puts(t);5. 编写程序,利用指向函数的指针实现求1到n的和与阶乘。【参考程序】#include long n_sum(int n) /求1到n的和long s=0;int i=0;for (i=1;i=n;i+)s=s+i;return s;long n_factorial(int n) /求1到n的阶乘long p=1;int i=1;for (i=1;i=A&ch0)+*p; else if(a0) +*n; else +*z; a=getw(fp); fclose(fp);void main()int p,n,z; countf(file3.dat,&p,&n,&z); printf(%d %d %dn,p,n,z);【答案】7 2 1【解析】在countf函数中对指定的二进制整型文件内容进行了统计,并将统计结果(正数、负数及零的个数)存放到三个指针形参的目标变量中。在主函数中调用countf函数,并输出了统计结果。4. #include stdio.h#include stdlib.hlong flen(char *fname)FILE *fp; long len; fp=fopen(fname,rb); fseek(fp,0,SEEK_END); len=ftell(fp); fclose(fp); return len;void main()FILE *fp;int x8=5,1,0,10,15,2,20,25;if(fp=fopen(file4.dat,wb)=NULL) exit(0);fwrite(x,4,8,fp);fclose(fp);printf(flen=%ldn,flen(file4.dat);【答案】32【解析】在主函数中输出flen函数的值,即file4.dat文件的长度(字节数)。在flen函数中将文件读写指针移至文件的尾部,此时文件读写指针的位置即是文件的长度。5.设二进制整型文件file5.dat的内容为1 3 4 5 8 10,二进制整型文件file6.dat的内容为:1 2 6 7 8 9#include stdio.h#include stdlib.hvoid main()FILE *fp1,*fp2;int a1,a2,m; if(fp1=fopen(file5.dat,rb)=NULL) exit(0); if(fp2=fopen(file6.dat,rb)=NULL) exit(0); fread(&a1,4,1,fp1); fread(&a2,4,1,fp2); while(!feof(fp1)&!feof(fp2)if(a1a2) m=a2;fread(&a2,4,1,fp2); else m=a1;fread(&a1,4,1,fp1);fread(&a2,4,1,fp2); printf(%d,m); while(!feof(fp1)fread(&a1,4,1,fp1);printf(%d,a1); while(!feof(fp2)fread(&a2,4,1,fp2);printf(%d,a2);【答案】1 2 3 4 5 6 7 8 9 10【解析】此程序同时在读两个文件,输出结果时对两个文件读出的数据进行了比较,按从小到大的顺序输出,并且对于相同的数据仅输出一次。四 编程题1.编写一个程序,运用fputs函数,将5个字符串写入文件中。【程序】#include stdio.hmain()FILE *fp; char s8; int n; if(fp=fopen(file.dat,w)=NULL) exit(0); for(n=0;n5;n+)gets(s); fputs(s,fp); fputc(n,fp); fclose(fp);2.新建一个文本文件,将整形数组中的所有数组元素写入文件。【程序】#include stdio.hmain()FILE *fp; int n,a10; if(fp=fopen(file.dat,w)=NULL) exit(0); for(n=0;n10;n+) scanf(%d,&an); fprintf(fp,%d,an); fclose(fp);3.新建一个文本文件,将键盘输入的字符存放到名为file.dat的新文件中,#为输入结束标志,并统计文本中的字符个数,以“#字符个数”的形式写入新文件的最后。【程序】#include stdio.hmain()FILE *fp; char c; int n=0;/*n为计数器*/ if(fp=fopen(file.dat,w)=NULL) exit(0); while(c=getchar()!=#)fputc(c,fp); n+;/*向文件写入字符并统计字符个数*/ fputc(c,fp);/*写入字符#*/ fprintf(fp,%d,n);/*写入统计结果*/ fclose(fp);4.编写一个函数,将键盘输入的n个整数,以二进制形式写入指定文件。【程序】void crtf(char *filename,int n)FILE *fp; int i,a; fp=fopen(filename,wb); printf(Please input %d numbers:n,n); for(i=0;in;i+)scanf(%d,&a); putw(a,fp); fclose(fp);5.编写一个零件库管理程序,其中包含7个函数:建立零件库文件函数,每种零件的数据有编号、零件名称、单价以及库存量;添加新零件函数;减少零件库存量函数;输出需要进货的零件清单函数(库存量小于10);增加零件库存量函数;删除零件函数;输出零件库清单函数。【程序】#include stdio.h#include stdlib.h#include string.hstruct lj/*定义存放零件信息的结构体类型*/char num11,name21; float price; int n;long size=sizeof(struct lj);void crtf1(char *filename)/*建立零件库存文件函数*/FILE *fp; struct lj a; if(fp=fopen(filename,wb)=NULL) exit(0); printf(nnumber:); gets(a.num); while(strlen(a.num)!=0)/*输入长度为0时结束建立零件库文件函数*/printf(partname:);gets(); printf(price:);scanf(%f,&a.price); printf(quantity:);scanf(%d,&a.n);getchar(); fwrite(&a,size,1,fp); printf(nnumber:);gets(a.num); fclose(fp);void addf2(char *filename)/*添加新零件函数*/FILE *fp; struct lj a; if(fp=fopen(filename,ab)=NULL)/*以读/追加写方式打开二进制文件*/ exit(0); printf(nnumber:);gets(a.num); printf(partname:);gets(); printf(price:); scanf(%f,&a.price); printf(quantity:);scanf(%d,&a.n);getchar(); fwrite(&a,size,1,fp); fclose(fp);void redf3(char *filename)/*减少零件库存量函数*/FILE *fp; struct lj a; char numb11; int n; if(fp=fopen(filename,rb+)=NULL)/*以读/写方式打开二进制文件*/ exit(0); printf(nnumber:); gets(numb); printf(quantity:); scanf(%d,&n); getchar(); fread(&a,size,1,fp); while(!feof(fp)if(strcmp(numb,a.num)=0)/*找到要减少数量的零件后将数量减去*/a.n-=n; fseek(fp,-size,1); fwrite(&a,size,1,fp); fclose(fp); return; fread(&a,size,1,fp); fclose(fp);void part4(char *filename)/*输出需要进货的零件清单函数*/FILE *fp; struct lj a; fp=fopen(filename,rb); printf(nnumber partname price quantityn); fread(&a,size,1,fp); while(!feof(fp)if(a.n100)/*库存量小于100则需要进货*/printf(%-10s%-20s%-10.2f%-8dn,a.num,,a.price,a.n); fread(&a,size,1,fp); fclose(fp);void incf5(char *filename)/*增加零件库存量函数*/FILE *fp; struct lj a; char numb11;int n; if(fp=fopen(filename,rb+)=NULL) exit(0); printf(nnmuber:);gets(numb); printf(quantity:);scanf(%d,&n);getchar(); fread(&a,size,1,fp); while(!feof(fp) if(strcmp(numb,a.num)=0)/*找到要增加数量的零件后将数量加上*/a.n+=n;fseek(fp,-size,1);fwrite(&a,size,1,fp);fclose(fp);return; fread(&a,size,1,fp); fclose(fp);void delf6(char *filename)/*删除零件函数*/FILE *fp,*wfp; struct lj a; char numb11; int flag=0; if(fp=fopen(filename,rb)=NULL) exit(0); if(wfp=fopen(workf.dat,wb)=NULL) exit(0); printf(nnumber:);gets(numb); fread(&a,size,1,fp); while(!feof(fp)/*将不需要删除的数据复制到临时文件*/ if(strcmp(numb,a.num)!=0) fwrite(&a,size,1,wfp); else flag=1; fread(&a,size,1,fp); fclose(fp);fclose(wfp); if(flag)/*如果库文件中含有要删除的数据,则将临时文件复制到库文件*/if(fp=fopen(filena
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保护边境人员管理办法
- 仓库盘点管理办法流程
- 企业仓储物资管理办法
- 仓库货物出租管理办法
- 保税仓储收费管理办法
- 保险日常活动管理办法
- 产业资金扶持管理办法
- 临沂档案查询管理办法
- 传媒集团管理办法细则
- 企业委托安全管理办法
- 自尊主题班会课件
- 基金公司印章管理办法
- 海洋经济政策效果评估
- 工厂安全生产吹哨人制度模板
- 煤矿井下工程预算课件
- 徳龙全自动咖啡机ECAM 22.110.SB 中文使用说明书
- 2025江苏扬州大数据集团子公司管理人员招聘1人笔试备考题库及一套完整答案详解
- 高三一轮复习学案 铁及其重要化合物(课中案)
- 单刀赴会课本剧:演绎三国英雄的高光时刻
- 同等学力申硕临床医学学科综合水平考试历年真题题库-上(A1题)
- 2025 秋外研英语八上单元重点知识清单Unit 1
评论
0/150
提交评论