实验3

1.随机数生成

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #define N 5
 5 int main() {
 6     int x,n;
 7     srand(time(0));
 8     for (n = 1; n <=N ; n++) {
 9         x=rand()%100;//产生0~99之间的随机数
10         printf("%3d",x);
11     }
12     printf("\n");
13     return 0;
14 }

for循环用来控制每行打印的随机数个数。

结果如下:

 

2.猜幸运日

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 int main(){
 5     int x,ans,i;
 6     srand(time(0));
 7     x=rand()%31+1;//产生1~31之间的随机数
 8     printf("Guess your lucky day of May!!\n");
 9     printf("You have three chances.Enter your answer:");
10     scanf("%d",&ans);
11     for (i = 0; i < 2; i++) {
12         if (ans > x) {
13             printf("Too late. Try again:");
14             scanf("%d", &ans);
15         } else if (ans < x) {
16             printf("Too early. Try again:");
17             scanf("%d", &ans);
18         } else {
19             printf("You`re right!!");
20             break;
21         }
22     }
23         if (i>=2)
24             printf("Your lucky day is May %d",x);//出循环后判断是答对还是用完次数
25     return 0;
26 }

运行结果如下:

 

3.取奇数输出

代码如下:

 1 #include <stdio.h>
 2 #include <math.h>
 3 int main(){
 4     long s;
 5     double ans=0,i=0;
 6     int n;
 7     printf("Enter a number:");
 8     scanf("%ld", &s);
 9     while (s / 10.0 != 0) {
10         n = s % 10;//取最低位
11         s /= 10;
12         if (n % 2 != 0) {
13             ans += n * pow(10.0, i);
14             i++;
15         }//将奇数按原位排列
16     }
17     printf("new number is:%.0lf\n", ans);
18     return 0;
19 }

结果如下:

要注意的是,由于长整型数据的最大值为2147483647,所以如果测试的时候一不注意敲进去多于10位的数字,将会返回负数结果,就像下图:

(我才不会告诉你这是我测试的时候乱搞发现的...其实我想知道为啥会是负数)

 

4.一元二次方程根的求解

代码如下:

 1 #include <stdio.h>
 2 #include <math.h>
 3 void solve(double a,double b,double c);
 4 int main(){
 5     double a,b,c;
 6     printf("Enter a,b,c:");
 7     while (scanf("%lf %lf %lf",&a,&b,&c)!=EOF){
 8     solve(a,b,c);
 9     printf("Enter a,b,c:");
10     }
11     return 0;
12 }
13 void solve(double a,double b,double c){
14     double delta,x1,x2,real,imag;
15     delta=b*b-4*a*c;
16     if (a==0)
17         printf("not quadratic equation\n");
18     else if(delta>=0) {
19         x1 = (-b + sqrt(delta)) / 2 * a;
20         x2 = (-b - sqrt(delta)) / 2 * a;
21         printf("x1=%.2lf,x2=%.2lf\n",x1,x2);
22     }
23     else {
24         real = -b / (2 * a);
25         imag = sqrt(-delta) / (2 * a);
26         printf("x1=%.2lf+%.2lfi,x2=%.2lf-%.2lfi\n",real,imag,real,imag);
27     }
28 
29 }

结果如下:

solve函数的结果如果以x1,x2两根的形式返回主函数应该是不可能的。

 

 

5.数列求和

补全后代码如下:

 1 #include <stdio.h>
 2 double fun(int n);
 3 int main() {
 4     int n;
 5     double s;
 6     printf("Enter n(1~10): ");
 7     while(scanf("%d", &n) != EOF) {
 8         s = fun(n);
 9         printf("n = %d, s= %f\n\n", n, s);
10         printf("Enter n(1~10): ");
11     }
12     return 0;
13 }
14 double fun(int n) {
15     double k,sign=1,s1=0;//定义一个控制符号的变量
16     for (int i = 1; i<=n ; i++){
17         k=1;
18         for (int j = 1; j<=i ; j++) {
19             k*=j;//求阶乘
20         }
21         s1+=sign/k;
22         sign*=(-1);//每一循环改变符号
23     }
24     return s1;
25 }

运行结果如下:

 

6.素数输出与计数

代码如下:

 1 #include <stdio.h>
 2 int isPrime(int x);
 3 int main() {
 4     int k=0,p=1;//变量k用于计数,p用于控制格式
 5     for (int i = 101; i <=200 ; i++) {
 6         if(isPrime(i)){
 7             printf("%4d",i);
 8             k++;
 9             p++;
10         }
11         if (p%6==0){      //每打印五个数字换行,由于p初值为1,所以这里对6取余
12             printf("\n");
13             p=1;
14         }
15     }
16     printf("\nThe number of primes between 100 and 200 is %d",k);
17     return 0;
18 }
19 //素数判断函数
20 int isPrime(int x){
21     int i,k;
22     if (x<2)
23         k=0;
24     for (i =2 ; i <= x; ++i) {
25         if (x%i==0){
26             k=0;
27             break;
28         }
29     }
30     if (i>=x)
31         k=1;
32     return k;
33 }

结果如下:

 

7.移动小人

自己略微改了一点代码,用了实验1的随机生成函数。

效果是生成在窗口一定范围内随机乱跑的小人。

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <windows.h>
 4 #include <time.h>
 5 void printCharMan(int line, int col); // 函数声明
 6 void printSpaces(int n); // 函数声明
 7 int main() {
 8     int line, col;
 9     while(1) {
10     srand(time(0));
11     line=rand()%100;
12     col=rand()%100;
13     printCharMan(line, col);
14     Sleep(500); // 暂停500ms
15     system("cls"); // 清除屏幕
16     }
17 }
18 // 打印n个空格
19 void printSpaces(int n){
20     int i;
21     for(i=1; i<=n; i++)
22         printf(" ");
23 }
24 // 在第line行第col列打印一个字符小人
25 void printCharMan(int line, int col) {
26     int i;
27 // 打印line-1行空行
28     for(i=1; i<=line-1; i++)
29         printf("\n");
30 // 打印col-1个空格
31     printSpaces(col-1);
32 // 在第line行、第col列打印字符小人的头
33     printf(" O \n");
34 // 打印col-1个空格
35     printSpaces(col-1);
36 // 在第line行、第col列打印字符小人的身体
37     printf("<H>\n");
38 // 打印col-1个空格
39     printSpaces(col-1);
40 // 在第line行、第col列打印字符小人的腿
41     printf("I I\n");
42 }

因为想不出应该怎样终止循环,所以只能用 while(1)先写个死循环在这里。

posted @ 2021-04-10 18:17  namelessbird  阅读(122)  评论(2编辑  收藏  举报