实验四

ex1

 1 //
 2 //  main.c
 3 //  ex1
 4 //
 5 //  Created by 薛定饿了么 on 2020/11/26.
 6 //
 7 
 8 #include <stdio.h>
 9 #include <math.h>
10 
11 void solve(double a,double b,double c);
12 
13 
14 int main(int argc, const char * argv[]) {
15     // insert code here...
16     double a,b,c;
17     
18     printf("Enter a,b,c:");
19     
20     while(scanf("%lf%lf%lf",&a,&b,&c)!=EOF){
21         
22         solve(a,b,c);
23         printf("Enter a,b,c:");
24     }
25     
26     return 0;
27 }
28 
29 void solve(double a,double b,double c){
30     double x1, x2;
31     double delta, real, imag;
32     if(a == 0)
33         printf("not quadratic equation.
");
34     else {
35         delta = b*b - 4*a*c;
36         if(delta >= 0) {
37             x1 = (-b + sqrt(delta)) / (2*a);
38             x2 = (-b - sqrt(delta)) / (2*a);
39             printf("x1 = %f, x2 = %f
", x1, x2);
40         }
41         else {
42             real = -b/(2*a);
43             imag = sqrt(-delta) / (2*a);
44             printf("x1 = %f + %fi, x2 = %f - %fi
", real, imag, real,
45                    imag);
46         }
47     }
48 }
49 /*
50  *问题:这个应用中,一元二次方程的根,能否设计成以函数返回值的方式返回给主调函数?
51  *思考:不行。因为返回值只能返回一个值。
52  * #不过如果用数组的话,那值得一试。
53  */

(思考见代码)

ex2_1

 1 #include <stdio.h>
 2 long long fac(int n); // 函数声明
 3 int main() {
 4     int i,n;
 5     printf("Enter n: ");
 6     scanf("%d", &n);
 7     for(i=1; i<=n; ++i)
 8     printf("%d! = %lld
", i, fac(i));
 9     return 0;
10 }
11 // 函数定义
12 long long fac(int n) {
13     static long long p = 1;
14 
15     p = p*n;
16     return p;
17 }

ex2_2

 1 // 练习:局部static变量特性
 2 #include<stdio.h>
 3 int func(int, int);
 4 int main() {
 5     int k=4,m=1,p1,p2;
 6     p1 = func(k,m) ;
 7     p2 = func(k,m) ;
 8     printf("%d,%d
",p1,p2) ;
 9     return 0;
10 }
11 int func(int a,int b) {
12     static int m=0,i=2;
13     i += m+1;
14     m = i+a+b;
15     return (m);
16 }
17 
18 /*问:理论分析结果实验运行结果是否一致。
19 *答:第一次理论分析结果与实验不符,纠正后符合了。
20 *
21 *问:基于上述测试截图,总结局部static变量的特性。
22 *答:1.继承性
23 *   2.不可被重定义
24 *   3.不同函数中可以有同名的局部static变量,他妈互不干涉。
25 */

(分析见代码)

ex3

 1 //寻找两个整数之间的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。
 2 // 例如,输入6和21,则输出为:7 11 13 17 19。
 3 #include <stdio.h>
 4 #define N 1000
 5 int fun(int n,int m,int bb[N]) {
 6     int i,j,k=0,flag;
 7     for(j=n;j<=m;j++) {
 8     flag = 1;if(j<2)continue;
 9         for(i=2;i<j;i++)
10         if(j%i==0){
11             flag=0;
12             break;
13         }
14         if(flag!=0)
15             bb[k++]=j;
16     }
17     return k;
18 }
19 
20 int main(){
21     int n=0,m=0,i,k,bb[N];
22     scanf("%d",&n);
23     scanf("%d",&m);
24     for(i=0;i<m-n;i++)
25     bb[i]=0;
26     k=fun(n,m,bb);
27     for(i=0;i<k;i++)
28     printf("%4d",bb[i]);
29     return 0;
30 }

ex4

 1 #include <stdio.h>
 2 long long fun(int n); // 函数声明
 3 int main() {
 4     int n;
 5     long long f;
 6     while(scanf("%d", &n) != EOF) {
 7         f = fun(n); // 函数调用
 8         printf("n = %d, f = %lld
", n, f);
 9     }
10     return 0;
11 }
12 // 函数定义
13 // 补足。。。
14 
15 
16 long long fun(int n){
17     long int round=0;
18     if (n==1)
19         return 1;
20     if (n>1){
21         round+=2*fun(n-1);
22         round++;
23     }
24     return round;
25 }

ex5

 1 #include <stdio.h>
 2 void draw(int n, char symbol); // 函数声明
 3 int main() {
 4     int n, symbol;
 5     while(scanf("%d %c", &n, &symbol) != EOF) {
 6         draw(n, symbol); // 函数调用
 7         printf("
");
 8     }
 9     return 0;
10 }
11 
12 void draw(int n, char symbol){
13     for(int j=1;j<=n;j++){
14         
15         for(int i=1;i<=n-j;i++)printf(" ");
16         for(int i=1;i<=2*j-1;i++)printf("%c",symbol);
17         for(int i=1;i<=n-j;i++)printf(" ");
18         printf("
");
19         
20     }
21     
22 }

原文地址:https://www.cnblogs.com/HighHand-LadyKiller/p/14044875.html