一.实验题目,设计思路,实现方法
11-8 螺旋方阵 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
12-8 删除重复字符本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
13-6 数组循环右移本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。
14-6 通讯录的录入与显示通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)(最后m个数循环移至最前面的m个15-8 十进制转换二进制要求实现一个函数,将正整数n转换为二进制后输出。
二 设计思路:
11-8 螺旋方阵 所谓“螺旋方阵”:
实现方法这 :这一题最关键的是数字在数组中存放的位置,用到for循环来控制数字的位置,通过for循环的连用来控制数字出现的位置。
12-8 删除重复字符本:
实现方法:先对输入的字符进行排序,让后将排好序的字符进行比较相同的字符只取一放入新的数组中,从而达到字符删除的目的。
13-6 数组循环右移:
实现方法:利用三层for循环来控制,最外层循环来控制循环往后移动的位数,第二层循环控制每位的移动,最内层循环用来控制循环后新数组最开始那位是多少。
14-6 通讯录的录入与显示
实现方法:利用结构体实现通讯录里面信息的存储,再利用for循环对信息进行输入,定义数组控制编号。
15-8 十进制转换二进制:
利用递归的方法解决,如果数字为1或者0,直接输出该数字,如果数字不是这两个数字则继续调用该函数。
三.源程序
11-8 螺旋方阵
for(i=0;i<(n+1)/2;i++)
{
for(j=i;j<(n-i);j++)
a[i][j]=s++;
for(j=i+1;j<(n-i);j++)
a[j][n-i-1]=s++;
for(j=n-i-2;j>=i;j--)
a[n-i-1][j]=s++;
for(j=n-i-2;j>=(i+1);j--)
a[j][i]=s++;
}
12-8 删除重复字符
for(j=0;j<c;j++){
min=j;
for(i=j+1;i<c;i++)
if(str[min]>str[i])
min=i;
t=str[min];
str[min]=str[j];
str[j]=t;
}
/*以上是用于对字符串的排序,根据ascii码的大小进行调整*/
for(i=0;i<c;i++){
for(j=i;j<c;j++){
if(((' '<=str[j]&&str[j]<='~'))&&(str[j]==str[i])){
str_pr[k]=str[j];
for(int x=0;x<c;x++){
if(str_pr[k]==str[x]){
str[x]=0;
}
}
k++;
}
}
}
/*去除排好字符组中的重复字符,并带入新的str_pr字符组*/
for(i=0;i<k;i++){
printf("%c",str_pr[i]);
}
13-6 数组循环右移
for(i=0;i<m;i++) //移动次数
{
temp=a[n-1]; //保存最后一位数
for(k=n-1;k>=0;k--)
{
a[k]=a[k-1]; //向后移动
if(k==0)
{
a[k]=temp;
}
}
}
14-6 通讯录的录入与显示
struct friends
{
char name[20];
char birthday[20];
char sex[20];
char tel[20];
char sel[20];
}f[10];
int main()
{
int n,k,i,a[20];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s %s %s %s %s",f[i].name,f[i].birthday,f[i].sex,f[i].tel,f[i].sel);
scanf("%d",&k);
for(i=0;i<k;i++)
scanf("%d",&a[i]);
for(i=0;i<k;i++)
{
if(a[i]>=0&&a[i]<n)
printf("%s %s %s %s %s\n",f[a[i]].name,f[a[i]].tel,f[a[i]].sel,f[a[i]].sex,f[a[i]].birthday);
else
printf("Not Found\n");
}
return 0;
}
15-8 十进制转换二进制
void dectobin( int n )
{
int t;
if(n==0||n==1)
printf("%d",n%2);
else
{
t=n;
dectobin(n=n/2);
printf("%d",t%2);
}
}
四.遇到的问题及解决方法,心得体会
对for循环的使用还是有些生硬,多级for循环的使用就不太会,对结构体的定义使用还有一些模糊,,感觉对知识的熟练程度还不够。