• 程序设计与实践 课程设计与实习报告


    1.基础实践题
    4.1. 显示数字出现次数
    4.1.1题目内容
    输 入 一 个 十 进 制 正 整 数 , 转 换 成 16 进 制 数 。 再 输 入 一 个 数
    (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),统计这个数出现的次数。
    【输入格式】
    一行输入十进制正整数。 另一行输入要统计的数。
    【输出格式】
    要统计的数出现的次数。
    【输入样例】
    在这里给出一组输入。例如:
    84117512
    8
    【输出样例】
    3

    4.1.2设计思想
    (描述程序设计总体思路,并配流程图+文字说明,测试截图及说明)

    在这里插入图片描述

    4.1.3核心代码:

    #include
    #include
    int main()
    {
       
    	int a,sum=0,c[100],d,e=0,i=0;
    	char N[100],m;//定义一个名为N的字符数组,长度为100;定义一个字符型变量m
    	printf("请输入一个十进制正整数:\n");
    	scanf("%d",&a);
    	if(a>=0&&a<10)
    	{
        
    		N[i]='0'+a;//判断输入的数在0~9的情况(我们知道,N[i]是数字字符,减去字符0的ASCLL(即’0’),正好可以变成整形的 0,1,2.......9)
    		printf("%c",N[i]);
    	}
    	else if(a>=10&&a<16)
    	{
       N[i]='A'+a-10;//
    	printf("%c",N[i]);
    	}//判断输入的数在10~15的情况
    	else 
    	{
       for(i=0;a>0;i++)//开始16以上的数
    	 for(i=0;a>0;i++)//开始16以上的数的转换
    	   {
       c[i]=a%16;//记录每次除以16的余数
    	      a=a/16;
    		  if(c[i]>=10&&c[i]<=15)//若是在10~15之间转换A~F之间所对应的字符
    			  N[i]='A'+c[i]-10;
    		  else if(c[i]>=0&&c[i]<10)//若是在0~9之间则保留原来的数字
    			  N[i]='0'+c[i];
    		  sum=i+1;
    		  }
    	for(d=sum-1;d>=0;d--)//输出10转16进制的结果
    		printf("%c",N[d]);
    	printf("\n");
    	}
    	printf("请输入要查找的数:\n");//查找要查找的数
    	scanf("%c",&m);
    	scanf("%c",&m);//回车要消耗一次输入,所以多打一个scanf
    	for(d=0;d<=sum-1;d++)
    		if(m==N[d])
    			e++;
    		printf("要查找的数共出现的次数:\n");
    		printf("%d\n",e);
    		return 0;
    
    	}  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    运行结果:
    在这里插入图片描述

    4.1.4算法分析:
    (分析程序的总体算法复杂度及核心代码复杂度 O(?))
    4.2. 显示 Pascal 三角形
    4.2.1题目内容
    输入行数 n,显示 n 行 Pascal 三角形。数字间有一个空格。每行最后一个数字后
    有一个空格。
    【输入格式】
    在一行中输入行数 n。
    【输出格式】
    输出 n 行 Pascal 三角形。
    【输入样例】
    在这里给出一组输入。例如:
    4
    【输出样例】
    在这里给出相应的输出。例如:
    1
    1 1
    1 2 1
    1 3 3 1

    4.2.2设计思想
    (描述程序设计总体思路,并配流程图+文字说明,测试截图及说明)
    在这里插入图片描述

    杨辉三角有两个规律,首先杨辉三角的每一行都以“1”作为开头及结束,第二,就是三角形的每个数字等于它肩上两个数字相加。
    4.2.3核心代码:

    #include
    #include
    void yanghui(int);
    #define N 35
    int main()
    {
       
    	int n;
    	printf("请输入所求的Pascal三角形的行数:\n");
    	scanf("%d",&n);
    	yanghui(n);
    	return 0;
    }
    void yanghui(int n)
    {
       
    	int i,j,a[N][N];
    	for(i=0;i<n;i++)
    	for(j=0;j<=i;j++)
    {
       if(j==0||i==j)a[i][j]=1;
    	else a[i][j]=a[i-1][j]+a[i-1][j-1];
    }
    for(i=0;i<n;i++)
    {
       for(j=0;j<=i;j++)
    {
       if(j!=i)  
    printf(" %d",a[i][j]);
    else printf(" %d",a[i][j]);
    }
    printf("\n");
    }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    运行结果:
    在这里插入图片描述

    4.2.4算法分析:
    (分析程序的总体算法复杂度及核心代码复杂度 O(?))

    4.3. 计算到任意日期的总天数
    4.3.1题目内容

    编程序实现:输入任意一个日期的年、月、日的值,求出从公元 1 年 1 月 1 日
    到该日期前一年的年末总共有多少天,到该日期前一个月的月末总共有多少天,
    到这一天总共有多少天。假定从公元第一天开始,就实施格里高利历法。格里高
    利历法的置闰规则是 400 年 97 闰,也可以概括为:四闰百不闰,四百闰。
    【输入格式】
    输入三个代表年、月、日的正整数,以空格分隔。
    【输出格式】
    输出三个总天数,数据之间以换行符分隔,最后换行。
    【输入样例】
    2012 3 29
    【输出样例】
    734502
    734562
    734591
    4.3.2设计思想
    (描述程序设计总体思路,并配流程图+文字说明,测试截图及说明)
    在这里插入图片描述

    4.3.3核心代码

    #include
    int main(){
       
    	int year,month,day;//输入的年月日
    	int sum_1=0,sum_2=0,sum_3;//分别代表要求的天数与星期
    	int i,j;
    	int common_year[12]={
       31,28,31,30,31,30,31,31,30,31,30,31};//平年每个月的天数
    	
    	//获取年月日格式 2015/4/16,2015 4 16,2015 $4 &l6 等等中间只要有两个分隔符就行。
    	scanf("%d",&year);
    	getchar();
    	scanf("%d",&month);
    	getchar();
    	scanf("%d",&day);
    		
    	//计算到前一年的年末的天数
    	for(i=1;i<year;i++){
       
    		if((i%4==0&&i%100!=0)||i%400==0){
       //闰年
    			sum_1+=366;
    		}else{
       //平年
    			sum_1+=365;
    		}
    	}
    	printf("前一年的年末:%d\n",sum_1);
    	
    	//计算前一个月末的天数
    	if(month<=1){
       //一月份,相当于去年年末
    		sum_2=sum_1;
    	}else if(month<=2){
       //2月份
    		sum_2=sum_1+31;
    	}else if(month>2){
       //大于2月份须判断,闰年还是平年。
    		if((i%4==0&&i%100!=0)||i%400==0){
       //平年2月29天。
    		common_year[1]=29;
    		}
    		
    		//本年月的天数
    		for(j=0;j<month-1;j++){
       
    		sum_2+=common_year[j];
    		}
    		sum_2+=sum_1;
    	}
    	printf("前一月末天数:%d\n",sum_2);//月末加本月天数,就是总天数。
    	sum_3=sum_2+day;
    	printf("到这一天总共有:%d\n",sum_3);//求星期几,公元一月一日是星期一(虽然公元元年一月一日是星期几的问题有争论。但这个题不是考你们历法的问题,当星期一用就行,或者把问题摔给出题的人,让他证明一下历法是连续的,一天没落的)。
    	
    	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    运行结果:
    在这里插入图片描述

    4.3.4算法分析
    (分析程序的总体算法复杂度及核心代码复杂度 O(?))

    4.4. 字符统计
    4.4.1题目内容

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
    【输入格式】
    输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中
    任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。
    【输出格式】
    在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。
    如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写
    字母。
    【输入样例】
    This is a simple TEST. There ARE numbers and other symbols 1&2&3…
    【输出样例】
    e 7

    4.4.2设计思想
    (描述程序设计总体思路,并配流程图+文字说明,测试截图及说明)

    方法:默认第一个字符为出现次数最多的字符,然后用后面的字符与他做比较,如果字符个数大于当前字符,则继续判断是否为小写字母,如果满足,则将字符替换,以及字符次数替换。 如果字符次数相同,则比较当前字符出现的次数和max的大小,然后再做替换。
    在这里插入图片描述

    4.4.3核心代码

    #include
    int main(void)
    {
        
    	int a[
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    企业商标信息查询API的优势和应用实例分析
    FileOutputStream文件字节输出流
    HarmonyOS 实现底部导航栏
    3.5、点对点协议 PPP
    玩转gpgpu-sim 04记—— __cudaRegisterBinary() of gpgpu-sim 到底做了什么
    游戏开发玩法设计的重要性
    【UI设计】使用ps软件进行一些简单的操作
    【信息系统项目管理师】 学习笔记 第2章 信息技术发展
    Linux安装Tomcat最新版
    Java IDE MyEclipse 使用教程:创建一个新的 REST Web 服务
  • 原文地址:https://blog.csdn.net/m0_52014276/article/details/127994182