实验4

实验任务1

#include <stdio.h>
   const int N = 4; 
int main(){
    int  a[N]={2,0,2,1};
    char b[N]={'2','0','1','1'}; 
    int i;
    printf("sizeof(int)=%d\n",sizeof(int));
    printf("sizeof(char)=%d\n",sizeof(char));
    printf("\n");
    for(i=0;i<N;++i)
        printf("%x:%d\n",&a[i],a[i]);
    printf("\n"); 
    for(i=0;i<N;++i)
        printf("%x:%c\n",&b[i],b[i]);
    return 0;
}

 

    数组a中,内存是连续存放的,每个元素占4个字节。

    数组b中,内存是连续存放的,每个元素占4个字节。

#include <stdio.h>
int main(){
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    char b[2][3] = {{'1', '2', '3'}, {'4', '5', '6'}};
    int i, j;
    for (i = 0; i < 2; ++i)
       for (j = 0; j < 3; ++j)
         printf("%x: %d\n", &a[i][j], a[i][j]);
     printf("\n");
    for (i = 0; i < 2; ++i)
     for (j = 0; j < 3; ++j)
      printf("%x: %c\n", &b[i][j], b[i][j]);
    
    
    
}

 

    a中不完全连续,占4字节

    b中连续,占1字节

 

实验任务2

#include <stdio.h>
#define N 1000
int fun(int n,int m,int bb[N])
{ int i, j, k = 0, flag; 
    for (j = n; j <= m; j++){
        
        flag=1;
        
        for (i = 2; i < j; i++)
          if (j%i==0) 
           { flag = 0; 
              break;    
           } 
        if (flag!=0)
         bb[k++] = j;    
      }
      return k; 
}
int main() 
{ int n = 0, m = 0, i, k, bb[N]; 
    scanf("%d", &n); 
    scanf("%d", &m); 
   for (i = 0; i < m - n; i++)
      bb[i] = 0; 
      
     k = fun(n,m,bb); 
  
  for (i = 0; i < k; i++) 
   printf("%4d", bb[i]);
    return 0;
    }

 

 

 

 

实验任务3

#include <stdio.h> 
   const int N = 5;
int find_max(int x[], int n); 
void input(int x[], int n); 
void output(int x[], int n);

int main(){
    int a[N]; 
    int max;
    
    input(a, N);
    output(a, N);
    max = find_max(a, N);
    
    printf("max = %d\n", max); return 0;
    return 0;    
}
void input(int x[], int n)
 { int i;
  for (i = 0; i < n; ++i)
   scanf("%d", &x[i]); }
void output(int x[], int n)
 { int i;
  for (i = 0; i < n; ++i)
   printf("%d ", x[i]);
    printf("\n"); }

int find_max(int x[], int n)
{ int max=0;
  for(int i=0;i<n;i++)
  {
    if(x[i]>max)
    max=x[i];

  }
  return max;
}

 

 

实验任务4

#include <stdio.h>
 void dec2n(int x, int n); 
 int main(){
     int x;
   printf("输入一个十进制整数: "); 
   scanf("%d", &x); 
     dec2n(x, 2);
      dec2n(x, 8);
      dec2n(x, 16);    
  return 0;
 }
 void dec2n(int x, int n) {
int k;
int m=0;
    k=x;
while(k){
    k=k/n;
    m++;
        }
int a[m];
for(int i=0;i<m;i++){
    a[i]=x%n;
    x=x/n;
}
for(int i=m-1;i>=0;i--)
   switch(a[i]){
       case 10: printf("A");break;
       case 11: printf("B");break;
       case 12: printf("C");break;
       case 13: printf("D");break;
       case 14: printf("E");break;
       case 15: printf("F");break;
    default: printf("%d",a[i]);break;
       
   }
 printf("\n");
  }

 

 

 实验任务5

方法1:不用二维数组(简)

#include<stdio.h>
int main(){
    
    int i,j,n;
    while(scanf("%d",&n)!=EOF){
    for(j=1;j<=n;j++)
    {for(i=1;i<=n;i++)
       if(i>j)
       printf("%d ",j);
       else 
       printf("%d ",i);
    
    printf("\n");     
    }
    
    
    }return 0;
}

 

 方法二用二维数组(复杂一点点)

#include<stdio.h>
int main(){
    
    int i,j,n;
    while(scanf("%d",&n)!=EOF){
    int a[n][n];
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
        if(j>i){
          a[i-1][j-1]=i;
          printf("%d ",a[i-1][j-1]);
        }
        
        else{
        a[i-1][j-1]=j;
        printf("%d ",a[i-1][j-1]);}
        
        printf("\n");              
    }
    
    return 0;
}}

 

posted @ 2021-12-02 20:43  杨程旭  阅读(27)  评论(0编辑  收藏  举报