还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《程序设计基础》习题参考答案【习题基本概念】1
一、简答题在课本中寻找答案,略程序的基本结构包括哪些内容?
1.1C如何定义标识符?
1.2输入格式、输出格式的组成包括哪些内容?
1.3语言函数分为哪两类?
1.4C计算表达式的值应该考虑哪些方面?
1.5上机调试程序的步骤如何?
1.6常量与变量的区别?
1.7语言中的标识符的定义规则?
1.8C变量为什么要“先定义,后使用”?
1.9字符常量宜与字符串常量“有何区别?
1.10a大小写字母转换的规则是什么?
1.11变量的具有哪三种属性?
1.12
二、单项选择题语言中,型数据在内存中的存储形式是
1.13C intD码原码反码补码A ASCIIB C D下面四个选项中,均是不合法的用户标识符的选项是
1.14C A BA x_0do、Bfloat la0_Y、Cx-y goto123」、、D23tmp CHAR下列选项中不正确的常数的选项是
1.15DA0xl2F B-
1.23E-2C
12.0D0388下面正确的字符常量是
1.16BA,”B,\V C“\n D”\376”下面正确的字符串常量是
1.17Co宣AB376C\\n”D376表达式的正确结果是
1.18A+4*
25.0-b Bo不确定A67B
67.0CD67L执行后的输出结果是
1.19printf”%x”,100;CoA100B0x100C0X64D64型的在内存中的存储形式是
1.20int-1Ao Ami mi mimiB0000000000000001c mimimimoD1000000000000001存储字符串需要的字节数是
1.21”\abc\376”DA11B13C6D7
三、判断并改错【习题函数与程序结构】4
一、填空题语言程序执行的开始处是函数
4.1C main程序中的一个函数由两部分组成,即声明部分和执行部分
4.2C为了保证被调用函数不返回任何值,其函数定义的类型应为
4.3若一个局部变量的存储类型是则该变量的值在程序执行完成时被释放
4.4static,预处理命令的作用是文件包含
4.5include定义一个宏,功能是判断两个数是否相等,相等为不等为
4.61,0()()()#define EQUa,b a==b l:0变量的存储类别有自动型、静态型、寄存器型、和外部类型共种,它彳门分另用、
4.74ll auto标识staticregisterextern
二、选择题(下述函数定义形式正确的是)
4.8CA.int fint x;int yB.int fint x,yC.int fintx,int yD.int fx,y:int关于函数参数,说法正确的是
4.9A实参与其对应的形参各自占用独立的内存单元A.实参与其对应的形参共同占用一个内存单元B.只有当实参和形参同名时才占用同一个内存单元C.形参是虚拟的,不占用内存单元D.
4.10用数组名作为函数的实参时,传递给形参的是(A)数组的首地址数组的第个元素A.B.1数组中的全部元素数组的元素个数C.D.整个源文件整个函数A.B.C.整个程序D.所定义的复合语句
4.12一个函数的返回值由(D)确定A.return语句中的表达式B.调用函数的类型系统默认的类型C.被调用函数的类型D.
4.11复合语句中定义的变量的作用范围是(D)在一个源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他
4.13C文件中不允许使用,则该变量需要使用的存储类别是(D)
三、判断题A.auto B.register C.extern D.static
4.14若定义的函数没有参数,则函数名后的圆括号可以省略(x)函数的函数体可以是空语句3)
4.
154.16只有main函数才能调用其他函数
(4)语句中表达式的类型必须与函数定义的类型一致(x)
4.17return
4.18函数的实参和形参可以是相同的名字(
04.19函数调用中,形参与实参的类型和个数必须保持一致
(4)
4.20外部类型的变量只能定义一次,但可在不同地方声明多次
(4)
4.21外部类型的变量作用范围大,编程中应多用外部变量(x)
4.22预处理命令行必须以#开头,且最后要用分号结尾(x)
4.23宏命令的处理占用编译时间,而不占用运行时间
(4)
四、看程序写结果
4.24int funint n{int f=l;f=#n*2;returnf;main{int ij;fori=l;iv=5;i++printf,%d\tn,funi;程序运行结果
2468104.25int xl=30,x2=40;main{intx3=10,x4=20;subx3,x4;subx2,xl;printfnx1=%d,x2=%d,x3=%d,x4=%dn,x1,x2,x3,x4;}subint x,int y{int xl=x;x=y;y=xl;程序运行结果x1=30,x2=40,x3=10,x4=
204.26#define A4#define BxA*x/2main{float c,a=
4.5;c=Ba;printfnc=%
5.1f;c;程序运行结果c=
9.0
五、编程题写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,
4.25并输出结果两个整数由键盘输入提示最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数“辗转相除法”:设两个数分别用表示且临时变量;直到等于m,n mn,t,t=m%n m=n;n=t;n0有的矩阵和的矩阵编制一个函数,求
4.263x3A3x2B,C=AXxB提示参照习题三个数组作为函数参数
5.17,A,B,C编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串
4.27提示一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个
4.28数,在主函数中输入字符串并显示统计结果提示参照例题
6.10定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显不结
4.29果提示带参数宏,swap a,b,t....编写以下函数
①输入职工的姓名和职工号;
②按职工号由小到大排序,姓名顺序也
4.30随之调整;
③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名提示定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过“起泡算法”或“选择算法”;折半查找法先决条件是数据已经有序用函数实现牛顿迭代法求一元三次方程的根
4.31解牛顿迭代法的公式是设迭代误差小于一时结束x=x0-fx/f x,105参考源程序ttinclude math.hfloat solutfloat a,float b,float c,float d{float x=l,xO,f,fl;do{x0=x;f=a*x0+b*x0+c*x0+d;f1=3*a*x0+2*b*x0+c;x=x0-f/fl;}whilefabsx-xO=le-5;return x;main{float a,b,c,d;“请输入一元三次方程的系数printf a,b,c,c:\n;scanf%f,%f,%f,%f”,a,b,c,d;一元三次方程为printf%
5.2fxe3+%
5.2fxe2+%
5.^f=o\nv,a,b,c,d;2fx+%52printf“该方程的根为:x=%
7.2f\n v,solut a,b,c,d;}写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息
4.32解参考源程序/*是素数返回否则返回1,0*/int sushuisint m{int m;int i=2,t;for;i=m;i++ifm%i==0im break;ifm-i==0t=l;else t=0;return t;main{int a,s;printf z,enter number is:\n〃;scanf级d〃,a;s=sushuisa;if s=l printf〃a是素数!\n〃;else printfz,a不是素数!\n〃;}printf〃%5d〃,y[i];printf〃\n〃;利用递归函数调用方式,将所输入的个字符,以相反顺序打印出来
4.
335.程序分析
1.程序源代码2#include stdio.hmainint i=5;void palinint n;printfn\40:H;palini;printfn\nn;void palinintnchar next;ifn=lnext=getchar;printfn\n\0:n;putcharnext;elsenext=getchar;palinn-l;putcharnext;在格的棋盘上从点出发,按日字跳马,要求不重复地跳经所有方格求出所有跳马方
4.345*5案参考程序#includenstdio.hnint map
[12]
[12],status
[12]
[12],kp;intc
[8]
[2]={{21},{2,-1},{1,2},{1,-2},{-2,1},{-2,-1},{-1,2},{-1,-2;/*打印棋盘状态*/void prtint a[]
[12]{int ij,i2,j2;printfn\nn;for i=2;i=9;i++{for j=2;j=9;j++printfC,%4d;a[i][j];printfn\nn;/*计算棋盘各点条件数*/void status2void{int i,j,k,i2J2,kz;fori=0;i12;i++forj=0;j12;j++status|i|[j]=100;fori=2;i=9;i++forj=2;j=9;j++{kz=0;for k=0;k=7;k++{i2=i+c[k]
[0];j2=j+c[k][l];ifmap[i2][j2]50kz++;}status[i][j]=kz;prtstatus;/*对个可能的方向按条件数排序*/void sortlintbl[],int b2[]8口记录状态值升序,□记录排序后的下标*/{int i,j,mini,t;/*bl b2for i=0;i7;i++{mini=i;for j=i+l;j=7;j++if bl[j]bl[mini]mini=j;t=b1[i];b1[i]=b l[mini];bl[mini]=t;t=b2[i];b2[i]=b2[mini];b2[mini]=t;/*初始化*/void initlvoid{int i,j,k;fori=0;i12;i++forj=0;j12;j++map[i][j]=100;fori=2;i=9;i++forj=2;j=9;j++map[i][j]=O;status2;利用递归回溯进行搜索*/void searchint i2,int j2/*{intbl
[8],b2
[8],i,i3,j3;kp++;ifkp==65{prtmap;exitO;}fori=0;i=7;i++{b2[i]=i;b1[i]=status[i2+c[i]
[0]][j2+c[i]
[1]];sortlbl,b2;fori=0;i=7;i++{i3=i24-c[b2[i]]
[0];j3=j2+c[b2[i]][l];if map[i3][j3]==0{map[i3][j3]=kp;searchi3J3;map[i3][j3]=0;kp-;main{initl;map
[5]⑵=1;kp=l;search5,2;【习题指针与数组】5
一、填空题若有定义则排列在数组中的第个元素是
5.1inta
[3]
[5];9a[l]
[3]
5.2strlennHow areyou\n的值是12,语言中字符串结束的标志是
5.3C\r写出一个名为的单精度实型一维数组,长度是所有元素初值均为其数组定义语句是
5.4s6,0,float s
[6]={0};o的值是或>
5.5strcmpChow JHow320语句的含义是定义整型变量和整型指针变量并且指向变量
5.6inta,*p=a;a,p,p a定义语句和的含义分别是表示函数返回一个整型指针;产表示
5.7int*f;int int*f;int f;f是函数指针,指向整型函数
二、选择题若有则的值是
5.8int s
[4]={1,2,3,4};,s[s
[0]+2*s
[2]-s
[3]]D A.l B.2C.3D.4对数组的描述正确的是
5.9Bo数组一旦定义其大小是固定的,但数组元素的类型可以不同A.数组一旦定义其大小是固定的,但数组元素的类型必须相同B.数组一旦定义其大小是可变的,但数组元素的类型可以不同C.数组一旦定义其大小是可变的,但数组元素的类型必须相同D.对字符串“进行完整赋值的操作是
5.10Boy”B oA.char s
[3]={B/o,、};B.char s[]=nBoyn;C.char s
[3]={“Boy”};D.chars
[3];s=Boyn;在语言中引用数组元素时,其数组下标的数据类型允许是
5.11c C整型常量.整型表达式A.B整型常量或整型表达式任何类型的表达式C.D.对以下说明语句的正确理解是
5.12Bint a
[10]={6,7,8,9,10;将个初值依次赋给至A.5a[l]a
[5]将个初值依次赋给⑼至B.5a a
[4]将个初值依次赋给至C.5a
[6]a
[10]因为数组长度与初值的个数不相同,所以此语句不正确D.
三、看程序写结果
5.13main{int a
[5]={1,2,34,5;int*p=a[l];printfn%dn,p
[2];输出结果
45.14main{char a[]=nI loveChina!”;char*p=a;p=p+2;printfn%sM,p;输出结果loveChina!
5.15main{int a
[3]
[4]={1,2,34,5,6,7,8,9,10,11,12;int*pa
[4]=a;pa++;printf%d\**pa+1+2;输出结果
115.16main{char*str[]={nzhao,V,qianV,sun,V,lin};int i;for i=0;i4;i++printf%c”,str[i]⑼;输出结果zqsl
5.17void subintx,int y,int*z{*z=y-x;}mainint a,b,c;sub10,5,a;sub7,a,b;suba,b,c;printfn%4d,%4d,%4d\n\a,b,c;}输出结果-5,-12,-
75.18#include stdio.hfunchar*s{char*p=s;while*p p++;returnp-s;main{char*str=nabcdn;int i;i=funstr;printfn%dH,i;输出结果
45.19main{int a
[3]
[3]={{1,0,2},{2,2},{0,2}},c
[3]
[3],ij;fori=0;i3;i++forj=0;j3;j++c[i]U]=a[a[i]fj]][a[j][i]];printfn%5d;c[i][j];printfM\nn;运行结果为220002201当运行以下程序时,从键盘输入:请写出输出结果
5.20Ah2MA A3ha,main{char s
[80],c=a;int i=0;scanfn%sn,s;whiles[i++]!=,\0,ifs[i]==c s[i]=s[i]-32;else ifs[i]==c-32s[i]=s[i]+32;putss;运行结果为
四、编程题aH2Ma a3hA用数组方法定义一个矩阵,求其转置矩阵
5.21提示已知a⑶⑵,转置后的结果存放在b
[2]
[3];则从键盘输入个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输
5.229出其行、列下标提示已知分别用来存放一列的最大值,行下标和列下标利用a
[3]
[3],max,row,col
5.23一个二维数组,打印出以下杨辉三角形,要求打印出行1011112113311464115101051提示定义一个行列的二维数组,并且通过两重循环对第列所有元素赋值主对101011,角线也赋值根据求出其它元素的值a[i][j]=a[i-1][j-1]从键盘上输入一串字符长度小于个字符,找出其中最前面的一个和最后面的
5.1650X一个之间的子串,并输出子串的长度X提示定义一个长度为的字符数组,从左边查找第一字符的下标,从右边查找第一81‘X’个字符’X,的下标矩阵是一个的矩阵,是一个的矩阵,编程求
5.24A3x3B3x2C=AxB提示定义一个的数组该数组的元素值由数组的一行元素分别与的一列3X2c
[3]
[2],A B元素相乘得到譬如把个c
[0]
[0]
[0]
[0]*b
[0]
[0]+a
[0]
[1]*b
[1]
[0]+a
[0]
[2]*b
[2]
[0]
5.2530o学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单包括学号、两门课程成绩和总分提示定义一个行列的数组为了先快速测试算法是否正确?可以定义一个行列30434的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分实现从高到低打印出成绩可以通过排序降序;也可以通过另外定义个一维数1组作为索引,再通过索引打印成绩不用现有的函数求计算字符串长度的程序
5.26提示通过循环从前到后计算字符个数,遇到字符串结束标志结束’\0’从键盘上输入一串字符,将其逆向显示
5.27提示首先计算字符串的长度,在从右边逐一显示字符,直到下标等于为止0找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小如
5.28果有,输出其所在的行、列号,如果没有,则输出提示信息提示先找出行的最大元素,根据列下标找出列的最大元素从键盘上输入一串字符,将字符串中的所有去掉后组成新的字符串,并将两字符串输
5.29A出提示简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为则存‘A,入目的数组当然也可以只用一个一维数组实现,通过两个下标指示来实现输入一个字符串,内有数字和非数字字符,例如
5.30a345dsaf412x371+89tah74编程将其中连续的数字作为一个证书,一次存放到一个数组中,例如放在d345d
[0],412放在统计共有多少个证书,并输出这些整数d[l],……o提示从字符串中提取“345”:t=ch-10;t=t*10+ch-10;t=t*10+ch-01;t=,3,-,0,=3;t=3*10+I4,-I0,=34;t=34*10+,5,-,0I=345用字符指针实现字符串拷贝功能,不能使用库函数
5.31提示定义两个字符数组复制操作a,b,b[i]=a[i];用字符指针实现字符串连接功能,不能使用库函数
5.32提示定义两个字符数组先将下标定位到的末尾在将的元素赋值给的对应元a,b,a\0,b a素,注意别忘了添加字符串结束标志‘\0’用指向指针的指针的方法对个字符串排序并输出
5.335提示一个指针数组和一个指向指针的指针变量有人围成一圈,顺序排号从第个人开始报数从到报数,凡报到的人退出圈
5.34n1133子,问最后留下的是原来的第几号的那位#define N5main{int i,j,k,a[N+l],*p;fori=0,p=a;p=a+N;i++,p++*p=i;p=a+1;k=N;程序执行的入口是函数,所以函数必须放在程序的开头
1.22C mainmain错误函数可以放在程序的任何位置并不限定在程序的开头main定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现
1.23错误不可以交叉出现,数据说明部分在执行语句部分的前面编辑与编译不是一回事
1.24错误不是一回事编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序的正确输入格式<回车>
1.25scanf”%d,%d”,x,y;3,4正确注释内容太多会影响程序的执行效率
1.26错误不会影响程序的执行效率因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中所有的数学公式可以直接出现在源程序中
1.27错误数学公式需要转换成语言能够接受的公式才能出现在源程序中C
四、编程题在屏幕上输出自己名字的拼音
1.28提示中文名字叫“张三二对应的拼音为,输出用函数“Zhang Sanpr intf输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上
1.29提示定义圆的半径圆的周长输出结果保留位小数可以用%.r,2*
3.14*r,22ffori=0,j=l;k!=l;j++{ifpa+N p=a+l;if*p!=0i++;if i-3=0{*p=0;i=0;k一;}p++;}fori=l;i=N;i++if a[i]!=0printf,zThe lastnumberis%d\n,/,a[i];输入个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换写三
5.3510个函数;
①输入个数;
②进行处理;
③输出个数1010解参考源程序void f x,n{intx[],n;int*p0,*pl,i,j,t,y;i=j=x
[0];p0=pl=x;fory=0;yn;y++{if x[y]i{i=x[y];pO=xEy];else ifx[y]j{j=x[y];pl=x[y];}t=*p0;^p0=x[n-l];x[n-l]=t;t=*pl;*pl=x
[0];x
[0]=t;return;}main{int a
[10],u,*r;for u=0;u10;u++scanf〃%d〃,a[u];fa,10;foru=0,r=a;u10;u++,r++printf〃%d〃,a[u];printf〃\n〃;}
五、程序填空题A下面将链表分解成两个表和使表含原表中奇数项,而表含原表中偶数项,试填写A A B,AB算法中空白之处,完成其功能void ORDERlinkA,Blink P,Q,R;B=link*mallocsizeoflink;R=B;P=1;while PoNULL2{Q=P-next;P-next=3;R-next=Q;R=4;P=P-next;R-next=5;答案:
1.A-next;或
2.P-next!=null P-next或
3.Q-next P-next-next
4.R-next
5.NULL【习题结构】6定义复数结构体,并写出复数的加、减、乘、除、的计算函数提示复数包括两个部分
6.1实部和虚部定义一个结构体变量包括年、月、日计算该日在本年中是第几天注意闰年问题提
6.2示计算该日是本年中的第几天,是从本年月日起11有个学生,每个学生的数据包括学号、姓名、门课的成绩,从键盘输入个学生数据,
6.3535要求在屏幕上显示出门课程的平均成绩,以及最高分数的学生的数据包括学号、姓名、3门课程成绩、平均分3提示定义结构体数组最高分数是指每个学生门课程的平均分最高3编写求链表长度的函数
6.4提示从链表指针头往表尾移动计算结点的个数已有两个链表、每个链表的结点包括学号、成绩要求把两个链表合并,按学号升序
6.5a b,排列提示可以定义一个新的链表,先从链表再从链表中取出结点,依次按学号升序插入a,b到新的链表中利用节中的结构编写一个程序实现个人员数据输入和在屏幕上显示的功
6.
68.8struct card5能如果项为匕则在项为教师的职称助教、讲师、副教授、教授;如果job position job项为则项为学生的班级号,如class501o提示在结构体中嵌入共用体根据成员确定的具体值position,job position某学习小组有个人,每个人的信息包括学号、姓名和成绩要求从键盘上输入他们的
6.75信息,并求出平均成绩以及最高成绩者的信息解参考源程序/*定义学生信息结构类型*/#define NUM5ttinclude conio.h”struct students{char no
[7],name
[9];int score;};/*主函数*/main{struct studentstu[NUM];int count,max=0,sum=0;/*输入学生信息*/for count=0;countNum;count++{printf“请输入%d号同学信息\n,count+1;printf uno format:99999;scanf%s”,stu[count].no;printfname:;scanf%s”,stu[count].name;/*计算总成绩,查找最高成绩学生*/sum+=stu[count].score;if stu[count].scorestu[max].scoremax=count;/*输出平均成绩和最高成绩学生的信息*/printf\naverage=%.2f\n,,float sum/NUM;printf“最高成绩者信息:\n”;printf学号:%s\n,,stu[max].no;printf姓名:%s\n,,stu[max].name;printf分数:%s\n”,stu[max].score;getchO;}编写一个程序,使用单链表作数据结构,解决问题问题描述如下:设有
6.8Josephus Josephus个人围坐一圈,现从第个人开始报数,数到的人出列,然后从出列的下一个人重新开始n sm报数,数到的人出列,……,如此反复,直至所有的人都出列问题是:对于任意给m Josephus定的、和〈〈按出列顺序得到的顺序表如何?n sms n,m n,解参考源程序^define NULL0定义结点长度*/#idefine LENsizeof struct node/*/*定义结点结构*/Struct node/*编号*/{int no;/*指针域*/struct node*node;函数,创建一个单链表,返回单链表的头指针*//create struct node*createvoid{struct node*head=NULL,*new,*tail;/*链表结点个数*/int count=0;for;;申请个新结点空间*/{new=struct nodemalloc LEN;/*1输入结点编号*//*Lprintf输入第%d个数,count+1;scanf,new-no;ifnew-no==-l{freenew;break;}count++;,将新结点插入到链表尾,并设置新的尾指针*//*2new-next=NULL;是第一个结点则置头指针*/ifcount=l head=new;/*else tail-next=new;tail=new;}return head;/*求出列顺序,返回出列单链表的头指针*/struct node*josephus structnode*head,intn,int s,int m{structnode*p,*prior,*head out,*tail_out;int count,num=0;/*查找开始位置*/p=head;prior=NULL;for count=l;counts;count++prior=p;p=p-next;/*报数出列*/while num=n-l/*从开始报数,报到的人出列*/S mcount=l;for;countm;count++ifp-next==NULL prior=NULL;p=head;else prior=p;p=p-next;}/*出列处理*/prior-next=p-next;num++;/*将出列结点插入到出列链表中*/ifnum==lhea_out=tail_out=p;else tail_out-next=p;tail_out=p;i fp=head head=head-next;ifp-next==NULL p=head;else p=p-next;/*将最后出列的结点插入到出列链表中*/-〉tail_out-next=p;p next=NULL;returnheadout;}void main{structnode*head,*headout;二head create;head_out=josphus head,7,2,5;printfout ofthe queue:;while headout!=NULL{printfu%d,,head_out-no;head_out=head_out-next;getch;【习题输入和输出】7
一、简答题文件分为哪些类型?各有何特点?
7.1答文件分为二进制文件和文本(ASCII码)文件二进制文件在内存和外存的形式是一样的,无需进行数据转换,用记事本打开该文件,看到得可能是乱码;文本(ASCII码)文件在内存是按二进制形式存在,在外存是以文本(ASCII码)形式存在,存在数据的转换,用记事本打开该文件,可以读懂其中的内容什么是文件类型指针?什么是文件位置指针?各有何用途?
7.2答文件类型指针就是用结构体定义的指针变量文件位置指针是文件存取操作的FILE位置前者指向被打开的文件;后者在文件存取操作后移动到下一个存取位置什么是设备文件?常用的设备文件有哪些?
7.3答在操作系统中,设备也被看作一个文件进行管理,即设备文件常用的设备文件有:stdin,等stdout,PRN
二、选择题若想对文本文件只进行读操作,打开此文件的方式为()
7.4AA.Hrn BJWC.nan D.r+”如果要打开盘文件夹下的文件,函数中第一个参数应为()
7.5C fileabc.dat fopenDA.c:file\abc.dat B.c:\file\abc.datC.k:\file\abc.dat”D.nc:\\file\\abc.datn
7.6用(A)函数打开文件,操作完毕后用(C)函数关闭它A.fopen B.open C.fclose D.close
三、编程题有两个磁盘文件和要求产生一个新的文件将中的数据追加到后
7.7a.dat b.dat,c.dat,b.dat a.dat面,并存入到中c.dat提示设两个磁盘文件为文本文件以读的方式打开和以写的方式创建a.dat b.dat,c.dato先将的数据复制到再将的数据复制到b.dat c.dat,a.bat c.dat从键盘输入一些字符,逐个把它们存入磁盘文件中去,直到输入一个#为止
7.8test提示利用函数将字符写入到磁盘文件中fputc读入一个文件,输出其中最长的一行的行号和内容
7.9提示以硬回车键作为行的结束标志‘\n.编写程序将全班同学的姓名、地址和电话号码写到一个文件中
7.10class.dat提示学生的信息可以存放到结构体数组,以函数写数据到文件中fwrite将题产生的文件中的数据按姓名从低到高排列输出到显示器上,并把排了序
7.
117.10class.dat的数据重新写入到文件中classl.dat提示以千函数从文件中读入学生的信息,并存放到结构体数组,在数组中进行排序read排序完毕再写入文件中利用题产生的文件,编程实现从中直接读取第三个同学的数据
7.
127.11classl.dat提示参照例
7.5在题产生的文件中插入一个新生的数据,要求插入后的文件数据仍然按姓
7.
137.11classl.dat名顺序排列提示先将数据读入到数组中,插入新的数据后,再写入到文件从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件
7.14“test”中保存输入的字符串以!结束.程序分析1•程序源代码2#include nstdio.hmain{FILE*fp;char str
[100],filename
[10];int i=0;;iffp=fopen,,test,,,w,,==NULL{printfcannot openthe file\nn;exitO;printfplease input a string:\nn;getsstr;whilestr[i]!=,!1{ifstr[i]=,astr[i]=,z,str[i]=str[i]-32;fputcstr[i],fp;;i++fclosefp;fp=fopentest,,rn;fgetsstr;strlenstr+l fp;zprintfn%s\nH,str;fclosefp;【习题运算符与表达式】2
一、计算题答案
2.
12.8+7%3*11%2/
42.8答案
2.25/2+
5.0/2+7%
65.5答案
2.3a=12,a*=2+3a=60答案
2.4a=3,b=4,c=5,a+bcb==c0答案
2.5353:5825:4025设有表达式计算表达式后的值
2.6a=l,b=2,c=3,d=4,m=n=l,m=abn=cd,m,n答案m=0,n=l设求下面表达式的值
3.7int b=7;float a=
2.5,c=
4.7;答案a+int b/2*int a+c/2%
44.5
二、单项选择题若有代数式出,则不正确的语言表达式是
4.8C CbeA x/b/c*y*8B8*x*y/b/cC8*x*y/b*c Dx*y/c/b*8有如下类型说明
2.9int k,a,b;unsigned longw=8;double x=
2.9则以下不符合语言语法的表达式是C AoAx%-3Bw*=-2二Ck=a=6,b=4,a-b Da*=a+a-=b=4*a=3有如下类型说明
2.10float n;intm;则以下能实现将中的数值保留小数点后两位,第三位四舍五入的表达式是n BoAn=n*100+
0.5/
100.0Bm=n*100+
0.5,n=m/
100.0Cn=n*100+
0.5/
100.0Dn=n/100+
0.5*
100.0设则下列表达式值为的是
2.11k=7,x=12;3DoAx%=k%=5Bx%=k-k%5Cx%=k-k%5Dx%=k-k%=
52.12已知m=48,ch+a,n=0;则表达式m=nch,b!n的值是B真非A0B1CD下面哪个式子在为奇数时结果为假
2.13b CoAa%2=l B!a%2=0C!a%2D a%2执行后的输出结果是
2.13printf”%F,x=3,y=5,xyl:L5;D语法错误AB1C
1.5D
1.能表示条件的表达式是
2.14OWxWlOO DoA0=x=100Bx=0,x=100〈二COWxWlOO Dx=0x100A ch=H0Hch=119n Bch=Och=9判断型变量为数字的正确表达式是
2.15char chBDch=O||ch=9
三、编程题应用条件运算输入一个整型成绩如果大于等于分,输出否则输出
2.16x,60“pass”,“fail”提示printf,,%sn,x60npass,:nfair,;
2.17输入一个年份y,如果是闰年,输出“y isa leap year”,否则输出y isnot aleap year.v提示printfn%d is%sn,y%4=0y%100!=0||y%400=0na leapyear.not aleapyear.;输入三条边如果它们能构成一个三角形,输出否则输出
2.18a,b,c,“Yes”,“No”提示:printf,,%s\a+bca+cbb+ca!,Yesn:,Non;输入三个数按从小到大的输出结果
2.19x,y,z,提示分别用,代表最大、最小值,表示中间值max minOmidOmax0=xyx:yzxyx:y:z;max0=xyx:yz xyx:y:z;mi dO=x+y+z-maxCHm inO;输入一个平面上的点坐标,判断它是否落在圆心半径为的圆内,如果在圆内,输出
2.200,0,1“Yes”,否则输出“No”提示分别用代表平面上一个点x,ypr i ntf%s,x*x+y*y=0,,Yes:No;自增、自减运算符的用法与运算规则示例
2.21计算下列表达式
2.22\庐±8+-4ac lasin x+cos xtanx提示:模仿例
2.
272.23字母的大小写转换
2.24计算圆柱体的体积VJidh,其中兀=
3.14159提示模仿
2.
272.25输入两个整数,输出其中最大者提示模仿P29输入三个整数,输出其中最小者
2.26提示:mi nmi na,b,c;设圆半径圆柱高求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积用
2.27L
1.5,h=3,scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字请编程序参考源程序main{float r,h,Cl,Sa,Sb,Va,Vb;scanf〃%f,%fz/,r,h;Cl=2*
3.14*r;Sa=
3.14*r*r;Sb=4*Sa;Va=4*
3.14*r*r*r/3;Vb=Sa*h;printf〃C1=%,2f\n〃,Cl;printfz,Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n〃,Sa,Sb,Va,Vb;【习题控制流】3编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息
3.1提示代表输入的整数,x if x%2==0pr intf\neven;else pr intf\nodd;编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息
3.2提示:代表平面坐标,x,y ifx*x+y*y==1pr i ntf\nYes;else pri ntf\nNo;编程实现,输入一个成绩等级显示相应的百分制成绩段
3.3A-E,A:90-100B:80-89C:70-79D:60-69E:60提示char grade;if grade-A*printf\n90-100;e Ise ifgrade-B printf\n80-89;写出下面程序的运行结果
3.4#includestdio.hmainint a=-l,b=l,c=5;switcha0{case1:switchb-20{case1:printf,,,;break;case2:printfn*n;break;case O:switchc==5{case O:printfn!n;break;case1:printfn#H;break;default:printfH%%n;default:printfn@n;运行结果#@将以下语句改写成语句
3.5switchift0t=10ift=3t=6x=2;else iftl||t8x=3;else x=l;else x=O;提示int t;ift=0||t10c=O;else c=t;switcht{case0:x=0;break;case1:case2:x=3;case3:case4:case5:case6:x=2;case7:case8:case9:x=3;case10:x=2;编程实现一个具有简单四则运算功能的计算器
3.7提示参照例随机产生个数,其中一个数用来判断是哪种运算
4.18,3编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果如
3.8则是结果为a45b8*34+5+8+3,20提示char c;int sum=0;二whiIec=getchar!=!\n ifc=0c9sum=sum+c-O;20编程实现,求的值
3.9i提示先计算再在计算阶乘的外面套上一层循环注意是一个很大的值,n!,20!;例如计算f Ioat s=1;inti6!:〈二fori-1;i6;i++s=s*i;编程实现,找出之内的所有完数,并按下面格式输出其因子
3.1010006its factorsare1,2,3,所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数提示先判断数是否为完数,如果是再考虑输出因子以为例输出因子6for i=l;i6;i++if6%i==0printf〃%d,〃,i;编程实现,计算序列的前项之和,
3.112023581321,...1235813提示这是一个累加式,每项是一个分式,用、分别表示分子、分母注意如果、a ba都是整数,则是整除b floatsum=0,a=2,b=1;int i;for i-1;i=20;i++{sum=sum+a/b;a=a+b;b=a-b;}编程实现,求之值,其中是一个数字如
1.112Sn=a+aa+aaa+...+aa...a a此时由键盘输入2+22+222+2222+22222n=5,n,a提示这是一个累加式,后项可以由前一项表示,譬如第项可以由第项表示121第项二第项1ta;2t=t*10+a;编程实现,把从键盘输入的金额数以圆为单位按人民币面额划分,然后显示支付该金
3.13额的各种面额人民币的数量提示譬如元可以表示元张;元张;元张;元张;
123.58100120121115角张;分枚;分枚;分枚1512111为了简单可以只完成整数部分转换,即输入的金额数为整数编程实现,使用循环结构打印以下图案
3.14****xjx✓TsZTS xTs****提示输出时,本图案要按向上三角形和向下三角形进行输出每行输出中包括空格输出,*号输出输出空格和*号个数要与行循环控制变量关联起来编程实现,以菜单方式实现猜数游戏系统功能自己设定
3.15提示模仿例和例完成功能可以包括猜数范围,人数等设置
4.
144.18编程实现,以菜单方式实现四则运算辅助教学系统
3.16提示随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的输入四个整数,要求按大小顺序输出
3.17参考源程序main{inta,b,c,d,t;scanf〃%d,%d,%d,%d〃,a,b,c,d;if abt=a,a=b,b=t;if act=a,a=c,c=t;if ad t=a,a=d,d=t;if bct=b,b=c,c=t;二if bdt=b,b=d,dt;ifcd t=c,c=d,d=t;printf,,%d,%d,%d,%d\n〃,a,b,c,d;求=卜即求
3.1818En!n20,1!+2!+3!+4!+5!+…+20!参考源程序main{intn,i=l;long sum=0,s=l;scanf〃%d〃,n;whilei=n{s=s*i;sum=sum+s;i++;}printf/,sum=%ld\n/,,sum;输入两个正整数和求其最大公约数和最小公倍数
3.19m n,main{long m,n,i=l,j,s;scanf,z%ld,%ld〃,m,n;for;i=mi=n;i++{ifm%i=0n%i=0s=i;}ifm=nj=m;else j=n;for;!j%m==0j%n==0;j++;printf,,s=%ld,j二%ld\n〃,s,j;}输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
3.20参考源程序#includez,stdio.h〃main charc;int i=0,j=0,k=0,1=0;whilec=getchar!=\n,{ifc=65c=90||c=97c=122i++;else ifc=48c=57j++;else ifc==32k++;else1++;}printf,zi=%d,j=%d,k二%d,1二%d\n〃,i,j,k,1;}打印出所有〃水仙花数〃,所谓〃水仙花数〃是指一个三位数,其各位数字立方和等于该本
3.21身例如是一个水仙花数,因为二厂1531533+5-3+3-3参考源程序#includez,math.h〃main intx=100,a,b,c;whilex=100x1000{a=
0.01*x;b=10*
0.01*x-a;c=x-100*aT0*b;ifx==powa,3+powb,3+powc,3printf〃%5d〃,x;x++;猴子吃桃问题猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个
3.22第二天早上又将剩下的桃子吃掉一半,又多吃一个以后每天早上都吃了前一天剩下的一半零一个到第天早上想再吃时,见只剩下一个桃子了求第一天共摘多少桃子10参考源程序main inti=l,sum=0;for;i=10;i++sum=2*sum+l;printf/,sum=%d\n,/,sum;打印以下图案
3.23****ZjSZTSzTxZ1SZ7SZTSZTS*1**£*1**1*****参考源程序#include,zmath.h〃mainint i=l,k,1,m;for;i=49;i++k=i%7;l=3-fabsi-l/7-3;m=fabs i-4-7*iT/7;ifk==lprintf〃\n〃;ifm=lprintf〃*〃;elseprintf〃〃;printf〃\n〃;}古典问题有一对兔子,从出生后第个月起每个月都生一对兔子,小兔子长到第三个月
3.243后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?.程序分析兔子的规律为数列11,1,2,358,13,
21.….程序源代码2main{long fl,f2;inti;fl=f2=l;fori=l;i=20;i++{printfn%121d%121dn,fl,f2;控制输出,每行四个*/ifi%2==0printf”\n;/*前两个月加起来赋值给第三个月*/fl=fl+f2;/*前两个月加起来赋值给第三个月*/f2=fl+f2;/*。