C语言第三章练习(答案)
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
C语言第三章练习 班级 学号 姓名 . 一、根据题目要求填空:(横线上填一行程序,方格中填一段程序) 1、 若整数a是b的因子,则交换a,b if( b%a == 0 ) 注意这里必须为双等于号 {int c;c=a;a=b;b=c;} 注意此题并未给出中间变量.需要自己定义 2、 若浮点数f绝对值大于5,则a=4,否则a=f a= f*f>25 ? 4 : f ; 送分题,对绝对值范围可多种解法但必须使用条件运算符 3、 若平面坐标系中点P(x,y)在坐标轴上但不在原点上,则输出OK否则输出ERR printf( x *y ==0 && x+y!=0 ? "OK":"ERR"); 或者 printf( "%s", x *y ==0 && x+y!=0 ? "OK":"ERR"); 4、 若平面坐标系中点P(x,y)落在以原点为圆心半径为1的园内,则将计数器c增加1 if( x*x+y*y<=1 ) c++; 5、 将平面坐标系中x=1,x=2,x=3....和y=1,y=2,y=3...这些直线画出来,形成一个在第一象限是方格,第二象限和第四象限是直线的图.要求:输入点P(x,y)坐标,若P在直线上则变量lines加一,若P在格子交叉点上,再将变量points加一:(提示.做本题前先翻阅课本最后的数学函数表) scanf("%f%f",&x,&y); if( (floor(x)==x || floor(y)==y ) && ( x>0 || y>0) ) lines++; if( (floor(x)==x && floor(y)==y ) && ( x>0 || y>0) ) points++; 注意这里也可以使用类型转换运算 ((int)x==x || (int)y==y) && ... 6、 输入三个整数,判断这三个整数能否构成三角形: scanf("%f%f%f",&x,&y,&z); if( (x>0 && y>0 && z>0) && (x+y>z && x+z>y && y+z> x) ) printf("OK"); else 注意:x,y,z为正数条件不可缺少 printf("ERR"); 7、 若ab两个整数(a>b)通过四则运算可以得出24,则输出这个表达式 if( a+b==24 ) printf( "%d + %d =24",a,b ); if( a-b==24 ) printf( "%d - %d =24",a,b ); if(a*b==24 ) printf( "%d * %d =24",a,b ); if( a/b==24 ) 评论:这题就是笨功夫 printf( "%d / %d =24",a,b ); 8、 根据输入的字符判断是否为元音字母.若为元音字母则输出这个字符的大写形式否则输出这个字符的小写.用两种方法编写程序. ①使用switch(提示:输入字符并不确定是大写还是小写) char ch=getchar(); swtich(ch) { case 'A': case 'a': printf("A"); break; case 'E': case 'e': printf("E");break; case 'I': case 'i': printf("I");break; case 'O': case 'o': printf("O");break; case 'U': case 'u': printf("U");break; default: if(ch>='A' && ch<='Z') ch+=32; putchar(ch); } ②使用if语句(提示:灵活使用tolower和toupper函数) char ch=getchar();(评论:这里先赋值再比较,节省了后面每个都需要toupper的繁琐) if( (ch=toupper(ch))=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ) printf( "%c",ch ); else printf( "%c",tolower(ch) ); 二、编写程序: 1、 在平面坐标系中有直线Ax+By+C=0,和平面上点p1(x1,y1)和P2(x2,y2)。输出最靠近直线的点的坐标。 #include "math.h" void main(){ float A,B,C,x1,x2,y1,y2,d1,d2; scanf("%f%f%f%f%f%f%f",&A,&B,&C,&x1,&y1,&x2,&y2); d1=fabs(A*x1+B*y1+C)/sqrt(A*A+B*B); d2=fabs(A*x2+B*y2+C)/sqrt(A*A+B*B); printf("(%f,%f)\n",d1}
2、 输入年月日,输出这天是当年第几天。(当心闰年)(本参考答案使用了switch的直行语法现象)
void main(){
int y,m,d,t=0;
scanf("%d%d%d",&y,&m,&d); switch(m){ case 12: t+=30; case 11: case 10: case 9:
t+=31; t+=30; t+=31;
case 7: t+=30; case 6: t+=31; case 5: t+=30; case 4: t+=31; case 3: t+=28;
if(y%400==0 || (y%4==0&&y%100!=0) t++;
case 2: t+=31; case 1: t+=d;}
case 8: t+=31; printf("%d",t);}
本文来源:https://www.wddqw.com/doc/a6ba10271b37f111f18583d049649b6649d70925.html