1.程序设计入门

内容

算数表达式

#include<stdio.h>
#include<math.h>

int main()
{
	printf("%.8f\n", 1+2*sqrt(3)/(5-0.1));
	return 0;
}
  1. #include<stdio.h> 头文件,标准输入输出,standard input output.header
  2. #include<math.h> 头文件,关于数学的一些运算
  3. 整数/整数=整数,浮点数/浮点数=浮点数
  4. 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;
}
  1. const关键字声明常数
  2. 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; 
}
```
  1. #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; 
    }
    

二、交换变量

  1. 使用中间变量
    #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;
    }
    
  2. 不使用中间变量
    #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;
    }
    

注: 算法竞赛是在比谁能更好地解决问题,而不是在比谁写的程序看上去更高级。

分支结构程序设计

  1. 鸡兔同笼
    #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;
    }
    
    C语言中的逻辑运算符都是短路运算符。一旦能够确定整个表达式的值,就不再继续计算。用数学知识算出表达式,再用程序实现。
  2. 三整数排序
    #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; 
    }
    
    此处后面设计数组之后可用排序算法。

练习

  1. 输出%d
    #include<stdio.h>
    
    int main()
    {
    
    	printf("%%d");
    	
    	return 0;
    }
    
  2. 输入三个整数,输出他们的平均值,保留三位小数。
    #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;
    }
    
  3. 输入华氏温度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;
    }
    
  4. 输入正整数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;
    }
    
  5. 输入正整数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;
    }
    
  6. 一件衣服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;
    }
    
  7. 输入三角形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;
    }
    
  8. 输入年份,判断是否为闰年,如果是,则输出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;
    }  
    
  9. 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;
}
```
加不加括号都一样,表明逻辑与比逻辑或优先级高
  1. if(a)if(b)x++;else y++;的确切含义?
    else是与第二个if配对,if没有大括号时只会执行下一条语句,如果没有特殊情况不会执行第二条指令,但是由于此题中if的下一条语句是if根据判断执行相应的x++或y++。
个人感受

学完这一章收获还是不小的吧,之前也是学过c语言的,忘了差不多了,今天从头开始学,学到了很多以前不会的地方,加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章