第四次实验

  ex1只能返回一个返回值,或用指针返回,(sprintf可以吗???)

 

 1 #include<stdio.h>
 2 long long fac(int n);
 3 
 4 int main02() {
 5     int i, n;
 6 
 7     printf("Enter n: ");
 8 
 9     scanf_s("%d", &n);
10     for (i = 1; i <= n; i++)
11         printf("%d!=%-11d\n", i, fac(i));
12     
13     return 0;
14 }
15 
16 long long fac(int n) {
17     static long long p=1;
18 
19     printf("%d\n", p);
20     p = p * n;
21     
22     return p;
23 }

 

 

 1 #include<stdio.h>
 2 int fun(int, int);
 3 
 4 int main22() {
 5     int k = 4, m = 1, p1, p2;
 6 
 7     p1 = fun(k, m);
 8     p2 = fun(k, m);
 9     printf("%d,%d\n", p1, p2);
10 
11     return 0;
12 }
13 
14 int fun(int a, int b) {
15     static int m = 0, i = 2;
16     i += m + 1;
17     m = i + a + b;
18     return m;
19 
20 }

 

 

 

static 赋值在编译时进行,运行时变量具有继承性

 

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

 

 

 1 #include<stdio.h>
 2 long long fun1(int n);
 3 
 4 int main04() {
 5     int n;
 6 
 7     while (scanf_s("%d", &n) != EOF)
 8         printf("%d,%lld\n", n, fun1(n));
 9 
10     return 0;
11 }
12 
13 long long fun1(int n) {
14     if (n == 1) return 1;
15     else return fun1(n - 1) * 2+1;
16 }

 

 

 

 1 #include<stdio.h>
 2 void fun02(int n);
 3 //大整数运算
 4 int main44() {
 5     int n;
 6 
 7     while (scanf_s("%d", &n) != EOF)
 8         fun02(n);
 9 
10     return 0;
11 }
12 
13 void fun02(int n) {
14 
15     int arr[1000] = { 1,0 }, flag = 999;   //定义数组来存放每一个位的数(0~9)
16 
17     for (int i = n; i > 0; i--) {
18         for (int k = 0; k <= 999; k++)        //先算2~n :分开算,*一次2,就对arr每一个元素都乘2,                                                
19             arr[k] *= 2;
20 
21         for (int j = 0; j <= 999; j++) {   //由于一个数每个位数上是由0~9构成,
22             if (arr[j] > 9) {             //且逢十进一,低位求余,高位进一                
23                     arr[j] %= 10;
24                     arr[j + 1]++;                
25             }
26         }
27     }
28 
29         for (int i = 999; i >= 0; i--) {   //把最高位前的0都去掉
30             if (arr[i] == 0)flag--;
31             else break;
32         }
33 
34         for (int i = flag; i > 0; i--)  //逆序输出,高位在后面
35             printf("%d", arr[i]);
36 
37         printf("%d\n", arr[0] - 1);    //个位-1    
38 }

 

 

 

 1 #include<stdio.h>
 2 void draw(int n, char symbol);
 3 int main05() {
 4     int n;
 5     char symbol;
 6     while (scanf_s("%d %c", &n, &symbol) != EOF) {
 7         draw(n, symbol);
 8         printf("\n");
 9     }
10     
11     return 0;
12 }
13 
14 void draw(int n, char symbol) {
15     for (int i = 1; i<=n ; i++)
16     {
17         for (int j =n-i ; j > 0; j--)    
18             printf(" ");
19     
20         for (int k = 1; k <2*i ; k++)
21             printf("%c", symbol);
22 
23         printf("\n");
24     }
25 
26 }

 

 

实验中注意函数名不要重复

注意代码的简洁性

注意输出的对齐格式

 

posted on 2020-11-25 23:20  wlj23  阅读(119)  评论(2)    收藏  举报