一、实验题目、设计思路、实现方法
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\n",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!='\n'){
s[i++]=c;
}
}while(s[i-1]!='\n');
i=i-2;
while(i>=0){
printf("%c",s[i--]);
//i--;
}
printf("\n");
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\n", 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\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", 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\n", 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);
}
}
三.遇到的问题及解决方法,心得体会
问题:编译错误,部分正确,段错误,
解决方法:当遇到编译错误时,一般是在Dev-C++里氏运行不了的,通过Dev-C++调试,根据提示,重新修改。
当遇到部分正确时,在Dev-C++是能够运行的,需要通过在pta里提交的提示那里的错误,回顾做题思路和方向。
对其中的公式,和取值范围进行检查和修改。当遇到段错误时,一般就是语句和语法的错误,需要对该部分的
基础知识点进行牢学,比如语法的使用和嵌套的使用,遍历等等。
心得体会:通过学习和借鉴并在遇到错误时寻求解决方法的过程中不断对知识点的加深和巩固,在编译时思路
一定要清晰,在遇到问题时需要换一种思维进行进行引导,在不断遇到问题的过程中掌握知识也许是一种有效
的方法哦!