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
补充练手
- 输入三角形的三边长,求三角形面积。
#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);
}