zoukankan      html  css  js  c++  java
  • C语言设计实验报告(第六次)


    姓名:龚政

    实验地点:家

    实验时间:2020.5.7

    实验项目:7.3.1-1两两比较排序;7.3.1-2找最小排序;7.3.2打印杨辉三角形;7.3.2-2计算总天数;7.3.3判断回文数


    实验目的与要求

    本实验旨在巩固学生对一-维数组这种数据结构的理解,增强其程序设计能力。

    本实验旨在巩固学生对二维数组这种数据结构的理解

    实验内容

    实验练习:7.3.1-1两两比较排序

    问题的简单描述:编写程序,利用随机函数产生10 个整数,并按升序排列输出

    实验代码:

    流程图

    #include<stdio.h> 
    #include<stdlib.h>
    #include<time.h>
    void sort1(int s[],int n)
    {
    	int i,j;
    	int temp;
    	for(i=0;i<10;i++){//外循环控制判断组,每一组都会两两比较 
    		for(j=9;j>=i+1;j--){//这里的循环控制两两比较 --- 因为最大的已经在后面了,所以不用参与比较就出现了j>=i+1 
    			if(s[j]<s[j-1]){//两两比较,把大的放到后面 
    				temp=s[j];
    				s[j]=s[j-1];
    				s[j-1]=temp;
    			}
    		}
    	}
    }
    int main()
    {
    	int i,a[10];
    	srand(time(NULL));//产生真随机数 
    	printf("随机产生10个整数:
    ");
    	for(i=0;i<10;i++){//初始化数组 
    		a[i]=rand()%100;
    	}
    	for(i=0;i<10;i++){//输出十个整数 
    		printf("%d	",a[i]);
    	}
    	printf("
    ");
    	sort1(a,10);//调用函数进行排序 
    	printf("排序后的结果:
    ");
    	for(i=0;i<10;i++){//输出排序后的结果 
    		printf("%d	",a[i]);
    	}
    }
    

    问题分析:书上的for(j=9;j>=i+1;j--)设计还是比较巧妙的,这里考虑到了最大的已经放好了位置,不用再参与比较,可以提高代码运行速度

    实验练习:7.3.1-2找最小排序

    问题的简单描述:写一个函数,对随机产生的10个整数按照从小到大的顺序排序(升序,用选择排序实现)

    实验代码:

    流程图

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    void sort2(int s[],int n)
    {
    	int i,j,k;
    	int temp;
    	for(i=0;i<n-1;i++){
    		k=i;//暂存i下标 
    		for(j=i+1;j<=n-1;j++){//找到最小数组的下标 ,由k储存 
    			if(s[j]<s[k]){
    				k=j;
    			}
    		}
    		if(k!=i){//s[k]存储最小下标 
    			temp=s[k];
    			s[k]=s[i];
    			s[i]=temp;
    		}
    	}
    }
    int main()
    {
    	int i,a[10];
    	srand(time(NULL));
    	printf("随机产生10个整数:
    ");
    	for(i=0;i<10;i++){
    		a[i]=rand()%100;
    	}
    	for(i=0;i<10;i++){
    		printf("%d	",a[i]);
    	}
    	printf("
    ");
    	sort2(a,10);
    	printf("排序后的结果:
    ");
    	for(i=0;i<10;i++){
    		printf("%d	",a[i]);
    	}
    
    }
    

    问题分析:报错一次undefined reference to winmain,找了一段时间代码在哪里出错,结果是main写成了maim,果然还是要先看懂英文,再去找错误比较快速!

    实验练习:7.3.2打印杨辉三角形

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

    实验代码:

    流程图

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main()
    {
    	int a[50][50],i,j,n;
    	printf("请输入杨慧三角形的行数:");
    	scanf("%d",&n);
    	for(i=1;i<=n;i++){//初始化所有的1 
    		a[i][i]=1;
    		a[i][1]=1;
    	} 
    	for(i=3;i<=n;i++){//初始化数组:对于除1外的数据进行初始化 
    		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=0;j<=n-i;j++){//控制每一行的空格输出 
    			printf("    ");
    		}
    		for(j=1;j<=i;j++){//控制每一行的数据输出 
    			printf("%-6d  ",a[i][j]);
    		}
    		printf("
    ");
    	}
    
    }
    

    问题分析:在打印的时候出现了不美观的情况,仔细看你会发现每一行输出的两个循环里面有几个细节:一是%-6d这里是控制长度为6,不足在末尾补0,如果是%6d,那就是在开头补0;二是调整美观时候不是一定要按照这个格式,两个循环输出的内容都是我一个个试出来的最佳方案

    实验练习:7.3.2-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,30,31,30,31,31,30,31,30,31}
    };
    int day_year(int y,int m,int d) 
    {
    	int i=0,j,s=0;
    	if(y%4==0&&y%100!=0||y%400==0){//判断闰年 
    		i=1;
    	}
    	for(j=1;j<m;j++){//累加到上个月的总天数 
    		s=s+day_tab[i][j];
    	}
    	s+=d;//加上这个月天数 
    	return s;//返回总天数 
    }
    int main()
    {
    	int y,m,d;
    	printf("Input year_month_day:");
    	scanf("%d%d%d",&y,&m,&d);
    	printf("是这年的第%d天
    ",day_year(y,m,d));//调用函数放在printf函数里面 
    	return 0;
    }
    

    问题分析:无

    实验练习:7.3.3 判断回文数

    问题的简单描述:编写程序,从键盘输入一个字符串,判断其是否是回文数

    实验代码:

    流程图

    #include<stdio.h>
    #include<string.h>
    #define N 40
    int main()
    {
    	char s[N],ch='Y';
    	int i;
    	int len;
    	printf("Input a string:");
    	scanf("%s",s);
    	len=strlen(s);//用到字符串函数strlen求字符的长度包括 
    	for(i=0;i<len/2;i++){
    		if(s[i]!=s[len-1-i]){//首尾比较是否相等 
    			ch='N';//不相等ch=N,在下面判断起作用 
    		}
    	}
    	if(ch=='Y'){
    		printf("%s是一个回文数
    ",s);
    	}else{
    		printf("%s不是一个回文数
    ",s);
    	}
    	
    	
    	return 0;
    }
    

    问题分析:无

    实验小结(剖析个人得失)

    这次的实验内容比较少,更多在课堂练习,课堂练习是一个查缺补漏的绝佳地方,很多典型的题目可以戳中你的痛点,必须float输出默认是八位也就是6.000000,又比如说一些陌生的知识:obj是编译之后后缀

    之后会学习指针,进入一个比较复杂的内容,预习了,发现和大多数人一样,都有点绕,但是没有什么东西是学不会的,只要你肯努力!

  • 相关阅读:
    atitit,it人怎么样才容易事业成功?? 有以下五种性格的人容易成功
    atitit。win7 win8 win9 win10 win11 新特性总结与战略规划
    atitit.提升兼容性最佳实践 o9o
    atitit.attilax.com产品 软件项目通用框架类库总结
    atitit. 文件上传带进度条 atiUP 设计 java c# php
    atitit.窗体静听esc退出本窗体java swing c# .net php
    atitit.提升研发管理的利器---重型框架 框架 类库的区别
    atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
    atitit. java跟php的比较..为什么大企业喜欢java 而不是php
    atitit. java jsoup html table的读取解析 总结
  • 原文地址:https://www.cnblogs.com/oceaninfinite/p/12845345.html
Copyright © 2011-2022 走看看