C语言第二次实验报告
C语言第二次实验报告
一、实验题目,设计思路,实现方法。
题目1: 11-4 判断上三角矩阵(15 分)
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
上三角矩阵指主对角线以下的元素都为O的矩阵;主对角线为从矩阵的左上角至右下角的连线。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
设计思路:运用循环嵌套,判断下三角元素全为0,即当行序数大于列序数时的元素值都为0。
实现方法:运用两个for循环,定义b=0,if语句判断当元素下标行序数大于列序数时元素值是否为0,若不是,b=1。循环结束时,若b=0,则改矩阵是上三角矩阵,若b=1,则该矩阵不是上三角矩阵。
题目2: 12-3 字符串逆序(15 分)
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
设计思路:先得出字符串的长度,再通过循环使字符交换位置,从而得到逆序的字符串。
实现方法:在while循环中用getchar()得出字符串的长度i,然后字符逆序需要交换的次数为i/2,用for循环使的字符交换,从而得到逆序字符。别忘了字符串需要结束符’/0’。
题目3: 13-3 在数组中查找指定元素(15 分)
函数接口定义:
int search( int list[], int n, int x );
其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到
则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
else
printf("Not found\n");
return 0;
}
/* 你的代码将被嵌在这里 */
设计思路:用循环找到x所在的位置,找到其对应的下标。
实现方法:用for循环找到x所对应元素的位置,记录其下标值,将值返回主函数。
题目4; 14-4 输出月份英文名(15 分)
本题要求实现函数,可以返回一个给定月份的英文名称。
函数接口定义:
char *getmonth( int n );
函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。
裁判测试程序样例:
#include <stdio.h>
char *getmonth( int n );
int main()
{
int n;
char *s;
scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
设计思路:将月份对应的数组存入二维数组,再根据读取的月份数字对应输出月份英文字母。
实现方法:定义二维数组,将月份对应的英文字母存入数组,若月份存在则返回月份对应的英文字母,否则返回空指针。
题目5: 15-10 找最长的字符串(15 分)
本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。
输入格式:
输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出格式:
在一行中用以下格式输出最长的字符串:
The longest is: 最长的字符串
如果字符串的长度相同,则输出先输入的字符串。
设计思路:得出字符串长度,通过循环将它们进行比较。
实现方法:引用字符串长度函数strlen()计算字符串的长度,再用for循环比较长度。加头文件#include<string.h>。
二、源程序
题目1: 11-4 判断上三角矩阵(15 分)
题目2: 12-3 字符串逆序(15 分)
题目3: 13-3 在数组中查找指定元素(15 分)
题目4; 14-4 输出月份英文名(15 分)
题目5: 15-10 找最长的字符串(15 分)
三、遇到的问题及解决方法,心得体会。
1、判断上三角矩阵的时候,一开始没有想到可以通过行序数大列序数来判断,绕了很多弯路。
2、输出月份对应英文单词,开始用switch()出现段错误,后面定义一维数组还是答案错误,在老师的讲解下,知道应该定义成二维数组。
3、知道了字符串长度函数strlen(),使得编程步骤简单很多。