算数表达式
#include<stdio.h>
#include<math.h>
int main()
{
printf("%.8f\n", 1+2*sqrt(3)/(5-0.1));
return 0;
}
#include<stdio.h>
头文件,标准输入输出,standard input output.header#include<math.h>
头文件,关于数学的一些运算- 整数/整数=整数,浮点数/浮点数=浮点数
sqrt(x)
,计算x的算数平方根
变量及其输入
计算圆柱体的表面积
#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.0*pi*r*h;
s = s1*2.0 + s2;
printf("Area = %.3f\n", s);
return 0;
}
- const关键字声明常数
- acos为求反余弦函数,cosπ=-1,arccos(-1) = π
顺序结构程序设计
一、 三位数反转
1.
```
#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> int main() { int n, m; scanf("%d", &n); m = (n%10)*100+(n/10%10)*10+n/100; printf("%03d\n", m); 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", a, b); return 0; }
- 不使用中间变量
#include<stdio.h> int main() { int a, b, t; scanf("%d%d", &a, &b); a = a + b; b = a - b; a = a - b; printf("%d %d", a, b); return 0; }
注: 算法竞赛是在比谁能更好地解决问题,而不是在比谁写的程序看上去更高级。
分支结构程序设计
- 鸡兔同笼
C语言中的逻辑运算符都是短路运算符。一旦能够确定整个表达式的值,就不再继续计算。用数学知识算出表达式,再用程序实现。#include<stdio.h> int main() { int a, b, n, m; scanf("%d%d", &n, &m); a = (4*n-m)/2; b = n-a; if(m % 2 == 1 || a<0 || b<0) { printf("No answer\n"); } else { printf("%d %d\n", a, b); } return 0; }
- 三整数排序
此处后面设计数组之后可用排序算法。#include<stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a > b) { a = a+b; b = a-b; a = a-b; } if(a > c) { a = a+c; c = a-c; a = a-c; } if(b > c) { b = b+c; c = b-c; b = b-c; } printf("%d %d %d\n", a, b, c); return 0; }
练习
- 输出
%d
#include<stdio.h> int main() { printf("%%d"); return 0; }
- 输入三个整数,输出他们的平均值,保留三位小数。
#include<stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); printf("%.3f",(float)(a+b+c)/3.0); return 0; }
- 输入华氏温度f,输出对应的摄氏温度c,保留三位小数。c=5(f-32)/9
#include<stdio.h> int main() { float f, c; scanf("%f", &f); c = 5*(f-32)/9; printf("%.3f", c); return 0; }
- 输入正整数n,输出1+2+…+n。
#include<stdio.h> int main() { int n, sum; scanf("%d", &n); sum = 0; for(int i = 1; i<=n; i++){ sum = sum+i; } printf("%d", sum); return 0; }
- 输入正整数n,输出n度的正弦、余弦函数值。
#include<stdio.h> #include<math.h> int main() { int n, sum; scanf("%d", &n); printf("%f,%f",sin(n),cos(n)); return 0; }
- 一件衣服95元,若消费满300元,可打85折。输入购买衣服件数,输出需要支付的金额,保留两位小数。
#include<stdio.h> #include<math.h> int main() { const int eachJ = 95; int a, all; scanf("%d", &a); all = a*eachJ; if(all >= 300){ printf("%.2f", (float)all*0.85); }else{ printf("%.2f", (float)all); } return 0; }
- 输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的三个边长,如果可以,输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。
#include<stdio.h> #include<math.h> int main() { int a, b, c, max; scanf("%d%d%d", &a, &b, &c); if(a > b){ if(a > c){ max = a; }else{ max = c; } }else{ if(b > c){ max = b; }else{ max = c; } } if((a+b+c-max) > max){ // 如果c是斜边,判断是直角三角形(a+b)*(a+b) = c*c +2*a*b int cheng = 2; if(a != max){ cheng = cheng*a; } if(b != max){ cheng = cheng*b; } if(c != max){ cheng = cheng*c; } if((a+b+c-max)*(a+b+c-max) == max*max+cheng){ printf("yes"); }else{ printf("no"); } }else{ printf("not a triangle"); } return 0; }
- 输入年份,判断是否为闰年,如果是,则输出yes,否则输出no。
#include<stdio.h> int main() { int a; scanf("%d", &a); if(a%4 == 0 && a%100 != 0){ printf("yes"); }else{ printf("no"); } return 0; }
- int 的最大值最小值?
#include<stdio.h> int main() { int a; a = 1; while(a+1>0){ a++; } printf("int max: %d", a); a = -1; while(a-1<0){ a--; } printf("int min: %d", a); return 0; }
10. double 最多精确到小数点多少位?
```
#include<stdio.h>
int main()
{
double a;
a = 4.0;
printf("%.30f", a/3.0);
return 0;
}
```
11. double最大正数值,最小正数值?
思路,最小正数值,就是即将变为0的特别小的值,根据上一问题,最多精确到小数点后16位,最小值也就是0.0000000000000001
最大值目前还不清楚,,,
12. 逻辑运算符的优先级
```
#include<stdio.h>
int main()
{
int a, b, c;
a = 1;
b = 1;
c = 0;
// printf("%d", a || (b && c));
printf("%d", a || b && c);
return 0;
}
```
加不加括号都一样,表明逻辑与比逻辑或优先级高
- if(a)if(b)x++;else y++;的确切含义?
else是与第二个if配对,if没有大括号时只会执行下一条语句,如果没有特殊情况不会执行第二条指令,但是由于此题中if的下一条语句是if根据判断执行相应的x++或y++。
个人感受
学完这一章收获还是不小的吧,之前也是学过c语言的,忘了差不多了,今天从头开始学,学到了很多以前不会的地方,加油!