c++第五章习题解答(新教材)
C程序设计(第四版)_谭浩强_第五章_课后习题答案
循环结构程序设计P115 5.1 用while计算1至100的合.#include<stdio.h>int main(){int i=1,sum=0;while(i<=100) //对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.{sum=sum+i;i++;}printf("The sum is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i=1,sum=0;do// do-while可以做的事,用while都可以做到.{ //do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.sum=sum+i;i++;}while(i<=100);printf("The sum is %d .\n",sum);return 0;}P118 5.3 比较do-while与while的差别.#include<stdio.h>{int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,正常,11的话,则sum仍然是0.while(i<=10){sum=sum+i;i++;}printf("The sum of 1-10 is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,结果一样.输入11的话,先做操作,所以sum=11.do{sum=sum+i;i++;}while(i<=10); //此重点在于理解二者的差别.printf("The sum of 1-10 is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i,b=0,a,c;for(i=0;i<=1000;i++){printf("Please input amount :"); //循环体内套有输出语句以及跳出语句.scanf("%d",&a);b=b+a;if(b>=100)break; //break是用于跳出循环,对if无效,对while for switch 这一类.}}c=b/i;printf("conut is %d , aver is %d ",i+1,c); //注意%号后的形式,否则可能输出错误.return 0;}P127 5.5 continue的例子.#include<stdio.h>int main(){int i;for(i=1;i<20;i++){if(i%3!=0){continue; //跳过本次I,执行下一个i.}printf("%d ",i);}printf("\n");return 0;}P128 5.6 形成一个4*5的矩阵.#include<stdio.h>int main(){int i,j,a=0; //没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;i<=4;i++){for(j=1;j<=5;j++,a++) // a用来控制换行.{if(a%5==0){printf("\n");}printf("%d\t",i*j);}}printf("\n");return 0;}P131 5.7 用一个交错的式子求哌的近似值.#include<stdio.h>#include<math.h>int main() //四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).{float s=1,n=1,m,sum=0,t;for(m=1;;m=m+2) //不确定哪项才会小于等于十的负六次方,所以不指定,无限下去.{ //不指定第二项,执行语句中应该有控制跳出的句子,否则死循环.t=(s)*(n/m); //这是第一项,s是符号,if(fabs(t)<=1e-6) //应该写在这里,题目要求这一项不累加进去.{break;}sum=sum+t; //因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); //变号一次.}printf("四分之一哌的值是%f.\n",sum);printf("一个完整哌的值是%f.\n",sum*4);return 0;}//下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行.//如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题.//#include <stdio.h> //这是关于int float double三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白来.////int main() //在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告 1 warning C4305: “=”: 从“double”到“float”截断.//{// float m,a,b,c; //一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的m=1,其实得到的是m=1.0.// int d,e,f;// m=1;// a=1.0/3;// b=1/3;// c=m/3;// d=1.0;// e=1/4;// f=1.0/4;// printf("%lf(float用double的%lf来输出是可以的.)\n%f\n%f\n%f\n",m,a,b,c); //不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出.// printf("%d\n%d\n%d\n",d,e,f); //但是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!!!!// return 0;//}P133 5.8 著名的Fibonacci(费波那契数列问题)#include<stdio.h>int main() //这个就是著名的Fibonacci(费波那契数列问题){int f1=1,f2=1,f3,i;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++) //注意,这是个基础问题,(i=1;i<=5;i++)这里其实进行了次运算,因为有f1,f2,要求有个,所以要有个.要么写<=38,要么写<39,边界问题一定要注意,不可以太随意!!!!{f3=f1+f2;printf("%12d\n",f3); //这个问题同样适用于"一对兔子一个月生一对"的问题.,f1=f2; //f1=f1+f2;此时它们各是,所以,现在的f1是.f2=f3; //f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3.}return 0;}#include<stdio.h>#include<math.h>int main(){double num;int i;printf("Please input a number :");scanf("%lf",&num); //因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;i<=sqrt(num);i++) //这边是<=号没错.{if((int)num%i==0) //如果在这期间有任何一个可以为零的话,则不是素数.{break; //当然跳出.}} //执行到这里的时候,i=5,已经变成了!!if(i<=sqrt(num)){printf("Not %d",(int)num);}else//如上所述,i=5,超出了求根的值,所以是素数.{printf("Yes %d",(int)num);}return 0;}#include<stdio.h>//不解释,HOHO>>>>...#include<math.h>int main(){double j;int i,k=0;for(j=100;j<=200;j++){for(i=2;i<=sqrt(j);i++){if((int)j%i==0){break;}}k=k+1; //这里是布局的开头.学习一下,有助逻辑.if(i<=sqrt(j)){printf("Not %d ",(int)j);if(k%5==0) //5个换一次行.{printf("\n");}}else{printf("Yes %d ",(int)j);if(k%5==0){printf("\n");}}}return 0;}P139 5.11 密码转换.#include<stdio.h>int main(){char c;c=getchar();while(c!='\n') //这也可以用数组来实现.{if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){if((c>='w'&&c<='z')||(c>='W'&&c<='Z')){c=c-22;}else{c=c+4;}printf("%c",c);c=getchar(); //套在循环里,依次得到字母,而while中判断回车为结束.}}printf("\n"); //这是布局问题.return 0;}P140 0.3 最大公约数和最小公倍数.#include<stdio.h>//最大公约数用累除法,除到无余数时的被除数是最大公约数.main (){int m, n, c, d;int gcd(); //这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); //这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf("Please input two number :\n");scanf("%d %d",&m,&n);c=gcd(m,n); //c获取最大公约数d=lcm(m,n); //d获取最小公倍数printf("The GCD of %d and %d is : %d !\n", m, n, c);printf("The LCM of %d and %d is : %d !\n", m, n, d);return 0;}int gcd(int x, int y) //最大公约数Greatest Common Divisor{int temp;while(x%y!=0){temp=y; //y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.y=x%y; //x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; //刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.}return y; //这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. }int lcm(int x, int y) //最小公倍数Lowest Common Multiple{int i, temp;if(x<y) //此段代码结果是保证二者大的数在X上,小的数在Y上.即小于号降序.{ //以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;}for(i=1; i<=y; i++) //设定一个区间,从1至大的数之间的循环.{if(!((x*i)%y)) //此式子如有余数,加上"!"号,会是假,则不返回,进行下一轮.{ //如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.return x*i;}}}P140 0.4 判断一串输入的字符.#include<stdio.h>int main(){char ch;int a=0,b=0,c=0,d=0,e=0;printf("Please input the string\n");while((ch=getchar())!='\n') //直到回车.{if(ch<='z'&&ch>='a'){a++;}else if(ch==' '){c++;}else if(ch<58&&ch>47){d++;}else if(ch<='Z'&&ch>='A'){b++;}else{e++;}}printf("大写%d 小写%d 空格%d 数字%d 其它%d\n",a,b,c,d,e);}#include<stdio.h>//不理解时可以百度或是谷歌更多的信息.int main() //想办法既快速做完,又要消化理解!!!{int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.temp=a; //先把第一阶的值存起来.for(i=0;i<n;i++){sum=sum+a;printf("%d + ",a); //事关布局.a=a*10+temp; //重点是每次乘,然后加上上一个数.}printf("= %d .",sum);return 0;}P140 0.6 1!+2!+3!+4!.....的值. #include<stdio.h>int main() //1!+2!+3!+4!.....{int i,j,k,sum=0,m=1;scanf("%d",&k); //比如设定为,值为.for(i=1;i<=k;i++) //第一层循环,指定到.{for(j=1;j<=i;j++) //第二层循环,指定至当前数.{m=m*j;} //到此是阶乘的结构.sum=sum+m;m=1;}printf("%d",sum); //完全不理解时,搜索并参考.return 0; //尝试自己做,第一次做出来就是自己的东西了. }#include<stdio.h>int main(){int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a<=100;a++) //三个块分别注释验证结果.{asum=asum+a;}for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言.{bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c.}for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中.{csum=csum+1/c;}printf("%lf",asum+bsum+csum);return 0;}PP#include<stdio.h>#include<math.h>int main(){int j,k,s[6],x=100,y,sum=0;for(j=153;j<=154;j++){for(k=2;k>=0;k--){s[k]=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(s[k],3);sum+=y;printf("%d-%d--%d\t",k,s[k],j);}printf("%d\n",sum);}return 0;}P140 0.8 水仙花数.//#include <stdio.h> //一步步的发现问题.////int main() //在%和/号之间,以前pow.以后再做.//{// int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了.// for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟.// {// for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑. // {// for(k=0;k<=i;k++)// {// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);// }// if(sum==j)// {// printf("%d 是水仙花数!\n",j);// }// sum=0;// }// }// return 0;//} //为什么还是无法实现?!#include<stdio.h>#include<math.h>int main(){int a,b,c,i,sum=0; //这里只计算三位数的.for(i=100;i<1000;i++){a=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum==i){printf("%d 是水仙花数.\n",i);}sum=0;}return 0;}P141 0.9 完数.#include<stdio.h>int main(){int i,j,r;for(i=1;i<=1000;i++) //零是个临界值,不能包括它.{r=0; //每次清零重来.类似水仙中的sum.for(j=1;j<i;j++){if(i%j==0) //除得尽即是因子.{r=r+j; //然后累加进去.}}if(r==i) //若相等.{printf("%d 是完数.\n",i);}}return 0;}P141 0.10 2/1+3/2+5/3+8/5+13/8…#include<stdio.h>int main() //10.007051{double i,a=2,b=1,c,s=0; //a是分子,b是分母.for(i=0;i<6;i++) //二十可以用户指定.{s+=a/b; //中间储值变量.c=a+b;b=a;a=c;}printf("%lf\n",s);return 0;}#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{double sum=100,high=100,up,donw,i;for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百.{up=high/2;donw=up;high=donw; //自咬尾巴问题.sum+=donw*2;}printf("%lf %lf\n",donw,sum);return 0;}P141 0.12 猴子吃桃子.#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{int i,sum=1;for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配.{printf("倒数第%d天还剩有%d个桃子.\n",i,sum);sum=(sum+1)*2;}//printf("%d\n",sum);return 0;}P141 0.16 输出星号棱形图案.#include<stdio.h>#include<conio.h>main() //只关注左半部分.右半部分无视空格.{int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶.for(i=1;i<=m;i++) //上半部分.其实也是正三角.{for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格.printf(" ");for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五... printf("*");printf("\n");}for(i=m-1;i>0;i--) //下半部分.其实也是倒三角.{ //减一是因为行数问题.这是中心行以下的.for(j=m-1;j>=i;j--)printf(" ");for(k=1;k<2*i;k++)printf("*");printf("\n");}getch(); //用户反应后结束.但,没必要.}。
C语言第五章习题带答案
练习5-1答案一、选择题1.合法的数组说明语句是( B )。
A.int a[]="string"; B.int a[]={0,1,2,3,4,5};C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a的说明正确的选项是( D )。
A.int a(10); B.int n=10, a[n]; C.int n; D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.:int a[10];,那么对a数组元素的正确引用是( D )。
A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是( C )。
A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};C.int a[]={0}; D.int a[2]={10, 9, 8};5.对以下说明语句的正确理解是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确二、填空题6.求所有不超过200的N值,N的平方是具有对称性质的回文数。
所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。
例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio.h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③ ) printf("%2d:%10d %10d\n", ++count, n, n*n);}}那么①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
C语言课后练习题答案第五章
作业四:简单程序设计1.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。
如果字符串长度大于5,则输出按方式(B);如果字符串长度小于5,则输出按方式(C)。
(5分)(重要)A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出C) 右对齐输出该字符串,左补空格 D) 输出错误信息2.阅读以下程序,当输入数据的形式为:25,13,10<CR>(注:<CR>表示回车),则正确的输出结果为(D)。
(5分)main(){ int x,y,z;scanf(“%d%d%d”,&x,&y,&z);要和这里一样printf(“x+y+z=%d\n”,x+y+z);}A) x+y+z=48 B) x+y+z=35 C) x+z=35 D) 不确定值3.根据下面的程序及数据的输入和输出形式,程序中输入数据的正确形式应该为(WXY)。
(5分)main(){ char ch1,ch2,ch3;scanf(“%c%c%c”,&ch1,&ch2,&ch3);printf(“%c%c%c”,ch1,ch2,ch3);}4.以下的输出结果是(x=1,y=2*sum*=310 Squard is : 100)。
(5分)main(){ int x=1,y=2;printf(“x=%d y=%d * sum * =%d\n”,x,y,x+y);printf(“10 Squared is : %d\n”,10*10);}5.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2 =’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:(20分)a= 3 b= 4 c= 5x=1.200000,y=2.400000,z=-3.600000x+y= 3.6 y+z=-1.20 z+x=-2.40u= 51274 n= 128765c1=’a’ or 97(ascll)c2=’b’ or 98(ascll)main(){ int a=3,b=4,c=5;float x=1.2,y=2.4,z=-3.6;unsigned u=51274;long n=128765;char c1=’a’,c2=’b’;printf(“a=%d b=%d c=%d\n”,a,b,c);printf(“x=%f ,y=%f, z=%f\n”,x,y,z);printf(“x+y=%3.1f y+z=%.2f z+x=%.2f\n”,x+y,y+z,z+x); printf(“u=%u n=%9ld \n”,u,n);printf(“c1=’%c’or %d (asc11) \n”,c1,c1);printf(“c2=’%c’or %d (asc11) \n”,c2,c2);}6.请写出下面程序的输出结果。
C语言程序设计教程 第五章 课后习题参考答案
k++;
if(k%5==0)
printf("\n");
f1=f2;
f2=f;
}
printf("\n");
return 0;
}
P124 3统计一个整数的位数
#include<stdio.h>
int main()
{
int n,k=0;
printf("请输入n的值:");
int main()
{
int x,y,z,i=0;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z=z+3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))
i++;
}
}
}
printf("共有%d种买法:\n",i);
c语言程序设计教程第五章课后习题参考答案
P1242古典问题:兔子总数(斐波那契数列)
#include<stdio.h>
int main()
{
int f1=1,f2=1,f,i,k=0;
printf("%d\t %d\t",f1,f2);
k=k+2;
for(i=3;i<=20;i++)
{
f=f1+f2;
do
{
printf("请输入第%d个整数x=",i);
《C语言程序设计教程》(第三版)李凤霞 主编——第五章习题答案
}
A)1 B)2 C)3D)4
7、下面的程序段所表示的数学函数关系是( )。
y=-1;
if(x!=0){if(x>0)y=1;}
else y=0;
A) -1 (x<0)B) 1(x<0)
y= 0 (x=0)y= -1(x=0)
1 (x>0)0(x>0)
else printf(“$$$ a=%d\n”,a);
}
9.下列程序的输出结果是__________。(a=2,b=1)
#include“stdio.h”
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;br
=1
6.下列程序段的输出是__________。(k=1)
int i=0,k=100,j=4;
if(i+j)k=(i=j)?(i=1):(i=i+j);
printf(“k=%d\n”,k);
7.下列程序段当a的值为014和0x14时的执行结果分别是________。
if(n>10){printf("%d",n%10);n=n/10;}printf("s=%ld\n",s);
printf("%d\n",n); }
}
3、有一个函数:
分别用:(1)简单if语句,(2)嵌套的if语句,(3)if…else语句,(4)switch语句编写程序,要求输入x的值,输出y的值。
C++第五章习题解答new
第5章指针与模板习题一、.基本概念与基础知识自测题5.1 填充题5.1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2)。
按元素在数组中的位置进行访问,是通过(3)进行的,称为(4)或(5)访问。
为了使数组声明中数组的大小修改更为方便,总是将(6)用于声明数组长度。
答案:(1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量5.1.2 C/C++中的多维数组用的是一个(1)的定义,即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。
答案:(1)嵌套(2)以数组作为元素(3)二维数组5.1.3 计算机内存是一维编址的,多维数组在内存中的存储(1),C/C++多维在内存中的排列是(2)方式,即越(3)的下标变化(4)。
设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为(5)+ (6)。
答案:(1)必须要转化为一维方式,(2)按行方式(3)右(4)越快(5)i*n*u(6)j*u5.1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查(2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。
答案:(1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维5.1.5 指针变量包含另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。
使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。
答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问5.1.6 固定指向一个对象的指针,称为(1),即(2),定义时const放在(3)。
而指向“常量”的指针称为(4),指针本身可以指向别的对象,但(5),定义时const放在(6)。
答案:(1)指针常量(2)指针本身是常量(3)const放在类型说明之后,变量名之前(4)常量指针(5)不能通过该指针修改对象(6)const放在类型说明之前5.1.7 数组名在表达式中被自动转换为(1)指针常量,数组名是地址,但数组名中放的地址是(2),所以数组名(3)。
C语言程序设计教程第五章练习题题目
单选题1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是()A.arr[10]B.arr[6.3]C.arr(6)D.arr[0]3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()4、若int arr[5] = {1,2,3}; 则arr[2]的值为()5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};7、阅读下列程序段:char s[18] = "a book!";printf("%.4s\n", s);其输出结果为()A.a book!B.a bookC.a bo8、阅读下列程序:int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()9、阅读下面程序:int i;int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for (i = 0; i<4; i++)printf("%3d", x[i][3 - i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13B.1 6 11 16C.4 7 10 13D.4 8 12 1610、下列描述中不正确的是()。
C语言第五章习题及答案
第五章习题答案一、选择题1) 有以下程序#include <stdio.h>main(){ int n=2,k=0;while(k++&&n++>2);printf("%d %d\n",k,n);}程序运行后的输出结果是A)0 2 B)1 3 C)5 7 D)1 22)有以下程序:main(){ int k=5;while(--k) printf("%d",k-=3);printf("\n");}执行后的输出结果是()。
A)1 B)2 C)4 D)死循环3)有以下程序#include<stdio.h>main(){int y=10;while(y--);printf(”y=%d\n”,y);}程序执行后的输出结果是A)y=0 B)y= -1 C)y=1 D)while构成无限循环4) 若变量已正确定义,有以下程序段i=0;do printf("%d,",i);while(i++);printf("%d\n",i)其输出结果是A)0,0 B)0,1 C)1,1 D)程序进入无限循环5)有以下程序:main(){ int i;for(i=1;i<=40;i++){ if(i++%5==0)if(++i%8==0) printf("%d",i); }printf("\n");}执行后的输出结果是()。
A)5 B)24 C)32 D)406) 有以下程序#includes <stdio.h>main(){ int a=1,b=2;for(;a<8;a++) {b+=a; a+=2;}printf ("%d,%d\n",a,b);}程序运行后的输出结果是(A)9,18 (B)8,11 (C)7,11 (D)10,147) 有以下程序#include<stdio.h>main(){int y=9;for( ; y>0;y--)if(y%3= =0) printf("%d",--y);}程序的运行结果是A)741 B)963 C)852 D)8754218) 一下程序段中的变量已正确定义for(i=0;i<4;i++,j++)for(k=1;k<3;k++); printf("*");程序段的输出结果是A)******** B)**** C)** D)*9) 有以下程序#iinclude <stdio.h>main(){ int i,j;for(i=3; i>=1; i--){ for (j=1;j<=2;j++) printf(“%d”,i+j);printf(“\n”);}}程序的运行结果是()A) 2 3 4 B) 4 3 2 C) 2 3 D) 4 53 4 5 5 4 3 3 4 3 44 5 2 3 答案:D 10)有以下程序main(){int i,j;for(i=1;i<4;i++){for(j=i;j<4;j++) printf(“%d*%d=%d “,i,j,i*j);printf(“\n”);}}程序运行后的输出结果是A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=32*1=2 2*2=4 2*2=4 2*3=63*1=3 3*3=9C) 1*1=1 D) 1*1=11*2=2 2*2=4 2*1=2 2*2=41*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=911) 有以下程序#include<stdio.h>main(){int i,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++) m=m%j;printf("%d\n",m);}程序的运行结果是A)0 B)1 C)2 D)312) 有以下程序#include <stdio.h>main(){ int i=5;do{ if (i%3= =1)if (i%5= =2){printf(“*%d”,i); break; }i++;}while(i!=0);printf(“\n”);}程序的运行结果是A)*7 B)*3*5 C) *5 D)*2*6 答案:A13) 有以下程序#include <stdio.h>main(){ int c=0,k;for(k=1;k<3;k++)switch(k){ default:c+=k;case 2:c++;break;case 4:c+=2;break;}printf("%d\n",c);}程序运行后的输出结果是A)3 B)5 C)7 D)914) 设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是A)n=0;while((ch=getchar())!='\n')n++;B)n=0;while(getchar()!='\n')n++;C)for(n=0;getchar()!='\n';n++);D)n=0;for(ch=getchar();ch!='\n';n++);15)有以下程序#includemain(){int a=1,b=2;while(a<6){b+=a;a+=2;b%二10;}printf(”%d,%d\n”,a,b);}程序运行后的输出结果是A)5,11 B)7,1 C)7,11 D)6,116) 要求通过while循环不断读入字符,当读入字母N时结束循环。
程序设计基础_c语言_科学出版社_第五章指针_教材习题答案详解
程序设计基础,(科学出版社)。
c语言第五章指针,教材答案解析.1.0#include<stdio.h>#include<string.h>void main(){ char str[101]; //存放字符串int i;//字符串数组的下标int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("输入一个字符串(最多100个字符),按Enter键结束:");gets(str);//此处不能用scanf("%s",str);,scanf在接受字符串时,在空格处会结束字符串输入,这样空格后的字符就不会进入程序i=0;while(str[i]!='\0') //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=str[i] && str[i]<='Z'){ num_large++;}else{ if('a'<=str[i] && str[i]<='z'){ num_small++;}else{ if('0'<=str[i] && str[i]<='9'){ num_digit++;}else{ if(' '==str[i]){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成i++;}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组char str[101]存放字符串,这样我们只有输入100个字符的时候,才能充分有效的使用char str[101]使用的空间,但实际情况是有许多情况下我们输入的字符串不正好是100个字符,当输入的字符个数小于100个时,则字符数组有多余的空间,浪费!当输入的字符个数大于100个时,则字符数组空间又不够存放,不行!所以数组大小只有在运行时才能定义,也就是动态定义*///此处注意我的程序说明的两种方式#include<stdio.h>#include<string.h>#include<stdlib.h>void main(){ char *str; //定义char型指针int i;//字符串数组的下标int charnum;//字符的个数int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("请输入你将输入的字符串的字符个数:");scanf("%d",&charnum);str=(char *)malloc(sizeof(char)*(charnum+1));//思索sizeof(char)*(charnum+1)为什么是这样的if(str==NULL){ printf("申请内存识别,程序无法执行,只好退出!");}else{ printf("输入一个字符串,按Enter键结束:");//注意此处没有(最多100个字符)提示了gets(str);//如果此处只用一个gets(str)会是怎样效果,我们可讨论gets(str);for(i=0;*(str+i)!='\0';i++) //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=*(str+i) && *(str+i)<='Z'){ num_large++;}else{ if('a'<=*(str+i) && *(str+i)<='z'){ num_small++;}else{ if('0'<=*(str+i) && *(str+i)<='9'){ num_digit++;}else{ if(' '==*(str+i)){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}if(str!=NULL){ free(str);}}2题#include<stdio.h>void main(){ int i,j,k,*p1,*p2,*p3;int temp;printf("输入三个数据(用逗号分隔):");scanf("%d,%d,%d",&i,&j,&k);p1=&i;p2=&j;p3=&k;temp=*p1;*p1=*p2;*p2=*p3;*p3=temp;printf("i=%d,j=%d,k=%d\n",i,j,k);printf("\n");}3题#include<stdio.h>#include<string.h>#define N 10#define M 3void main(){ char str[M][N]={"abcdef","123456789","123456"};char *ss;int i,maxrow,maxlen,curlen;maxlen=-1;maxrow=-1;for(i=0;i<M;i++){ ss=str[i];curlen=strlen(ss);if(maxlen<curlen){ maxlen=curlen;maxrow=i;}}ss=str[maxrow];printf("最大字符串是:%s,行号是:%d",ss,maxrow);printf("\n");}4题#include<stdio.h>#include<string.h>void main(){ char str[]={"asd asasdfg asd as zx67 asd mklo"};char substr1[]={"as"};//根据题目定义的长度为2,即2个字符的字符数组char substr2[]={"as"};//准备存放从str字符串数组中取2个字符int i,j,num=0,slen;int subchars; //定义子字符串的字符个数slen=strlen(str);//计算字符串的长度,即字符个数subchars=strlen(substr1);//计算子字符串的长度,本题目明知是2,但这样写是为了便于程序的通用,for(i=0;i<=slen-subchars;i++) //逐个字符开始,但直到倒数第slen-subchars开始{ for(j=0;j<subchars;j++){ substr2[j]=str[i+j];//从第i个字符开始,取subchars个字符}substr2[subchars]='\0'; //最后增加'\0'是为形成字符串数组if(strcmp(substr1,substr2)==0){ num++;}}printf("%s字符串中共有%d个%s子字符串。
c语言选择程序设计(第五章)习题答案
}*/
//*****采用switch语句编写*****//
void main()
{
long i;
float bonus;
scanf("%ld",&i);
int g=i/100000;
switch(g)
else if(i<=1000000)
bonus=(i-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-600000)*0.015+bonus6;
else
bonus=(i-1000000)*0.01+400000*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-1000000)*0.01+bonus10;
bonus=(i-200000)*0.05+100000*0.075+100000*0.1; //bonus=(i-200000)*0.05+bonus2;
else if(i<=600000)
bonus=(i-400000)*0.03+200000*0.05+100000*0.075+100000*0.1; //bonus=(i-400000)*0.03+bonus4;
case 9:
bonus=(i-600000)*0.015+200000*0.03+200000*0.05+100000*0.075+100000*0.1;//bonus=(i-600000)*0.015+bonus6;
C程序设计(第四版)谭浩强第5章习题答案
5.2#include<stdio.h>#include<math.h>int main(){int sign=1,i=0;double pi=0.0,n=1.0,term=1.0; while(fabs(term)>=1e-6){pi=pi+term;n=n+2;sign=-sign;term=sign/n;i++;}pi=pi*4;printf("i=%d\npi=%10.8f\n",i,pi); return 0;}5.2#include<stdio.h>#include<math.h>int main(){int sign=1,i=0;double pi=0.0,n=1.0,term=1.0; while(fabs(term)>=1e-8){pi=pi+term;n=n+2;sign=-sign;term=sign/n;i++;}pi=pi*4;printf("i=%d\npi=%10.8f\n",i,pi); return 0;}5.3#include<stdio.h>int main(){int m,n,t,q,r;printf("输入两个正整数:"); scanf("%d,%d",&m,&n);if(m<n){ t=m;m=n;n=t;}q=m*n;while(n!=0){ r=m%n;m=n;n=r;}printf("最大公约数:%d\n",m); printf("最小公倍数:%d\n",q/m); yreturn 0;}5.4#include<stdio.h>int main(){int letter=0,space=0,digit=0,other=0;char c;printf("输入一行字符:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letter++;else if(c==' ')space++;else if(c>='0'&&c<='9')digit++;elseother++;}printf("英文字母个数:%d\n空格个数:%d\n 数字个数:%d\n其他:%d\n",letter,space,digit,other);return 0;}5.5#include<stdio.h>int main(){int n,i,a,t=0,s=0;printf("input a,n=");scanf("%d,%d",&a,&n);for(i=1;i<=n;i++){t=t+a;s=s+t;a=10*a;}printf("a+aa+aaa+……+aa……a=%d\n",s); return 0;}5.6#include<stdio.h>int main(){double n,t=1,s=0;for(n=1;n<=20;n++){t=t*n;s=s+t;}printf("结果为:%25.15e",s); return 0;}5.7#include<stdio.h>int main(){float s3=0,k;int s1=0,s2=0;for(k=1;k<=100;k++){s1=s1+k;}for(k=1;k<=50;k++){s2=s2+k*k;}for(k=1;k<=10;k++){s3=1/k+s3;}printf("%d\n%d\n%15.6f\n%15.6f\n",s1,s2,s3, s1+s2+s3);return 0;}5.8#include<stdio.h>int main(){int a,b,s,g;for(a=100;a<=999;a++){b=a/100;s=(a-b*100)/10;g=a-b*100-s*10;if(a==b*b*b+s*s*s+g*g*g)printf("%d\n",a);}printf("\n");return 0;}5.9#include<stdio.h>int main(){ int m,s,i;for(m=2;m<1000;m++){ s=0;for(i=1;i<m;i++)if((m%i)==0)s=s+i;if(s==m){ printf("%d its factors are",m);for(i=1;i<m;i++)if(m%i==0) printf("%d ",i);printf("\n");}}return 0;}5.10#include<stdio.h>int main(){float a=2,b=1,t,s=0;int i;for(i=1;i<=20;i++){ s=s+a/b;t=a;a=a+b;b=t;}printf("sum=%15.12f\n",s);return 0;}5.11#include<stdio.h>int main(){int i;float s=0,l=100,h=l/2;for(i=1;i<=10;i++){s=s+2*h;h=h/2;}printf("共经过:%f\n第10次反弹:%f\n",s,h);return 0;}12.#include<stdio.h>int main(){int i,a=1;for(i=9;i>0;i--)a=2*a+2;printf("%d\n",a);return 0;}#include<stdio.h>int main(){int i,j,k;for(i=0;i<=3;i++){ for(j=0;j<3-i;j++)printf(" ");for(k=0;k<=2*i;k++)printf("*");printf("\n");}for(i=0;i<=2;i++){ for(j=0;j<=i;j++)printf(" ");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}return 0;}#include <stdio.h>int main(){char i,j,k;for(i='x';i<='z';i++)for(j='x';j<='z';j++)if(i!=j)for(k='x';k<='z';k++)if(i!=k&&j!=k)if(i!='x'&&k!='x'&&k!='z')printf("A-%c\nB-%c\nC-%c\n"<i,j,k); return 0;}。
C语言程序设计教程 第五章 课后习题参考答案
C语言程序设计教程第五章课后习题参考答案一、选择题1. B2. A3. C4. B5. D二、填空题1. while2. binary3. 164. 35. continue6. global三、判断题1. 错误2. 正确3. 错误4. 错误5. 正确四、编程题1.```c#include<stdio.h>int main() {int num;printf("请输入一个整数:"); scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数\n", num); } else {printf("%d是奇数\n", num); }return 0;}```2.```c#include<stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("%d与%d的和为%d\n", num1, num2, num1 + num2); return 0;}```3.```c#include<stdio.h>int isPrime(int num) {int i;if (num <= 1)return 0;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```4.```c#include<stdio.h>int factorial(int num) {int i, result = 1;for (i = 1; i <= num; i++) {result *= i;}return result;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘为%d\n", num, factorial(num)); return 0;}```五、简答题1. C语言逻辑与运算符(&&)短路特性是什么?答:C语言逻辑与运算符(&&)具有短路特性,即在进行逻辑与运算时,如果前一个表达式的值为假(0),则后面的表达式将不会被计算,整个逻辑与表达式的值直接为假(0)。
c语言程序设计第五版课后答案谭浩强第五章课后答案
c语⾔程序设计第五版课后答案谭浩强第五章课后答案c语⾔程序设计第五版课后答案谭浩强1.请画出例5.6中给出的3个程序段的流程图流程图1:流程图2:流程图3:2.请补充例5. 7程序,分别统计当“fabs(t)>= le- 6”和“fabs(t)> = le- 8”时执⾏循环体的次数。
fabs(t)>= le- 6 ,⽰例代码# include <stdio.h># include <math.h>int main(){int sign = 1;double pi = 0.0, term = 1.0;int n = 0;while (fabs(term) >= 1e-6){n++;term = 1.0 / (2 * n - 1)*sign;pi += term;sign = -sign;}pi *= 4;printf("pi的近似值是%lf\n", pi);printf("循环体循环了%d次\n", n);return 0;}运⾏截图:fabs(t)> = le- 8,⽰例代码# include <stdio.h># include <math.h>int main(){int sign = 1;double pi = 0.0, term = 1.0;int n = 0;while (fabs(term) >= 1e-8){n++;term = 1.0 / (2 * n - 1)*sign;pi += term;sign = -sign;}pi *= 4;printf("pi的近似值是%lf\n", pi);printf("循环体循环了%d次\n", n);return 0;}运⾏截图:3.输⼈两个正整数m和n,求其最⼤公约数和最⼩公倍数答案解析:该题题⽬直接使⽤“辗转相除法”来求解最⼤公约数,以除数和余数反复做除法运算,当余数为 0 时,就取得当前算式除数为最⼤公约数。
C++程序设计基础课后答案--第五章教学提纲
C++程序设计基础课后答案--第五章5.1 阅读下列程序,写出执行结果1.#include < iostream.h >struct data{ int n ;float score ;} ;void main(){ data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ;cout << (p++)->n << endl ;cout << (p++)->n << endl ;cout << p->n++ << endl ;cout << (*p).n++ << endl ;}2.#include < iostream.h >struct employee{ char name[ 20 ] ;char sex ;} ;void fun( employee *p ){ if( (*p).sex == 'm' )cout << (*p).name << endl ;}void main(){ employee emp[5] = { "Liming", 'm', "Wangxiaoping", 'f', "Luwei", 'm' } ;int i ;for( i=0; i<3; i++ )fun( emp+i ) ;}3. #include < iostream.h >struct node{ char * s ;node * q ;} ;void main(){ node a[ ] = { { "Mary", a+1 }, { "Jack", a+2 }, { "Jim", a } } ;node *p = a ;cout << p->s << endl ;cout << p->q->s << endl ;cout << p->q->q->s << endl ;cout << p->q->q->q->s << endl ;}4.#include < iostream.h >class A{ public :int f1();int f2();void setx( int m ) { x = m ; cout << x << endl; }void sety( int n ) { y = n ; cout << y << endl; }int getx() { return x ; }int gety() { return y ; }private :int x, y ;};int A::f1() { return x + y ; }int A::f2() { return x - y ; }void main(){ A a ;a.setx( 10 ) ; a.sety( 5 ) ;cout << a.getx() << '\t' << a.gety() << endl ;cout << a.f1() << '\t' << a.f2() << endl ;}5. #include < iostream.h >class T{ public :T( int x, int y ){ a = x ; b = y ;cout << "调用构造函数1." << endl ;cout << a << '\t' << b << endl ;}T( T &d ){ cout << "调用构造函数2." << endl ;cout << d.a << '\t' << d.b << endl ;}~T() { cout << "调用析构函数."<<endl; }int add( int x, int y = 10 ) { return x + y ; } private :int a, b ;};void main(){ T d1( 4, 8 ) ;T d2( d1 ) ;cout << d2.add( 10 ) << endl ;}6. #include < iostream.h >class T{ public:T(int x){ a=x; b+=x;};static void display(T c){ cout<<"a="<<c.a<<'\t'<<"b="<<c.b<<endl; } private:int a;static int b;} ;int T::b=5;void main(){ T A(3),B(5);T::display(A);T::display(B);}7. #include < iostream.h >#include < math.h >class point{ public :point( float x, float y ){ a = x; b = y;? cout << "点( " << a << ", " << b << " )" ; } friend double d( point &A , point &B ){ return sqrt((A.a-B.a) * (A.a-B.a) + (A.b-B.b) * (A.b-B.b)) ; } private:double a, b ;};void main(){ point p1( 2, 3 ) ;cout << " 到 " ;point p2( 4, 5 ) ;cout << "的距离是:" << d( p1,p2 ) << endl ;}8. #include < iostream.h >class A{ public :A() { a = 5 ; }void printa() { cout << "A:a = " << a << endl ; } private :int a ;friend class B ;} ;class B{ public:void display1( A t ){ t.a ++ ; cout << "display1:a = " << t.a << endl ; } ;void display2( A t ){ t.a -- ; cout << "display2:a = " << t.a << endl ; } ;};void main(){ A obj1 ;B obj2 ;obj1.printa() ;obj2.display1( obj1 ) ;obj2.display2( obj1 ) ;obj1.printa() ;}5.2 思考题1.结构和类有什么区别?如果把程序中定义结构的关键字struct直接改成class,会有什么问题?用教材上的一个例程试一试,想一想做什么修改能使程序正确运行?2.分析以下说明结构的语句struct node{ int data;node error; //错误node * ok; //正确};error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?3.有说明class A{ int a;double x;public:funMember();};A a1, a2, a3 ;编译器为对象a1,a2,a3开辟了什么内存空间?它们有各自的funMember函数的副本吗?C++通过什么机制调用类的成员函数?4.C++提供了默认版本的构造函数,为什么还需要用户自定义构造函数?编写一个验证程序,说明自定义构造函数的必要性。
程序设计基础_c语言_科学出版社_第五章指针_教材习题答案详解汇总
printf("其他字符共%d个\n",num_other);
}
/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组char str[101]存放字符串,
这样我们只有输入100个字符的时候,才能充分有效的使用char str[101]使用的空间,但实际情况是有许多
{//比较判断当前数组元素(即当前字符)是什么
if('A'<=*(str+i) && *(str+i)<='Z')
{num_large++;
}
else
{if('a'<=*(str+i) && *(str+i)<='z')
{num_small++;
}
else
{if('0'<=*(str+i) && *(str+i)<='9')
}
3题
#include<stdio.h>
#include<string.h>
#define N 10
#define M 3
void main()
{char str[M][N]={"abcdef","123456789","123456"};
char *ss;
int i,maxrow,maxlen,curlen;
printf("请输入你将输入的字符串的字符个数:");
C++程序设计(第2版)课后第五章习题解答
答案:(1)类型
(2)数量
(3)下标运算符
(4)下标
(5)索引
(6)常变量
5.1.2 C/C++中的多维数组用的是一个的定义,即多维数组的基本定义是成的数组,三维数组的元素是 (3) 。
答案:(1)嵌套
(2)以数组作为元素
(3)二维数组
5.1.3 计算机内存是一维编址的,多维数组在内存中的存储 (1) ,C/C++多维在内存中
第五章 数组与指针习题 1
第五章 数组与指针习题填充题
5.1.1 数组定义时有三个要素:数组名,数组元素的和数组元素的。按元
素在数组中的位置进行访问,是通过 (3) 进行的,称为 (4) 或 (5) 访问。
为了使数组声明中数组的大小修改更为方便,总是将 (6) 用于声明数组长度。
5.1.4 的大小是确定的,所谓“不检查数组边界”只是不检查
的边界,而 (3) 的边界是在控制之中的,所以多维数组名作为函数的参数只可以
(4) 缺省。
答案:(1)较低各维的
(2)最高维(第一维)
(3)较低各维
(4)最高维
5.1.5 指针变量保存了另一变量的值,不可以任意给指针变量赋一个地址值,只能赋
给它 (2) 和 (3) 的地址。使用变量名来访问变量,是按 (4) 来直接存取变
量称为 (5) 方式;而借助指针变量取得另一变量的地址,访问该变量称为 (6) 方式。
答案:(1)地址
(2)NULL
的排列是 (2) 方式,即越 (3) 的下标变化 (4) 。设数组a有m行n列,每
个元素占内存u个字节,则a[i][j]的首地址为 (5) + (6) 。
c语言第五章选择结构程序设计(习题册答案)
c语言第五章选择结构程序设计(习题册答案)第五章选择结构程序设计基础练习(A)一、填空题1、关系表达式的运算结果是逻辑值。
C语言没有逻辑型数据,以1代表“真”,以0代表“假”。
2、逻辑运算符!是单目运算符,其结合性是由右结合性。
3、C语言提供的三种逻辑运算符是&&、|| 、!。
其中优先级最高的为!,优先级最低的为| | 。
4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。
系统最终以0 和非0 来判定它们属于“真”或“假”。
5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。
6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式x<z||y<="">7、条件“2<x<3或x<-10”的c语言表达式是x<-10||x>2&&x<3。
</x<3或x<-10”的c语言表达式是x<-10||x>8、判断char型变量ch是否为大写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。
9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。
10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。
11、已知A=,B=2,C=,表达式A>B&&C>A||A<b&&!c>B的值是0。
</b&&!c>12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。
13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。
14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一、选择题1. 下列叙述错误的是____A_____。
A. 主函数中定义的变量在整个程序中都是有效的B. 复合语句中定义的变量只在该复合语句中有效C. 其它函数中定义的变量在主函数中不能使用D. 形式参数是局部变量2. 若函数的形参为一维数组,则下列说法中错误的是____B、才_____。
A. 形参数组可以不指定大小B. 函数调用时对应的实参只能是数组名C. 函数调用时,系统会为形参数组分配存储单元D. 函数中对形参的修改将会影响对应的实参值3. 若函数的类型和return语句中的表达式的类型不一致,则____D_____。
A. 编译时出错B. 运行时出现不确定结果C. 不会出错,且返回值的类型以return语句中表达式的类型为准D. 不会出错,且返回值的类型以函数类型为准4. 下面的函数定义正确的是_____D____。
A. float f(float x;float y)B. float f(float x,y){return x*y;} {return x*y;}C. float f(x,y)D. float f( int x, int y){int x,y ; return x*y;} {return x*y;}5. 下面函数头的定义格式正确的是____C_____。
A. void sort(int a[n],int n)B. void sort(int a[ ][ ],int n)C. void sort(int a[ ],int n)D. void sort(int a[ ],n)6. 下面4个程序中输出结果是125的有____C_D____。
(1). #include "iostream.h"void cube(int x){ x=x*x*x; }void main(){int x=5;cube(x);cout<<x;}(3). #include "iostream.h"int cube(int x){ x=x*x*x; return(x); }void main(){int x=cube(5);cout<<x;(4). #include "iostream.h"int x=5;void cube(){ x=x*x*x;}void main(){ cube(); cout<<x; } (2). #include "iostream.h"void cube(int &x){ x=x*x*x; }void main(){int x=5; cube(x);cout<<x;}错误!未找到引用源。
·2·}A. 1B. 2C. 3D. 47. 设函数m()的说明形式为void m(int,int *); 利用函数m()对数5和整数j 作函数m()定义的计算,正确的调用形式为_____C_____。
A. m(&5,&j)B. m(5,j)C. m(5,&j)D. m(&5,j)8. 设函数的说明为: void fun(int a[],int m); ,若有定义:int a[10],n,x; 则下面调用该函数正确的是____A_____。
A. fun( a, n);B. x=fun( a, n);C. fun( a[10], 10);D. x=fun( a[], n); 9. 下面函数说明正确的是____C_____。
A. void f1(int a=3, int b, int c);B. void f2 int a, int b=3, int c);C. void f3(int a, int b, int c=3);D. void f4(int a, int b, int 3);10. 有两个函数分别为: int f(int);和int f(int,int =100);,则下面说法正确的是_____B_____。
A. 不能在同一个程序中定义B. 可以在同一个程序中定义,但不可以重载C. 可以在同一个程序中定义并可重载D. 以上说法均错误11. 以下几种函数模板的定义正确的是____A_____。
A. template <class T>T fun1(T a,int b) {…… }C. template <class T>void fun1(int a,int b) {T i; …… }12. 下面程序的输出结果是____B_____。
#include "iostream.h" int m=10;void f(int m,int &n) { m=m+2; n=n+2;} void main() { int n=5; f(m,n);cout<<"m="<<m<<" n="<<n<<endl;}A. m=10 n=5B. m=10 n=7C. m=12 n=7D. m=12 n=5二、阅读程序,写出运行结果1. yes 3 not 42. 43. 12 25 16 9 2 14. 212345. m=5n=3B. template <class T1,T2 >void fun1(T1 a,T1 b,T2 c){…… }D. template <class T1,class T2 >T2 fun1(T1 a,T1 b){ …… }错误!未找到引用源。
·3·6. 911三、程序填空1. 该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。
#include "iostream.h"#include "math.h"float f(int x){float y;y=x*x-5*x+sin(x);______return y _______;}void main(){int x; float max;____max=f(1)___;for(x=2;x<=10;x++)___if(f(x)>max)max=f(x)__ ;cout<<max<<endl;}2. 函数backmove()是把字符指针x所指的字符串平移m个字符,即将最后m个字符移到串首。
如“abcdefghij”,平移3个字符,成“hijabcdefg”。
#include "stdio.h"#include "string.h"void backmove(char *x,int m){int i,j,n;char w;n=strlen(x);for(j=0;j<m;j++){ w=_____*(x+n-1)_____;for(i=0;i<n-1;i++) *(x+n-1-i)=_____*(x+n-2-i)_____;____*x____=w;}}void main(){char s[20];gets(s);______backmove(s,3)______; //假设平移3个字符puts(s);}3. 函数index()为查找字符串sub是否是字符串st的子串。
若是,返回sub在st中首次出现的下标,否则返回-1。
字符串sub和st非空。
如sub: " cd ",st: "abcdefcd ",返回2。
#include "iostream.h"·4·错误!未找到引用源。
#include "stdio.h"void main(){char s1[80],s2[80];______ int index(char [],char []);______;gets(s1);gets(s2);if(_______index(s1,s2)________)cout<<"子串在字符串中首次出现的下标:"<<index(s1,s2);elsecout<<"找不到";}int index(char st[],char sub[]){int i,j,k;for(i=0;st[i]!='\0';i++){for(j=i,k=0;sub[k]!= '\0'&&st[j]==sub[k] ;____k++,j++_____);if(sub[k]== '\0')_____return(i)______;}return 0;}4. 函数root为用二分法求方程f(x)=0在[x1,x2]的实根,精度为eps。
二分法求根的基本思想为f(x)在区间[a,b]上连续,f(a) 与f(b)异号,区间中点c=(a+b)/2 的f(c) 符号和f(a) 符号确定c 代替a 或b,使根所在区间每次减半,直到|a- b|<eps或|f(c)|<eps,c 即为所求的根,其中eps为精度。
下面程序为求方程x3-5x2+16x-80=0在[1,7]区间的实根,精度取10-6。
#include "math.h"#include "iostream.h"double root(double x1, double x2, double eps=1e-6){_______double f(double x);_______ ;double x,y,y1;y1=f(x1);do{x=0.5*(x1+x2);y=f(x);if(y1*y>0.0)_____x1=x_____;else if (y1*y<0.0) _____x2=x_____;}while(fabs(y)>=eps___&&___fabs(x2-x1)>=eps);return(x);}double f(double x){return x*x*x-5*x*x+16*x-80;}void main()错误!未找到引用源。
·5·{cout<<_____root(1,7)_____<<endl;}5.随机生成10个1~100之间的数放在一维数组中,求其平均值及最大的元素值。