还剩39页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言程序设计第三版习题答案习题
一一、名词解释
(1)程序P1
(2)程序设计P1
(3)机器语言P1
(4)高级语言P2
(5)汇编程序P3
(6)编译程序P4
(7)算法P5
(8)结构化程序设计方法P10
二、简答题
1.设计程序时应遵循哪些基本原则?P4答正确性、可靠性、简明性、有效性、可维护性、可移植性
2.算法具有哪些特点?答有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出
3.算法的表示形式有哪几种?答自然语言、伪代码、传统流程图、N-S流程图、计算机语言
4.结构化程序设计方法的三种基本结构是什么?答顺序结构、选择结构和循环结构
5.传统流程图与N-S流程图最大的区别是什么?答N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单
三、用传统流程图或N-S流程图表示求解以下问题的算法
1.从键盘输入10个整数,求出其中的最小数并输出
2.求1+2+3+…+100的值
3.求10~50的所有素数之和
4.求下列分段函数的值
四、请参照本章例题,编写一个简单的C程序,输出以下三行信息**************************YangtzeUniversity**************************#includestdio.hvoidmain{printf**************************\n;printfYangtzeUniversity\n;printf**************************\n;}习题
二一、选择题1~10BCDCDDBCAA11~20:DACDBDBACD
二、填空题1.字母L或字母l2.%c或字符、%d或整数3.在程序运行过程中,其值可以在一定的范围内变化的量4.\05.小数形式、指数形式6.关键字、预定义标识符、用户标识符7.字母、数字、下划线、数字8.189.
2、
1、3010.双精度实数或double11.赋值、逗号、
20、
20、
20、412.
4、4习题
三一、选择题1~10BCCBCCCDCC注第4题答案D为1022↙33↙
二、填空题
1.printf、scanf
2.h
3.%5d
4.\
05.e、E
6.
67.s、c
8.*
9.-、+
10.i
三、编程题
1.编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出例如输入的时间为4258秒,则输出结果为1小时10分58秒#includestdio.hvoidmain{intxhms;scanf%dx;h=x/3600;m=x%3600/60;s=x%60;printf%ds=%d:%d:%d!\nxhms;}
2.编写程序,读入三个整数给变量a、b、c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中原来的值给a#includestdio.hvoidmain{intabct;printfinputabc:;scanf%d%d%dabc;printfa=%db=%dc=%d\nabc;t=a;a=c;c=b;b=t;printfa=%db=%dc=%d\nabc;}习题
四一、填空题1.
1、02.!%+=!=||=3.x==04.
0、25.
20、
0、0
二、选择题1~7DDCADDC
三、程序阅读题
1.
5959592.
0.
5000003.
14.
25.66.a=2b=17.passwarn
8.1
四、编程题
1.设a为整型变量且其值大于零,请将以下if语句改写成switch语句ifa60m=1;elseifa70m=2;elseifa80m=3;elseifa90m=4;elsem=5;方法1#includestdio.hvoidmain{intam;scanf%da;switcha/10{case0:case1:case2:case3:case4:case5:m=1;break;case6:m=2;break;case7:m=3;break;case8:m=4;break;default:m=5;break;}printfm=%d\nm;}方法2#includestdio.hvoidmain{intam;scanf%da;m=0;switcha/10{default:m++;case8:m++;case7:m++;case6:m++;case5:case4:case3:case2:case1:case0:m++;}printfm=%d\nm;}
2.编写程序,从键盘输入一个整数,打印出它是奇数还是偶数#includestdio.hvoidmain{inta;scanf%da;ifa%2==1printf%disaoddnumber!\na;elseprintf%disaevennumber!\na;}
3.编写程序,从键盘输入一个字符,判别它是否是小写字母,如果是,将它转换为大写字母;如果不是,不转换然后输出最后得到的字符#includestdio.hvoidmain{charch;scanf%cch;ifch=ach=zch=ch-32;printf%c\nch;}
4.编写程序,从键盘输入一个不多于4位的正整数,打印出它是几位数#includestdio.hvoidmain{intxn;scanf%dx;ifx1000n=4;elseifx100n=3;elseifx10n=2;elsen=1;printf%d\nn;}
5.当一个人的月收入在3500元以下时免税;月收入在3500元到5000元之间时,超过3500的部分纳税3%;月收入在5000元以上时,3500至5000之间的部分纳税3%,超过5000的部分纳税10%编写程序从键盘输入月收入income,计算并输出应交税款tax#includestdio.hvoidmain{intincome;floattax;scanf%dincome;ifincome=3500tax=0;elseifincome=5000tax=
0.03*income-3500;elsetax=
0.03*5000-3500+
0.10*income-5000;printftax=%f\ntax;}
6.回文是指正读和反读都一样的数或字符串例如
12321、
55455、35553等都是回文请编写一个程序,从键盘上读取一个包含五位数字的长整数,并判断它是否是回文(提示用除法运算和求余运算把一个数的个位、十位、百位、千位等分别分离出来)#includestdio.hvoidmain{longx;intabde;scanf%ldx;a=x/10000;b=x%10000/1000;d=x%100/10;e=x%10;ifa==eb==dprintf%ldishuiwen!\nx;elseprintf%ldisnothuiwen!\nx;}习题
五一、阅读题
1.
82.
43213.X
4.-
15.
236.
527.
58.3
二、填空题1.182.23.b=i+14.175.i=
9、j%3!=06.d=
1.
0、k=k+
1、k=10
三、选择题1~8ADDABDDA
四、编程题
1.编写程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方之和等于该数本身例如,407是一个“水仙花数”,因为407=43+03+73(注若将题意改为打印出最大的或最小的“水仙花数”,则应将循环语句作如何调整?)#includestdio.hvoidmain{intabck;fork=100;k=999;k++//求最大的“水仙花数”改用fork=999;k=100;k--{a=k/100;b=k/10%10;c=k%10;ifk==a*a*a+b*b*b+c*c*c{printf%5dk;//求最大或最小”水仙花数”时增加一个语句break;}}printf\n;}
2.编写程序,输出1980~2880年所有闰年的年号每输出5个年号换一行#includestdio.hvoidmain{intkflagn=0;fork=1980;k=2880;k++{flag=k%4==0k%100!=0||k%400==0;ifflag{printf%5dk;n++;ifn%10==0printf\n;}}printf\n;}
3.编写程序,求1-3+5-7+…-99+101的值#includestdio.hvoidmain{intnt=1s=1;forn=3;n=101;n+=2{t=-t;s=s+t*n;}printfs=%d\ns;}
4.编写程序,计算并输出下列级数的前n项之和Snn的值从键盘输入#includestdio.hvoidmain{intfzfmni;floatst;fz=2;fm=1;s=0;scanf%dn;fori=1;i=n;i++{t=
1.0*fz/fm;s=s+t;fz=fz+fm;fm=fz-fm;}printfs=%f\ns;}5.编写程序,求e的值e=1+1/1!+1/2!+1/3!+1/4!+…+1/n!#includestdio.hvoidmain{intni;floattfm=1e=1;scanf%dn;fori=1;i=n;i++{fm=fm*i;t=
1.0/fm;e=e+t;}printfn=%de=%f\nne;}
6.已知某球从80米高度自由落下,落地后反复弹起,每次弹起的高度都是上次高度的一半求此球8次落地所经过的总路程#includestdio.hvoidmain{intn;floats=80h=s/2;forn=2;n=8;n++{s=s+2*h;h=h/2;}printfs=%f\ns;}
7.用牛顿迭代法求高次方程fx=2x3-4x2+5x-18=0的根(约为
2.466)注牛顿迭代公式为x2=x1-fx1/f’x1,其中f’x1为导函数在点x1的值#includestdio.h#includemath.hvoidmain{floatxff1;x=8;//x的初值可为任意值do{f=2*x*x*x-4*x*x+5*x-18;f1=6*x*x-8*x+5;x=x-f/f1;}whilefabsf
0.00001;printfx=%ff=%f\nxf;}
8.有这样一些真分数其分子和分母都是两位正整数,且分子的个位数与分母的十位数相同,如果把该分数的分子的个位数与分母的十位数同时去掉,所得到的新的分数正好与原分数的值相等,如26/65=2/5试编程求出所有满足上述条件的真分数#includestdio.hvoidmain{intabc;//设这个分数为ab/bcfora=1;a=9;a++forb=1;b=9;b++forc=1;c=9;c++ifac
1.0*a/c==a*
10.0+b/b*
10.0+cprintf%d/%d=%d%d/%d%d=%f\nacabbc
1.0*a/c;}
9.编写程序,求数列1(1+1/2)(1+1/2+1/3)(1+1/2+1/3+1/4)(1+1/2+1/3+1/4+1/5)…的前10项之和#includestdio.hvoidmain{floatst;inti;s=0t=0;fori=1;i=10;i++{t=t+
1.0/i;s=s+t;}printfs=%f\ns;}
10.编写程序,求3到100之间的所有素数之和#includestdio.hvoidmain{intsikflag;s=0;fori=3;i=100;i++{flag=1;fork=2;ki;k++ifi%k==0{flag=0;break;}ifflag{s=s+i;printf%4di;}}printf\nsum=%d\ns;}
11.编写程序,求Fibonacci数列中大于800的最小的一个数结果为987#includestdio.hvoidmain{intf1=1f2=1f3;whilef3=800{f3=f1+f2;f1=f2;f2=f3;}printfFibonacci数列中大于800的最小数是%5d\nf3;}习题
六一、选择题1~10DDCBABCDCD11~20ABBCCDCABB21~30BBDDDDCDCA注第16题答案C为字符串SHORT与SHORT相等第19题题目为已知charstr1
[10]str2
[10]={books};则在程序中能够将字符串books赋给数组str1的正确语句是第21题题目为设有charstr1
[20]=abcdestr2
[20]=xyz;则执行语句printf%dstrlenstrcpystr1str2;的结果是第28题答案D为aaaabbbbccccdddd
二、填空题1.
9、02.先行后列3.字符数组4.QuickC
5.c=getchar、A+i或65+i
6.\
0、str1[i]-str2[i]7.CDABC8.69.100000100000100000100000110.60011.AzyD
12.4somestring*test
三、编程题
1.定义一个有20个元素的整型数组,分别求出下标为奇数和偶数的元素的平均值#includestdio.h#includemath.hvoidmain{intis0=0s1=0a
[20];fori=0;i20;i++a[i]=rand%100;fori=0;i20;i+=2{printf%3da[i];s0=s0+a[i];}printfsumis:%dave=%f\ns0s0/
10.0;fori=1;i20;i+=2{printf%3da[i];s1=s1+a[i];}printfsumis:%dave=%f\ns1s1/
10.0;}
2.设有一个整型数组,另输入一个整数,编程查找这个整数是否在数组中出现过,若出现,则输出第一次出现的位置,否则,输出nofound#includestdio.h#includemath.hvoidmain{intisa
[20];fori=0;i20;i++a[i]=rand%100;scanf%ds;fori=0;i20;i++ifa[i]==s{printffound:a[%d]=%d\nia[i];break;}ifi==20printfnofound\n;fori=0;i20;i++printf%3da[i];printf\n;}
3.设有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中#includestdio.h#defineN10voidmain{intijs;//inta[N]={1357911131517};inta[N]={1715131197531};scanf%ds;i=0;ifa
[0]a
[1]whilesa[i]i++;elsewhilesa[i]i++;forj=N-1;ji;j--a[j]=a[j-1];a[j]=s;fori=0;iN;i++printf%3da[i];printf\n;}
4.编一程序,从一个已排好序的数组中删去某个位置上的元素#includestdio.h#defineN10voidmain{intij;inta[N]={135791113151719};fori=0;iN;i++printf%3da[i];printf\n;scanf%di;forj=i;jN-1;j++a[j]=a[j+1];fori=0;iN-1;i++printf%3da[i];printf\n;}
5.将一个二维数组的行、列互换后存到另一个二维数组中并输出结果#includestdio.hvoidmain{intij;inta
[3]
[4]={1357911131517192123}b
[4]
[3];fori=0;i4;i++forj=0;j3;j++b[i][j]=a[j][i];printfarraya:\n;fori=0;i3;i++{forj=0;j4;j++printf%5da[i][j];printf\n;}printfarrayb:\n;fori=0;i4;i++{forj=0;j3;j++printf%5db[i][j];printf\n;}}
6.编一程序,在一个二维数组中,查找第一次出现的负数,并输出该数及其所在的行、列号#includestdio.hvoidmain{intijflag;inta
[3]
[4]={135791113-151719-2123};flag=0;fori=0;i3;i++forj=0;j4;j++ifa[i][j]0{flag=1;printffound:a[%d][%d]=%d\nija[i][j];i=j=100;//可使双重循环提前结束}ifflag==0printfnofound!;printfarraya:\n;fori=0;i3;i++{forj=0;j4;j++printf%5da[i][j];printf\n;}}
7.编程将一个字符数组中的字母,按由大到小的顺序进行排序#includestdio.h#includestring.hvoidmain{charts[]=ABCDIVBHFBVCNLKFDB;intijn;putss;n=strlens;fori=0;in-1;i++forj=i+1;jn;j++ifs[i]s[j]{t=s[i];s[i]=s[j];s[j]=t;}putss;}
8.输入一行字符,统计其中有多少个英语单词,单词之间用空格隔开#includestdio.h#includestring.hvoidmain{chars
[81];intwin;getss;i=0;n=0;w=0;whiles[i]!=\0{ifs[i]==w=0;/*endofaword*/elseifw==0{w=1;n++;}/*beginofaword*/i++;}printfnumberofword:%d\nn;}
9.编程将两个一维数组中的对应元素的值相减后进行输出#includestdio.h#includemath.hvoidmain{intia
[10]b
[10];fori=0;i10;i++{a[i]=rand%100;printf%4da[i];}printf\n;fori=0;i10;i++{b[i]=rand%100;printf%4db[i];}printf\n;fori=0;i10;i++printf%4da[i]-b[i];printf\n;}
10.有n个无序的数放在数组a中,请将相同的那些数删得只剩得一个,输出经过删除后的数据#includestdio.hvoidmain{intijka
[10]={90204030505050502080};fori=0;i10;i++printf%4da[i];printf\n;fori=0;i9;i++forj=i+1;j10;j++ifa[j]==a[i]{a[j]=-888;}k=0;fori=0;i10;i++ifa[i]!=-888{printf%4da[i];a[k++]=a[i];}//不相同的有效元素只有K个了printf\n;}
11.求二维数组中这样一个元素的位置它在行上最小,在列上也最小如果没有这样的元素则输出相应的信息#includestdio.h#includemath.hvoidmain{intjikflagfz=0a
[4]
[5];fori=0;i4;i++{forj=0;j5;j++{a[i][j]=rand%100;printf%4da[i][j];}printf\n;}fori=0;i4;i++{forj=0;j5;j++{flag=1;fork=0;k5;k++ifa[i][k]a[i][j]{flag=0;break;}fork=0;k4flag;k++ifa[k][j]a[i][j]{flag=0;break;}ifflag{fz++;printfmina[%d][%d]=%d\nija[i][j];}}}iffz==0printfnofound!;}
12.在一个二维数组中形成并输出如下矩阵1111121111A=321114321154321#includestdio.h#defineN5voidmain{intjia[N][N];fori=0;iN;i++forj=0;jN;j++{ifi=ja[i][j]=1;elseifj==0a[i][j]=i+1;elsea[i][j]=a[i-1][j-1];}fori=0;iN;i++{forj=0;jN;j++printf%4da[i][j];printf\n;}}
13.已知A是一个3╳4的矩阵,B是一个4╳5的矩阵,编程求A╳B得到的新矩阵C,并输出C矩阵#includestdio.hvoidmain{intjika
[3]
[4]={123456789101112};intb
[4]
[5]={32154432512354178569}c
[3]
[5];printfarrayA3*4:\n;fori=0;i3;i++{forj=0;j4;j++printf%4da[i][j];printf\n;}printfarrayB4*5:\n;fori=0;i4;i++{forj=0;j5;j++printf%4db[i][j];printf\n;}fori=0;i3;i++forj=0;j5;j++{c[i][j]=0;fork=0;k4;k++c[i][j]+=a[i][k]*b[k][j];}printfarrayC3*5=A*B:\n;fori=0;i3;i++{forj=0;j5;j++printf%4dc[i][j];printf\n;}}
14.编程输出两个字符串中对应位置上相同的字符#includestdio.hvoidmain{inti;chara
[81]=acbsbdvhfejbvewvkbewljbv;charb
[81]=anbdxwdbviuerkjvbfidbvuiebik;printfstring1:%s\na;printfstring2:%s\nb;printfstring3:;i=0;whilea[i]!=\0b[i]!=\0{ifa[i]==b[i]printf%ca[i];i++;}printf\n;}
15.设有一字符串已按升序排列在字符数组a中,请将另一字符串b中的字符按升序的规律插到数组a中#includestdio.h#includestring.hvoidmain{intijk;chara
[81]=acdfhjklmopxz;charb
[81]=anbdx;printfstring1:%s\na;printfstring2:%s\nb;i=0;whileb[i]!=\0{j=0;whilea[j]b[i]a[j]!=\0j++;k=strlena;whilek=j{a[k+1]=a[k];k--;}a[j]=b[i];i++;}printfstring3:%s\na;}
16.将已按升序排列的两个字符串a和b中的字符按升序归并到字符数组c中#includestdio.h#includestring.hvoidmain{intijk;chara
[81]=acdfhjklmopxz;charb
[81]=abdnx;charc
[81];printfstring1:%s\na;printfstring2:%s\nb;i=0;j=0;k=0;whilea[i]!=\0b[j]!=\0{ifa[i]b[j]c[k++]=a[i++];elsec[k++]=b[j++];}whilea[i]c[k++]=a[i++];whileb[j]c[k++]=b[j++];c[k]=\0;printfstring3:%s\nc;}习题
七一、选择题1~10DCDBDBCAAB11~19BBABADABA
二、填空题1.声明2.自动将其转换为函数定义时的类型3.104.i=n、s、
0、fk5.Itis6.27217.02468.k、-19.
2、210.p=j、x[i][p]、LineMaxx11.512.2413.agen-1+
2、agen14.m%
10、m/
10、m或m!=
0、rm
三、编程题
1.编一函数,判断某年是否为闰年,若是返回1,否则返回0#includestdio.hintfunintm{returnm%4==0m%100!=0||m%400==0;}voidmain{intn;scanf%dn;iffunnprintfyear:%disaleap!\nn;}
2.编写计算三角形面积的程序,将计算面积定义成函数三角形面积公式为A=式中s=a+b+c/2其中A为三角形面积,a、b、c为三角形的三条边的长度#includemath.h#includestdio.hfloatfunfloatafloatbfloatc{floatfs;s=a+b+c/2;ifs=a||s=b||s=c//或a+bca+cbb+caf=0;elsef=sqrts*s-a*s-b*s-c;returnf;}voidmain{floatabc;scanf%f%f%fabc;printfareais:%f\nfunabc;}
3.编写两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入#includemath.h#includestdio.hintfmaxintmintn{intr;r=m%n;whiler!=0{m=n;n=r;r=m%n;}returnn;}intfminintmintn{returnm*n/fmaxmn;}voidmain{intab;scanf%d%dab;printffmaxis:%d\nfmaxab;printffminis:%d\nfminab;}
4.编写函数,根据整型形参m的值,计算公式t=1---…-的值例如,若m=5,则应输出
0.536389#includestdio.hfloatfunintm{floatt=
1.0;inti;fori=2;i=m;i++t=t-
1.0/i/i;returnt;}voidmain{intm;scanf%dm;printft%d=%f\nmfunm;}
5.计算s=1+++…+n由终端输入,将计算n!定义成函数#includestdio.hfloatfunintm{inti;floats=
0.0t=
1.0;fori=1;i=m;i++{t=t/i;s=s+t;}returns;}voidmain{intn;scanf%dn;printfs%d=%f\nnfunn;}
6.编写函数,利用公式计算π的近似值,当某一项的值小于10-5时,认为达到精度要求#includestdio.hdoublefun{intn;doublepi=1t=1;n=1;do{t=t*n/2*n+1;pi=pi+t;n++;}whilet1e-5;return2*pi;}voidmain{printfpi=%f\nfun;}
7.编一函数,判断某一整数是否为回文数,若是返回1,否则返回0所谓回文数就是该数正读与反读是一样的例如12321就是一个回文数#includestdio.h#includemath.hinthuiwenintm{inttn=0;t=m;whilet{n++;t=t/10;}//求出M是几位的数t=m;whilet{ift/intpow10n-1!=t%10//比较其最高位和最低位return0;else{t=t%intpow10n-1;//去掉其最高位t=t/10;//去掉其最低位n=n-2;//位数去掉了两位}}return1;}voidmain{intx;scanf%dx;ifhuiwenxprintf%disahuiwen!\nx;elseprintf%disnotahuiwen!\nx;}
8.编写一个求水仙花数的函数,然后通过主函数调用该函数求100到999之间的全部水仙花数所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身例如153就是一个水仙花数153=1*1*1+5*5*5+3*3*3#includestdio.h#includemath.hintfun8intm{intabc;a=m/100;b=m/10%10;c=m%10;ifm==a*a*a+b*b*b+c*c*creturn1;elsereturn0;}voidmain{inti;fori=100;i=999;i++iffun8iprintf%5di;printf\n;}
9.编一函数primedecm,求整数m的所有因子并输出例如120的因子为2,2,2,3,5#includestdio.h#includemath.hvoidprimedecintm{intn=2;whilem1{whilem%n==0{printf%dn;m=m/n;}n++;}printf\n;}voidmain{intx;scanf%dx;primedecx;}
10.求100~200之间的所有素数,按每行6个输出#includestdio.h#includemath.hintprimeintm{intnf=1;forn=2;nm;n++ifm%n==0{f=0;break;}returnf;}voidmain{intxn=0;forx=100;x=200;x++ifprimex{n++;printf%5dx;ifn%6==0printf\n;}printf\n;}
11.编一函数,求末尾数非0的正整数的逆序数,如reverse3407=7043#includestdio.h#includemath.hintreverseintm{intx=0;whilem{x=x*10+m%10;m=m/10;}returnx;}voidmain{intw;scanf%dw;printf%d==%d\nwreversew;}
12.编一函数,将一个字符数组中的数字字符存于另一个字符数组中#includestdio.h#includestring.hvoidfun12chara[]charb[]{inti=0j;forj=0;jstrlenb;j++ifb[j]=0b[j]=9a[i++]=b[j];a[i]=\0;}voidmain{chars1
[81]s2
[81];getss2;fun12s1s2;putss2;putss1;}
13.编一函数,统计一个字符串中字母、数字、空格和其它字符的个数#includestdio.h#includestring.hvoidfun13chars[]{intinum=0ch=0sp=0oh=0;charc;fori=0;c=s[i]!=\0;i++ifc==sp++;elseifc=0c=9num++;elseiftoupperc=Atoupperc=Zch++;elseoh++;printfchar:%dnumber:%dspace:%dother:%d\nchnumspoh;}voidmain{chars1
[81];getss1;fun13s1;}
14.用递归的方法实现求1+2+3+…+n#includestdio.h#includestring.hintfun14intm{intw;ifm==1w=1;elsew=fun14m-1+m;returnw;}voidmain{intxi;scanf%dx;printf1+2+...+%d=%d\nxfun14x;}
15.用递归的方法将一个整数转换成字符串例如输入345,应输出字符串“345”#includestdio.h#includestring.hvoidfun15intm{ifm!=0{fun15m/10;printf%c0+m%10;}}voidmain{intx;scanf%dx;printf%d==x;fun15x;printf\n;}
16.采用递归的方法计算x的n次方#includestdio.h#includemath.hfloatpfloatxintn{floatf;ifn==0f=1;elsef=pxn-1*x;returnf;}voidmain{floatx;intn;scanf%f%dxn;printfp%f%d=%fxnpxn;}习题
八一、选择题1~10:ADBCCABDBA11~14:BCCD
二、填空题
1.从定义点到函数体(或复合语句)结束
2.auto
3.
①局部、
②全局
4.
①外部、
②内部
5.2,5,1,2,3,-
26.a=5a*a=25a*a*a=
87.add:y=25;sub:y=5;main:x=25;main:y=10习题
九一、选择题1~8:DCBCABBB
二、填空题
1.
1000102.
113.011
三、编程题
1.定义一个带参的宏,求两个整数的余数通过宏调用,输出求得的结果#defineRmnm%n#includestdio.hvoidmain{intmn;printfentertwointegers:\n;scanf%d%dmn;printfremainder=%d\nRmn;}
2.分别用函数和带参的宏,从3个数中找出最大者#includestdio.h#defineMAXababa:b//implementationbyMACROintmax3intaintbintc//implementationbyfunction{intm;m=aba:b;m=mcm:c;returnm;}voidmain{intmnk;printfenter3integer:\n;scanf%d%d%dmnk;printf
1.MACROmax=%d\nMAXMAXmnk;printf
2.functionmax=%d\nmax3mnk;}
3.输入一个整数m,判断它能否被3整除要求利用带参的宏实现#includestdio.h#defineDIVIDEDBY3mm%3==0voidmain{intm;printfenterainteger:\n;scanf%dm;ifDIVIDEDBY3mprintf%disdividedby3\nm;elseprintf%disnotdividedby3\nm;}习题
十一、填空题
1.首地址
2.
03.1int*p=k;2*p=6;3int**pp;4pp=p;5**pp*=2;
4.整型数组名、指向整型数据的指针值
5.*++p
二、选择题1~10:BCADCAAABB11~15:CBCDC16:
①B
②B
③C17:
①B
②D18:
①B
②A
③C19~21:BAC
三、编程题
1.编写函数,对传递进来的两个整型量计算它们的和与积之后,通过参数返回#includestdio.hvoidcomputeintmintnint*sumint*p{*sum=m+n;*p=m*n;}voidmain{intxysumproduct;printfenter2integers:\n;scanf%d%dxy;computexysumproduct;printfx=%dy=%dsum=%dproduct=%d\nxysumproduct;}
2.编写一个程序,将用户输入的字符串中的所有数字提取出来#includestdio.h#includestring.hvoidmain{charstring
[81]digit
[81];char*ps;inti=0;printfenterastring:\n;getsstring;ps=string;while*ps!=\0{if*ps=0*ps=9{digit[i]=*ps;i++;}ps++;}digit[i]=\0;printfstring=%sdigit=%s\nstringdigit;}
3.编写函数实现,计算字符串的串长#includestdio.h#includestring.hintStringLengthchar*s{intk;fork=0;*s++;k++;returnk;}voidmain{charstring
[81];printfenterastring:\n;getsstring;printflengthofthestring=%d\nStringLengthstring;}
4.编写函数实现,将一个字符串中的字母全部转换为大写#includestdio.h#includestring.hchar*Upperchar*s{char*ps;ps=s;while*ps{if*ps=a*ps=z*ps=*ps-32;ps++;}returns;}voidmain{charstring
[81];printfenterastring:\n;getsstring;printfbeforeconvert:string=%s\nstring;printfafterconvert:string=%s\nUpperstring;}
5.编写函数实现,计算一个字符在一个字符串中出现的次数#includestdio.h#includestring.hintOccurchar*scharc{intk=0;while*s{if*s==ck++;s++;}returnk;}voidmain{charstring
[81]c;printfenterastring:\n;getsstring;printfenteracharacter:\n;c=getchar;printfcharacter%coccurs%dtimesinstring%s\ncOccurstringcstring;}
6.编写函数实现,判断一个子字符串是否在某个给定的字符串中出现#includestdio.h#includestring.hintIsSubstringchar*strchar*substr{intijknum=0;fori=0;str[i]!=\0num==0;i++{forj=ik=0;substr[k]==str[j];k++j++ifsubstr[k+1]==\0{num=1;break;}}returnnum;}voidmain{charstring
[81]sub
[81];printfenterfirststring:\n;getsstring;printfentersecondstring:\n;getssub;printfstring%sissub;if!IsSubstringstringsubprintfnot;printfsubstringof%s\nstring;}
7.有n个人围成一圈,顺序排号由用户从键盘输入报数的起始位置,从该人开始报数(计数从0开始),凡报数为3的倍数出圈问最后剩下的是几号?见导学例
10.
258.由一个整型二维数组,大小为m×n,要求找出其中最大值所在的行和列,以及该最大值请编一个函数max,数组元素在main函数中输入,结果在函数max中输出见导学例
10.
269.由n个学生,每个学生考m门课程,要求编一函数,能检查n个学生有无不及格的课程,如果由某一学生有一门或一门以上课程不及格,就输出该学生的号码(学号从0开始)和其全部课程成绩见导学例
10.27习题
十一一、选择题1~10:AABDDBDDDC11~20:CBBCC
二、填空题1.___2___、___3__2.structnode*next3.structlink*head、p-data、p-next4.__A_
三、编程题1.编写程序,进行两个复数的相减#includestdio.hstructComplex{doublem_rm_i;};structComplexsubstructComplexc1structComplexc2{structComplexc;c.m_r=c
1.m_r-c
2.m_r;c.m_i=c
1.m_i-c
2.m_i;returnc;}voidmain{structComplexc1={
1.
22.3}c2={
0.
20.3};structComplexc;c=subc1c2;printf“c=%g+i%g\n”c.m_rc.m_i;}2.定义一个包括年、月、日的结构体输入一个日期,计算该日在本年中是第几天?注意闰年问题#includestdio.hstructymd{intday;intmonth;intyear;};intdayof
[13]={0312831303130313130313031};intdaysstructymd*p{intid;ifp-year%4==0p-year%100!=0||p-year%400==0dayof
[2]=29;d=p-day;fori=1;ip-month;i++d=d+dayof[i];returnd;}voidmain{structymddate;intd;for;;{printfdateyyyy/mm/dd=yyyy=0--Exit\n\n;scanf%d/%d/%ddate.yeardate.monthdate.day;ifdate.year==0break;d=daysdate;printf\nThedayoftheyearis%d!\n\nd;}}3.有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩从键盘输入10个学生的数据,要求输出3门课程的总平均成绩,以及最高分的学生的学号、姓名、3门课程成绩、平均分数#includestdio.h#defineN10structstudent{charnum
[6];charname
[8];floatscore
[3];floatavr;}stu[N];voidmain{intijmaxi;floatsummaxaverage;fori=0;iN;i++{printfinputscoresofstudent%d:\ni+1;printfNo.:;scanf%sstu[i].num;printfname:;scanf%sstu[i].name;forj=0;j3;j++{printfscore%d:j+1;scanf%fstu[i].score[j];}}average=0;max=0;maxi=0;fori=0;iN;i++{sum=0;forj=0;j3;j++sum+=stu[i].score[j];stu[i].avr=sum/
3.0;average+=stu[i].avr;ifsummax{max=sum;maxi=i;}}average/=N;printfNo.namescorelscore2score3average\n;fori=0;iN;i++{printf%5s%10sstu[i].numstu[i].name;forj=0;j3;j++printf%
9.2fstu[i].score[j];printf%
8.2f\nstu[i].avr;}printfaverage=%
5.2f\naverage;printfThehighestscoreis:student%s%s.\nstu[maxi].numstu[maxi].name;printfHisscoresare:%
6.2f%
6.2f%
6.2faverage:%
5.
2.\nstu[maxi].score
[0]stu[maxi].score
[1]stu[maxi].score
[2]stu[maxi].avr;}4.设单向链表head1和head2已建立编写将单向链表head2连接到单向链表head1之后的函数,以head1返回,如图
11.10所示/*结点结构Node*/structNode{intdata;structNode*next;};提示函数原型为:structNode*linkstructNode*head1structNode*head2;structNode*linkstructNode*head1structNode*head2{structNode*p*head0;p=head1;head0=head1;whilep-next!=NULLp=p-next;p-next=head2;returnhead0;}5.有两个链表a和b设结点中包括学号、姓名从a链表中删除去与b链表中有相同学号的那些结点#includestdio.h#includestring.h#defineLA4#defineLB5structstudent{intnum;charname
[8];structstudent*next;}a[LA]b[LB];voidmain{structstudenta[LA]={{101Wang}{102Li}{105Zhang}{106Wei}};structstudentb[LB]={{103Zhang}{104Ma}{105Chen}{107Guo}{108lui}};inti;structstudent*p*p1*p2*head1*head2;head1=a;head2=b;printflistA:\n;forp1=head1i=1;i=LA;i++{ifiLAp1-next=a+i;elsep1-next=NULL;printf%4d%8s\np1-nump1-name;ifiLAp1=p1-next;}printf\nlistB:\n;forp2=head2i=1;i=LB;i++{ifiLBp2-next=b+i;elsep2-next=NULL;printf%4d%8s\np2-nump2-name;ifiLBp2=p2-next;}p1=head1;whilep1!=NULL{p2=head2;whilep1-num!=p2-nump2-next!=NULLp2=p2-next;ifp1-num==p2-numifp1==head1head1=p1-next;else{p-next=p1-next;p1=p1-next;}else{p=p1;p1=p1-next;}}printf\nresult:\n;p1=head1;whilep1!=NULL{printf%4d%7s\np1-nump1-name;p1=p1-next;}}习题
十二一、选择题1~8:CBDBCAAB
二、填空题1.322.__a0__3._x|0xFF00_4.64
三、编程题1.取一个整数a从右端开始的4~7位#includestdio.hvoidmain{intnummask;printfInputaintegernumber:;scanf%dnum;printfthenumber:0x%x\nnum;num=4;/*右移4位,将4~7位移到低4位上*/mask=~~04;/*间接构造1个低4位为
1、其余各位为0的整数*/printf4~7:0x%x\nnummask;}2.编一个将十六进制数转换成二进制形式显示的程序#includestdio.hvoidmain{intnummaski;printfInputahexadecimalnumber:;scanf%xnum;mask=115;/*构造1个最高位为
1、其余各位为0的整数屏蔽字*/printf%d=num;fori=1;i=16;i++{putcharnummask1:0;/*输出最高位的值1/0*/num=1;/*将次高位移到最高位上*/ifi%4==0putchar;/*四位一组,用逗号分开*/}printf\bB\n;}习题
十三一、选择题1~7:BDABBBC
二、填空题1.
2、!feoff
1、f
22.fopenfilenamew、ch
3.
0、r、!feoffp
4.BBBBCCCCDDDD
5.w+、str[i]-
32、rewindfp
6.bi.dat、fp
7.fopen、ftell
三、编程题
1.调用fputs函数,把10个字符串输出到文件中;再从此文件中读入这10个字符串放在一个数组中;最后把字符串数组中的字符串输出到终端屏幕,以检查所有操作的正确性#includestdio.hvoidmain{inti;FILE*fp=fopentest.txtw;char*str
[10]={Onetwothreefourfivesixseveneightnineten};charstr2
[10]
[20];iffp==NULL{printfCannotopenwritefile\n;return;}fori=0;i10;i++{fputsstr[i]fp;fputs\nfp;}fclosefp;fp=fopentest.txtr;iffp==NULL{printfCannotopenreadfile\n;return;}i=0;whilei10!feoffp{printf%sfgetsstr2[i]20fp;i++;}}
2.从键盘读入10个浮点数,以二进制形式存入文件中再从文件中读出数据显示在屏幕上修改文件中第四个数据再从文件中读出数据显示在屏幕上,以验证修改的正确性#includestdio.hvoidctfbFILE*fp{inti;floatx;fori=0;i10;i++{scanf%fx;fwritexsizeoffloat1fp;}}voidfbtcFILE*fp{floatx;rewindfp;freadxsizeoffloat1fp;while!feoffp{printf%fx;freadxsizeoffloat1fp;}}voidupdataFILE*fpintnfloatx{fseekfplongn-1*sizeoffloat0;fwritexsizeoffloat1fp;}voidmain{FILE*fp;intn=4;floatx;iffp=fopene:file.datwb+==NULL{printfcantopenthisfile\n;exit0;}ctfbfp;fbtcfp;scanf%fx;updatafpnx;fbtcfp;fclosefp;}。