高级语言程序设计课程第七次个人作业

高级程序设计第七次个人作业


作业内容

(1)定义一个二维数组和指向该数组的指针,分别以数组下标和指针的形式引用数组各个元素进行赋值与输出。

i][#include<stdio.h>
int main(){
  int a[3][4];
  int (*p)[4]=a;
  //用数组下标实现赋值和输出
  for(int i=0;i<3;i++){
  	for(int j=0;j<4;j++) a[i][j]=i*10+j;   
  }
  for(int i=0;i<3;i++){
  	for(int j=0;j<4;j++) printf("%d ",a[j]);  
	  printf("\n");
  }
  printf("\n");
//用指针实现赋值和输出
  for(int i=0;i<3;i++){
  	for(int j=0;j<4;j++) *(*(p+i)+j)=-i*10-j;   
  }
  for(int i=0;i<3;i++){
  	for(int j=0;j<4;j++) printf("%d ",*(*(p+i)+j));  
	  printf("\n");
  }
  return 0;
}

屏幕截图 2025-11-30 192050

(2)构造螺旋方阵。对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。

  • 输入格式:
    • 输入在一行中给出一个正整数N(<10)。
  • 输出格式:
    • 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
  • 输入样例:5
  • 输出样例:
    • 1 2 3 4 5
      16 17 18 19 6
      15 24 25 20 7
      14 23 22 21 8
      13 12 11 10 9
#include<stdio.h>
#define max_size 300

int main(){
  int n,x=1;
  int a[max_size][max_size];
  scanf("%d",&n);
  int i=0,j=0,k=0;
  while(a[i][j]==0){
  	for( ;j<n-k;j++) {
		a[i][j]=x++;   
	}
	j--;i++;
  	for(;i<n-k;i++){
  		a[i][j]=x++; 
	  }
    i--;j--;
	for(;j>=k;j--) {
  		a[i][j]=x++;  
	  }
	j++;i--;
	for(;i>k;i--){
		a[i][j]=x++;
	}
    k++;i++;j=k;
  }
  
  for(int i=0;i<n;i++){
  	for(int j=0;j<n;j++) printf("%d ",a[i][j]);  
	  printf("\n");
  }
 
  return 0;
}

屏幕截图 2025-11-30 203940

(3)7门课程的成绩分别存放在score[n][1]、score[n][2]、...、score[n][7]中,第0列用来存放总成绩。请编写一个函数实现计算成绩表score中每一个学生7门课程的总成绩,并将总成绩存放在该学生的第0列中。请在main函数中构造数据测试你写的函数。

#include<stdio.h>
#define max_size 300
void sum(int score[][8],int n );
int main(){
  int n;
  int score[max_size][8];
  printf("请输入人数n:\n");
  scanf("%d",&n);
  printf("请输入n组成绩:\n");
  for(int i=0;i<n;i++){
  	for(int j=1;j<8;j++) scanf("%d",&score[i][j]);  
  }
  sum(score,n);
  printf("计算总分后:\n");
  for(int i=0;i<n;i++){
  	 printf("%d ",score[i][0]);  
	  printf("\n");
  }
 
  return 0;
}
void sum(int score[][8],int n){
	int sum=0;
	for(int i=0;i<n;i++){
		for(int j=1;j<8;j++)sum+=score[i][j];
		score[i][0]=sum;
	}
	
}

屏幕截图 2025-11-30 205514

(4)将以下定义的含义写出来。

     a)int a;  b)int *a;  c)int **a;  d)int a[10]; e)int (*a)[10];
  • a) int a:数值a
  • b) int *a:指向int数据的一维指针a
  • c) int **a:指向int数据二维指针a
  • d) int a[10]:大小为10的数组
  • e) int (*a)[10]:指向二维数组a[][10]大小的指针

(5)给定一个二维数组,使用指针把数组中的数字复制到另一个数组中相同的位置。

#include<stdio.h>
#define max_size 300

int main(){
  int a[max_size][max_size];
  int copy[max_size][max_size];
  int (*p)[max_size]=a;
  int (*p1)[max_size]=copy;
  int n,m;
  printf("请输入数组大小:\n");
  scanf("%d%d",&n,&m);
  for(int i=0;i<n;i++){
  	for(int j=0;j<m;j++) a[i][j]=i*10+j;   
  }
  printf("原数组的值:\n");
  for(int i=0;i<n;i++){
  	for(int j=0;j<m;j++) printf("%d ",*(*(p+i)+j));  
	  printf("\n");
  }
  for(int i=0;i<n;i++){
  	for(int j=0;j<m;j++) *(*(p1+i)+j)=*(*(p+i)+j);   
  }
  printf("复制数组的值:\n");
  for(int i=0;i<n;i++){
  	for(int j=0;j<m;j++) printf("%d ",*(*(p1+i)+j));  
	  printf("\n");
  }
 
  return 0;
}

屏幕截图 2025-11-30 210657

(6)请编写一个函数,接受一个字符串指针作为参数,并返回该字符串的长度,不包括字符串结尾的空字符。

#include<stdio.h>
#define max_size 300
int count_size(char *p); 
int main(){
	char a[max_size];
    int size;
  
  printf("请输入字符串:\n");
  scanf("%s",a);
  size=count_size(a);
  
  printf("字符串的长度:%d",size);
  
  return 0;
}

int count_size(char *p){
	int size=0;
	while(*p){
		size++;
		*p++;
	}
	return size;
}

屏幕截图 2025-11-30 211544

(7)输出以下内容,并解释每一个输出内容的含义。

          int a[3][4] = {0};     

          printf("%d\n",sizeof(a));     //数组a的内存大小

          printf("%d\n",sizeof(a[0][0]));     //数组a中一个元素占的内存大小

          printf("%d\n",sizeof(a[0]));     //数组a中第0行占的内存大小

          printf("%d\n",sizeof(a[0]+1));       //指向a[0][1]的指针占的内存大小

          printf("%d\n",sizeof(*(a[0]+1)));    //数组a中a[0][1]占的内存大小

          printf("%d\n",sizeof(a+1));       //指向a[1]的指针占的内存大小

          printf("%d\n",sizeof(*(a+1)));     //数组a中a[1]占的内存大小

          printf("%d\n",sizeof(&a[0]+1));    //指向a[1]的指针占的内存大小

          printf("%d\n",sizeof(*(&a[0]+1)));   //数组a中a[1]占的内存大小

          printf("%d\n",sizeof(*a));    //数组a中a[0]占的内存大小

          printf("%d\n",sizeof(a[3]));    //4个int类数据占的内存大小

屏幕截图 2025-11-30 211755

(8)键盘输入一个长度为len(1 <= len < 30)的字符串,再输入一个正整数 m(1 <= m <= len),将此字符串中从第 m 个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。

#include<stdio.h>
#include<string.h>
#define max_size 30
void copy(char* t,const char *f,int n,int m);
int main(){
  char a[max_size];
  char b[max_size];
  int n,m;
  printf("请输入字符串a,b:\n");
  scanf("%s %s",a,b) ;
  printf("请输入m:");
  scanf("%d",&m); 
  n=strlen(a);
  copy(a,b,n,m);
  printf("a=%s\n",a);
  return 0;
}

void copy(char* t,const char *f,int n,int m) {
	int j=0;
    for (int i=m-1;i<n;i++){
    	 *(t+i)=*(f+j);          
        j=(j+1)%strlen(f);   //当字符串b的长度小于n-m时用模运算循环复制b
	}     
}

屏幕截图 2025-11-30 212523

posted @ 2025-11-30 21:34  叶银珍  阅读(2)  评论(0)    收藏  举报