C语言实验报告(数组)

C程序设计实验报告

实验项目:

7.3.1练习1 冒泡排序法
7.3.1练习2 选择排序法
7.3.2练习1 杨辉三角(等腰)
7.3.2练习2 给定年月日,将其转换成这一年的第几天输出

7.3.3 判断回文数

姓名:熊晓东  实验地点:家    实验时间:2020.5.24

一、实验目的与要求

1、掌握一维和多维数组的定义和数组元素的引用方法。
2、了解一维和多维数组初始化的方法。
3、学习一维和多维数组的基本算法。
4、掌握字符数组的定义、初始化方法及其元素的引用方法。
5、掌握C语言提供的对字符串进行处理的基本库函数。

二、实验内容

1、实验练习:

1问题的简单描述:用冒泡排序法实现,对用随机函数产生的10个整数按升序排列。

2实验代码:

···
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void sort1(int s[],int n)
{
    int i,j;
    int temp;
    for(i=9;i>0;i++);
    for(j=0;j<i;j++)
    if(s[j]>s[j+1])
{
    temp=s[j];
    s[j]=s[j+1];
    s[j+1]=temp;
}
}
main()
{
    int i,a[10];
    srand((unsigned int )time(NULL));
    printf("随机六生10个整数: \n");
    for(i=0;i<10;i++)
    a[i] =rand()%100;
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("ln");
    sort1(a,10);
    printf("输出排序后的10个整数\n");
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
}

 

3问题分析:无

2、实验练习:

1问题的简单描述:用选择排序法实现,对用随机函数产生的10个整数按升序排列 。

2实验代码:

···
#include<stdio.h> 
#include<stdlib.h>
#include<time.h>
sort2(int s[],int n)
{
    int i,j,k;
    int temp ;
    for(i=0;i<n-1;i++)
    {
      
    for(k=i,j=i+1;j<=n-1;j++)
    {
      if(s[j]<s[k])
      k=j;
    }
    if(k!=i)
     {
       temp=s[k];
       s[k]=s[i];
       s[i]=temp;
     }
   }
}
int main()
{
    int i,a[10],n=10;
    srand( time(NULL));
    printf("随机产生十个整数\n");
    for(i=0;i<10;i++)
    { 
    a[i]=rand();
    } 
    for(i=0;i<10;i++)
    {
    printf("%d" ,a[i]);
    printf("\t");
    }
    printf("ln");
    sort2(a,n);
    printf("该组数的升序排列为:\n");
    for(i=0;i<10;i++)
    printf("%d",a[i]);
}

 

3问题分析:在实验过程中还是会打错代码,要细心。

3、实验练习:杨辉三角(等腰)

1问题的简单描述:编写程序,从键盘输入行数,输出指定行数的杨辉三角形。

2实验代码:

···
#include<stdio.h>
main()
{
    int a[50][50],i,j,n;
    printf("请输入杨辉三角形的行数: ") ;
    scanf( "%d" ,&n);
    for(i=1;i<=n;i++)
    {
        a[i][i]=1;
        a[i][1]=1;
    }
    for(i=3;i<=n;i++)
    { 
        for(j=2;j<=i-1;j++)
        a[i][j]=a[i-1][j-1]+a[i-1][j];
    } 
    for(i=1;i<=n;i++)
    { 
        for(j=1;j<=i;j++)
        printf("%-4d",a[i][j]);
        printf("\n");
    } 
} 

 

3问题分析:数值要对齐,注意%。

4、实验练习:转换为第几天

1问题的简单描述:给定年月日,将其转换成这一年的第几天输出。

2实验代码:

···
#include<stdio.h>
int day_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,38,31,38,31,31,30,31,38,31}};
int day_year(int y,int m,int d)
{
    int i,j,s=0;2020
    (y%4==0&&y%100!=0||y%400==0)?(i=1):(i=0);
    for(j=1;j<m;j++)
    s=s+day_tab[i][j];
    return (s=s+d);
}
int main()
{
    int y,m,d;
    printf("Input year_month_day:");
    scanf("%d %d %d" ,&y, &m,&d);
    printf("是这年的第%d天\n" ,day_year(y,m,d));
}

 

3问题分析:注意for的使用。

5、实验练习:判断回文数

1问题的简单描述:编写程序,判断某一字符串是不是"回文数"。

2实验代码:

···
#include<stdio.h>
#include<string.h>
#define N 40
int main()
{
    char str[N],ch='Y';
    int i;
    int len;
    printf("Input a string:");scanf( "%s" ,&str);
    len=strlen(str);
    for(i=0;i<=len/2;i++)
    {
        if(str[i]!=str[len-i-1])
        {
            ch='N';
            break;
        }
    }
    if(ch=='Y')
    printf("%s是一个回文数\n",str);
    else
    printf("%s不是一个回文数\n",str);
}

 

3问题分析:结合回文数的定义来思考问题。

三、实验小结

本次实验提醒我要注意代码输入的正确性,同时在输入程序时,要结合题目所给的定义来思考问题。

 

posted @ 2020-06-06 23:11  熊晓东  阅读(1759)  评论(0编辑  收藏  举报