一、实验题目、设计思路、实现方法
1.实验题目
11-8 螺旋方阵:所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
12-5 查找指定字符:本题要求编写程序,从给定字符串中查找某指定的字符。
13-6 数组循环右移(20 分):本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。
14-5 指定位置输出字符串:本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
15-3 函数实现字符串逆序:本题要求实现一个字符串逆序的简单函数。
0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)(最后m个数循环移至最前面的m个位置)。2.设计思路、实现方法
11-8:定义一个二维数组,借助循环结构按照题目的从第一排第一个开始顺时针旋转将数字填入方阵。
12-5:从头到尾一个一个查找,直到找到为止。因为还有没找到的情况,所以在最开始需要设置一个变量并赋予一个数值,找到时改变变量的值,这样方便判断找没找到。
13-6:定义一个数组来存储移动后的数组的值;n个元素的数组第i个元素右移m个位置,则i=(i+m)%n。
14-5:利用指针不断地移动找到匹配位置ch1,然后返回ch1的地址。
15-3:利用两个指针分别从首尾两端向中间移动,然后借助中间变量完成值的交换。
二、源程序
11-8:do{
d=i;
for(j=i;j<n;j++){
b+=1;
a[i][j]=b;
}
j--;
for(i+=1;i<=j;i++){
b+=1;
a[i][j]=b;
}
i--;
j--;
for(;j>=d;j--){
b+=1;
a[i][j]=b;
}
i--;
j++;
for(;i>j;i--){
b+=1;
a[i][j]=b;
}
i++;
j++;
n--;
}while(b<c*c);
12-5:int i=0,j,count=0;
char str[80],op;
scanf("%c\n",&op);
while((str[i]=getchar())!='\n'){
i++;
}
str[i]='\0';
for(i=0;str[i]!='\0';i++){
if(str[i]==op){
j=i;
count++;
}
}
if(count!=0)
printf("index = %d",j);
else
printf("Not Found");
13-6:int ArrayShift( int a[], int n, int m){
int i,j;
int b[n];
if(m%n==0){
m=0;
}
for(i=0;i<n;i++){
b[(i+m)%n]=a[i];
}
for(i=0;i<n;i++){
a[i]=b[i];
}
}14-5:char *match( char *s, char ch1, char ch2 ){
char str[MAXS];
char *p,*q, *t;
int i;
p = s;
while(*p!=ch1&&*p!='\0'){
p++;
}
q = p;
for(i=0;i<MAXS && *p !='\0' && *p != ch2;i++,p++){
str[i] = *p;
}
if(*p != '\0'){
str[i] = ch2;
str[++i] = '\0';
}
str[i] = '\0';
printf("%s\n",str);
return q;
}
15-3:void f( char *p ){
char *s=p,*q=s,op;
while(*q){
q++;
}
q--;
while(q>s){
op=*s;
*s++=*q;
*q--=op;
}
}
三.遇到的问题及解决方法,心得体会
11-8螺旋方阵,刚看到这题第一印象就是这题很难,我做不出来,但是觉得还是可以试试的,试着试着就做出来了。这让我明白代码不仅是靠想的,还需要一定的实践,不试试怎么知道不行呢!
14-5指定位置输出字符串,做这题时只能输出一行字符串,而样例却能输出两行字符串。经过不断测试打印,发现需要在函数中实现一次打印。