c程序典型习题及答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。解:各数据在内存中的存储形式如下表所示:变量的类型25-232769int型00…0000110018位111111111111111015100…001(溢出)14long型00…0000110012411…11103100…0100…0011614short型100…0000110018111111111111111015100…001(溢出)14signedchar(8位)1000110011111111000000001(溢出)unsignedint型00…000011001811…11015100…00114unsignedlong型00…0000110012411…1103100…0100…0011614unsignedshort型00…000011001811…11015100…0018unsignedchar型000110011111111000000001其中int和short类型,其取值范围是-32768~32767。32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。同理,若将long赋给int,则截取低16位。3.9求下面算术表达式的值。x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4..7(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5解:(1)2.5(2)3.53.10写出程序运行的结果。main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(“%d,%d,%d,%d”,i,j,m,n);}解:运行结果为:9,11,9,103.12出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。(1)a+=a(2)a-=2(3)a*=2+3(4)a/=a+a(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a解:(1)24(2)10(3)60(4)0(5)0(6)04.5请写出下面程序的输出结果:main(){inta=5,b=7;floatx=67.8564,y=-789.124;charc=’A’;longn=1234567;unsignedu=65535;printf(“%d%d\n”,a,b);printf(“%3d%3d\n”,a,b);printf(“%f,%f\n”,x,y);printf(“%-10f,%-10f\n”,x,y);printf(“%8.2f,%8.2f,%4f,%4f,%3f,%3f\n”,x,y,x,y,x,y);printf(“%e,%10.2e\n”,x,y);printf(“%c,%d,%o,%x\n”,c,c,c,c);printf(“%ld,%lo,%x\n”,n,n,n);printf(“%u,%o,%x,%d\n”,u,u,u,u);printf(“%s,%5.3s\n”,”COMPUTER”,”COMPUTER”);}运行结果:5□7□□5□□767.856400,-789.12402367.856400□,-789.124023□□□67.86,□□-789.12,67.8564,-789.1240,67.856400,-789.1240236.785640e+01,□□-7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTER,□□COM可以发现,输出数据中若有负号、e和小数点,这些字符也占位。4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入?#includestdio.hvoidmain(){inta,b;floatx,y;charc1,c2;scanf(“a=%db=%d”,&a,&b);scanf(“%f%e”,&x,&y);scanf(“%c%c”,&c1,&c2);}解:a=3□b=7□8.5□71.82□A□a5.5有一函数:解:程序如下main(){intx,y;printf(“输入x:”);scanf(“%d”,&x);if(x1){y=x;printf(“x=%d3d,y=x=%d\n”,x,y);}elseif(x10){y=2*x-1;printf(“x=%3d,y=2*x-1=%d\n”,x,y);}else{y=3*x-11;printf(“x=%3d,y=3*x-11=%d\n”,x,y);}}运行结果:输入x:4↙x=4,y=2*x-1=7输入x:-1↙x=-1,y=x=-1输入x:20↙x=20,y=3*x-11=495.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。解:程序如下#includestdio.hvoidmain(){floatscore;chargrade;printf(请输入学生成绩:);scanf(%f,&score);while(score100||score0){printf(\n输入有误,请重输);scanf(%f,&score);}switch((int)(score/10)){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;case5:case4:case3:case2:case1:case0:grade='E';}printf(\n成绩是%5.1f,相应的等级是%c。\n,score,grade);}5.7给定一个不多于5位的正整数,要求:①求它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。例如原数为321,应输出123。解:main(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/*分别代表个位,十位,百位,千位,万位和位数*/printf(“请输入一个整数(0~99999):”);scanf(“%ld”,&num);if(num9999)place=5;elseif(num999)place=4;elseif(num99)place=3;elseif(num9)place=2;elseplace=1;printf(“place=%d\n”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);printf(“\n反序数字为:”);printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);break;case4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);printf(“\n反序数字为:”);printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand);break;case3:printf(“%d,%d,%d”,hundred,ten,indiv);printf(“\n反序数字为:”);printf(“%d%d%d\n”,indiv,ten,hundred);break;case2:printf(“%d,%d”,ten,indiv);printf(“\n反序数字为:”);printf(“%d%d\n”,indiv,ten);break;case1:printf(“%d”,indiv);printf(“\n反序数字为:”);printf(“%d\n”,indiv);break;}}运行结果:请输入一个整数(0~99999):98765↙位数=5每位数字为:9,8,7,6,5反序数字为:567896.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。解:#includestdio.hmain(){charc;intletter=0,space=0,digit=0,other=0;printf(“请输入一行字符:\n”);while((c=getchar())!=’\n’){if(c=’a’&&c=’z’||c=’A’&&c=’Z’)letter++;elseif(c==’’)space++;elseif(c=’0’&&c=’9’)digit++;elseother++;}printf(“字母数=%d,空格数=%d,数字数=%d,其它字符数=%d\n”,letter,space,digit,other);}运行情况:请输入一行字符:Myteacher’saddressis“#123BeijingRoad,Shanghai”.字母数:38,空格数:6,数字数:3,其它字符数:66.4求∑n!(即求1+2!+…+20!)。解:main(){floats=0,t=1;intn;for(n=1;n=20;n++){t=t*n;s=s+t;}printf(“1!+2!+…+20!=%e\n”,s);}运行结果:1!+2!+…+20!=2.56133e+18注意:s不能定义为int型,因为int型数据的范围是-32768~32767;也不能定义为long型,因为long型数据的范围为-21亿~21亿,无法容纳求得的结果。6.11用迭代法求x=a。求平方根的迭代公式为xn+1=12(nx)+nxa要求前后两次求出的x的差的绝对值小于10-5。解:用迭代法求平方根的算法如下:设定一个x的初值x0;用上述公式求出x的下一个值x1;再将x1代入上述公式,求出x的下一个值x2;如此继续下去,直到前后两次求出的x值(nx和xn+1)满足以下关系:|xn+1―nx|10-5为了便于程序处理,今只用变量x0和x1,先令x的初值x0=a/2(也可以是另外的值),求出x1;如果此时|xn+1―nx|≥10-5,则使x1→x0,然后用这个新的x0求出下一个x1;如此反复,直到|xn+1―nx|10-5为止。程序如下:#includemath.hmain(){floata,x0,x1;printf(“Enterapositivenumber:”);scanf(“%f”,&a);/*输入a的值*/x0=a/2;x1=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)=1e-5);printf(“Thesquarerootof%5.2fis%8.5f\n”,a,x1);}运行结果:Enterapositivenumber:2↙Thesquarerootof2.00is1.414216.12用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。解:牛顿迭代法又称牛顿切线法,它

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功