Loading

C语言第二次实验报告

一、目的

& 掌握二维数组的定义、赋值、使用和输入输出方法 ,掌握字符数组和字符串的使用。

&  掌握指针的概念,会定义和使用指针变量,正确使用变量、数组、字符串的指针和指向变量的指针变量。

学习单向链表的创建、删除、  插入(无序、有序)、输出、  排序(选择、插入、冒泡)、反序等等。

& 熟悉递归函数的基本思想,掌握数值型与非数值型递归函数的编程问题。

& 掌握结构体变量的定义和使用、掌握结构体数组的定义和使用、了解结构指针的定义和使用。

二、实验内容与设计思想

【二维数组】求矩阵各行元素之和

设计思路:用二维数组模拟出一个矩阵原型,二维数组所对应的两个嵌套for循环对应矩阵的行和列,最后再将行元素分别累加,即可实现最终目的。

代码如下:

#include <stdio.h>
int main()
{    int a[10][10]={0};
    int m,n,sum=0;
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            sum+=a[i][j];
        }
        printf("%d\n",sum);
        sum=0;
    }     
}

运行结果如图:

【字符串】字符串字母大小写转换

设计思路:本题在对数组有一定了解的基础上,需要通过定义一个字符型数组,在通过acsll码实现字符元素的大小写转化。

代码如下:

#include <stdio.h>

int main(){
    while(1){
        char x;
        scanf("%c",&x);
        if(x=='#'){
            break;
        }else if(x>='a'&&x<='z'){
            x -= 32;
        }else if(x>='A'&&x<='Z'){
            x += 32;
        }
        printf("%c",x) ;
    }

    
    
    
    return 0;
}

运行结果如图:

【数组和指针】13-2 利用指针找最大值

设计思路:首先定义一个函数findmax( int *px, int *py, int *pmax ),对应形参为指针型,通过findmax函数的比较,找出最大值,并返回对应实参数的地址,得到最大值。

代码如下:

#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;
}

运行结果如图:

【结构体 指针 字符串】14-8 字符串排序

设计思路:此题较为简单主要学会对于strcpystrcmp的运用,然后在通过比较的字母循序进行排序。

代码如下:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int i,j;
    char a[50][200], t[200];//改大了点,不然字符串太长会超出数组范围
    
    for (i = 0; i < 5; i++)
    {
        scanf("%s",a[i]);
    }
    for (i = 1; i < 5; i++)
    {
        for (j =0; j < 5-i ;j++)
        if (strcmp(a[j], a[j+1]) > 0)
        {
        strcpy(t,a[j]);
        strcpy(a[j], a[j + 1]);
        strcpy(a[j + 1], t);
        }
    }
    printf("After sorted:\n");
    for (i = 0; i < 5; i++)
    puts(a[i]);
    return 0;
}

 

运行结果:

 

 

 

【结构体 链表 递归】15-10 找最长的字符串

设计思路:定义一个字符结构体,在通过统计字符串的长度并比较最终的结果。

代码如下:

#include<stdio.h>
#include<string.h>
struct s{
    char name[86];
};
int main()
{
    int n,i,max=0,index;
    scanf("%d",&n);
    struct s longer[n];
    for(i=0;i<n;i++)
        scanf("%s",longer[i].name);
        for(i=0;i<n;i++)
        {
            if(strlen(longer[i].name)>max)
            {
            max=strlen(longer[i].name);
            index=i;
            }
            }
    printf("The longest is: %s",longer[index].name);
    return 0;
}

 

运行结果:

三、实验使用环境

本次实验在devc环境下调试

四、实验小

  1. 对于指针的指向问题有时会比较绕,导致许多问题分析不清、理解不清。
  2. 对于链表几乎不会。
  3. 结构体定义时没有对应清楚元素与数据的关系。
  4. 寒假要好好补缺补漏。

 

posted @ 2018-01-28 16:58  Kingwan  阅读(229)  评论(0编辑  收藏  举报