1、C 语言程序设计第 4 次上机内容 (第 1011 周)说明:同第 1 次上机内容的说明一样。一、上机练习部分1阅读理解教材第 6 章的习题 6.1 中的三个程序,通过阅读理解先写出其结果,并上机验证。二、编写程序1编写程序其功能是:任意输入 20 个整数到一维数组中,计算:(1)正数的个数和正数的和;(2)负数的个数和负数的和;(3)零的个数。最后输出结果。提示:(1)输入 20 个整数之后存入一维数组(2)定义 sum1 和 sum2 两个变量分别存放正数和负数的和,再定义 n1,n2,n3 三个变量分别存放正数、负数和零的个数。(3)处理:用循环结构依次对每一个数组元素的数进行判断,如果
2、是正数则进行正数所对应的操作,如果是负数则进行负数所对应的操作,如果是零则进行零的操作。运行结果:2编写程序其功能是:输入 10 个任意数,求这 10 个数中的最大值、最小值和平均值,并且给出最大值与最小值在这组数中位置。提示:(1)输入 10 个数用一维数组存放。(2)设 4 个变量分别用来存放最大值、最大值的位置、最小值、最小值的位置。用一个变量先存放累加和再存放平均值(考虑一下该变量用什么类型) 。(3)一般先选取数组中第一个数为最大值和最小值变量的初值,第一个数的下标 0 为最大值和最小值位置变量的初值。(4)利用循环结构将最大、最小值变量的值和所有数依次进行比较,如果某个数大于最大值
3、则把该数及它的下标赋给相应变量,如果某个数小于最小值则把该数及它的下标赋给相应变量。另外把每个数要进行累加。(5)循环结束,计算平均值,最后输出结果。运行结果:3编一个程序,输入一个 5 行 5 列的整数矩阵,判断该矩阵是否对称矩阵,是则输出“该矩阵是对称矩阵!” ,否则输出“该矩阵不是对称矩阵!” 。 (说明:对称矩阵的定义是所有第 i 行 j 列的元素值均等于第 j 行 i 列元素的值。 )比如以下矩阵就是对称矩阵。5 4 3 2 14 5 6 7 83 6 5 9 82 7 9 5 31 8 8 3 5提示:(1)定义一个二维数组,定义一个变量 flag 为判断矩阵是否为对称矩阵的标志初
4、值为1(flag 为 1 表示对称矩阵,为 0 表示不对称矩阵) 。(2)首先为二维数组输入数据。(3)用一个二重循环判断矩阵是否为对称矩阵,判断条件(aij 是否等于 aji) ,如果条件不等则将 flag 置 0,同时强制结束二重循环结构 (可以用 goto 语句强制结束二重循环结构)。(4)循环结束根据 flag 输出是否对称矩阵的信息。第 1 次程序运行结果如下: 第 2 次程序运行结果如下:4已知 4 个学生,5 门功课的成绩,编写程序完成:(1)计算每个学生的总分;(2)计算每门功课的平均分和每个人总分的平均分;(3)按下列程序运行结果的图示输出成绩表。提示:(1)题目涉及的数据有
5、 4 个学生 5 门课程的成绩,每个学生的总分以及每门课程的平均分和总分的平均分。为了处理上的方便,把所有数据都存放在一个数组里,则定义一个 5行 6 列的实型数组。最后一列的前 4 个数对应每个学生的总分;最后一行的前 5 个数对应每门课程的平均分,最后一个数是总分的平均分。(2)定义数组时对每个数组元素赋初值为 0。 (赋初值时只要用一个 0 就行了)(3)程序处理时首先用二重循环输入 4 个学生 5 门课程的成绩。(4)用二重循环求每个学生的总分。外循环控制“行”计数值为 03,内循环控制“列”计数值为 04,总分放在每一行的下标为 5 的列中。(5)再用二重循环求每一门课程的平均分及总
6、分的平均分。外循环控制“列”计数值为:05 ,内循环控制“行”计数值为 03,内循环中先对每一门课程的 4 个学生的成绩相加和总分相加,内循环结束再将相加的成绩除以 4 得到平均分存放到相应列的行下标为 4的数组元素中。(6)最后输出成绩统计表(输出时小数为 1 位,每个数据的输出宽度可为 7) 。程序运行窗口如下:5编一个程序,输入一个字符串存放在一个字符数组中,将其加密,加密规则是其中所有的大写英文字母加 3,小写英文字母减 3,其它字符不变。加密后的字符串存放到另一个字符数组中,最后输出原字符串和加密后的字符串。该程序的算法大致如下:(1)先输入一个字符串存放在一个字符数组中;(2)用循
7、环结构进行加密处理,循环可用 for 循环结构(用 strlen 函数计算该字符串的长度作为循环次数,如果用 strlen 函数那么在程序的开头必须要加#include ) ;也可用 while 循环(用字符串结束标记0 作为是否循环的判断条件)同学们可以用这两种循环结构各自编程一次。(3)循环体的操作就是对字符串中每一个字符进行判断,执行对其加 3 或减 3 或不变,再把加密后的字符存放到另一个数组的相应单元中,(3)原字符串的所有字符都处理完之后在存放加密字符串的最后一个字符的后面一个数组元素中加一个字符串结束标记0 。 (思考一下:为什么要加0 结束标记)(4)最后输出结果。6编一个程序
8、,从键盘上输入 3 个字符串(字符串最多为 80 个字符,可以含有空格) ,输出其中大者。算法分析:(1)先定义 1 个二维字符数组 a 用于存放输入的 3 个字符串,再定义 1 个一维数组 b 用于存放最大的字符串。 (每一个字符数组的长度应该是多少,请同学们根据题目要求考虑)(2)用一个循环结构输入 3 个字符串,循环体为:gets(ai); (思考一下为什么用 gets( )函数输入)(3)可以使用系统函数 strcmp()函数进行字符串的比较;比较之后对于较大的字符串可以用 strcpy()将其存入 b 数组中。程序片段:strcpy(b,a0);for (i=1;i运行结果如下图所示:思考一下:为什么 pascal 字符串最大?