C基础第三天

1.输入三角形的边长,求面积

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:

S=√p(p-a)(p-b)(p-c) 开平方:sqrt( )

而公式里的p为半周长(周长的一半): p=(a+b+c)/2

#include <stdio.h>
#include <math.h>
int main(int argc, const char *argv[])
{
	float a,b,c,p,s;
	printf("请输入三角形的三边边长:\n");
	scanf("%f %f %f",&a,&b,&c);
	printf("a=%.2f,b=%.2f,c=%.2f\n",a,b,c);
	if(a+b>c && b+c>a && a+c>b){
		p=(a+b+c)/2;
		printf("p=%.2f\n",p);
		s=p*(p-a)*(p-b)*(p-c);
		printf("s=%.2f\n",s);
		float S=sqrt(s);
		printf("三角形的面积为:%.2f\n",S);
	}else{
	printf("当前数字无法构成三角形!\n");
	}
	
	return 0;
}

有其他文件的引用,运行时输入 gcc 1.c -lm

输出的时候保留两位小数: %.2f  但计算的时候要精确计算

运行结果:

2.计算车费。3公里以内(包含3公里)起步价13元。超出3公里,每公里2.3元。

#include <stdio.h>
int main(int argc, const char *argv[])
{
	float a,pay;
	printf("请输入公里数:\n");
	scanf("%f",&a);
	if(a<=3){
		pay=13;
	}else{
	pay=13+(a-3)*2.3;
	}
	printf("%f公里需要花费%f元\n",a,pay);
	return 0;
}

scanf获取公里数,三公里以内的单独处理

运行结果:

3.执行语句" k = 11 >>1"后,变量k的当前值:

k:0000 1011

   00000101 =>5

总结:右移:除以2^n(n是位移的位数)

           左移:乘以2^n(n是位移的位数)

11/2^1=5(int类型向下取整)

4.有一个变量unsigned char data;

1)请写出将data第6位置1的表达式:

data = data | ( 1 << 6 )

data = data | ( 0x1 << 6 )

| :只要有一个为1,就为1

将 0000 0001 左移6位得到 0010 0000 ,用来跟 data 或,无论是0还是1,都为1

2)请写出将data第6位清0的表达式:

data = data & (~( 1<<6 ))

data = data & (~( 0x1<<6 ))

&:只要有一个为0,就为0

将0000 0001 左移6位得到 0010 0000 ,对 0010 0000 取反得到 1101 1111

用1101 1111 跟 data 与,只要有一个是0,结果就为0

3)请写出将data第6位取反的表达式:

data = data ^ ( 1 << 6 )

data = data ^ ( 0x1 << 6 )

^:相同为0,不同为1(常用于取反)

将0000 0001 左移6位得到 0010 0000,用1去取反

如果该位置原来是 0 , 0 ^ 1 = 1 , 如果该位置原来是 1 , 1 ^ 1 = 0

说明:最右边位为第0位,用十六进制表示

真题:

1、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(  )

  A、 6.500000           B、 6          C、 5.500000           D、 6.000000  

解析:(int)a = 5 , b / b = 1 , 5 + 1 = 6 , 选D

2、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 ( )  

A、 INPUT x、y、z;                B、 scanf("%d%d%d",&x,&y,&z);   

C、 scanf("%d%d%d",x,y,z);      D、 read("%d%d%d",&x,&y,&z);   

解析:int 的占位符为 %d , 输入后赋值用 scanf ( "%d", &a ),选B

3、设 int  x=1, y=1; 表达式(!x||y--)的值是( )。  

A、0  B、1  C、2  D、-1  

解析:!x=0 , y-- = 1 , 0 || 1 = 1

++y 是先自加 1,y-- 是先赋值后自减 1,所以当前还为 1,选B

4、为了避免在条件语句if―else中产生二义性,c语言规定:else子句总是与(  )配对。  

A、缩排位置相同的if  B、其之前最近的if   C、其之后最近的if   D、同一行上的if 

解析:选B

5、下面不正确的字符串常量是( ) 

A、 'abc'    B、 "12'12"      C、 "0"      D、 "  " 

解析:字符串的符号是" ",字符的符号是' ',选A

6、以下错误的if语句是( )。

 A、 if(x>y) z=x;       B、 if(x= =y) z=0;  

C、 if(x!=y) printf("%d",x) else printf("%d",y);      D、 if(x<y) { x++;y--;} 

解析:if(x= =y) z=0; 应该改为 if(x==y) z=0; 选B

7、一个C程序的执行是从(  )。 

A、本程序的main函数开始,到main函数结束 

B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C、本程序的main函数开始,到本程序文件的最后一个函数结束   

D、本程序文件的第一个函数开始,到本程序main函数结束

解析:C程序的执行总是从main函数开始,当main函数执行完毕时,程序结束。因此,本程序的main函数是执行的入口,而main函数的结束则是执行的出口,选A

8、若变量已正确定义,以下非法的表达式是( ) 

A、a/=b+c    B、a%(4.0)    C、a=1/2*(x=y=20,x*3)    D、a=b=c 

解析:C语言的语法规定,浮点类型不允许做取模运算,选B

9、以下关于运算符优先顺序的描述中正确的是( )。 

A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 

B、逻辑与运算符<关系运算符<算术运算符<赋值运算符  

C、赋值运算符<逻辑与运算符<关系运算符<算术运算符

 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 

解析:选C

10、使用语句scanf(“a=%f,b=%d”,&a,&b);输入数据时,正确的数据输入是:( ) 

A、a=2.2,b=3    B、a=2.2 b=3    C、2.2 3    D、2.2,3 

解析:%f 是浮点数,%d 是整数 ,且用 “ ,” 分隔,选A

11、表示关系12<=x<=y的C语言表达式为:( ) 

A、(12<=x)&(x<=y)   B、(12<=x)&&(x<=y)  

 C、(12<=x)|(x<=y)  D、(12<=x)||(x<=y) 

解析:是且的关系,选B

12、设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a > b)&&(n=c>d)后n的值为(  )

  A、1              B、2               C、3             D、4

解析:m = a , m = 5 , 5 > 6 ? 第一个表达式为假

        && 只要执行第一个为假就不会继续执行了,所以 n 没有变 ,选 B

13、1、a是整型变量,则执行表达式a=25/3%3后a的值为。       

解析:先计算,后赋值

25/3=8 8%3=2 ,全部为整除 ,答案:a = 2

14、若有说明和语句:int a=5,b=6,y=6;b-=a;y=a++则b和y的值分别是           。 

解析:b = b - a = 1 , y = a ++ = 5 , a ++ 当前不自增 ,这个语句完了之后再自增

答案:b = 1 , y = 5

15、x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式:           

解析:使用 或 逻辑运算

答案:( x < z ) || ( y < z )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值