小结四及作业四

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TONGZONGE/article/details/78731749


 选择结构和条件判断
 
 
 
 
 
 
 
 
一、用if语句实现选择结构
        1、 if语句的一般形式:
              (1) if(表达式)       语句1                                    (没有else 子句的部分)
              (2) if(表达式)       语句1                                    (有else 子句的部分)
                   else if            语句2
              (3) if(表达式1)       语句1
                   else if(表达式2)       语句2 
                   else if(表达式3)       语句3                           (在else部分又镶嵌了多层if语句)
                            ........ 
                   else if(表达式4)       语句4
                   else if(表达式m)       语句m
                   else                          语句m+1 
            2、关系运算符及其优先次序
               C语言的六种运算符:
                ①  <                        {
                ②  <=                                优先等级相同(高)
                ③  >
                ④  >=                       }
                ⑤  ==                       {        优先等级相同(低)     }
                ⑥  !=                        
               关于优先次序:
                (1) 前四种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。例如:“>”优先于“==”,“>”与“<”优先级相同。
                (2)算数运算符的优先级>关系运算符优先级>赋值运算符的优先级
                    例如:
                             c>a+b                  等效于            c>(a+b)
                             a>b==c                等效于            (a>b)==c
                             a=b>c                  等效于            a=(b>c)

二、switch语句         
                  switch(表达式)
                 {
                    case       常量1:  语句1
                    case       常量2:  语句2
                             ........
                    case       常量n:  语句n
                     default:                 语句n+1
                 }
 
            PS:switch的参数只能是整形,default不论在前在后都可,当数据多余三个或四个时,与if较比,更高效。

三、宏
              简单来说:宏定义又称是宏代换、宏替换,简称“宏”。是C语言中三种预处理功能之一。
      宏定义 
             宏定义是C语言中三种预处理功能之一,三种预处理包括:宏定义、文件包含、条件编译。
1.不带参数的宏定义:
     格式:#define 标识符  字符串
     其中的标识符就是符号常量,也称‘宏名’
     预处理也叫作宏展开,将宏名替换为字符串。即在对相关命令或语句的含义和功能做具体分析之前替换。
例:#define PI 3.1415926   把程序中所有出现的PI全部替换成3.1415926.
说明:
    (1)宏名一般不用大小写;
    (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。如:数组大小常用宏定义;
    (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查;
    (4)宏定义末尾不加分号;
    (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头;
    (6)可以用#undef命令终止宏定义的作用域;
    (7)宏定义可以嵌套;
    (8)“字符串”中永远不包含宏;
    (9)宏定义不分配内存,变量定义分配内存;
      带参数的宏定义
             除了一般的字符串替换,还要参数替换
       格式:#define S (a,b)  a*b
       area=S(3,2);第一步被换成area=a*b;第二步被换成area=3*2;
    (1)参数如果是表达式容易出错
    如:#define S(r)   r*r
          正确表达:#define S(r)  ( (r)*(r));
     (2)宏名和参数的括号间不能有空格;
     (3)宏替换只做宏替换,不做计算,不做表达式求解;
     (4)宏可以有多个返回值;
     (5) 宏展开不占运行时间,只占编译时间,函数调用占运行时间;
四、const与宏的区别
      1、编译器处理不同
            宏是在预处理阶段展开,const常量是在编译阶段使用。
        2、类型和安全检查不同
            const常量有数据类型,而宏常量没有数据类型,仅仅是展开。编译器可以对前者进行安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意料不到的错误。
四、 练习题
       1、求m和n的最大公约数  
          #include<stdio.h>
            int main(int argc, char* argv[])
      {
     int m,n,tmp;
     if(m%n==0)
     {printf("zuidagongyueshu%d\n",n);}
     if(m%n!=0)
{printf("zuidagongyueshu%d\n",n);}
      while(m%n!=0)
  {tmp=m%n;
         m=n;
         n=tmp;
                    }
        return 0;
             }
         
           2、判断奇偶数      
                #include<stdio.h>
               int main(int argc, char* argv[])
        {
       int m ;
       if(m%2== 0) 
{
printf("%d is even number\n",m);
}
        else
       {printf("%d is odd number\n",m);}
       return 0;
        } 
            3、判断字符大小写
  #include<stdio.h>
int main()
{ char a;
   if(a>='A'&&a<='Z')
       {printf("%d is daxie\n",a);}
else 
       {printf("%d is xiaoxie\n",a);} 
return 0;
}
                 4、比较a,b,c的大小

#include<stdio.h>
void sort(int a,int b,int c)
{
int tmp;
if(a>b)
{tmp=a;
a=b;
b=tmp;
}
if(a>c)
{tmp=a;
a=c;
c=tmp;
}
if(b>c)
{tmp=b;
b=c;
c=tmp;
}
printf("%d,%d,%d\n",a,b,c);
//return 0;
}
int main()

   sort(10,50,30);
    sort(100,50,30);
sort(-10,50,30);
return 0;}
        5、求a^2x+bx+c=0的根。
#include<stdio.h>
void Fun5(int a,int b,int c)
{
    int d=b*b-4*a*c;
double x1;double x2;
if(a==0&&b!=0)
{x1=x2=-c/(double)b;}
if(d<0)
{
printf("wujie\n");
}
else if(d>0)
{
x1=((-b+sqrt((double)d))/(2*a));
        x2=((-b-sqrt((double)d))/(2*a));
}
else if(d==0)
{x1=x2=-c/(double)b;}
printf("%f,%f\n",x1,x2);


// return 0;
}
int main()
{Fun5(1,3,1);
return 0;}
           6、划分等级
#include<stdio.h>
void Fun6(char a)
{
switch(a)
{
  case'A': printf("85 up\n");  break;
  case'B': printf("70~84\n");  break;
  case'C': printf("60~69\n");  break;
  case'D': printf(" 60 down\n");  break;
  default :break;
}
}
int main()
{
char a ='A';
Fun6(a);
return 0;
}
         7、给一个不多余五位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字;
  #include<stdio.h>
int Getfigers(int n)
{
int count=0;
while(n!=0)
{
n=n/10;
count++;
}
 return count;
}
    void ordernum(int n)
int figers=Getfigers(n);
int tmp;
int power=(int)pow((double)10,(double)(figers-1));
if(n==0)
{
printf("no num\n");
}
if(n<0)
{
n=-n;
}
while(n!=0)
{
tmp=n/power;
n=n%power;
power=power;
printf("%d",tmp);
}
printf("\n");
}
void revernum(int n)
{
int tmp;
if(n==0)
{
printf("no num\n");
}
if(n<0)
{n=-n;
printf("-");}
while (n!=0)
{
tmp=n%10;
n=n%10;
printf("%d",tmp);
}
printf("\n");
}
int main()
{
int n=Getfigers(3533);
printf("%d\n",n);
ordernum(345);
return 0;
}









猜你喜欢

转载自blog.csdn.net/TONGZONGE/article/details/78731749