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 )