2000:
#include <stdio.h> #include <string.h> void exchange(char** a, char** b) { char* c; c = *a; *a = *b; *b = c; } void SWAP(char** a, char** b, char** c) { if (strcmp(*a, *b) > 0) { exchange(a, b); } if (strcmp(*a, *c) > 0) { exchange(a, c); } if (strcmp(*b, *c) > 0) { exchange(b, c); } } int main(int argc, char const* argv[]) { char* a, * b, * c; char j, k, l; while (scanf("%c%c%c", &j, &k, &l)!=EOF) { a = &j; b = &k; c = &l; SWAP(&a, &b, &c); printf("%c %c %c\n", *a, *b, *c); getchar(); } printf("\n"); return 0; }
2001:
1 #include <stdio.h> 2 #include <math.h> 3 4 int main() 5 { 6 double x1,y1,x2,y2; 7 while(EOF != scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)) 8 { 9 printf("%.2f",sqrt(pow(x1-x2,2)+pow(y1-y2,2))); 10 } 11 }
2001心得:C语言中应该使用数学函数包中的pow(a,n)来表示a的n次方
2002:
#include <stdio.h> #include <math.h> #define PI 3.1415927 main() { double r; double v; while (EOF != scanf("%lf", &r)) { v = 4*PI*(pow(r,3)) / 3; printf("%.3f\n",v); } return 0; }
2002心得:
使用宏定义:#define 宏名 宏体,这个替换的过程被称为“宏代换”或“宏展开”(macro expansion)。“宏代换”是由预处理程序自动完成的。宏定义和函数的最大差别就是:宏定义是原地展开,因此没有调用开销;而函数是跳转执行再返回,因此函数有比较大的调用开销。所以宏定义和函数相比,优势就是没有调用开销,没有传参开销,所以当函数体很短(尤其是只有一句话时)可以用宏定义来替代,这样效率高。
2003:
#include <stdio.h> #include <math.h> main() { double a; while (EOF != scanf("%lf", &a)) { a = abs(a); printf("%.2f\n",a); } return 0; }
2004:
#include <stdio.h> #include <math.h> main() { int a; while (EOF != scanf("%d", &a)) { if (a>100) printf("Score is error\n"); else if(a >= 90) printf("A\n"); else if(a>=80) printf("B\n"); else if (a >= 70) printf("C\n"); else if (a >= 60) printf("D\n"); else printf("E\n"); } return 0; }
2005:
使用switch语句的程序(看起来复杂):
#include <stdio.h> #include <math.h> main() { int sum, year, month, day; while (EOF != scanf("%d/%d/%d", &year,&month,&day)) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) sum = 1; else sum = 0; switch (month) { case 1:sum =0; break; case 2:sum = sum + 31; break; case 3:sum = sum +31+ 28; break; case 4:sum = sum + 28+31*2; break; case 5:sum = sum + 28 + 31*2+30; break; case 6:sum = sum + 28 + 31*3+30; break; case 7:sum = sum + 28 + 31*3+30*2; break; case 8:sum = sum + 28 + 31*4+30*2; break; case 9:sum = sum + 28 + 31 * 5 + 30 * 2; break; case 10:sum = sum + 28 + 31 * 5 + 30 * 3; break; case 11:sum = sum + 28 + 31 * 6 + 30 * 3; break; case 12:sum = sum + 28 + 31 * 6 + 30 * 4; break; } sum = sum + day; printf("%d\n", sum); } return 0; }
使用数组(更推荐):
#include <stdio.h> #include <math.h> main() { int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int sum, year, month, day; while (EOF != scanf("%d/%d/%d", &year,&month,&day)) { sum = 0; if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) a[2] = 29; for (int i = 1; i < month; i++) { sum = sum + a[i]; } sum = sum + day; printf("%d\n", sum); } }
2006:
#include <stdio.h> #include <math.h> main() { int n,a; while (EOF != scanf("%d", &n)) { int sum = 1; while (n--) { scanf("%d", &a); if (a % 2 == 0) sum = sum; else sum = sum * a; getchar(); } printf("%d\n", sum); } }
心得:函数的镶嵌很是重要,一不留神就会出错,sum放在while里面外面意义不同
2007:
调用函数:
#include <stdio.h> main() { int max(int x, int y); int m,n,a; while (EOF != scanf("%d %d", &m,&n)) { a = max(m, n); //printf("%d", a); int sum=0,sum2 = 0; for (int i = 1; i <= a; i++) { if (i % 2 == 0) sum = sum + i * i; else sum2 = sum2 + i * i * i; } getchar(); printf("%d %d\n", sum,sum2); } } int max(int x, int y) { int z; if (x > y) z = x; else z = y; return z; }
不调用函数直接写main:
#include <stdio.h> main() { int t,m,n,a; while (EOF != scanf("%d %d", &m,&n)) { int sum = 0, sum2 = 0; if (m > n) { t = m; m = n; n = t; } for (int i = m; i <= n; i++) { if (i % 2==1) sum2 += i * i * i; else sum += i * i; } getchar(); printf("%d %d\n", sum,sum2); } }
心得:题干说的是一段整数m,n,意思是从m到n的整数区间内选择奇数偶数作业
2008:
路过的大神帮我看看这段代码为啥遇到n=0的情况不返回0值呢?好像卡住了一样?
#include <stdio.h> main() { float m; int n,i, a, b, c; scanf("%d", &n); if (n == 0) return 0; while (n--) { a = b = c = 0; for (i = 0; i < n; i++) { scanf("%f",&m); if (m < 0) a++; else if (m > 0) c++; else b++; } printf("%d %d %d\n", a, b, c); } }
可行代码:
# include<stdio.h> int main() { int a, b, d, flag1, flag2, flag3; double c; while (scanf("%d", &a)) { if (a == 0) { break; } flag1 = 0; flag2 = 0; flag3 = 0; for (b = 0; b < a; b++) { scanf("%lf", &c); if (c > 0) { flag1++; } if (c == 0) { flag2++; } if (c < 0) { flag3++; } } printf("%d %d %d\n", flag3, flag2, flag1); } return 0; }
2009:
# include<stdio.h> # include<math.h> int main() { double a, b,flag; while (scanf("%lf%lf", &a, &b)) { flag = 0; for (int i = 0; i <b; i++) { flag += a; a= sqrt(a); } printf("%.2lf\n", flag); } }
2010:
#include<stdio.h> int main() { int i, m, n; while (scanf("%d %d", &m, &n) != EOF) { int a = 0, b = 0, c = 0, s = 0; int flag = 0; for (i = m; i <= n; i++) { a = i % 10; b = i / 10 % 10; c = i / 100 % 10; if (i == a * a * a + b * b * b + c * c * c) { s += 1; if (flag) printf(" %d", i); else { printf("%d", i); flag = 1; } } } if (s == 0)printf("no\n"); else printf("\n"); } }
知识又增加了一点!gaoxing!
原文:https://www.cnblogs.com/lumc5/p/13047503.html