zoukankan      html  css  js  c++  java
  • 数组实验

    C程序设计实验报告

    实验项目:函数和宏定义实验

    姓名:罗子健 实验地点:物联网实验室 实验时间:2019年5月29日

    一、实验目的与要求

    (1)掌握一维和多维数组的定义和数组元素的引用方法。

    (2)了解一维和多维数组初始化方法。

    (3)学习一维和多维数组的基本算法。

    (4)掌握字符数组的定义、初始化方法及其元素的引用方法。

    (5)掌握C语言提供的对字符串进行处理的基本库函数。


    二、实验内容

    7.3.1 一维数组的应用

    实验练习1

    1、问题的简单描述:编写程序,利用随机函数产生10个整数,按升序排列输出。算法流程图如图所示。

    2、实验流程图、代码和结果:

     1 /*ex7_1.c*/
     2 #include"stdio.h"
     3 #include"stdlib.h"
     4 #include"time.h" 
     5 sort1(int s[ ], int n)
     6 {
     7     int i,j;
     8     int temp;/*定义中间(临时)变量*/
     9     for(i=0;i<n-1;i++)/*用于排序的外循环for语句i*/
    10         for(j=9;j>=i+1;j--)/*用于排序的外循环for语句j*/
    11             if(s[j]<s[j-1]) 
    12             {
    13                 temp=s[j];
    14                 s[j]=s[j-1];
    15                 s[j-1]=temp;/*利用中间变量,完成两数组元素的交换*/ 
    16             }
    17 }    
    18 main()
    19 {
    20     int i, a[10];
    21     srand(time(NULL));/*给出随机种子*/
    22     printf("随机产生10个整数:
    ");
    23     for(i=0; i<10; i++)
    24     a[i]=rand()%100;/*随机产生10个整数*/
    25      for(i=0;i<10;i++)
    26      printf("%d  ",a[i]);
    27      printf("
    ");
    28      a[i]=sort1(a,i);/*调用排序函数*/
    29      printf("排序后的结果
    ");/*提示输出排序后的10个整数*/
    30      for(i=0;i<10;i++)/*for循环语句*/
    31      printf("%d  ", a[i]); 
    32 }
    7.3.1实验练习1

    3、问题分析:要利用随机函数来产生随机数。

    实验练习2

    1、问题的简单描述:无。

    2、实验流程图、代码和结果:

     1 /*ex7_2.c*/
     2 #include"stdio.h"
     3 #include"stdlib.h"
     4 #include"time.h" 
     5 sort2(int s[ ],int n)
     6 {
     7     int i, j, k;
     8     int temp;/*定义中间(临时)变量*/
     9     for(i=0;i<n-1;i++)/*用于排序的外循环for语句*/
    10     {    
    11         k=i;/*用临时变量k记下最小数的位置*/
    12         for(j=i+1;j<=n-1;j++)/*用于排序的内循环for语句*/
    13             if(s[k]>s[j]) 
    14                 k=j;/*记下最小数的下标*/     
    15             if(k!=i)
    16             {
    17                 temp=s[k];
    18                 s[k]=s[i];
    19                 s[i]=temp;/*利用中间变量,完成两数组元素的交换*/
    20             }
    21     }
    22 }
    23 main()
    24 {
    25     int i, a[10];
    26     srand(time(NULL));/*给出随机种子*/
    27     printf("随机产生10个整数:
    ");
    28     for(i=0; i<10; i++)
    29     a[i]=rand()%100;/*随机产生10个整数*/
    30      for(i=0;i<10;i++)
    31      printf("%d  ",a[i]);
    32      printf("
    ");
    33      a[i]=sort2(a,i);/*调用排序函数*/
    34      printf("排序后的结果
    ");/*提示输出排序后的10个整数*/
    35      for(i=0;i<10;i++)/*for循环语句*/
    36      printf("%d  ", a[i]); 
    37 }
    7.3.2实验练习2

    3、问题分析:无。

    7.3.2 二维数组的应用

    实验练习1

    1、问题的简单描述:编写程序,从键盘输入行数,输出指定行数的杨辉三角形。算法流程图如图所示。

    2、实验流程图、代码和结果:

     

     1 /*ex7_3.c*/
     2 #include "stdio.h"
     3 main()
     4 {
     5     int a[50][50],i,j,n;
     6     printf("请输入杨辉三角形的行数:
    ");/*提示请输入杨辉三角形行数*/
     7     scanf("%d",&n);/*用scanf()函数输入杨辉三角形行数*/
     8     for(i=1;i<=n;i++)/*用循环计算杨辉三角形各个值*/
     9     {
    10         a[i][i]=1;
    11         a[i][1]=1;
    12     }
    13     for(i=3;i<=n;i++)
    14     {
    15         for(j=2;j<=i-1;j++)
    16         {
    17             a[i][j]=a[i-1][j-1]+a[i-1][j];
    18         }
    19     }
    20     for(i=1;i<=n;i++)
    21     {
    22         for(j=1;j<=i;j++)    
    23         printf("%2d ",a[i][j]);/*用printf()输出杨辉三角形*/ 
    24         printf("
    ");
    25     }
    26     printf("
    ");
    27 } 
    7.3.2实验练习1

    3、问题分析:要注意i与j的意思,并且需要利用for循环语句来进行数组位置的排列。

    实验练习2

    1、问题的简单描述:编写程序,从键盘分别输入年、月、日,计算出该天是这年中的第几天。算法流程图如图所示。

    2、实验流程图、代码和结果:

     

     1 /*ex7_4.c*/
     2 #include "stdio.h"
     3 int day_tab[2][13]={
     4     {0,31,28,31,30,31,30,31,31,30,31,30,31},
     5     {0,31,29,31,30,31,30,31,31,30,31,30,31}};
     6     day_year(int year,int month,int day)/*统计天数函数的头部*/
     7     {    int i, j,s=0;
     8         if(year%100!=0&&year%4==0||year%400==0)
     9             i=1;
    10         else
    11             i=0;/*判断该年是否是闰年,并将其逻辑值给变量i*/
    12         for(j=1;j<month;j++)
    13         s=s+day_tab[i][j];/*对天数进行累加*/
    14         return s=s+day;/*返回总的天数*/         
    15 } 
    16 main()
    17 {    int y, m, d;
    18     printf("Input year_month_day:
    ");/*提示输入年、月、日*/
    19     scanf("%d %d %d",&y,&m,&d);/*分别输入年、月、日*/
    20     printf("是这年的第%d天
    ",day_year(y, m, d)); 
    21 } 
    7.3.2实验练习2

    3、问题分析:要注意闰年的判定条件。

    7.3.3 字符数组的应用

    1、问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否为回文数。算法流程图如图所示。

    2、实验流程图、代码和结果:

     

     1 /*ex7_5.c*/
     2 #include "stdio.h"
     3 #include "string.h"
     4 #define N 40
     5 main()
     6 {    char str[N],ch='Y';
     7     int i;
     8     int len;
     9     printf("Input a string:
    ");/*提示信息Input a string:*/ 
    10     scanf("%s",&str);/*用scanf()函数输入一个字符串*/
    11     len=strlen(str);/*求字符串的长度*/
    12     for(i=0;i<(len/2);i++)/*for循环语句的头部,终值为len/2*/ 
    13     if(str[i]!=str[len-1-i])
    14     {    ch='N';/*将标志ch设置为'N'*/
    15         break;/*退出循环*/ 
    16     }
    17     if(ch=='Y')/*if语句,当标志ch为'Y'时*/
    18         printf("%s是一个回文数
    ",str);
    19     else
    20         printf("%s不是一个回文数
    ",str);/*输出该字符串不是回文数*/ 
    21 }
    7.3.3

    3、问题分析:在C语言里等于是“==”,而不是“=”,“=”是赋值。


    三、实验小结(在本次实验中收获与不足)

    本次实验,在课堂上没有全部完成,主要是实验中的一些知识不懂,前面一些所学的遗忘了,需要去翻书和百度,还不懂的还要去问同学,需要多对之前的知识进行复习和巩固,加强记忆。

  • 相关阅读:
    解压 Android 系统中的 system.img
    挂载system.img并提取文件
    [android]system.img文件的打包和解包
    linux修改权限
    不懂这个别说是刷机高手!安卓Recovery你知多少
    Android刷机
    eclipse的“sun.misc.BASE64Encoder”问题解决
    spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比 (附:遇到的坑)
    《高性能mysql》笔记(第一章,mysql的架构与历史)
    hystrix流程图收藏
  • 原文地址:https://www.cnblogs.com/gnxyxlzj/p/10946233.html
Copyright © 2011-2022 走看看