1.C语言使用%d显示float值,不会把float值转换为近似的int值,而是显示垃圾值,使用%f显示int值,也不会把该int值转换为浮点值
2.三位数反转:输入一个三位数,分离它的百位,十位和个位,反转后输出
#include<stdio.h> int main(void) { int a; scanf("%d",&a); printf("%d %d %d ",a%10,a/10%10,a/100); return 0; } //考虑250的情况,是够需要输出52还是052 #include<stdio.h> int main(void) { int a; scanf("%d",&a); a=a%10*100+a/10%10*10+a/100; printf("%03d ",a); return 0; }
3.两数交换
//变量交换 #include<stdio.h> int main(void) { int t,a,b; scanf("%d%d",&a,&b); t=a; a=b; b=t; printf("%d %d",a,b); return 0; } //两变量方法 #include<stdio.h> int main(void) { int a,b; scanf("%d%d",&a,&b); a=a+b; b=a-b; a=a-b; printf("%d %d "a,b); } //异或思想,慎用 #define swap(a,b) a^=b^=a^=b 注意这里的运用,对于同一变量的两次修改不能放在一个表达式里, #include <stdio.h> #define swap(a,b) a^=b^=a^=b int main(void) { int a=1,b=2; int c[]={1,2}; swap(a,b); swap(c[0],c[1]); printf("a=%d,b=%d ",a,b); printf("c[0]=%d,c[1]=%d ",c[0],c[1]); return 0; } 在GCC下运行结果: a=2,b=1 c[0]=0,c[1]=1 在VC6.0环境下运行结果: a=2,b=1 c[0]=2,c[1]=1
4三整数
#include<stdio.h> int main(void) { 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 ",a,b,c); return 0; } //注意这里如果是先a,b,再比较b,c,最后a,c,这里可能发生的是中间值被二次修改 #include<stdio.h> int main(void) { int a,b,c,x,y,z; scanf("%d%d%d",&a,&b,&c); x=a;if(b<x) x=b;if(c<x) x=c; z=a;if(b>z) z=b;if(c>z) z=c; y=a+b+c-x-z; printf("%d %d %d ",x,y,z); return 0; }
5.C语言中三角函数使用弧度而不是角度
6.闰年的判断
if(year%4==0&&year%100!=0)||(year%400==0)
return 1;
else
return 0;
7.输出形如aabb的四位完全平方数
#include<stdio.h> #include<math.h> int main(void) { int a,b,s; for(a=1;a<=9;a++) for(b=0;b<=9;b++) { s=1100*a+11*b; if(floor(sqrt(s)+0.5)==sqrt(s)) //floor是返回x的整数部分,为了减小误差采用四舍五入 floor(x+0.5) printf("%d ",s); } return 0; } #include<stdio.h> int main(void) { int x,n,hi,ho; for(x=1;;x++) { n=x*x; if(n<1000) continue; if(n>9999) break; hi=n/100; ho=n%100; if(hi/10==hi%10&&ho/10==ho%10) printf("%d ",n); } return 0; }
8.3n+1问题
#include<stdio.h> int main(void) { int n,num=0; scanf("%d",&n); while(n>1) { if(n%2==1) n=3*n+1; //大数据,乘法可能溢出 else n=n/2; num++; } printf("%d ",num); return 0; } //当输出987654321的时候出现错误,原来是乘法溢出了 //为了解决这个问题,有个好点的方法可以解决,就是当n为奇数的时候,3n+1一定是偶数,这时候立刻除以2,也就是(3n+1)/2=(2n+n+1)/2=n+(n+1)/2; #include<stdio.h> int main(void) { int n,num=0; scanf("%d",&n); while(n>1) { if(n%2==1) { n=n+(n+1)/2; //修改这里 num++; } else n=n/2; num++; } printf("%d ",num); return 0; }
9.阶乘之和
#include<stdio.h> int main(void) { int i,j,n; int s=0; scanf("%d",&n); for(i=1;i<=n;i++) { int fac=1; for(j=1;j<=i;j++) fac*=j; s+=fac; } printf("%d ",s%1000000); return 0; } //这里可能会溢出,因为阶乘数据很大 所以采用对每一步进行对n取余,结果不变,这是一个数论的知识点 #include<stdio.h> #include<time.h> int main(void) { int i,j,n; int s=0; const int MOD=1000000; scanf("%d",&n); for(i=1;i<=n;i++) { int fac=1; for(j=1;j<=i;j++) fac=(fac*j%MOD); s=(s+fac)%MOD; } printf("%d ",s); printf("Time used=%.2lf ",(double)clock()/CLOCKS_PER_SEC); //学习一下time头文件的用法 return 0; }
10.文件操作
#define LOCAL #include<stdio.h> #define INF 1000000000 int main(void) { #ifdef LOCAL freopen("data.in","r",stdin); freopen("data.out","w",stdout); #endif // LOCAL; int x=0,n,min=INF,max=-INF,s=0; while(scanf("%d",&n)==1) { if(n>max) max=n; if(n<min) min=n; s+=n; x++; } printf("%d %d %.3lf ",min,max,(double)s/x); return 0; } //文件输入输出操作,不使用重定向的方式 #include<stdio.h> #define INF 10000000 int main(void) { FILE *fin,*fout; fin=fopen("data.in","rb"); fout=fopen("data.out","wb"); int x=0,n,s=0,min=INF,max=-INF; while(fscanf(fin,"%d",&n)==1) { if(n>max) max=n; if(n<min) min=n; s+=n; x++; } fprintf(fout,"%d %d %.3lf ",min,max,(double)s/x); fclose(fin); fclose(fout); return 0; }
习题
//输入一个不超过10的9次方的整数,输出它的位数 #include<stdio.h> int main(void) { int n; scanf("%d",&n); int num=1; while(n>9) { n=n/10; num++; } printf("%d ",num); } //水仙花数 #include<stdio.h> int main(void) { int a,b,c; for(int i=100;i<=999;i++) { a=i/100; b=i/10%10; c=i%10; if(a*a*a+b*b*b+c*c*c==i) printf("%d ",i); } return 0; } //韩信点兵 #include<stdio.h> int main(void) { int a,b,c,i; scanf("%d%d%d",&a,&b,&c); for(i=10;i<=100;i++) { if(i%3==a&&i%5==b&&i%7==c) { printf("%d ",i); break; } else continue; } if(i>100) printf("No answer "); return 0; } //倒三角 #include<stdio.h> int main(void) { int n; scanf("%d",&n); for(int i=n;i>=1;i--) { for(int j=1;j<=2*i-1;j++) printf("#"); printf(" "); for(int k=n;k>=i;k--) printf(" "); } return 0; } //分数化小数 #include<stdio.h> int main(void) { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%.*lf ",c,(double)a/b); return 0; } //近似计算,有点问题 #include<stdio.h> #include<math.h> int main(void) { int t=-1; double a=1.0,sum=1.0; while(fabs(a)>=0.01) { a=(1.0)/(a+2); a=a*t; sum=sum+a; t=t*-1; } printf("%.9lf ",sum); return 0; }