A : 实验1.1 标准数学函数使用

实验要求

1.在你所创建的工程文件中,编程熟悉C程序的基本框架,以及C语言提供的标准数学函数,并按一定的格式输出程序的执行结果;

  • Tips:我该怎么输出我的结果?
    • 在写完程序主题之后,使用printf()函数或cout来输出题目要求的结果。
    • 注意:
      • 不要在输出的结果中添加任何多余的文字,否则oj会判错!
        例如:printf(“结果是%d”,outcome)是错误的!
      • 和浮点数(当前学习阶段可简单理解为小数)相关的题目,请使用printf()输出,使用cout会导致结果位数错误。
        2.在你所创建的工程文件中,编程计算下述题目,并输出结果。
        y = 1 + 1 1 + 1 1 + 1 5 y=1+\frac{1}{1+\frac{1}{1+\frac{1}{5}}} y=1+1+1+5111
  • Tips:我该如何完成题目?
    • 请在自己的开发环境中完成代码编写、测试,再将代码复制到提交框中进行提交。
      3.示例:
  • 题目要求:请在你所创建的工程文件中,编程计算1除以2的结果并输出。
  • 代码示例:
#include <stdio.h>
int main()
{
    float outcome;           // 声明变量,存储结果
    outcome = 1.0 / 2;       // 进行计算
    printf("%f", outcome);   // 输出结果,不要添加任何无意义的输出
}

完整答案代码

#include<stdio.h>
int main()
{
	double a;
	a=1+1/(1+1/(1+1/5.0));
	printf("%f",a);
	return 0;
}

B : 实验1.2 标准数学函数使用

实验要求

1、下载安装Dev-Cpp(Dev-C++)集成开发环境(IDE);或使用其他C语言开发环境;
2、在IDE中创建自己所需的工程文件;
3、在你所创建的工程文件中,编程熟悉C程序的基本框架,以及C语言提供的标准数学函数,并按一定的格式输出程序的执行结果;
4、在你所创建的工程文件中,编程计算下述题目,并输出结果,注意输出应为浮点数类型。

y = 3 2 + 4 2 y=\sqrt{3^2+4^2} y=32+42

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	double a;
	a=sqrt(pow(3,2)+pow(4,2));
	printf("%f",a);
	return 0;
}

C : 实验1.3 标准数学函数使用

实验要求

1、下载安装Dev-Cpp(Dev-C++)集成开发环境(IDE);或使用其他C语言开发环境;
2、在IDE中创建自己所需的工程文件;
3、在你所创建的工程文件中,编程熟悉C程序的基本框架,以及C语言提供的标准数学函数,并按一定的格式输出程序的执行结果;
4、在你所创建的工程文件中,编程计算下述题目,并输出结果。

y = 1 − c o s ( π / 3 ) 2 y=\sqrt{\frac{1-cos(\pi/3)}{2}} y=21cos(π/3)

y = s i n 2 ( π / 4 ) + s i n ( π / 4 ) c o s ( π / 4 ) − c o s 2 ( π / 4 ) y=sin^2(\pi/4)+sin(\pi/4)cos(\pi/4)-cos^2(\pi/4) y=sin2(π/4)+sin(π/4)cos(π/4)cos2(π/4)

输出格式:结果之间以换行符分隔,结果共2行

  • Tips:输出多个结果请使用换行符(回车,‘\n’)分隔,不要使用空格进行分隔。
  • π \pi π取值为3.1415926

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b;
	a=sqrt((1-cos(3.1415926/3))/2);
	b=pow(sin(3.1415926/4),2)+sin(3.1415926/4)*cos(3.1415926/4)-pow(cos(3.1415926/4),2);
	printf("%f\n",a);
	printf("%f\n",b);
	return 0;
}

D : 实验1.4 标准数学函数使用

实验要求

1、下载安装Dev-Cpp(Dev-C++)集成开发环境(IDE);或使用其他C语言开发环境;
2、在IDE中创建自己所需的工程文件;
3、在你所创建的工程文件中,编程熟悉C程序的基本框架,以及C语言提供的标准数学函数,并按一定的格式输出程序的执行结果;
4、在你所创建的工程文件中,编程计算下述题目,并输出结果。

y = 2 5 ( 6 + 3 ) 6 + 3 y=\frac{2\sqrt{5}(\sqrt{6}+\sqrt{3})}{6+3} y=6+325 (6 +3 )

y = ln ⁡ ( 5 ( ln ⁡ 3 ) ) − ln ⁡ ( 2 ) s i n ( π / 3 ) y=\frac{\ln(5(\ln3))-\ln(2)}{sin(\pi/3)} y=sin(π/3)ln(5(ln3))ln(2)

y = e 3 + log ⁡ 10 105 y=e^3+\log_{10}{105} y=e3+log10105

输出格式:结果之间以换行符进行分隔,结果共3行

  • Tips: π \pi π取值为3.1415926, e e e的取值建议直接使用exp函数

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c;
	a=(2*sqrt(5)*(sqrt(6)+sqrt(3)))/(6+3);
	b=(log(5*log(3))-log(2))/sin(3.1415926/3);
	c=exp(3)+log10(105);
	printf("%f\n",a);
	printf("%f\n",b);
	printf("%f\n",c);
	return 0;
}

E : 实验1.5 标准数学函数使用

实验要求

1、下载安装Dev-Cpp(Dev-C++)集成开发环境(IDE);或使用其他C语言开发环境;
2、在IDE中创建自己所需的工程文件;
3、在你所创建的工程文件中,编程熟悉C程序的基本框架,以及C语言提供的标准数学函数,并按一定的格式输出程序的执行结果;
4、在你所创建的工程文件中,编程计算下述题目,并输出结果。

y = 3 / 4 + ( 103 除以 3 的余数 ) y=3/4+(103除以3的余数) y=3/4+(103除以3的余数)

y = 不大于 3.8 的最大整数 y=不大于3.8的最大整数 y=不大于3.8的最大整数

y = 不大于 − 3.8 的最大整数 y=不大于-3.8的最大整数 y=不大于3.8的最大整数

y = 不小于 3.2 的最小整数 y=不小于3.2的最小整数 y=不小于3.2的最小整数

y = 不小于 − 3.2 的最小整数 y=不小于-3.2的最小整数 y=不小于3.2的最小整数
输出格式:结果之间以换行符进行分隔,结果共5行,输出均为浮点数类型

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,d,e;
	a=3/4.0+103%3;
	b=floor(3.8);
	c=floor(-3.8);
	d=ceil(3.2);
	e=ceil(-3.2);
	printf("%f\n",a);
	printf("%f\n",b);
	printf("%f\n",c);
	printf("%f\n",d);
	printf("%f\n",e);
	return 0;
}

F : 实验2 标准输入输出及数字的机内表示 1

题目描述

  1. 使用C语言的标准输入函数scanf(),分别读取short, int, long, long long,unsigned int类型的几个数据
  2. 然后利用printf()输出:
    将读取的short型数据输出为十进制数,
    将读取的int型数据输出为无符号数,
    将读取的long型数据输出为八进制数,
    将读取的long long型数据输出为十六进制数,
    将读取的unsigned int型数据输出为十六进制数.
  3. 注意:输出不需要添加lll修饰符。
  4. 根据输入、输出结果理解C语言整型符号数输入输出的形式,以及数据的机内存储格式;

输入格式

五个整数

输出格式

题目中对应的格式,用换行符分隔数字,十六进制中字母为大写。

完整答案代码

#include<stdio.h>
int main()
{
	short a;
	int b;
	long c;
	long long d;
	unsigned int e;
	scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
	printf("%d\n",a);
	printf("%u\n",b);
	printf("%o\n",c);
	printf("%X\n",d);
	printf("%X\n",e);
	return 0;
}

G : 实验2 标准输入输出及数字的机内表示 2

题目描述

  1. 分别用scanf()读取float, double类型的几个数据。
  2. 然后利用printf()分别输出读取的float,double类型数据的一般实数形式,指数形式。
  3. 根据输入、输出结果理解C语言浮点数输入输出的格式,以及数据的机内存储形式。

注意事项

因为编译器的区别,所以可能会有同学在自己电脑上测试结果和示例不同,但是不会影响对代码正确性的评测。

输入格式

两个浮点数,一个可以用float存储,一个可以用double存储。

输出格式

第一个浮点数的一般形式和指数形式。
第二个浮点数的一般形式和指数形式。

#include<stdio.h>
int main()
{
	float a;
	double b;
	scanf("%f%lf",&a,&b);
	printf("%f %e\n",a,a);
	printf("%f %e\n",b,b);
	return 0;
}

H : 实验2 标准输入输出及数字的机内表示 3

题目描述

  1. 用scanf()输入字符型数据。
  2. 然后利用printf()输出(字符,十进制、十六进制等)。
  3. 根据输入、输出结果理解C语言字符输入输出的格式,以及数据的机内存储形式,理解系统对非数值型数据的编码原理,如字符的ASCII码。

输入格式

一个字符

输出格式

题目中对应的输出格式

完整答案代码

#include<stdio.h>
int main()
{
	char a;
	scanf("%c",&a);
	printf("%c %d %X",a,a,a);
	
	return 0;
}

I : 实验3 今有物不知其数

题目描述

今有物,不知其数。三三数之,剩X;五五数之,剩Y;七七数之,剩Z。问:物几何?

输入

三个整数 X, Y, Z

输出

一个正整数,代表物的数量(根据题意,如有多个解则输出多个解中的最小值即可)

Hint

考点:

  • 标准输入/输出
  • 基本运算(取模运算、布尔运算)
  • 循环语句
  • 条件语句
  • 枚举

完整答案代码

#include<stdio.h>
int main()
{
	int a,X,Y,Z;
	scanf("%d%d%d",&X,&Y,&Z);
	for(a=1;;a++)
	{
		if(a%3==X&&a%5==Y&&a%7==Z)
		{
		
			printf("%d",a);
			break;
		}
	}

	return 0;
}

J : 实验3 喝不完的啤酒

题目描述

  • 啤酒2元1瓶,2个空瓶换1瓶,4个瓶盖换1瓶,问N元钱最多可以喝几瓶,并且瓶子、瓶盖、钱分别剩余多少?(不允许赊账)

输入格式

一个整数N,为钱数

输出格式

四个整数M,X,Y,Z;M为喝的总瓶数,X为剩余瓶子数,Y为剩余瓶盖数,Z为剩余钱数。

完整代码

#include<stdio.h>
int main()
{
	int n,t;
	scanf("%d",&n);
	int ping,kong,gai,sum;
	sum=n/2;
	int m=n/2;
	int l=n/2;
	kong=m;
	gai=l;
	if(n%2==0){
		t=0;
	}else{
		t=1;
	}
	while(kong>=2||gai>=4){
		
		kong=m;
		gai=l;
		ping=kong/2+gai/4;
		m=ping+m%2;
		l=ping+l%4;
		sum=sum+ping;
	}
	printf("%d %d %d %d",sum,kong,gai,t);
	return 0;
 } 

K : 实验3 输出乘法口诀表

题目描述

  • 输出乘法口诀表,格式如下:

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 … 9*9=81

  • 要求:
  1. 使用循环结构;
  2. 位置对齐可在printf中使用”\t”;

输入格式

一个整数N,N<=10

输出格式

对应行数的乘法口诀表

完整答案代码

#include<stdio.h>
int main()
{
	int n,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		for(j=1;j<=i;j++){
			printf("%d*%d=%d\t",j,i,i*j);
			if(j==i){
				printf("\n");
			}
			
		}
		
		
	}
	return 0;
}
  

L : 实验3 圆周率的近似值

题目描述

  • 按要求计算圆周率的近似值;

π = 4 ( 1 − 1 3 + 1 5 − 1 7 + 1 9 − 1 11 + ⋯   ) π = 4(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \cdots) π=4(131+5171+91111+)

  • 系统会给出一个整数n(n<9),当某一项的绝对值小于等于 1 0 − n 10^{-n} 10n时,忽略掉当前项以及以后的项。
  • 提示:为提高程序的执行效率,不要使用 ( − 1 ) 2 n (-1)^{2n} (1)2n=1这种方法(n为自然数);可以考虑:一个数n,连续乘以-1,n的符号会正负相间;

测试用例

  • 当最后一项的绝对值小于等于时 1 0 − 6 10^{-6} 106,π=3.141591,大约循环50万次;(有的环境输出π=3.14159)
  • 当最后一项的绝对值小于等于时 1 0 − 7 10^{-7} 107,忽略掉以后的项,则π=3.141592,大约循环500万次;
  • 当最后一项的绝对值小于等于时 1 0 − 8 10^{-8} 108,忽略掉以后的项,则π=3.141593,大约循环5000万次;

输入格式

一个整数

输出格式

一个浮点数

输出格式

一个浮点数

完整答案代码

#include<stdio.h>
#include<math.h>
int main()
{
	double pi,fm,sign;
	sign=1.0;
	fm=1.0;
	int n;
	scanf("%d",&n);
	while(fabs(sign/fm)>pow(10,-n))
	{
		pi+=sign/fm;
		sign=-sign;
		fm+=2;
	}
	printf("%f",pi*4); 
	
	
	return 0;
}

M : 实验4 简单矩阵运算

题目描述

编程实现3*3矩阵A、B的加法、减法、乘法及A的转置运算并输出。

  • 其中矩阵A、B将由系统给出。
  • 数字位置对齐可在printf中使用”\t”。
  • 输出的每个矩阵间用"\n"分隔。

输入格式

十八个整数,为两个3*3的矩阵中的元素

输出格式

输出对应操作后的矩阵

完整代码答案

#include<stdio.h>
int main()
{
	int a[3][3];
	int b[3][3];
	int jia[3][3];
	int jian[3][3];
	int cheng[3][3];
	int zhuan[3][3];
	int i,j,m;
	
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			cheng[i][j]=0;
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			scanf("%d",&b[i][j]);
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			jia[i][j]=(a[i][j]+b[i][j]);
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			jian[i][j]=(a[i][j]-b[i][j]);
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			for( m=0;m<3;m++){
			cheng[i][j]=cheng[i][j]+(a[i][m]*b[m][j]);
			}
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			zhuan[i][j]=a[j][i];
		}
	}
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%d\t",jia[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%d\t",jian[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%d\t",cheng[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			printf("%d\t",zhuan[i][j]);
		}
		printf("\n");
	}
	return 0;
}

N : 实验4 简单背包问题

实验要求

给定n种物品和一背包。物品i的重量(体积)是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大。

  • 形式化描述

给定 C > 0 , w i > 0 , v i > 0 , 1 ≤ i ≤ n C>0,w_i>0,v_i>0,1\le i\le n C>0,wi>0,vi>0,1in,要求找一 n n n 元向量 X = ( x 1 , x 2 , … , x n ) , x i ∈ { 0 , 1 } X=(x_1, x_2, \dots,x_n),x_i\in\{0, 1\} X=(x1,x2,,xn),xi{0,1}
即:

max ⁡ ∑ i = 1 n v i x i  s.t  { ∑ i = 1 n w i x i ≤ C x i ∈ { 0 , 1 } , 1 ≤ i ≤ n \begin{array}{l} \max \sum_{i=1}^{n} v_{i} x_{i} \\ \text { s.t }\left\{\begin{array}{c} \sum_{i=1}^{n} w_{i} x_{i} \leq C \\ x_{i} \in\{0,1\}, 1 \leq i \leq n \end{array}\right. \end{array} maxi=1nvixi s.t {i=1nwixiCxi{0,1},1in

  • 请分别利用枚举法(穷举法)解决上述问题。

  • 枚举法(穷举法)肯定能找到最优解。

  • 要求:

    • 系统给出的第一个数字是背包容量,第二个数字是物品件数,然后分别给出每件物品的重量,再分别给出每件物品的价值。
    • 请依次输出装入背包的物品序号,总重量,总价值。
  • 提示:

变量定义:
w = ( w 1 , w 2 , … , w n ) w=(w_1,w_2,\dots,w_n) w=(w1,w2,,wn) 表示 n n n 种物品的重量, v = ( v 1 , v 2 , … , v n ) v=(v_1,v_2,\dots,v_n) v=(v1,v2,,vn) 表示 n n n 种物品的价值;
X = ( x 1 , x 2 , … , x n ) , x i ∈ { 0 , 1 } X=(x_1, x_2, \dots,x_n),x_i\in\{0, 1\} X=(x1,x2,,xn),xi{0,1}表示问题的最优解,若 x i = 1 x_i=1 xi=1,表示将第 i i i 种物品装入背包,最优解对应的背包重量为 Weight,价值为Value;初始化 Weight=0, Value=0;
C表示背包的容量(所能容纳的重量);
Y = ( y 1 , y 2 , … , y n ) , y i ∈ { 0 , 1 } Y=(y_1, y_2, \dots,y_n),y_i\in\{0, 1\} Y=(y1,y2,,yn),yi{0,1}表示目前n种物品的一种装法(解法),按该装法,背包中物品的重量为CurWeight ,背包中物品的价值为CurValue ;

算法描述(伪代码):

for (i=0 to 2 n − 1 2^n-1 2n1) {
将 i 对应的二进制数按位存放到数组Y中;
尝试按照装包方案y进行装包,则背包中物品的重量为CurWeight, 价值为CurValue;
如果CurWeight>C,则丢弃该方案,继续尝试下一种方案;否则,若该方案优于以前的方案,即如果CurValue>Value,则暂存该方案:即X=Y,Value=CurValue, Weight= CurWeight。 继续循环;
}

输出最优解X和对应的物品的相关信息, 背包中物品的价值Value,背包中物品的重量Weight;

  • 测试用例:
    • 背包容量 C = 150 C=150 C=150 7 7 7 种物品,其重量 W = ( 10 , 40 , 30 , 50 , 35 , 40 , 30 ) W=(10,40,30,50,35,40,30) W=(10,40,30,50,35,40,30),价值 V = ( 35 , 30 , 6 , 50 , 40 , 10 , 25 ) V=(35,30,6,50,40,10,25) V=(35,30,6,50,40,10,25) (W与V均为整数)
    • 枚举法得到的最优解:装入物品 1 , 2 , 4 , 5 1,2,4,5 1,2,4,5,背包重量 135 135 135,最大价值 155 155 155

数据范围

C < 1000 , n < 20 C \lt 1000,n \lt20 C<1000n<20

完整答案代码

#include<stdio.h>
int main()
{
	int n,c,i,j;
	scanf("%d%d",&c,&n);
	int w[n];
	int v[n];
	int f[c+1]; 
	int g[n][c+1];

	for(i=0;i<n;i++){
		for(j=0;j<=c;j++){
			g[i][j]=0;
		}
	}
	for(i=0;i<=c;i++){
		f[i]=0;
	}
	for(i=0;i<n;i++){
		scanf("%d",&w[i]);
	}
	for(i=0;i<n;i++){
		scanf("%d",&v[i]);
	}
	for(i=n-1;i>=0;i--){
		for(j=c;j>=w[i];j--){
			if(f[j]<f[j-w[i]]+v[i]){
				f[j]=f[j-w[i]]+v[i];
				g[i][j]=1;
			}else{
				g[i][j]=0;
			}
		}
	}
	int t=c;
	for(i=0;i<n;i++){
		if(g[i][t]==1){
			printf("%d ",i+1);
			t-=w[i];
		}
	}
	printf("%d %d",c-t,f[c]);
	return 0;
 } 

如能打赏,不甚感激[叩谢]。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐