高级语言程序设计课程第七次个人作业
高级程序设计第七次个人作业
- 作业课程:2025高级语言程序设计(福州大学)
- 作业要求:高级语言程序设计第七次个人作业
- 学号:052406103
- 姓名:叶银珍
作业内容
(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;
}

(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
- 1 2 3 4 5
#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;
}

(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;
}
}

(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;
}

(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;
}

(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类数据占的内存大小

(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
}
}

浙公网安备 33010602011771号