/* 本文是本人练习《C语言编程实例》所作,有错误之处望指出,谢谢。*/
注意:
1. double 输入时要用 %lf 而并不是%f,否则会报错。
2. 圆周率的值可以 const double pi = acos(-1.0)
3. 在C程序中,整数取值没有四舍五入,直接去掉小数点后面的数字。
4. a||b 中,其一为真便为真,a&&b中,其一为假便为假。
5. 判断数据是否溢出,要看数据类型的字节位,例int为16bit,则取值范围是负2的16次方到正2的16次方。
6. 1byte = 8bits, 一个字节等于八个比特。
1-1 求圆柱的体积
#include<stdio.h>
#include<math.h>
int main(){
const double pi = acos(-1.0);
double r, h, s1, s2, s;
scanf("%lf%lf", &r, &h);
s1 = pi*r*r;
s2 = 2*pi*r*h;
s = s1*2.0 + s2;printf("Area = %.3f\n", s);
return 0;
}1-2 数字的颠倒
法一:
#include<stdio.h>
void main()
{
int n,b,s,g;
scanf("%d",&n);
b = n/100;
s = n/10%10;
g = n%10;
printf("%d%d%d\n",g,s,b);
}
结构优化:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d%d%d \n",n%10,n/10%10,n/100);
return 0;
}
程序优化:
#include<stdio.h>
void main()
{
int n,b,s,g;
scanf("%d",&n);
b = n/100;
s = n/10%10;
g = n%10;
if(g!=0)
printf("%d%d%d\n",g,s,b);
else
printf("%d%d\n",s,b);
}
法二:
#include<stdio.h>
void main()
{
int n,m;
scanf("%d",&n);
m = (n%10)*100 + (n/10%10)*10 + (n/100);
printf("%03d",m);
}
1-3 两个数交换位置
(The Bests)
#include<stdio.h>
int main()
{
int a, b;
scanf("%d %d",&a,&b);
printf("%d %d\n",b,a);
return 0;
}
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d %d",&a,&b);
t = a;
a = b;
b = t;
printf("%d %d\n",a,b);
return 0;
}
1-4 鸡兔同笼
#include<stdio.h>
int main()
{
int j,t,n,m;
scanf("%d %d",&n,&m);
j = (4*n - m)/2;
t = n - j;
if(m%2==1 || j <0 || t<0 )
printf("No answer\n");
else
printf("%d %d\n",j,t);
return 0;
} >
1-5 三数比较大小
法一:
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a<b && b<c) printf("%d %d %d\n",a,b,c); //两两比较大小,然后输出
else if(a<c && c<b) printf("%d %d %d\n",a,c,b);
else if(b<a && a<c) printf("%d %d %d\n",b,a,c);
else if(b<c && c<a) printf("%d %d %d\n",b,c,a);
else if(c<b && b<a) printf("%d %d %d\n",c,b,a);
else if(c<a && a<b) printf("%d %d %d\n",c,a,b);
return 0;
}
>
法二:
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
if(a>b) {t=a; a=b; b=t;}
if(a>c) {t=a; a=c; c=t;}
if(b>c) {t=b; b=c; c=t;}
printf("%d %d %d\n",a,b,c);
return 0;
}
1-6 一整数加100是一个完全平方数,加168是一个完全平方数
#include<stdio.h>
#include<math.h>
int main()
{
int i,x,y;
for(i=1;i<10000;i++)
{
x = sqrt(i+100);
y = sqrt(i+168);
if(x*x == i+100 && y*y == i+168)
printf("%d\n",i);
}
return 0;
}
1-7 输入某年某月某日,判断这一天是这一年的第几天
#include<stdio.h>
int main()
{
int year,mouth,day,sum,leap;
printf("please input year,mouth,day\n");
scanf("%d %d %d",&year,&mouth,&day);
switch(mouth) //先计算月份天数
{
case 1: sum=0; break;
case 2: sum=31; break;
case 3: sum=59; break;
case 4: sum=90; break;
case 5: sum=120; break;
case 6: sum=151; break;
case 7: sum=181; break;
case 8: sum=212; break;
case 9: sum=243; break;
case 10: sum=273; break;
case 11: sum=304; break;
case 12: sum=334; break;
default:printf("data error"); break;
}
sum = sum+day;
if(year%400==0 ||(year%4 == 0 && year%100!=0)) //判断是不是闰年
leap=1;
else
leap=0;
if(leap==1&&mouth>2) //如果是闰年且月份大于2,总天数应该加一天
sum++;
printf("It is the %dth day.\n",sum);
return 0;
}
1-8 用*号输出字母C的图案
#include<stdio.h>
int main()
{
printf("show C:\n");
printf(" ****\n");
printf(" * \n");
printf("* \n");
printf("* \n");
printf(" * \n");
printf(" ****\n");
return 0;
}
1-9 输出特殊图形
#include<stdio.h>
void main()
{
char a=3;
char b=10;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
}
1-10 输出9*9口诀
#include<stdio.h>
void main()
{
int i,j,x;
for(i=1; i<10; i++)
{
for(j=1; j<10; j++)
{
x = i*j;
printf("%d*%d=%-3d",i,j,x);
printf("\n");
}
}
}
1-11 要求输出国际象棋棋盘
#include<stdio.h>
void main()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c %c",1,2);
else
printf(" ");
printf("\n");
}
}
1-12 古典问题:一对兔子,从出生后第三个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子不死,问每个月
的兔子总数为多少?
#include<stdio.h>
int main()
{
int f1,f2,f3,f4,i;
f4=0;
f1=f2=1;
f3 = f1+f2;
for(i=1;i<5;i++)
f4 += f3;
printf("the rabbit's number is: %d\n",f4);
}
12 1-13 判断101-200之间有多少个素数,并输出所有素数。
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,k,leap=1,h=0;
for(m=101;m<=200;m++)
{
n = sqrt(m);
for(k=2;k<=n;k++)
if(m%k == 0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",m);
h++; //每输出一个数便加一个数
if(h%7 == 0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d\n",h);
return 0;
}
1-14 水仙花数,其各位数字立方和等于该数本身。
#include<stdio.h>
void main()
{
int g,s,b,n;
for(b=1;b<10;b++)
for(s=1;s<10;s++)
for(g=1;g<10;g++)
{
n=b*100+s*10+g;
if((g+s*10+b*100)==((b*b*b+g*g*g+s*s*s)))
printf("水仙花为:%d\n",n);
}
}
1-15 将一个正整数分解质因数。例如:90 = 2*3*3*5
#include<stdio.h>
void main()
{
int n, i;
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i == 0)
{
printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d\n",n);
}
1-16 学习成绩>=90分的同学用A表示。60-89分之间的用B表示,
60分以下的用C表示
#include<stdio.h>
void main()
{
int score;
char grade;
scanf("%d",&score);
grade = score>=90?'A':(score>=60?'B':'C');
printf("%c\n",grade);
}
1-17 输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>
void main()
{
int m, n,largest,i;
scanf("%d %d",&m,&n);
for(i=1;(i<m&&i<n);i++)
{
if(m%i == 0 && n%i ==0)
printf("%d",i);
else
break;
}
}