C语言的一个特点就是它更多地强调表达式而不是语句,表达式是表示如何计算值的公式。

当表达式包含两个或更多个相同优先级的运算符时,运算符的结合性(associativity)开始发挥作用。如果运算符是从左向右结合的,称这种运算符是左结合的(left associative);如果运算符是从右向左结合的,那么称这种运算符是右结合的(right associative)。

程序:计算通用产品代码的校验位

美国和加拿大的货物生产商都会在超市销售的每件商品上放置一个条形码,称为通用产品代码(Universal Product Code,UPC),用于设别生产商和产品。该代码由四组数字组成,比如:

0 13800 15173 5

第一组数字共1位,用于表示商品的种类;第二组数字占用5位,用来标识生产商;第三组数字占用5位,用来标识产品(包括包装和尺寸);最后1位数字是“校验位”,它唯一的目的就是用来识别前面的数字是否出错。

下面是计算校验位的一种方法:首先把第1、3、5、7、9、11位数字相加,设和为sum1;接着将第2、4、6、8、10位数字相加,设和为sum2;接着把第一次加法的结果乘以3,再和第二次加法的结果相加;随后再把上述结果减1;相减后的结果除以10取余数;最后用9减去上一步骤中得到的余数。

 /* upc.c */
/* Computes a Universal Product Code check digit */
int main()
{
int d, i1, i2, i3, i4, i5, j1, j2, j3, j4, j5;
int first_sum, second_sum, total; printf("Enter the first (single) digit: ");
scanf("%1d", &d);
printf("Enter the first group of five digits: ");
scanf("%1d%1d%1d%1d%1d", &i1, &i2, &i3, &i4, &i5);
printf("Enter the seconf group of five digits: ");
scanf("%1d%1d%1d%1d%1d", &j1, &j2, &j3, &j4, &j5); first_sum = d + i2 + i4 + j1 + j3 + j5;
second_sum = i1 + i3 + i5 + j2 + j4;
total = first_sum * + second_sum;
printf("Check digit: %d\n", - ((total - ) % )); return ;
}

运行结果如下:

在许多编程语言中,赋值是语句;然而,在C语言中赋值就像+那样是运算符。换句话说,赋值操作产生结果,就如同两个数相加产生结果一样。

大多数C语言运算符允许它们的操作数是变量、常量或者包含其他运算符的表达式,然而,赋值运算符要求它的左操作数必须是左值(lvalue)。左值表示存储在计算机内存中的对象,而不是常量或计算的结果。

小结:所有的11种赋值运算符,包括简单赋值和复合赋值,其优先级(优先级仅仅高于逗号运算符)和结合性(均右结合性)都相同。

C语言有一条不同寻常的规则,那就是任何表达式都可以用作语句(表达式语句)。

《C语言程序设计现代方法》第4章 表达式的更多相关文章

  1. C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载

    下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...

  2. C语言程序设计-现代方法(笔记1)

    第一章 C语言概述 1.C语言的历史(1.1) 起源:贝尔实验室开发的UNIX操作系统的副产品.标准化:C89和C99.基于C的语言:C++,Java,C#,Perl. 2.C语言的优缺点(1.2) ...

  3. Java语言程序设计(基础篇) 第六章 方法

    第六章 方法 6.2 定义方法 1.方法的定义由方法名称.参数.返回值类型以及方法体组成. 2.定义在方法头中的变量称为形式参数(formal parameter)或者简称为形参(parameter) ...

  4. C语言程序设计现代方法_基本类型(第七章)

    C语言支持两种不同的数值类型,整数类型,浮点类型. C语言的整数类型有不同的尺寸.int类型通常为32位,但在老的CPU上可能是16位.有些可能是64位. 因此,int型如果在16位CPU上最大值就是 ...

  5. 《C语言程序设计现代方法》第3章 格式化输入/输出

    完整的细节将留到第22章中介绍. 调用printf函数一次可以打印的值的个数没有限制. 注意:C语言编译器不会检查格式串中转换说明的数量是否和输出项的数量相互匹配,也不会检查转换说明是否适合要显示项的 ...

  6. C语言程序设计现代方法1,2,3章

    1:浮点型(float)运算比int慢,并且可能存在舍入误差 如float存储0.1,以后使用可能会变成0.099999999987 2:宏定义只用大写,这是大多数C程序猿遵循的规范! C语言区分大小 ...

  7. 《C语言程序设计现代方法》第4章 编程题

    1 编写一个程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数. 方法一:没技术含量的 #include <stdio.h> int main() { int high, low; ...

  8. 《C语言程序设计现代方法》第2章 C语言基本概念

    C语言的基本概念 第一个C程序例子. /* pun.c */ #include <stdio.h> int main(void) { printf("To C, or not t ...

  9. 《C语言程序设计现代方法》第1章 C语言概述

    C语言的特点:C语言是一种底层语言.C语言是一种小型语言.C语言是一种包容性语言. C语言的优点:高效.可移植.功能强大.灵活.标准库.与UNIX系统集成. C语言的缺点:C程序更容易隐藏错误.C程序 ...

随机推荐

  1. 引用传递&值传递

    下面的程序阐述了值传递与应用传递的区别. package com.liaojianya.chapter1; /** * This program demonstrates the use of arr ...

  2. Spring 对JDBC的支持(JdbcTemplate)

    Spring对数据库的操作,使用JdbcTemplate对象 需要引入相关的jar文件 如版本:(Spring核心jar包就不列了) spring-jdbc-3.2.5.RELEASE.jar spr ...

  3. Java中printStackTrace()、toString()、getMessage()的区别

    一.三者之间的关系图: 二.演示 1.printStackTrace()演示: public class Test {     public int div(int a, int b)     {   ...

  4. AOP学习过程中遇到的问题汇总

    jdk版本问题:     在spring较低的版本中,仅支持jdk1.5到1.7版本,由于我本机安装的是jdk1.8,所以在调试的时候就会提示jdk版本要高于1.5.于是换成spring4.0,在co ...

  5. Fedora 21 安装QQ国际版

    首先安装依赖包 sudo yum install freetype.i686 libpng.i686 libgcc.i686 libXau.i686 点击下载wine-2012qq国际版 unzip ...

  6. 常用命令su ls cp cd mv cat touch mkdir rm head less more pwd tac 等

    1.用户切换 su:switch user su kevin   //半切换,切换到kevin用户,但是不读取kevin用户的配置文件 su - kevin   //完全切换,执行这个命令的时候表示切 ...

  7. Java Servlet 回顾

    一.转发请求RequestDispatcher 使用request域对象把数据带给转发资源,与重定向的区别:客户端只发出一次请求,服务器端调用多个资源,客户端浏览器地址栏没改变:转发是一次请求,使用的 ...

  8. WinForm TreeView 三种状态

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { var node = e.N ...

  9. MySql 在大数量的统计中具体的使用技巧

    一.CASE WHEN THEN ELSE END 使用用法. 在用sql语句统计某字段的某种状态的出现的次数,可以考虑用到 CASE WHEN THEN ELSE END 使用用法.当数据量过于庞大 ...

  10. nodejs中间层现实

    初次接触nodejs,是一种非常神奇的东西,未来必火起来.个人觉得最大优势npm命令. 闲话少说,直入主题.这是一个博客项目,php最为服务端,提供数据给node:nodejs+express作为中间 ...