练习
2-1 输出语句(Programming in C is fun!):在屏幕上显示一个语句"Programming in C is fun!"。编写程序。
代码如下:
/*"显示Programming in C is fun!"*/
#include <stdio.h>
int main(void)
{
printf("Programming in C is fun!\n");
return 0;
}
运行结果:
2-2 下列语句的运行结果是什么?与例2-2的运行结果有何不同?为啥?
printf("Programming is fun.And programming in C is even more fun!\n");
答:运行结果:Programming is fun.And Programming in C is even more fun!
不同:例2-2在屏幕上显示两个短句”Programming is fun.”和“And programming in C is even more fun!”,每行显示一句,程序中用了两条语句。练习2-2在屏幕上显示两个短句”Programming is fun.”和“And programming in C is even more fun!”,每行显示两句,程序中用了一条语句。
原因:练习2-2的程序中两个短句之间不会换行。
P19 换行符 \n
2-3 输出倒三角图案,编写程序。
代码如下:
/*显示倒三角图形*/
#include <stdio.h>
int main(void)
{
printf("* * * *\n");
printf(" * * *\n");
printf(" * *\n");
printf(" *\n");
return 0;
}
或者
/*显示倒三角图形*/
#include <stdio.h>
int main(void)
{
printf("* * * *\n * * * \n * * \n * ");
return 0;
}
2-4 温度转换:求华氏温度150℉对应的摄氏温度。编写程序。
代码如下:
/*将华氏温度转换为摄氏温度*/
#include <stdio.h>
int main(void)
{
int celsius,fahr;
fahr=150;
celsius=5*(fahr-32)/9;
printf("fahr=%d,celsius=%d\n",fahr,celsius);
return 0;
}
运行结果:
2-5 算术表达式5*(fahr-32)/9能改写成5(fahr-32)/9吗?为啥?如果将其改写为5/9*(fahr-32),会影响运算结果吗?
答:不能,因为5(fahr-32)/9不是合法的C语言表达式,不能省略运算符*,5/9*(fahr-32)的运算结果为0。
2-6 计算物体自由下落的距离:一个物体从100米的高空自由落下,求它在前3秒内下落的垂直距离。设重力加速度为10㎨。编写程序。
代码如下:
/*计算物体自由下落的距离*/
#include <stdio.h>
int main(void)
{
int g,t,h;
g=10;
t=3;
h=0.5*g*t*t;
printf("h=%d\n",h);
return 0;
}
运行结果:
2-7 输入提示和输入语句的顺序应该如何安排?例2-5中,scanf(“%lf%lf%d”,&initial,&factor,&day)能改写为scanf(“%lf%d%lf”,&initial,&factor,&day)吗?为啥?能改写为scanf(“%lf%d%lf”,&initial,&day,&factor)吗?如果可以,其对应的输入数据是什么?
答:输入提示在前,输入语句在后。
不能,输入参数的类型要与格式控制说明中一一对应。%lf与int型变量day不匹配,%d与double型变量factor不匹配。
可以,对应的输入数据是:1.0 365 0.01。
2-8 计算摄氏温度:输入华氏温度,输出对应的摄氏温度,计算公式同例2-3。编写程序。
代码如下:
/*将华氏温度转换为摄氏温度*/
#include <stdio.h>
int main(void)
{
/*定义两个整型变量,celsius表示摄氏度,fahr表示华氏度*/
int celsius,fahr;
fahr=71;
celsius=5*(fahr-32)/9;
printf("fahr=%d,celsius=%d\n",fahr,celsius);
return 0;
}
运行结果:
2-9 整数四则运算:输入2个正整数,计算并输出它们的和、差、积、商。编写程序。
代码如下:
/*整数四则运算*/
#include<stdio.h>
int main(void)
{
int a,b;
printf("Enter a&b:");
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d\n",a,b,a/b);
return 0;
}
运行结果:
2-10 计算分段函数(判断x是否不为0):输入x,计算并输出下列分段函数f(x)的值(保留1位小数)。编写程序。
代码如下:
#include <stdio.h>
int main (void)
{
double x,y;
printf("Enter x:");
scanf("%lf",&x);
if(x!=0)
y=1/x;
else
y=0;
printf("%.1f",y);
return 0;
}
或者
#include <stdio.h>
int main (void)
{
float x,y;
printf("Enter x:");
scanf("%f",&x);
if(x!=0)
y=1/x;
else
y=0;
printf("%.1f",y);
return 0;
}
运行结果:
2-11 计算分段函数(判断x是否小于0):输入x,计算并输出下列分段函数f(x)的值(保留2位小数)。可包含头文件math.h,并调用sqrt()函数求平方根,调用pow()函数求幂。编写程序。
代码如下:
#include <stdio.h>
#include <math.h>
int main (void)
{
double x,y;
printf("Enter x:");
scanf("%lf",&x);
if(x<0)
y=pow(x+1,2)+2*x+1/x;
else
y=sqrt(x);
printf("%.2f",y);
return 0;
}
或者
#include <stdio.h>
#include <math.h>
int main (void)
{
float x,y;
printf("Enter x:");
scanf("%f",&x);
if(x<0)
y=pow(x+1,2)+2*x+1/x;
else
y=sqrt(x);
printf("%.2f",y);
return 0;
}
运行结果:
P28 常用数学函数
2-12 输入华氏-摄氏温度转换表:输入两个整数lower和upper,输出一张华氏-摄氏温度转换表,华氏温度的取值范围是[lower,upper],每次增加2℉,计算公式同例2-6。编写程序。
代码如下:
#include <stdio.h>
int main (void)
{ int fahr, lower, upper;
double celsius;
printf("Enter lower:");
scanf("%d", &lower);
printf("Enter upper:");
scanf("%d", &upper);
if(lower<=upper){
printf("fahr celsius\n");
for(fahr=lower;fahr<=upper;fahr=fahr+2){
celsius=(5.0/9.0)*(fahr-32);
printf("%4d%6.1f\n",fahr,celsius);
}
}else{
printf("Invalid Value!\n");
}
return 0;
}
运行结果:
2-13 求给定序列前n项和(1+1/2+1/3+…):输入一个正整数n,计算序列1+1/2+1/3+…的前n项之和。编写程序。
代码如下:
#include <stdio.h>
int main (void)
{
int i,n;
double sum;
printf("Enter n:");
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++){
sum=sum+1.0/i;
}
printf("sum=%f\n",sum);
return 0;
}
运行结果:
2-14 求给定序列前n项和(1+1/3+1/5+…):输入一个正整数n,计算序列1+1/3+1/5+…的前n项之和。编写程序。
代码如下:
#include <stdio.h>
int main (void)
{
int i,n;
double sum;
printf("Enter n:");
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++){
sum=sum+1.0/(2*i-1);
}
printf("sum=%f\n",sum);
return 0;
}
或者
#include <stdio.h>
int main(void)
{
int denominator,i,n;
double item,sum;
printf("Enter n:");
scanf("%d",&n);
denominator=1;
item=1;
sum=0;
for(i=1;i<=n;i++)
{
sum=sum+item;
denominator=denominator+2;
item=1.0/denominator;
}
printf("sum=%f\n",sum);
return 0;
}
运行结果:
2-15 求给定序列前n项和(1-1/4+1/7-1/10…):输入一个正整数n,计算序列1-1/4+1/7-1/10+1/13-1/16…的前n项之和。编写程序。
代码如下:
#include <stdio.h>
int main(void)
{
int denominator,flag,i,n;
double item,sum;
printf("Enter n: ");
scanf("%d",&n);
flag=1; /*flag表示第i项的符号,初始为正*/
denominator=1; /*denominator表示第i项的分母,初值为1*/
item=1;
sum=0;
for(i=1;i<=n;i++){
sum=sum+item ;
flag=-flag;
denominator=denominator+3;
item=flag*1.0/denominator;
}
printf("sum=%f\n",sum);
return 0;
}
运行结果:
2-16 执行下列程序段后,sum的值是多少
for(i=1;i<=10;i++){
sum=0;
sum=sum+i;
}
代码如下:
#include <stdio.h>
int main (void)
{
int i,sum;
for(i=1;i<=10;i++){
sum=0;
sum=sum+i;
}
printf("sum=%d\n",sum);
return 0;
}
运行结果:
2-17 生成3的乘方表:输入一个正整数n,生成一张3的乘方表,输出3^0到3^n的值。可包含头文件math.h,并调用幂函数计算3的乘方。编写程序。
代码如下:
# include <stdio.h>
# include <math.h>
int main (void)
{
int i,n;
double power;
printf("Enter n:");
scanf("%d",&n);
for (i=0;i<=n;i++){
power=pow(2,i); /* 调用幂函数pow(3,i)计算3的i次方 */
printf("pow(3,%d)=%.0f\n",i,power);
}
return 0;
}
运行结果:
2-18 求组合数:根据下列公式可以算出从n个不同元素中取出m个元素(m<=n)的组合数。输入两个正整数m和n(m<=n),计算并输出组合数。要求定义和调用函数fact(n)计算n!,函数类型是double。编写程序。
代码如下:
# include <stdio.h>
double fact(int n); /* 自定义函数的声明 */
int main (void)
{
int m,n;
double result;
printf("Enter m&n:");
scanf("%d%d",&m,&n);
result=fact(n)/(fact(m)*fact(n-m));
printf("result=%.0f\n",result);
return 0;
}
double fact(int n) /* 函数首部,无需分号 */
{
int i;
double product;
product=1;
for(i=1;i<=n;i++){
product=product*i;
}
return product; /* 将结果回送主函数 */
}
运行结果: