C语言上机指导指导教师:李辉李晓丽东北电力大学电气工程学院2006年3月实验2数据类型、运算符和表达式1.实验目的掌握C语言数据类型,熟悉如何定义一个整形、字符型和实型的变量,以及对他们赋值的方法。
掌握不同的类型数据之间赋值的规律。
学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
进一步熟悉C程序的编辑、编译、连接和运行的过程。
2.实验内容和步骤(2).在此基础上增加一个语句:printf(“%d%d\n”,c1,c2);再运行,并分析结果。
(3).再将第2行改为:int c1,c2;再使之运行,并观察结果。
(4).再将第3、4行改为:c1 = a; /* 不用单撇号*/c2 = b;再使之运行,分析其运行结果。
(5).再将第3、4行改为:c1 = ”a”; /* 用双撇号*/c2 = ”b”;再使之运行,分析其运行结果。
(6).再将第3、4行改为:c1 = 300; /* 用大于255的整数*/c2 = 400;再使之运行,分析其运行结果。
输入并运行教材第3章习题3.6给出的程序(1).将一个负整数赋给一个无符号的变量,会得到什麽结果。
画出它们在内存中的表示形式。
(2).将一个大于32765的长整数赋给整形变量,会得到什麽结果。
画出它们在内存中的表示形式。
(3).将一个长整数赋给无符号的变量,会得到什麽结果(分别考虑该长整数的值大于或等于65535 以及小于65535 的情况)。
画出它们在内存中的表示形式。
同学们可以改变程序中各变量的值,以便比较。
例如:a = 65580, b = -40000,e = 65535,f = 65580。
输入习题3.10(2).将第4、5行改为:m = i++;n = ++j;再运行。
printf(“%d,%d”, ++i, ++j);(5).再将printf 语句改为:printf(“%d,%d,%d,%d”, i, j, i++, j++);该题的要求是:要将”China”译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。
例如,字母”A”后面第4个字母是”E”,用”E”代替”A”。
因此,”China”应译为”Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5 五个变量的值分别为‟C‟、‟h‟、‟i‟、‟n‟、‟a‟,经过运算,使c1、c2、c3、c4、c5分别变为‟G‟、‟l‟、‟m‟、‟r‟、‟e‟、,并输出。
①输入事先已编好的程序,并运行该程序。
分析是否符合要求。
②改变c1、c2、c3、c4、c5、的初值为:‟T‟、‟o‟、‟d‟、‟a‟、‟y‟,对译码规律作如下补充:‟W‟用‟A‟ 代替,‟X‟用‟B‟代替,‟Y‟用‟C‟代替,‟Z‟用‟D‟代替。
修改程序并运行。
③将译码规律修改为:将字母用它前面的第4个字母代替,例如:‟E‟用‟A‟ 代替,‟Z‟用‟U‟代替,‟D‟用‟Z‟代替,‟C‟用‟Y‟代替,‟B‟用‟X‟代替,‟A‟用‟V‟代替。
修改程序并运行。
实验 3 最简单的C 程序设计1.实验目的掌握C语言中使用最多的一种语句——赋值语句的使用方法。
掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
2.实验内容和步骤掌握各种格式转换符的正确使用方法(3).在此基础上,修改程序的第8-13行:a = 61;b = 62;c1 = ‟a‟; c2 = ‟b‟;f = 3157.890121;g = 0.123456789;d = f;e = g;p = a = m = 50000; q = b = n = -60000;运行程序,分析结果。
(4).改用scanf 函数输入数据而不用赋值语句,scanf 函数如下:scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,&a,&b,&c1,&c2, &d,&e,&f,&g,&m,&n,&p,&q);输入的数据如下:61,62,a,b,3.56,-6.87,3157,890121,0.123456789,50000,-60000,37678,40000↙(说明:lf 和ld 格式符分别用于输入double 型和long 型数据)分析运行结果。
(5). 在(4) 的基础上将printf 语句改为:printf(“a=%d, b=%d \nc1=%c, c2=%c\nd=%15.6f, e=%15.12f\n”, a, b, c1, c2, d, e);printf(“f=%f, g=%f \nm=%d, n=%d\np=%d, q=%d\n”, f, g, m, n, p, q); 运行程序。
(6). 将p 、q 改用%o 格式符输出。
(7). 将scanf 函数中的%lf 和%ld 改为%f 和%d ,运行程序并观察分析结果。
按习题4.8要求编写程序 题目为:设圆半径r =1.5,圆柱高h =3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf 输入数据,输入计算结果。
输出时要有文字说明,取小数点后两位数字。
编程序,用getchar 函数读入两个字符给c1、c2,然后分别用putchar 函数和printf 函数输出这两个字符。
上机运行程序,比较用printf 和putchar 函数输出字符的特点。
实验4 逻辑结构程序设计1. 实验目的了解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真” )。
学会正确使用逻辑运算符和逻辑表达式。
熟练掌握if 语句和switch 语句。
结合程序掌握一些简单的算法。
学习调试程序。
2. 实验内容本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。
(1). 有一函数:⎪⎩⎪⎨⎧≥-<≤-<=)10(113)101(12)1(x x x x x xy 用scanf 函数输入x 的值,求y 值。
(习题5.5)运行程序,输入x 的值(分别为x<1、1≤x<10、x≥10三种情况),检查输出的y 值是否正确。
(2). 给出一个百分制成绩,要求输出成绩等级A 、B 、C 、D 、E 。
90分以上为A ,81-89分为B ,70-79分为C ,60-69分为D ,60分以下为E。
(习题5.6)。
①事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。
(3).给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
(习题5.7)应准备以下测试数据:●要处理的数为1位正整数;●要处理的数为2位正整数;●要处理的数为3位正整数;●要处理的数为4位正整数;●要处理的数为5位正整数。
除此之外,程序还应当对不合法的输入作必要的处理。
例如:●输入负数;输入的数超过5位(如123 456)。
(4).输入4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
(习题5.9)(5).计算DNA分子中A、G、C、T四种碱基的分子量。
(6).根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。
(7).现有十二个小球,其中一个球的重量与其它十一个的重量不相同,但不知道是轻还是重。
试用天平称三次,把这个非标准球找出来,并指出它比标准球是轻还是重。
要求:(1).用嵌套的选择结构编写程序;(2).调试程序时,必须把十二个球或轻或重共24种可能性都找出来。
实验5 循环控制1.实验目的熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
2.实验内容编程序并上机调试运行。
(1).输入两个正整数m和n,求它们的最大公约数和最小公倍数。
(习题6.1)在运行时,输入的值m>n,观察结果是否正确。
再输入时,使m<n,观察结果是否正确。
修改程序,不论m和n为何值(包括负整数),都能得到正确结果。
(2).输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
(习题6.2)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数。
(3).用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。
(习题6.12)在得到正确结果后,请修改程序使所设的x初值由1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。
(4).猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩一个桃子了。
求第一天共摘了多少桃子。
(习题6.10)在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序,并运行,检查结果是否正确。
实验6 数组1.实验目的掌握一维数组和二维数组的定义、赋值和输入输出的方法;掌握字符数组和字符串函数的使用;掌握与数组有关的算法(特别是排序算法)。
2.实验内容编程序并上机调试运行。
(1).用选择法对10个整数排序。
10个整数用scanf函数输入。
(习题7.2)(2).有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
以15个数用赋初值的方法在程序中给出。
要找的数用scanf函数输入。
(习题7.9)(3).将两个字符串连接起来,不要用strcat函数。
(4).找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
(习题7.8)应当至少准备两组测试数据:①二维数组有鞍点9 80 205 4090 -60 96 1210 -3 101 89②二维数组没有鞍点9 80 205 4090 -60 196 1210 -3 101 8945 54 156 7用scanf函数从键盘输入数组各元素的值,检查结果是否正确。
题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。
因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。