一、思路及方法
11-8 螺旋方阵
设计二维数组,通过对方阵的行和列进行特征分析找出其中规律,利用循环即可将方阵输出。
12-6 字符串转换成十进制整数
设计字符数组,用getchar函数逐个截取,并设定以#为结束符;将每个符合条件的数组元素,利用ASCII码的十进制关系进行变化并输出。
13-5 判断回文字符串
设计字符型数组,并利用指针来传递输入内容;通过函数来判断是否为回文。
14-6 通讯录的录入与显示
通过定义结构数组,通过循环输入和输出存储内容。
15-10 建立学生信息链表
设计动态链表,对每项内容分别进行判断和处理。
二、部分源程序
11-8 螺旋方阵
for(i=0;i<m;i++){ for(j=i;j<n-i;j++){ a[i][j]=N; N++; } for(j=i+1;j<n-i;j++){ a[j][n-i-1]=N; N++; } for(j=n-i-2;j>=i;j--){ a[n-i-1][j]=N; N++; } for(j=n-2-i;j>=i+1;j--){ a[j][i]=N; N++; } } for(i=0;i<n;i++){ for(j=0;j<n;j++) printf("%3d",a[i][j]); printf("\n"); }
12-6 字符串转换成十进制整数
while((str[i]=getchar())!='#')
i++;
for(j=0;j<=i;j++){
if(str[j]=='-'){
k=j;
break;
}
}
for(j=0;j<=i;j++){
if((str[j]<='9'&&str[j]>='0')||(str[j]<='F'&&str[j]>='A')||(str[j]<='f'&&str[j]>='a')){
a=j;
break;
}
}
b=k;
k=0;
for(j=0;str[j]!='\0';j++){
if((str[j]<='9'&&str[j]>='0')||(str[j]<='F'&&str[j]>='A')||(str[j]<='f'&&str[j]>='a')){
c[k]=str[j];
k++;
}
}
c[k]='\0';
int number=0;
for(i=0;c[i]!='\0';i++){
if(c[i]>='0'&&c[i]<='9')
number=number*16+c[i]-'0';
else if(c[i]>='a'&&c[i]<='f')
number=number*16+c[i]-'a'+10;
else if(c[i]>='A'&&c[i]<='F')
number=number*16+c[i]-'A'+10;
}
13-5 判断回文字符串
bool palindrome( char *s )
{
int i=0,n,m;
n=strlen(s);
if(n%2==0){
m=n/2;
for(i=0;i<=m;i++){
if(s[i]!=s[n-1-i]){
return false;
}
}
return true;
}
else{
m=n/2+1;
for(i=0;i<=m;i++){
if(s[i]!=s[n-1-i]){
return false;
}
}
return true;
}
}
14-6 通讯录的录入与显示
#include<stdio.h>
struct message {
char name[100];
char birth[100];
char sex;
char number[100],phone[100];
};
int main()
{
int N,n;
scanf("%d",&N);
struct message s[11];
int i,j,k;
for(i=0;i<N;i++)
scanf("%s %s %c %s %s",&s[i].name,&s[i].birth,&s[i].sex,&s[i].number,&s[i].phone);
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&k);
if(k<N&&k>=0){
printf("%s %s %s %c %s\n",s[k].name,s[k].number,s[k].phone,s[k].sex,s[k].birth);
}
else
printf("Not Found\n");
}
return 0;
}
15-10 建立学生信息链表
void input()
{
int num,score;
char name[20];
struct stud_node *p;
scanf("%d",&num);
while(num){
p=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%s %d",name,&score);
p->num=num;
p->score=score;
strcpy(p->name,name);
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
}
}
三、心得体会
1.在创建链表时一定要注意对每个链表进行空间的分配,核对链表最后一个的NEXT是否指向NULL。
2.定义嵌套结构时一定要注意能否正确的表示嵌套起来的结构内的部分。
3.在用利用自定义函数的功能时指针可以避免返回值的书写。
4.灵活运用ASCII码和getchar();注意%c会“吃”空格。
5灵活分析目标要求的特征,可以通过特点进行总结,使函数作用域扩大。