集美大学计算机工程学院实验报告
课程名称:高级语言程序设计 |
班级:网络1713 |
实验成绩: |
指导教师:贺冰琰 |
姓名:罗俊 |
|
实验项目名称: |
学号:201721123088 |
上机实践日期: |
|
|
|
一、实验题目、设计思路、实现方法
1.实验题目
11-2 求矩阵各行元素之和
12-3字符串逆序
13-2 利用指针找最大值
14-2 删除字符
15-5 建立学生信息链表
2.设计思路、实现方法
11-2:程序中将输入的矩阵存入二维数组a中,按矩阵的形式输出a,然后遍历该数组,通过每行的行下标和列下标两两相加,并输出相加之后的和
12-3:通过数组初始化,赋值或输入的方法把字符串存入数组,对字符串的草这就是对数组的操作。
13-2 :指针的值是某个变量的地址,通过指针间接访问那个变量,由取地址运算符&和接访问运算符*完成;将整形变量a的地址赋给整形指针p,使指针p指向变量a,即遍历全部,最后指向最大值,并输出
14-2 :结构数组的的元素师连续存放的,每个元素都分配足够的存储单元,通过使用数组下标找到所删除的元素,并使用空格代替
15-5:链表中,每个结点由数据部分和下一个结点的地址部分组成,利用递归定义方法构造出单向链表的数据结构,此题中,程序要求链表结构点式按学生的学号排序,因此,还需通过调用函数InserDoc()来实现
二、源程序
11-2 求矩阵各行元素之和:
#include<stdio.h>
int main(void)
{
int a[6][6],m,n,i,j,sum[6];
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
sum[i]=0;
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum[i]=sum[i]+a[i][j];
}
}
for(i=0;i<m;i++){
printf("%d
",sum[i]);
}
return 0;
}
12-3字符串逆序:
#include<stdio.h>
int main(){
char s[81]={0};
char c;
int i=0;
do{
scanf("%c",&s[i++]);
if(c!='
'){
s[i++]=c;
}
}while(s[i-1]!='
');
i=i-2;
while(i>=0){
printf("%c",s[i--]);
//i--;
}
printf("
");
return 0;
}
13-2 利用指针找最大值:
#include <stdio.h>
void findmax( int *px, int *py, int *pmax );
int main()
{
int max, x, y;
scanf("%d %d", &x, &y);
findmax( &x, &y, &max );
printf("%d
", max);
return 0;
}
/* 我的将被嵌在这里 */
void findmax( int *px, int *py, int *pmax )
{
if(*px>*py)
*pmax=*px;
else *pmax=*py;
return *pmax;
}
14-2 删除字符:
#include <stdio.h>
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] );
int main()
{
char str[MAXN], c;
scanf("%c
", &c);
ReadString(str);
delchar(str, c);
printf("%s
", str);
return 0;
}
/* 我的代码将被嵌在这里 */
void delchar( char *str, char c )
{
char* ret = str;
if( str != NULL )
{
char* p = str;
while( *str )
{
if( *str != c )
{
*p = *str;
p++;
}
str++;
}
*p = *str;
}
return ret;
}
15-5 建立学生信息链表:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node *head, *tail;
void input();
int main()
{
struct stud_node *p;
head = tail = NULL;
input();
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d
", p->num, p->name, p->score);
return 0;
}
/* 我的代码将被嵌在这里 */
void input()
{
struct stud_node *q;
q=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d", &q->num);
while(q->num != 0)
{
scanf("%s %d", q->name, &q->score);
if(head == NULL)
{
head = q;
head->next = NULL;
}
if(tail != NULL)
{
tail->next = q;
}
tail = q;
tail->next = NULL;
q=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d", &q->num);
}
}
二.学习小结
(1)动态输入多个字符串
用指针数组操作多个字符串时,都是通过初始化的方式对指针数组赋值,使指针的数组元素指向字符串。
(2)使用命令行的程序不能在编译中执行,需要将源程序经编译,链接为相应的命令文件,然后回到命令状态,再在该状态下直接输入命令文件名。
(3)链表定义,使用,指向。