首页 > 编程语言 >计算机导论与程序设计基础实验5-9

计算机导论与程序设计基础实验5-9

时间:2024-08-15 13:23:12浏览次数:13  
标签:随机数 计算机 int scanf 导论 else str printf 程序设计

A : 实验5 字符串的输入输出

题目描述

利用循环结构连续调用scanf(”%[^\n]”,str) 输入多个字符串,并使用printf(),将str输出。根据str的输出结果,观察是否在输入一个字符串后,后续的scanf(”%[^\n]”,str)中,会将缓冲区中残留的回车换行符读入到str中。

提示:利用格式scanf(”%[^\n]”,str)输入;
注意输入缓冲区的数据残留;如scanf(”%[^\n]”,str)语句会造成输入缓冲中残留回车换行符。 根据str的输出结果理解输入缓冲区残留的问题,并使用相应的解决方案,以消除数据残留所带来的副作用。

输入格式

第一行一个整数n,代表接下来有多少行字符串需要读取,接下来n行为待读取的字符串,字符串中包含空格。

输出格式

输出读入的n行字符串

注意

A 题不能使用 fflush 函数清空缓冲区,请换用其他函数(具体原因与 OJ 数据输入形式有关)。

完整答案代码

#include<stdio.h>
int main()
{
	int n;
	scanf("%d\n",&n);
	int i;
	char str[10001];
	for(i=0;i<n;i++){
		scanf("%[^\n]%*c",str);
	
		printf("%s\n",str);
	
	}
	return 0;
 } 

B : 实验5 复数转换

题目描述

键盘输入一个英文单词,输出其对应的复数形式

规则如下:

(a)以辅音字母+y结尾,则将y变成i,再加es;

(b)以s,x,ch,sh,o结尾,加es;

(c)其它情况,加s;

注:系统只会提供符合以上变换规律的英文单词

输入格式

一个字符串,为待变换的单词

输出格式

一个字符串,为变换后的单词

完整答案代码

#include<stdio.h>
int main()
{
	char str[1001];
	scanf("%s",str);
	int len;
	int i;
	i=0;
	while(str[i]!='\0'){
		i++;
		len++; 
	}
	if(str[len-1]=='y'){
		str[len-1]='i';		
		printf("%ses",str);
	}else if(str[len-1]=='s'||str[len-1]=='x'||str[len-1]=='o'){
		printf("%ses",str);
	}else if((str[len-2]=='c'||str[len-2]=='s')&&str[len-1]=='h'){
		printf("%ses",str);
	}else{
		printf("%ss",str);
	}
	return 0;
}

C : 实验6 整数的进制转换

题目描述

系统将给出三个数:A、B、C,其中C是A进制数,要求将C转换为B进制数。

  • A、B均为整数
  • A、B的值在2、8、10、16中选取
  • C的长度不大于10
  • 16进制中字母的输入输出均为小写
  • 注:将数制之间的转换方法利用程序实现,不能利用itoa()系列函数进行自动转换,不允许直接利用“%d”、”%o”及”%x”等格式由机器自动转换。

输入格式

两个整数:A、B;一个字符串C,其中C是A进制数,要求将C转换为B进制数。

输出格式

一个字符串

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	int a,b;
	char c[1001];
	scanf("%d%d %s",&a,&b,c);
	int i;
	int n[1001];
	int len=0;
	int d=0;
	int s=0;
	if(a==b) printf("%s",c);
	for(i=0;c[i]!='\0';i++){
		len++;
	}
	int l=len;
	
	for(i=0;i<l;i++){
		if(c[i]>='0'&&c[i]<='9'){
			n[l-1-i]=c[i]-'0';
		}
		if(c[i]=='a'){
			n[l-1-i]=10;
		}else if(c[i]=='b'){
			n[l-1-i]=11;
		}else if(c[i]=='c'){
			n[l-i-1]=12;
		}else if(c[i]=='d'){
			n[l-1-i]=13;
		}else if(c[i]=='e'){
			n[l-1-i]=14;
		}else if(c[i]=='f'){
			n[l-1-i]=15;
		}
	}
	for(i=0;i<len;i++){
		d=d+n[i]*pow(a,i);
	}	
	if(b==10){
		printf("%d",d);
	}else{
		int t=d;
		int m=d;
		i=0;
		while(t!=0){
			t=t/b;
			s++;
		}
		int x[s];
		for(i=0;i<s&&m!=0;i++){
			x[i]=m%b;
			m=m/b;
		}
		
			for(i=s-1;i>=0;i--){
				if(x[i]==10){
					printf("a");
				}else if(x[i]==11){
					printf("b");
				}else if(x[i]==12){
					printf("c");
				}else if(x[i]==13){
					printf("d");
				}else if(x[i]==14){
					printf("e");
				}else if(x[i]==15){
					printf("f");
				}else{
					printf("%d",x[i]);
				}
			}
		
	}

	return 0;
}

D : 实验6 浮点数的进制转换

题目描述

系统将给出三个数:A、B、C,其中C是A进制数,要求将C转换为B进制数。

  • A、B均为整数
  • A、B的值在2、8、10、16中选取
  • C的长度不大于10
  • 16进制中字母的输入输出均为小写
  • 注:将数制之间的转换方法利用程序实现,不能利用itoa()系列函数进行自动转换,不允许直接利用printf()的“%d”、”%o”及”%x”等格式由机器自动转换。

输入格式

两个整数A、B和一个小数C,其中C是A进制数,要求将C转换为B进制数。

输出格式

一个数,如果为浮点数且小数点后超过八位输出八位即可,无需在后面补零。如果为整数则输出整数。

数据描述

测试点编号12345678910111213141516
A10101022216161616222161616
B281681016102816101010288

注意

D 题整体难度较大,推荐放到后面去做(其实转换为任意进制都是同样的算法,一法通万法通)。

完整答案代码

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	char c[1001];
	scanf("%s",c);
	int len=strlen(c);
	char o[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	char z[1001],f[1001];
	int lenz=0;
	int lenf=0;
	int i;
	for(i=0;i<len;i++){
		if(c[i]=='.'){
			z[i]='\0';
			break;
		}
		if(c[i]=='\0'){
			z[i]='\0';
			break;
		}
		z[i]=c[i];
		lenz++;
	}
	for(i=0;lenz+i+1<len;i++){
		f[i]=c[lenz+i+1]; 
		lenf++;
	}
	int z1=0;
	int a1=1;
	for(i=lenz-1;i>=0;i--){
		if(z[i]>='a'&&z[i]<='f'){
			z1=z1+(z[i]-'a'+10)*a1;
		}else{
			z1=z1+(z[i]-'0')*a1;
		}
		a1=a1*a;
	}
	double f1=0;
	double a2;
	a2=1.0/a;
	for(i=0;i<lenf;i++){
		if(f[i]>='a'&&f[i]<='f'){
			f1=f1+(f[i]-'a'+10)*a2;
		}else{
			f1=f1+(f[i]-'0')*a2;
		}
		a2=a2/a;
	}
	char zp[1001],fp[1001];
	int lenz2=0;
	int lenf2=0;
	for(i=0;z1>0;i++){
		int y=z1%b;
		zp[i]=o[y];
		z1/=b;
		lenz2++;
	}
	for(i=0;f1>0;i++){
		int y=f1*b;
		fp[i]=o[y];
		f1=f1*b-y;
		lenf2++;
		if(f1<=0){
			break;
		}
	}
	for(i=lenz2-1;i>=0;i--){
		printf("%c",zp[i]);
	}
	if(lenz2==0){
		printf("0");
	}
	if(lenf2!=0){
		printf(".");
		for(i=0;i<lenf2;i++){
			printf("%c",fp[i]);
			if(i==7){
				break;
			}
		}
	}
	return 0; 
}

E : 实验7 递推

题目描述

编程求解青蛙跳台阶的问题:青蛙跳台阶问题:有n个台阶,每次青蛙可以选择跳1个台阶、2个台阶或者3个台阶,青蛙爬到第n个台阶,共有多少种走法?
提示:
设f(n)表示青蛙爬到第n个台阶的走法。
原问题分解为3个子问题:
如果青蛙目前站在第n-1台阶上,一步迈1个台阶即可到达第n个台阶;
如果青蛙目前站在第n-2台阶上,一步迈2个台阶即可到达第n个台阶;
如果青蛙目前站在第n-3台阶上,一步迈3个台阶即可到达第n个台阶;
因此,当n>3时,f(n)=f(n-1)+ f(n-2)+ f(n-3) ;
其中,f(1)=1 (1种走法:迈1个台阶,表示为1)
f(2)=2 (2种走法:两个一步,或一个2步,表示为11或2)
f(3)=f(1)+f(2)+1=1+2+1=4;(4种走法:表示为111,12,21,3)
因此有递推公式,f(n)=f(n-1)+ f(n-2)+ f(n-3),n>3;

输入格式

一个整数N,代表第N个台阶,N<40

输出格式

一个整数M,代表爬到第N个台阶可能的走法数量

注意

E 题尽量使用递推形式求解,递归易导致超时。可以使用尾递归进行优化,有兴趣的同学可以尝试。

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int i;
	int f[n+1];
	f[0]=1;
	f[1]=1;
	f[2]=2;
	for(i=3;i<=n;i++){
		f[i]=f[i-1]+f[i-2]+f[i-3];
	}
	printf("%d",f[n]);
	return 0;
}

F : 实验7 线性同余法

题目描述

编程利用线性同余法产生n个随机数,理解随机数产生方法,以及随机数种子的作用与含义;

线性同余法是一个经典的伪随机数发生器,算法如下:
a)将X(0)作为随机数的种子;
b)根据递推公式X(n+1) = (a*X(n)+b) mod M,依次产生一个随机数序列X(1),X(2),…
本题为函数题,请你根据函数所给的参数,完成本题。

其中,M的作用是产生0到M-1之间的伪随机数,因此M的大小直接影响伪随机数序列的周期长短,故M尽可能取比较大的值;
a和b的值越大,产生的伪随机数也越均匀
如果a和M如果互质,产生随机数效果更好。
例如:a.b可定义为int型;
数组X可定义为int型,但要防止a,b取值太大,造成X[i]溢出;
M可取随机数的最大值RAND_MAX(0x7FF);
种子X(0)可依次取1,2,3,…,或取当前时间作为种子,测试你生成的随机数;

输入格式

第一行为5个整数,分别为需产生随机数个数N,随机数种子seed,递推公式中a,b,M;

输出格式

输出共N个,为产生的n个随机数,以空格分隔。

完整答案代码

#include<stdio.h>
int main()
{
	int n,seed,a,b,m;
	scanf("%d%d%d%d%d",&n,&seed,&a,&b,&m);
	long long x[n+1];
	x[0]=seed;
	int i;
	for(i=1;i<=n;i++){
		x[i]=(a*x[i-1]+b)%m;
	}
	for(i=1;i<=n;i++){
		printf("%d ",x[i]);
	}
	return 0;
}

G : 实验9 排序

题目描述

给定一组整数(包括正数与负数),利用冒泡法将数据按升序排列。

输入格式

第一行一个参数N,为这一组数的个数; 0 < N < 1000 0 \lt N \lt 1000 0<N<1000,第二行为N个整数,为待排序的数

输出格式

输出排序后的整数,中间使用空格分隔

注意

G题倘若出现本地测试正常但是提交出现 RE,最大可能是数组越界导致。可以尝试动态开辟内存(

标签:随机数,计算机,int,scanf,导论,else,str,printf,程序设计
From: https://blog.csdn.net/Water_Star1/article/details/141206581

相关文章

  • 【计算机二级C++】题目与C++知识自检
    @目录公共基础知识计算机基础数据库数据结构树链表排序队列栈C++const与static指针函数重载构造与析构多态、继承、权限数据类型输入输出流模板公共基础知识计算机基础计算机完成一条指令所花费的时间称为指令周期顺序程序不具有并发性下列叙述中正确的是CA.算法的......
  • 计算机毕业设计django+vue卷烟厂库存管理系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着卷烟行业的快速发展,卷烟厂作为其核心生产单位,面临着库存管理日益复杂化的挑战。传统的库存管理方式往往依赖于人工记录和纸质单据,不仅......
  • Java计算机毕业设计的体育用品交易平台(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球体育产业的蓬勃发展,体育爱好者对高品质、多样化的体育用品需求日益增长。然而,传统体育用品销售模式受限于地域、渠道及信息不对称等问题,难以......
  • Java计算机毕业设计的戏曲文化博物馆(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在中华文化的浩瀚星空中,戏曲艺术犹如一颗璀璨的明珠,承载着千年的历史记忆与民族情感。从元代的杂剧到明清的传奇,再到近现代的地方戏曲,戏曲文化不仅丰......
  • Java计算机毕业设计的网上二手书销售系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着数字化时代的到来,纸质书籍虽然面临着电子阅读的挑战,但其独特的阅读体验和收藏价值依然深受广大读者喜爱。然而,实体书店的运营成本上升与读者购书......
  • java语言,MySQL数据库;电影推荐网站 30760(免费领源码)计算机毕业设计项目推荐万套实战教
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影推荐网站;电影推荐网站的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本电影推荐网站是针对目前电影推荐网站的实际需求,从实际工作出发,对过去的电影......
  • java语言,MySQL数据库;基于Web的高校知识共享系统设计与实现 32050(免费领源码)计算机毕业
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校知识共享系统等问题,对高校知识共享系统进行研究分析,然后开发设计出高校知识共享系统以......
  • java语言,MySQL数据库;23825基于java的员工考勤系统(免费领源码)计算机毕业设计项目推荐万
    摘 要由于数据库和数据仓库技术的快速发展,员工考勤系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。考勤管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。员工考勤系统除了具有共享系统的全部功能以外,能通过......
  • 计算机图形学 | 动画模拟
    动画模拟布料模拟质点弹簧系统:红色部分很弱地阻挡对折SteepconnectionFEM:有限元方法粒子系统粒子系统本质上就是在定义个体和群体的关系。动画帧率VR游戏要不晕需要达到90fpsForwardKinematicsInverseKinematics只告诉末端p点,中间随便怎么连。解不一......
  • 实验室、办公室管理系统-计算机毕设Java|springboot实战项目
    ......