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 }