黑马程序员技术交流社区

标题: C语言基础要点3 [打印本页]

作者: brenthe    时间: 2016-5-15 21:58
标题: C语言基础要点3

#pragma mark 0_17 变量的命名规则以及规范 [掌握]


1.变量的命名规则
    1>变量名只能由任意的字母,下划线和$以及数字组成,注意不能用数字开头  ******
    2>是区分大小写的
    3>变量一定要先定义再使用
    4>同一个大括号中不能定义名字相同的变量
    5>不能和C的关键字同名       *************


3.命名规范(大家都遵守所以你最好也遵守)
    1>有意义 可以见闻知意     ************
    2>驼峰命名法,如果一个变量的名字以多个单词组成,以第一个单词首字符小写,其他每个单词首字母大写                ***********







#pragma mark 0_18 printf函数的使用补充  [开发中常用!!!]

%0md  m是1个整数,不足的地方就会以0补齐.
%.nf n是1个数字.代表要输出小数点后面多少位.







#pragma mark - 01 数据类型转换 [掌握]

"强调
1.当赋值符号两边的数据类型不同的时候,数据类型转换是自动的,不需要程序员插手


2.思考:下面会发生类型转换吗?
float numF = 1.123;
float numF = 1.123f;

3.
//注意:下面写法取整数部分
char char_a = 97.1234;








#pragma mark - 04 scanf练习 [掌握]

    询问用户你今年多大了.
    输出1一句话 "这么巧啊.我今年也是xx岁."







#pragma mark - 05 使用scanf函数需要注意的细节 [掌握]


    1). 变量的命名要符合规范.   ***************


    2). 注释要有 可以帮助你理清思路.


    3). scanf函数不是printf函数所以后面不要加\n换行. ******************


    4). scanf函数后面要写上变量的地址 而不是写变量.  ******************
    使用&就可以取变量的地址.

    5). 如果之前的程序正在运行 没有结束 新运行程序之前 要把旧程序停掉.


    6). 占位符要和后面的变量的类型对应.否则就会出现意想不到的情况. *************






#pragma mark - 06 使用scanf函数一次接收输入多个数据 [掌握]

1. 用户在输入多个数据的时候.默认的分隔符号是空格或者回车.


2.自定义分隔符:
    在格式控制字符串中可以自定义多个输入数据的分隔符.
    scanf("%d-%d-%f",&num,&boyNum,&avg);
    代表输入3个数据 这3个数据使用-分开.

注意:
1). 一旦指定了分隔符 那么就必须使用指定的分隔符了 空格和回车就无法使用了.
2). 如果使用scanf函数一次输入多个数据,只能是数(整型和浮点型) 如果有char混合输入 就会出问题.








#pragma mark - 07 scanf函数的缓冲区 [听懂]
#warning 此知识点听不懂就算了 反正开发ios是用不到的

"强调
1.当控制台停下来等待你输入,说明缓冲区是空的
2.你输入的所有数据都会存储到缓冲区,然后程序从缓冲区拿数据向变量赋值
3.只要缓冲区有数据,程序再遇到scanf语句,就不会在控制台等待你输入
4.程序从缓冲区拿数据,如果是给浮点数或者整数赋值,忽略空格/tab/回车,给字符赋值,不会忽略任何数据.


    解决方案: 在输入字符之前,将缓冲区中的数据全部清空.
    rewind(stdin);


综合例子1:
//输入 1空格2空格3回车 结果是什么?为什么?
int main()
{
    int num1=0,num2=0,num3=0;
    scanf("%d%d",&num1,&num2);
    printf("----------------\n");
    scanf("%d",&num3);
    printf("%d---%d---%d\n",num1,num2,num3);
    return 0;
}
综合例子2:
//出什么问题,怎么解决?
int main()
{
    int num1=1;
    char num_c = 'a';
    scanf("%d",&num1);
    rewind(stdin);
    scanf("%c",&num_c);
    printf("%d----%c---\n",num1,num_c);
}






#pragma mark -08 交换两个变量的值 [掌握]

1.第一种方式:第三方变量   ****************
    int num1 = 100;
    int num2 = 200;
    int temp = num1;
    num1 = num2;
    num2 = temp;

2.第二种方式:两数相加再相减
    int num1 = 100;
    int num2 = 200;
    num1 = num1 + num2;
    num2 = num1 - num2;
    num1 = num1 - num2;
    //记忆口诀 121加减减

3.练习:请用户输入两个数,交换,并打印结果
//思路
int main()
{
    //1.定义两个变量用于接受用户输入的数,并交换
    //1.1定义变量
    int num_1,num_2;
    //1.2提示用户输入
    printf("亲,请输入两个整数用于交换,用^_^隔开!!!!\n");
    //1.3接收用户输入
    scanf("%d^_^%d",&num_1,&num_2);
    //2.需要一个第三方变量来协助我交换
    printf("交换前%d^^^^^^^^%d\n",num_1,num_2);
    int num_temp;
    num_temp = num_1;
    num_1 = num_2;
    num_2 = num_temp;
    printf("交换后%d^^^^^^^^%d\n",num_1,num_2);
    return 0;
}





#pragma mark -09 算术运算符和算术表达式简要介绍 [掌握]

"强调
取余数 %  5%2  = 1






#pragma mark -10 算术表达式 [掌握]

"强调
1.算数表达式的值有没有类型?
有,算数表达式最终结果类型,取决于精度最高的那个数
精度 ---> 浮点数 > 整数 ----> double > float > int

float result =  10 + 1.1f;
double result2 =   1.2 + 1.2f;

2.当参与运算的数据类型一致,算数运算表达式的结果的类型就是参与运算的数据的类型

分析下面代码段的运行结果
    1>
    int main()
    {
        
        int result = 1/3;
        /*
         先计算真实结果-->0.333333333-->由于参与运算的数都是整型,只取结果的整数部分
         */
        printf("%d\n",result);
        return 0;
    }
    2>
    int main()
    {
        
        double result = 1/3;
        /*先计算真实结果-->0.333333333-->由于参与运算的数都是整型,只取结果的整数部分0,然后,由于是给一个double类型的变量赋值,所以又会把 0 ---> 0.000000
         */
        printf("%lf\n",result);
        return 0;
    }



3.如何获取两个整数的真实的商
    //思路
    int main()
    {
        double result = (1*1.0)/3;
        /*
         ---->double 1.0 / int 3---> double 1.0 / double 3.0 --->double 0.3333333
         */
        printf("%lf\n",result);
        return 0;
    }


4.注意
a. 求模运算.实型数据无法参与求模运算,因为没有意义.
b. m % n 的结果一定是在 0 --- (n - 1 )之间的.





#pragma mark -11 案例讲解 [掌握]

某超市衣服120.88一件. 裤子89.9一条.
让顾客输入自己买的衣服数量和裤子数量.
1). 显示他应该付款多少钱.
2). 如果商家打88折 再显示打折以后应该付款多少钱.

int main()
{
    //1. 声明两个变量保存衣服的单价和裤子的单价.
    double kuZiPrice = 89.9;
    double yiFuPrice = 120.88;
    //2. 声明两个变量保存衣服和裤子的数量
    int kuZiCount = 0;
    int yiFuCount = 0;
    //3. 让用户输入裤子和衣服的数量.
    printf("请输入裤子和衣服的数量使用空格分隔: ");
    scanf("%d%d",&kuZiCount,&yiFuCount);
    //4. 计算总价.
    //   衣服的单价 * 衣服的数量 + 裤子的单价 * 裤子数量.
    double money =  yiFuPrice * yiFuCount + kuZiPrice * kuZiCount;
    //5. 计算折扣价.
    double youHui = money * 0.88;
    //6. 输出.
    printf("总价格为:%.2lf,优惠价格为:%.2lf\n",money,youHui);
   
}


#pragma mark -12 算术运算符的优先级和char数据参与算术运算 [掌握]

1 + 2- 5%4 + 3/1;
/*
// * / % 的优先级 是比 + - 的优先级 高
//先算 * / %
1 + 2 - 5%4 + 3/1;
1 + 2 -  1  + 3
//计算 + -
5
*/

"强调
1.char变量/常量和整数一起运算直接计算拿ASCII码
int sum = 'a' + 3;
char char_b = 'b';
sum =  2 + char_b;

2.如何把小写的字母转化为大写
char char_xiao = 'a' -32;




#pragma mark -13 复合赋值运算符 [掌握]
1.是什么

把一个变量在自身的基础之上进行变化

2.怎么用
int main()
{
    int num = 1;
    num = num + 1;
    等价写法 num += 1;
}


3.常见的复合赋值运算
int num = 10;
+= 比如: num += 10; --->等价于 num = num + 10;
-= 比如: num -= 10; --->等价于 num = num - 10;
/= 比如: num /= 10; --->等价于 num = num / 10;
%= 比如: num %= 10; --->等价于 num = num % 10;


4.练习
int main()
{
    int num =  111;
    num %= 2;
    printf("%d\n",num);
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2