实验2

Task1

<实验结论>

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 5
#define R1 586
#define R2 701

int main()
{
    int number;
    int i;

    srand(time(0));

    for (i = 0; i < N; ++i)
    {
        number = rand() % (R2 - R1 + 1) + R1;
        printf("20228330%04d\n", number);
    }
    return 0;
}

 **问题1:line18代码功能:

                用于为生成随机学号提供模板

    问题2:程序功能:

                 生成随机学号

 

 

Task2

<实验结论>

 **该题会遇到清空输入缓冲区问题,

    本人遇到的是其中的回车键被当做字符输入问题。

    下面给出本人的两种解决方案。

 

方案一:

#include <stdio.h>
int main()
{
float x, y; /*这里是被改错的行*/
char c1, c2, c3;
int a1, a2, a3;

scanf_s("%d %d %d", &a1, &a2, &a3); /*这里是被改错的行*/
printf("a1 = %d, a2 = %d, a3 = %d\n", a1, a2, a3);

getchar();
scanf_s("%c %c %c", &c1,1,&c2,1,&c3,1); /*这里是被改错的行*/
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);

scanf_s("%f %f", &x, &y); /*这里是被改错的行*/
printf("x = %f, y = %f\n", x, y); /*这里是被改错的行*/

return 0;
}

 

 方案二:

#include <stdio.h>
int main()
{
float x, y; /*这里是被改错的行*/
char c1, c2, c3;
int a1, a2, a3;

scanf_s("%d %d %d", &a1, &a2, &a3); /*这里是被改错的行*/
printf("a1 = %d, a2 = %d, a3 = %d\n", a1, a2, a3);

scanf_s("\n%c %c %c", &c1,1,&c2,1,&c3,1); /*这里是被改错的行*/
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);

scanf_s("%f %f", &x, &y); /*这里是被改错的行*/
printf("x = %f, y = %f\n", x, y); /*这里是被改错的行*/

return 0;
}

 

<实验总结>

解决输入缓冲区问题(以回车键为例):

1、在scanf函数输入字符前进行getchar函数的声明

2、在scanf函数格式说明前(""内部)加上"\n"

 

 

Task3

 

task3_2

<实验结论>

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

int main()
{
    double x,ans;

    while(scanf_s("%lf",&x)!=EOF)
    {
        ans = pow(x,365);
        printf("%.2f的365次方:%.2f\n",x,ans);
        printf("\n");
    }    
    return 0;
}

 

task3_3

<实验结论>

#define _CRT_SECURE_NO_WARNINGS  1
#include <stdio.h>
#include <math.h>

int main()
{
    double c,f;

    while (scanf("%lf", &c) != EOF)
    {
        f = 9 * c / 5 + 32;
        printf("摄氏度c = %.2lf时,华氏度f = %.2lf\n", c, f);
        printf("\n");
    }
    return 0;
}

 

 

 

Task4

<实验结论>

**本题有两种写法,分别是if...else if 语句和switch 语句。

 

if...else if 语句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
  char sign;

  while (scanf("%c", &sign) != 0)
  {
    if (sign == 'y')
      printf("wait a minute\n");
    else if (sign == 'g')
      printf("go go go\n");
    else if (sign == 'r')
      printf("stop!\n");
    else if (sign == '\n')
      printf("\n");
    else
      printf("something must be wrong...\n");
  }
  return 0;
}

 

switch 语句

#define _CRT_SECURE_NO_WARNINGS  1
#include <stdio.h>

int main()
{
    char sign;

    while (scanf("%c", &sign) != 0)
    {
        switch (sign)
        {
        case 'y':printf("wait a minute\n"); break;
        case 'g':printf("go go go\n"); break;
        case 'r':printf("stop!\n"); break;
        case '\n':printf("\n"); break;
        default:printf("something must be wrong...\n"); break;
        }
    }
    return 0;
}

 

 

<实验总结>

1、回车键也会被当作输入的字符,

      因此在写条件语句时也要考虑回车键的情况。

2、switch 语句往往比if...else 语句更为简洁。

 

 

 

Task5

<实验结论>

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int Luckyday,day,i;
    srand((unsigned)time(NULL));
    Luckyday = rand() % 30 + 1;

    printf("猜猜2023年4月哪一天会是你的lucky day\n");
    printf("\n开始咯,你有三次机会,猜吧(1-30):");

    for (i = 3; i > 0; i--)
    {
        scanf_s("%d", &day);

        if (day < Luckyday) {
            printf("\n你猜的日期早了,你的lucky day还没到呢\n");
            if (i > 1)
                printf("\n再猜(1-30):");
            else
                printf("\n\n");
        }
        if (day > Luckyday) {
            printf("\n你猜的日期晚了,你的lucky day已经过啦\n");
            if (i > 1)
                printf("\n再猜(1-30):");
            else
                printf("\n\n");
        }
        if (day == Luckyday) {
            printf("\n哇,猜中了:-)\n");
            break;
        }

        if (i == 1) {
            printf("次数用完啦。偷偷告诉你:4月,你的lucky day是%d号\n", Luckyday);
            break;
        }
    }
    return 0;
}

 

 

 

Task6

<实验结论>

#include<stdio.h>

int main() 
{
    int i, j;

    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= i; j++) {
            printf("%d×%d =%3d  ", j, i, j * i);
        }
        printf("\n");
    }
    return 0;
}

 

 

 

Task7

<实验结论>

**当输入n时:

第i行,需要打印n-(i-1)个小人

第i行,前面需要打印(i-1)* 2 行

#include<stdio.h>
 
int main() {
 
    int n;
 
    printf("input n:");
    scanf("%d", &n);
 
    for (int i = 1;i <= n; i++) {
        for (int k = 1;k <= 3; k++) {
            for (int j = 1;j <= i - 1; j++) {
                printf("      ");
            }
            for (int j = 1;j <= 2 * (n - i) + 1; j++) {
                if (k == 1) printf(" O    ");
                if (k == 2) printf("<H>   ");
                if (k == 3) printf("I I   ");
            }
            printf("\n");
        }
    }
    return 0;
}

posted on 2023-03-23 07:37  负熵宝子  阅读(22)  评论(0)    收藏  举报