谭浩强《C程序设计》例题练习+补充练习

C语言学习笔记——谭浩强《C程序设计》例题练习+补充练习

1.1要求在屏幕上输出“This is a C program.”

#include<stdio.h>
int main()                         //int main后面忘记加()
{
printf("This is a C program.\n");      //换行是\n,在(“ “)里面,忘了加”;”
return 0;                         //忘写return 0;
}

1.2求两个整数之和,求123和456的和

#include<stdio.h>
int a,b,sum;
int main()
{
a=123;
b=456;
sum=a+b;
printf("the sum is:%d\n",sum);        //%d不能少,否则结果出不来,见1.2.1。输出,(“”,sum)中,sum前面不能加%
return 0;
}

1.3求两个整数中的较大者
方法一:

#include<stdio.h>
int a,b,c;
int main()
{
scanf("%d,%d",&a,&b);
if(a>=b)
c=a;
else
c=b;
printf("%d",c);
return c;
}
//不知道为什么没有用

方法二:

#include<stdio.h>
int main()
{
int max(int x,int y);
int a,b,c;
scanf("%d.%d",&a,&b);
c=max(a,b);
printf("max=%d\n",c);
return 0;                 //main函数中return语句指定的返回值一般为0
}
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return(z);             //只有通过return语句才能把求出的z值作为函数的值并返回调用他的main函数中(第8行)。不要以为在max函数中求出最大值z后就会自动的作为函数值返回调用处
}                    //不知道为啥,还是没有用
  

2.1求12345
方法一

#include<stdio.h>
int main()
{
int s,i;
s=1;
for(i=2;i<=5;i++)           //for循环后面不要加;,()里面用;隔开
s=s*i;
printf("%d",s);
}
 

方法二:

#include<stdio.h>
int main()
{
int s,i;
s=1;
i=2;
while(i<=5)
{
 s=s*i;
 i=i+1;
}
printf("%d",s);
}
 

2.19求多项式1-1/2+1/3-1/4…+1/99-1/100
方法一:
(1)错误示范

#include<stdio.h>
int main()
{
int sign=1,demo;        //当分母定义为整形时,结果为1,结果不准确
double term,sum=1;
for(demo=2;demo<=100;demo++)
{
sign=-1*sign;
term=sign/demo;
sum=sum+term;
}
printf("%f",sum);
}
 

(2)正确示范

#include<stdio.h>
int main()
{
int sign=1;
double demo,term,sum=1;               //分母demo要定义为双精度型
for(demo=2;demo<=100;demo++)
{
sign=-sign;
term=sign/demo;
sum=sum+term;
}
printf("%f\n",sum);
return 0;
}

方法二:

#include<stdio.h>
int main()
{
int sign=1;
double deno=2.0,sum=1.0,term;
while(deno<=100)
{
	sign=-sign;
	term=sign/deno;
	sum=sum+term;
	deno=deno+1;
}
printf("%f\n",sum);
return 0;
}
 

3.1有人用温度计测量出永华事法表示的温度(如64°F),今要求把它转换为亦设事发表示的温度(如17.8°C)。

#include<stdio.h>
int main()
{
float f,c;
scanf("%f",&f);
c=(5.0/9)*(f-32);           //用5.0才能得出正确结果。直接用5的话结果就是错误的
printf("%f\n",c);
}
 

3.2计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为r1,0.0036;(2)一年期定期,年利率为r2,0.0225;(3)存两次半年定期,年利率为r3,0.0198;请分别计算出一年后按3种方法所得到的本息和。

#include<stdio.h>
int main()
{
float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
p1=p0*(1+r1);
p2=p0*(1+r2);
p3=p0+p0/2*r3*2;
printf("%f\n%f\n%f\n",p1,p2,p3);
}
 

3.3给定一个大写字母,要求要小写字母输出

#include<stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
b=a+32;
printf("%c\n",b);
return 0;
}

3.4给出三角形的三边长,求三角形面积
错误示范:

#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
scanf("%f%f%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f\n",area);
return 0;
}                               //没有考虑a,b,c的范围,导致运行结果出错   ---178
 

正确示范:

#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,p;
double s;
printf("please input a,b and c:");
scanf("%f%f%f",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
{
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("the areas is:%f",s);
}
else
printf ("the line is error\n");
}                                                               ---194
 

例题示范:

#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%f\tb=%f\tc=%f\n",a,b,c);
printf("area=%f\n",area);
return 0;
}                                                                   ---208
 

3.5求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b62-4ac>0
正确示范;
注意要考虑超出范围错误的情况

#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,x;
double x1,x2;
printf("please inputa,b,c:");
scanf("%f%f%f",&a,&b,&c);
if(a==0)
{x=-c/b;
printf("x=%f\n",x);
}
else
if((b*b-4*a*c)>=0)
{x1=((-b)+sqrt(b*b-4*a*c))/(2*a);
x2=((-b)-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%f\nx2=%f\n",x1,x2);}
else
printf("no answer\n");
}                                                                ---228
 

例题示范:

#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,disc,x1,x2,p,q;
scanf("%1f%1f%1f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);         //7.2表示指定数据占七列,其中小数占两列
return 0;
}                                       //按照书上敲出来运行有问题       ---242
 

3.6用%f输出实数,只能得到6位小数。

#include<stdio.h>
int main()
{
double a=1.0;         //a是双精度型
printf("%f\n",a/3);       //a/3也是双精度性,但是用%f格式声明只能输出6位小数
}                                                                   ---248
  

补充:用%f输出实数,得到15位小数。

#include<stdio.h>
int main()
{
double a=1.0;
printf("%20.15f\n",a/3);
}
 
#include<stdio.h>
int main()
{
double a=1.0;
printf("%16.15f\n",a/3);
}

3.7float型数据的有效位数

#include<stdio.h>
int main()
{
float a;               //fliat型数据只能保证6-7位有效数字
a=10000/3.0;         //因此从左面开始的第7位数字(即第三位小数)以后的数字不保证正确
printf("%f\n",a);       
return 0;
}

补充:

#include<stdio.h>
int main()
{
double a;            //将float改成double
a=10000/3.0;   
printf("%f\n",a);        //由于%f,得到6位小数
return 0;
}

3.8先后输出BOY三个字符

#include<stdio.h>
int main()
{
char a='B',b='O',c='Y';
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}

补充,用ASCII码表示BOY

#include<stdio.h>
int main()
{
int a=66,b=79,c=89;
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}                      
                                         ---296

补充练手

  1. 输入三角形的三边长,求三角形面积。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,p;
double s;
printf("please input a,b and c:");
scanf("%f%f%f",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
{
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("the areas is:%f",s);
}
else
printf ("the line is error\n");
}

从键盘输入一个大写字母/小写字母,要求改用小写/大写字母输入。

#include<stdio.h>
void main()
{
char a;
printf("please input a word:");
scanf ("%c",&a);
if(a>='A' && a<='Z')
a=a+32;
else
if(a>='a' && a<='z')
a=a-32;
printf("%c\n",a);
}
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值