实验三

一:实验结论:

   1:生成N个0~99之间的随机整数,并打印输出。

   (1)源代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int main() {
    int x, n;
    srand(time(0)); 
    
    for(n=1; n<=N; n++) {
        x = rand() % 100; 
        printf("%3d", x);
    }
    
    printf("\n");
    return 0;
}       

   (2)运行结果截图:

 

   2:一个简单的猜日期程序。

   (1)源代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 3

int main (){
	int x,n;
	srand(time(0));
	x = rand() %31+1 ;
	printf("猜猜2021年5月那一天会是你的Lucky day\n");
	printf("开始喽,你有三次机会,猜吧(1—31):");
	
	for(n=1;n<=N;n++){
		int a;
		scanf("%d",&a);
		if(a==x){
		  printf("你猜中了\n");
		  break;
	      }
		if(a<x){ 
		  printf("你猜的日期早了,Lucky day还没到呢\n");
		  } 
	    if(a>x){ 
		  printf("你猜的日期晚了,Lucky day悄悄溜到前面来啦\n"); 
		if(n<N)
		printf("再猜(1—31):");
		  } 
	}
	if (n==4)
	  printf("\n次数用完啦,偷偷告诉你:5月,你的Lucky day是%3d号",x);
	 else
	  printf("\n");
	
	return 0;
	
}

   (2)运行结果截图:

  

 

   3:将一个长整型数s的每一数位上的奇数依次取出,构成一个新的数,高位仍在高位,低位仍在低位。

   (1)源代码:

#include<stdio.h>
#include<math.h>
int main(){
	{sign:
	int data;
	printf("请输入你希望处理的数据:");
	scanf ("%ld",&data);
	int t=0,i=0;char m= 0; 
	int n;
	if(m==data) {goto k;}	
	else{
	while(data / 10.0 != 0) {
		n = data % 10;
		data /=10;
		if(n % 2!=0){
		  t+= n*pow(10.0, i);
		  i++;}
		}
	printf("数据处理的结果: %d\n",t);
	printf("\n");
	  goto sign;}}
	  {	k:  return 0;}
}

   (2)运行结果截图:  

   (3)由于不会在c语言中将crtl+z设置为结束程序的指定数据,采用0作为结束数据指令。

 

   4:多组方程系数.

   (1)源代码:

#include <math.h>
#include <stdio.h>

// 函数声明
void solve(double a, double b, double c);

// 主函数 
int main() {
	double a, b, c;
	
	printf("Enter a, b, c: ");
	while(scanf("%lf%lf%lf", &a, &b, &c) != EOF) {
		solve(a, b, c);  // 函数调用 
		printf("Enter a, b, c: ");
	}
	
	return 0;
}

// 函数定义
// 功能:求解一元二次方程,打印输出结果
// 形式参数:a,b,c为一元二次方程系数 
void solve(double a, double b, double c) {
	double x1, x2;
	double delta, real, imag;
	
	if(a == 0) 
		printf("not quadratic equation.\n");
	else {
		delta = b*b - 4*a*c;
		
		if(delta >= 0) {
			x1 = (-b + sqrt(delta)) / (2*a);
			x2 = (-b - sqrt(delta)) / (2*a);
			printf("x1 = %.2f, x2 = %.2f\n", x1, x2);
		}
		else {
			real = -b/(2*a);
			imag = sqrt(-delta) / (2*a);
			printf("x1 = %.2f + %.2fi, x2 = %.2f - %.2fi\n", real, imag, real, imag);
		}
	}	
}

    (2)运行结果截图:

   (3)问题:这个应用中,一元二次方程的根,能否设计成以函数返回值的方式返回给主调函数?

         回答:重根时可以,return  x1;

                    此外不行,函数只能有一个返回值。

 

    5:从键盘上输入n(1<=n<=10),根据以下计算式计算s的值,并输出。 具体要求如下:

        定义并实现一个函数fun()用于计算数列求和;

        在main()函数中输入n,然后调用fun()完成计算,并打印输出。

   (1)源代码:

#include <stdio.h>
double fun(int n);
unsigned int getfactorial (unsigned int n);  // 函数声明 
 
int main() {
	int n;
	double s;
	
	printf("Enter n(1~10): ");
	while(scanf("%d", &n) != EOF) {
		s = fun(n);  // 函数调用 
		printf("n = %d, s= %f\n\n", n, s);
		printf("Enter n(1~10): ");
	}
	
	return 0;
}

// 函数定义 
double fun(int n) {
	double s=1,t=1;
	int i;
    if(n==1)
      return s=1;
    else
      for(i=2;i<=n;i++)
	  {
	  	t=-t*1/i;
	  	s=s+t;
      	}
	  return s;
}

   (2)运行结果截图:

 

   6:输出101-200之间所有素数与其个数。

   (1)源代码:

#include<stdio.h>
#include<math.h>
int isprime(int n);    //函数的定义 
int main(){
	
	int i;
	int a=1;
	for(i=101;i<=200;i++)
	{   
	   
		if(isprime(i)){
		   printf("%4d",i);
		   a++;
	    }
		if(a%6==0){
			printf("\n");
			a=1;//将n的值返回1 
		}   
	}
	return 0;
} 
int isprime(int n){
	int k;
	for(k=2;k<=sqrt(n);k++)
	   if(n%k == 0)
	      return 0; 
	return 1;
}

   (2)运行结果截图:

 

 

二:实验总结:

    1:收获:(1)通过实验更为清晰的认识到了&,for语句的用法;

                     (2)对函数的嵌套及调用有了更直观的了解;

                     (3)将系统时间作为随机种子生成指定范ctt围内的随机数的方法。

    2:尚存的问题:(1)在任务三中无法做到输入ctrl+z时停止程序的运行;

                               (2)对算法的理解还不到位。

                             (3)对细节的掌握还存在不足。

                               

 
posted @ 2021-04-15 12:41  Dictator——博客  阅读(86)  评论(2)    收藏  举报