实验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; }


浙公网安备 33010602011771号