1.什么是算数运算?什么是关系运算?什么是逻辑运算?
算数运算即“四则运算”,是加法、减法、乘法和除法的统称。
关系运算是将两个数值进行比较,判断其比较的结果是否符合给定的条件。
在逻辑运算中有与、或、非三种基本逻辑运算。
2.C语言中如何表示真和假?系统如何判断一个量的真和假?
0代表假,1代表真
0代表假,非0代表真
3.写出下面各逻辑表达式的值。设a=3,b=4,c=5。
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!(a>b)&&!c||1
(4)!(x=a)&&(y=b)&&0
(5)!(a+b)+c-1&&b+c/2
(1)0
(2)1
(3)1
(4)0
(5)1
4.有3个整数a,b,c,由键盘输入,输出其中最大的数。
#include<stdio.h>
void main()
{
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
max=(a>=b)?a:b;
(max>=c)?printf("max=%d\n",max):printf("max=%d\n",c);
}
5.从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数部分)。要求在输出数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。
#include<stdio.h>
#include<math.h>
void main()
{
double n,t;//t用于计算平方根
int res;
printf("请输入一个小于1000的正数:\n");
scanf("%lf",&n);
while(n<=0||n>=1000)
{
printf("输入的数据不符合规定,请重新输入数据!\n");
scanf("%lf",&n);
}
t=sqrt(n);//计算平方根
res=(int)t;//取整数部分
printf("%d\n",res);
//printf("%2.0lf\n",t);保留两位整数部分
}
6.有一个函数:
y=x(x<1);y=2x-1(1<=x<10);y=3x-11(x>=10)
写程序,输入x的值,输出y相应的值。
#include<stdio.h>
void main()
{
float x,res;
printf("请输入x的值:");
scanf("%f",&x);
if(x<1)
res=x;
else if(x>=1&&x<10)
res=2*x-1;
else
res=3*x-11;
printf("y=%f",res);
}
7.有一函数:
y=-1(x<0);y=0(x=0);y=1(x>0)
有人编写了以下两个程序,请分析它们是否能实现题目要求。不要急于上机运行程序,先分析两个程序的逻辑,画出它们的流程图,分析它们的运行情况。然后,上机运行程序,观察和分析结果。
(1)
#include<stdio.h>
int main()
{
int x,y;
printf("enter x:");
scanf("%d",&x);
y=-1;
if(x!=0)
if(x>0)
y=1;
else
y=0;
printf("x=%d,y=%d\n",x,y);
return 0;
}
(2)
#include<stdio.h>
int main()
{
int x,y;
printf("enter x:");
scanf("%d",&x);
y=0;
if(x>=0)
if(x>0) y=1;
else y=-1;
printf("x=%d,y=%d\n",x,y);
return 0;
}
两个程序都不能实现题目的要求。原因:书写不规范,else和最近的if配对导致结果错误。
8.给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。90分以上为’A’,80 ~ 89分为’B’,70 ~ 79分为’C’,60 ~ 69分为’D’,60分以下为’E’。
#include<stdio.h>
void main()
{
int grade;
scanf("%d",&grade);
if(grade>=90&&grade<=100)
printf("%c",'A');
else if(grade>=80)
printf("%c",'B');
else if(grade>=70)
printf("%c",'C');
else if(grade>=60)
printf("%c",'D');
else
printf("%c",'E');
}
9.给一个不多于5位的正整数,要求:
(1)求出他是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字。
#include<stdio.h>
void main()
{
char a[5];//用于存放每位数字
int count=0;//用于记录数字的位数
printf("请输入一个不多于5位的正整数:");
for(int i=0;i<5;i++)
{
a[i]=getchar();
if(a[i]>='0'&&a[i]<='9')
count++;
else//当输入不是数字字符时,跳出循环
break;
}
printf("数据为%d位数\n",count);
printf("分别输出每一位数字:");
for(int i=0;i<count;i++)//分别输出每一位数字
{
printf("%c ",a[i]);
}
printf("\n");
printf("逆序输出每一位数字:");
for(int i=count-1;i>=0;i--)//逆序输出每一位数字
{
printf("%c ",a[i]);
}
}
10.企业发放的奖金根据利润提成。利润I低于或等于100 000元的,奖金可提成10%;利润高于100 000元,低于200 000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7. 5%;200000<I≤400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;400000<<I≤600000元时,高于400000元的部分按3%提成;600000<1≤1000000时,高于600000元的部分按1.5%提成;I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
要求:
(1) 使用if语句编写程序。
(2) 使用switch语句编写程序。
#include<stdio.h>
void main()
{
float I,p;//p为奖金
printf("请输入当月利润I:");
scanf("%f",&I);
if(I<=10000&&I>0)
p=0.1*I;
else if(I<=200000)
p=10000+(I-100000)*0.075;
else if(I<=400000)
p=10000+7500+(I-200000)*0.05;
else if(I<=600000)
p=10000+7500+10000+(I-400000)*0.03;
else if(I<=1000000)
p=10000+7500+10000+12000+(I-600000)*0.015;
else
p=10000+7500+10000+12000+6000+(I-1000000)*0.01;
printf("应发奖金总数=%f\n",p);
}
#include<stdio.h>
void main()
{
int grade;//等级
float I,p;//p为奖金
printf("请输入当月利润I:");
scanf("%f",&I);
grade=(int)I/100000;
switch(grade)
{
case 0:
p=0.1*I;
break;
case 1:
p=10000+(I-100000)*0.075;
break;
case 2:
case 3:
p=10000+7500+(I-200000)*0.05;
break;
case 4:
case 5:
p=10000+7500+10000+(I-400000)*0.03;
break;
case 6:
case 7:
case 8:
case 9:
p=10000+7500+10000+12000+(I-600000)*0.015;
break;
default:
p=10000+7500+10000+12000+6000+(I-1000000)*0.01;
}
printf("应发奖金总数=%f\n",p);
}
11.输入4个整数,要求按由小到大的顺序输出。
#include<stdio.h>
void main()
{
int a[4],t;//t为中间变量
for(int i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<3;i++)//冒泡法
{
for(int j=i+1;j<4;j++)
{
if(a[j]<a[i])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("由小到大的顺序为:");
for(int i=0;i<4;i++)
{
printf("%d ",a[i]);
}
}
12.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图4.17。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
#include<stdio.h>
#include<math.h>
void main()
{
double x,y,a,b,d;//ab为两点之间的横坐标纵坐标之差 d为两点之间的距离
printf("请输入坐标x、y的值:");
scanf("%lf%lf",&x,&y);
a=fabs(x)-2;
b=fabs(y)-2;
d=sqrt(a*a+b*b);
if(d<=1.0)
printf("高度为10m\n");
else
printf("高度为0\n");
}