4.2请编写一个程序,读取X和Y的值,然后在一行中显示下面表达式的结果:
(a)(x+y)/(x-y) (b)(x+y)/2 (c)(x+y)*(x-y)
程序如下:
voidmain()
{intx,y;
floata,b,c;
printf("enter two numbers\n");
scanf("%d %d",&x,&y);
a=(double)(x+y)/(x-y);
b=(double)(x+y)/2;
c=(double)(x+y)*(x-y);
printf("a=%f b=%f c=%f",a,b,c);
}
运行结果:
4.5请编写一个交互式程序,以演示乘法的计算过程。程序应请求用户输入两个两位数字的整数,并按如下形式显示整数的乘积。
45
X37
———
315
135
———
1665
程序如下:
voidmain()
{
inta,b,c,d;
printf("enter two numbers\n");
scanf("%d %d",&a,&b);
printf(" %d\n",a);
printf(" *%d\n",b);
c=b%10;
d=b/10;
printf(" ______\n");
printf("is %d\n",a*c);
printf("is %d\n",a*d);
printf(" ______\n");
printf("add %d\n",a*b);
}
运行结果:
4.6请编写一个程序,使用一个scanf语句从键盘读取3个整数值,然后使用如下方式把它们输出到一行:
(a)3个printf语句;
(b)只用一个带转换指示符的printf语句;
(c)只用一个无转换指示符的printf语句。
程序如下:
voidmain()
{
inta,b,c;
printf("enter three numbers\n");
scanf("%d %d %d",&a,&b,&c);
printf("%d",a);
printf(" %d",b);
printf(" %d",c);
printf("\n");
printf("%d\t%d\t%d",a,b,c);
printf("\n");
printf("%d %d %d",a,b,c);
}
运行结果:
4.7请编写一个程序,以含如下形式的指数格式显示数值10.45678:
(a)精确到小数点后2位。
(b)精确到小数点后4位。
(c)精确到小数点后8位。
程序如下:
voidmain()
{
floata=10.45678;
printf("%f\n",a);
printf("%8.2e\n",a);
printf("%8.4e\n",a);
printf("%8.8e",a);
}
运行结果:
4.8请编写一个程序,以含如下形式的固定小数点格式显示数值345.6789:
(a)精确到小数点后2位。
(b)精确到小数点后5位。
(c)精确到小数点后0位。
程序如下:
voidmain()
{
floata=345.6789;
printf("%f\n",a);
printf("%-8.2f\n",a);
printf("%8.5f\n",a);
printf("%-3.0f",a);
}
运行结果:
5.1编写一个程序,确定某个给定的数是“奇数”还是“偶数”,并显示“NUMBER IS EVEN”或“NUMBER IS ODD"消息。
(a)不使用else语句 (b)使用else语句
a程序如下:
voidmain()
{
inta;
printf("Please input a integer:");
scanf("%d",&a);
if(a%2==0)
{
printf("number is even");
}
if(a%2!=0)
{
printf("number is odd");
}
}
a运行结果:
b程序如下:
voidmain()
{
inta;
printf("Please input a integer:");
scanf("%d",&a);
if(a%2==0)
printf("number is even");
else
printf("number is odd");
}
B运行结果:
5.2编写一个程序,找出所有位于100—200之间,能被7整除的整数之和。
程序如下:
voidmain()
{
inti,sum;
sum=0;
for(i=100;i<=200;i++)
if(i%7==0)
sum=sum+i;
printf("sum=%d",sum);
}
运行结果:
5.3如下两个线性方程组的两个未知数为X1,X2
ax1+bx2=m
cx1+dx2=n
该方程组的唯一解为(ad-cb不等于零时):
x1=(md-bn)/(ad-cb)
x2=(na-mc)/(ad-cb)
请编写一个程序,读取常量a,b,c,d的值,然后计算X1和X2的值。如果ad-cb=0,应给出适当的提示信息。
程序如下:
voidmain()
{
floatx1,x2;
inta,b,c,d,m,n;
printf("enter four numbers\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a*d-c*b!=0)
{
x1=(m*d-b*n)/(a*d-c*b);
x2=(n*a-m*c)/(a*d-c*b);
printf("x1=%5.2f x2=%5.2f\n",x1,x2);
}
else
{
printf("a*d-c*b=0");
}
}
运行结果:
5.4假设成绩得分范围为0—100.请编写一个程序,计算并显示下面情况的学生数量。
(a)得分大于80的学生数 (b)得分大于60的学生数
(c)得分大于40的学生数 (d)得分大于或等于40的学生数
(e)得分在80—100的学生数 (f)得分在60—80的学生数
(g)得分在41—60的学生数 (h)得分在0—40的学生数
程序如下:
voidmain()
{
intscore[10];
inti=0;
inta[7]={0};
printf("please enter 10 students' score:\n");
for(;i<10;i++)
{
scanf("%d",&score[i]);
if(score[i]>40)
{
a[2]++;
if(score[i]>60)
{
a[1]++;
if(score[i]>80)
{
a[0]++;
}
elsea[5]++;
}
elsea[6]++;
}
elsea[3]++;
}
a[4]=a[0];
printf("得分大于80的学生数=%d\n",a[0]);
printf("得分大于60的学生数=%d\n",a[1]);
printf("得分大于40的学生数=%d\n",a[2]);
printf("得分等于或小于40的学生数=%d\n",a[3]);
printf("得分在80——100之间的学生数=%d\n",a[4]);
printf("得分在60——80之间的学生数=%d\n",a[5]);
printf("得分在60——41之间的学生数=%d\n",a[6]);
printf("得分在0——40之间的学生数=%d\n",a[3]);
}
运行结果:
5.5某专业课录取的条件如下:
(a)数学成绩>=60
(b)物理成绩>=60
(C)化学成绩>=60
(d)以上三科的总成绩>=200;或数学和物理的总成绩>=150;
给定这三科的成绩得分,请编写一个程序,用于处理合格学生的申请。
程序如下:
voidmain()
{
intm,p,c;
printf("enter the marks\n");
scanf("%d %d %d",&m,&p,&c);
if(m>=60&&p>=50&&c>=40)
{
if(m+p+c>=200||m+p>=150)
printf("yes");
else
printf("no");
}
else
printf("no");
}
运行结果:
5.9请分别使用
(a)嵌套if语句;
(b)else if语句;
(c)条件运算符?:
编写一个程序,读取X的值,并计算如下函数。
1x>0
y={0 x=0
-1 x<0
a程序如下:
voidmain()
{
intx,y;
printf("enter value of x:");
scanf("%d",&x);
if(x>0)
printf("y=1");
if(x<0)
printf("y=-1");
if(x==0)
printf("y=0");
}
a运行结果:
b程序如下:
voidmain()
{
intx,y;
printf("enter value of x:");
scanf("%d",&x);
if(x==0)
printf("y=0");
elseif(x<0)
printf("y=-1");
else
printf("y=1");
}
b运行结果:
C程序如下:
voidmain()
{
intx,y;
printf("enter value of x:");
scanf("%d",&x);
y=(x!=0)?((x>0)?1:-1):0;
printf("y=%d",y);
}
C运行结果:
5.10请编写一个程序,计算下面二元方程的实数根:
ax2+bx+c=0
其中,该方程的两个根为:
x1=-b+√b2-4ac/2a
x2=-b-√b2-4ac/2a
该程序应能请求输出常量a,b,c的值,并显示出X1和X2的值,应用如下规则:
(a)如果a和b的值为零,则没有解。
(b)如果a=0,那么只有一个解(x=-c/b).
(c)如果b2-4ac为负数,则没有实数根。
(d)否则,就有两个根。
请用适当的数据测试你所编写的程序,看看所有的逻辑是否按你设计的运行。请在程序中适当的加入相应的输出消息。
程序如下:
#include
voidmain()
{
inta,b,c;
floatx1,x2,x;
printf("input values of a,b and c\n");
scanf("%d %d %d",&a,&b,&c);
if(a==0&&b==0)
printf("no root");
elseif(a==0)
printf("x=-c/b");
elseif(b*b-4*a*c<0)
printf("no real root");
else
{
x1=-b+sqrt((b*b-4*a*c))/2*a;
x2=-b-sqrt((b*b-4*a*c))/2*a;
printf("x1=%f x2=%f",x1,x2);
}
}
运行结果:
5.11请编写一个程序,从键盘读取3个整数值,并显示输出,说明它们是否是直角三角形的边。
程序如下:
voidmain()
{
inta,b,c;
printf("enter three numbers\n");
scanf("%d %d %d",&a,&b,&c);
printf("a=%d b=%d c=%d",a,b,c);
if(a*a==b*b+c*c)
printf("\nIs a right triangle edge");
elseif(b*b==a*a+c*c)
printf("\nIs a right triangle edge");
elseif(c*c==a*a+b*b)
printf("\nIs a right triangle edge");
else
printf("\nis not a right triangle edge");
}
运行结果:
5.14请编写一个交互式程序,读取一个正整数,判断该数是否为素数并显示相应的输出。
程序如下:
#include
voidmain()
{
intm,k,i;
printf("enter the value of m:");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
printf("%d is a prime number!\n",m);
else
printf("%d is not a prime number!\n",m);
}
运行结果:
修改该程序,计算100—200之间的素数个数。
程序如下:
voidmain()
{
inti;
intj;
intnum=0;
for(i=100;i<=200;i++)
{
for(j=2;j
{
if(i%j==0)
{
break;
}
}
if(j>=i)
{
num++;
}
}
printf(" num=%d",num);
}
运行结果: