3.知识要点
1 

.运算符的构成及运用。
.表达式的构成及运算规则。
.数据的输入与输出。
【知识点讲解】用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C 
语言语法规则的式子,称为表达式。C语言提供有丰富的运算符,构成多种表达式,主要有
算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式。

把数据从计算机内部送到计算机的外设上的操作称为“输出”。相反,从计算机外部设
备将数据送入计算机内部的操作称为“输入”。输入、输出是对数据的重要操作。没有输出
的程序是没有用的,没有输入的程序是缺乏灵活性的。在程序运行时,由用户临时输入所需
的数据,可以提高程序的通用性和灵活性。C语言本身不像其他高级语言一样有输入和输
出语句,其输入和输出是由标准的输入输出函数完成的。在使用系统库函数时,要用预编译
命令“#include”将有关的“头文件”包含到用户源程序中。本次实验涉及的知识点关系如
图3-1所示。


图3-
1 
本次实验涉及的知识点关系图

3.上机实验
2 

1. 
实验目的
.学会使用C语言算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符、条
件运算符,掌握C语言中表达式的概念,理解相应运算符的运算规则和在运算过程
中数据类型的转换规则。
.掌握赋值语句的使用方法。
.掌握字符输入输出函数的使用形式及调用方法。
.掌握格式输入输出函数的使用形式及调用方法,能够正确使用常用格式控制符。

第1部分 知识点讲解及实验安排 23 
2.实验参考
【例3-1】 股票发行价格计算中,可以使用不同的方法进行定价,其中一种方法为分析
法:股票价格=((资产总值-负债总值)/投入资本总额)×每股面值。
请编写一个程序,给定资产总值、总负债值、投入资本总额和每股面值,计算股票价格
(精确到小数点后2位)。
【源程序】 
#include <stdio.h> 
int main() 
{ 
double assets, debt, invest, value, pricing; 
printf("请输入上市公司资产总值,负债总值,投入资本总额,每股面值(用空格分开):\n"); 
scanf("%lf%lf%lf%lf",&assets,&debt,&invest,&value); 
pricing=(assets-debt)/invest*value; 
printf("上市公司资产总值assets=%.2e\n 负债总值debt=%.2e\n 投入资本总额 
invest=%.2e\n 每股面值 
value=%.2e\n",assets,debt,invest,value); 
printf("计算得到股票价格为pricing=%.2f\n",pricing); 
return 0; 
}
【程序输入】 
请输入上市公司资产总值,负债总值,投入资本总额,每股面值(用空格分开): 
500000000 90000000 100000000 4<CR> 
【程序输出】 
上市公司资产总值assets=5.00e+008 
负债总值debt=9.00e+007 
投入资本总额invest=1.00e+008 
每股面值value=4.00e+000 
计算得到股票价格为pricing=16.40 
【程序分析】 根据股票价格计算公式:股票价格=((资产总值-负债总值)/投入资本
总额)×每股面值,计算股票定价。由于结果需要精确到小数点后2 位,因此变量都用
double数据类型来存储,而且资产数值较大,所以用%e来控制输出。%.2e表示使用科学记
数法,实数后面保留2位小数位。还有其他修饰符,例如:“%5f”就是要保证结果的最小宽
度为5,“%-f”表示输出字符靠左。
【例3-2】 编写程序判断年数是闰年还是平年,闰年输出为1,平年输出为0。闰年判断
公式:((year%4==0)&&(year%100!=0))‖(year%400==0)。
【源程序】 
#include <stdio.h> 
int main()

C语言程序设计实验及习题解答(第24 2版) 
{ 
unsigned int year=0; 
int res=0; 
printf("请输入年份: "); 
scanf("%d",&year); 
res=((year%4==0)&&(year%100!=0))‖(year%400==0); 
printf("res=1 是闰年\nres=0 是平年\n"); 
printf("结果是:\nres=%d\n",res); 
return 0; 
}
【程序输入】 
请输入年份:1975<CR> 
【程序输出】 
res=1 是闰年
res=0 是平年
结果是: 
res=0 
【程序分析】 由于年份不可能出现负值,因而年份year定义为unsignedint类型。程
序中使用了算术运算符、关系运算符和逻辑运算符相结合来判断是闰年还是平年。优先级: 
算术运算符高于关系运算符高于逻辑运算符(除了!以外),在逻辑运算中还有可能发生“短
路现象”,例如,输入“2000”2000%4==0为“真”,且2000%100==0为“真”后面是或运算
“‖”,所以year%400不用再做判断,就可知道该表达式为真,这就是一种“短路”现象。
【例3-3】 请编写一个程序,使用getchar()和putchar(c)函数实现字符数据的输入、
输出。
【源程序】 
#include <stdio.h> 
int main() 
{ 
char a,b,c; 
a=getchar(); 
b=getchar(); 
c=getchar(); 
putchar(a); putchar(b); putchar(c); 
putchar('\n'); 
putchar('A'); putchar('\101'); putchar(65); 
return 0; 
}
【程序输入】 
BOY<CR>

第1部分 知识点讲解及实验安排 25 
【程序输出】 
BOY 
AAA 
【程序分析】 getchar函数的作用是从标准输入设备获得一个字符,其一般形式为
getchar()。在输入过程中,getchar()也会将空格、回车符当作一般字符输入。例如,上面例
题中,如果输入内容为"B<空格>O<空格>Y",则会分别将字符'B' '<空格>' 'O'传递给变
量a,b,c,输出的结果则为"B<空格>O"。putchar函数的作用是向标准输出设备(通常是
显示器或打印机)输出一个字符。其一般形式为putchar(c),输出字符变量c的值,c可以是
字符型变量、整型变量、转义字符。在使用该函数时,应在程序前使用预编译命令: 
#include<stdio.h>。
3.实验内容
编写程序并上机调试运行。
(1)设有变量定义如下: 
int i=6, j=12; 
double x=3.28, y=90; 
希望得到如下输出结果: 
i=6 j=c 
x=3.280000E+000 y=90 
请编程实现。
(2)某种物品每年的折旧费的线性计算方法如下: 
折旧费=(购买价格-废品价值)/使用年限
请编写一个程序,当输入某物品的购买价格、使用年限和废品价值时,程序能计算出其
在某一年折旧后的价值(结果保留两位小数)。
(3)编写程序实现以下功能。计算在贷款第一个月、第二个月及第三个月后需要还款
的金额。
贷款金额:20000.00 
年贷款利率:6.0% 
每个月还款金额:386.66 
第一个月剩余的需还款金额:19713.34 
第二个月剩余的需还款金额:19425.25 
第三个月剩余的需还款金额:19135.71 
说明:所有数额有效位数保持在小数点后2位。
提示:每个月,剩余的贷款金额为总数减去每个月的还款金额,但是每个月剩余的贷款
金额要加上按照月贷款利率计算出来的利息。月贷款利率为年贷款利率除以12。
(4)编写程序实现以下功能,使用平均分摊法计算融资租赁租金。
每次支付的租金=((租赁设备购置成本-预计残值)+租赁期间利息+租赁期间手续

C语言程序设计实验及习题解答(第26 2版) 
费)/租金支付次数。
例如:某企业于2016年1月1日从租赁公司租一设备价值100000元,租期为5年,预
计租赁期满残值6000元,归租赁公司,年利率9%,手续费是设备价格的2% (一次性收
取)。租金一年付一次,则每次需要支付的租金为:((100000-6000)+(100000×(1+ 
9%)5-100000)+100000×2%)/5=29972(元)。
3.3 实验过程中的常见问题与解决方法
【问题3-1】 提示信息中出现scanf或者printf函数未定义的错误提示。
造成这类问题的原因往往是忘记写文件包含命令#include<stdio.h>,或者包含写法
出错。例如: 
#include <stdio.h>; //添加了多余的";"号
#include <stdio.h>, <math.h> //不正确的书写方式
#include <stdio.h, math> //不正确的书写方式
解决方法:编译预处理命令以#开头,末尾不加分号;一个include命令只能指定一个
被包含文件。如果需要包含多个文件,则需用多个include命令,且一个命令应单独占一行。
【问题3-2】 未识别的字符类错误提示。
造成该类错误的原因有多种,根本原因是使用了C语言不接受的字符。例如: 
(1)程序中混淆使用中文字符和英文字符。
C语言在语法上不支持中文字符,所有的关键字和语法结构都需要使用英文字符。如
果在字符串和注释以外的地方使用全角字符,特别是全角的标点符号,如逗号、分号等,与半
角符号外观很像,不容易区分,会产生此类错误。
例如: 
int a,b; 
a=5; //这里使用了全角分号
b=8; 
(2)定义标识符的时候使用非法的字符。
C语言的变量等命名遵守一定的规范,并不是所有的名称都可以被接受。例如:f(a)、
a-b、2x都是非法的。错误的命名也会产生此类错误。
(3)错误地使用函数名称。
例如: 
print("Hello World"); //print 少输入一个"f"字符,会产生此类错误
(4)混淆正、反斜杠。
在C语言中,正、反斜杠有不同的含义,错误地使用也会产生此类错误。
例如: 
x=5\2; //写错除号
printf("/n"); //写错换行符

第1部分 知识点讲解及实验安排 27 
(5)没有定义变量就直接使用。
在C语言中,变量必须先定义然后再使用,否则会产生此类错误。
例如: 
#include <stdio.h> 
int main() 
{ 
y=x+10; //y,x 都没有定义,会产生错误 
return 0; 
}
解决方法:在错误提示处,再重新输入一遍,就可以解决全角半角的问题,以及脱字的
错误。但是命名错误、没有定义变量属于使用和字符理解错误,仔细地阅读错误提示信息, 
不难找到解决的方案。
【问题3-3】 括号使用不当的错误。
C语言中,应成对出现的符号必须配对,如:{}、[]、()、' '、""。如果写程序时发生了
不匹配的情况,就会给出这类提示。例如,大括号配对圆括号、尖括号配对大括号都会发生
此类错误。
解决方法同样是仔细阅读编译器的错误提示,很快可以找到问题。
【问题3-4】 忽略了变量的类型,进行了不合法的运算。
例如: 
int main() 
{ 
float a=4.0, b=3.0; 
printf("%d", a%b); 
}
因为“%”是取余运算,只有整型变量才可以进行取余运算,而实型变量是不允许进行
“取余”运算的,所以编译时会出现错误。
解决方法:进行运算时一定要注意变量的数据类型。
【问题3-5】 输入数据时,容易出现以下几种错误: 
(1)变量前忘记写地址符“&”。
例如: 
scanf("%d%d", x, y); 
虽然在编译时系统没有报告错误,但是在程序运行时会出错。
解决方法:输入数据时,变量前必须要有地址符“&”。
(2)从键盘输入数据时,输入的格式与scanf中格式字符串中的格式不一致。
例如: 
scanf("%d, %d", &x, &y); 
输入数据:12<空格>36<CR> 
输入时两个整数之间用空格分开,但是scanf格式字符串中的两个%d是用逗号分开

C语言程序设计实验及习题解答(第28 2版) 
的,所以只有x能得到数据12,而y还是随机数。
正确的输入方式是必须用逗号分开输入的两个整数,即输入12,36<CR>。
类似地,如果输入函数是scanf("x=%d,y=%d",&x,&y);则正确的输入方式是
x=12,y=36<CR>。
解决方法:输入数据的格式必须与scanf中格式字符串的格式保持完全一致。
(3)输入字符型数据时用空格、回车符来分隔两个字符数据。
例如: 
scanf("%c%c", &ch1, &ch2); 
printf("ch1=%c,ch2=%c.\n",ch1,ch2); 
输入数据:A<空格>B<CR> 
输出结果:ch1=A,ch2= . (实际上ch2=后面是输出了一个空格) 
因在格式字符串中两个%c之间没有空格,那么在输入数据时两个字符'A'和'B'之间也
不能有空格。如果格式字符串写成"%c%c",则在输入时'A'和'B'之间可以加空格。若写
成"%c,%c",则输入应为A,B<CR>。
解决方法:输入字符型数据时要注意不能用空格、回车符等来分隔两个字符数据,因为
它们本身也是合法的字符。
【问题3-6】 使用格式化输入、输出函数时,格式字符与变量的数据类型不匹配。
例如以下4个程序段: 
(1) int x=3; 
printf("x=%f\n", x); //输出x 时,格式字符用'f'是错的
输出结果:x=0.000000 //输出结果类型不匹配
(2) int x; 
scanf("%f", &x); //输入x 时,格式字符用'f'是错的
printf("x=%d\n", x); 
输入数据:3<CR> 
输出结果:x=1077936128 //输出结果不对
(3) float x=5.6; 
printf("x=%d\n", x); //输出x 时,格式字符用'd'是错的
输出结果:x=1610612736 //输出结果不对
(4) float x; 
scanf("%d", &x); //输入x 时,格式字符用'd'是错的
printf("x=%f\n", x); 
输入数据:5.6<CR> 
输出结果:x=0.000000 //输出结果不对
解决方法:格式字符一定要与变量的数据类型相匹配。
特别注意:longint型和double型数据输入、输出时应在对应的格式字符d' '或f' '前加字
母‘l’。