新11-15次作业

一.实验内容与设计思想

11-5 打印杨辉三角

设计思路:先定义一个二维数组,a[0][0]=1,剩下第0行的其他元素全部赋值为0,根据杨辉三角的概念算出下面的几行,这时你会得到一个主对角线以下是杨辉三角而主对角线以上是0的矩阵,在根据输出格式删去0。

12-7 输出大写英文字母(15 分)

设计思路:先从缓冲区中得到一串字符,放到a数组中,将a数组中的大写字母利用遍历a数组取出来放到b数组中,再利用嵌套的循环将b数组中重复的大写字母用1覆盖,当b数组的元素不等于1是输出元素。

13-6 数组循环右移(20 分)

设计思路:定义两个数组,根据数组循环右移的周期性,把a数组的值赋给b数组,从而实现数组右移。

14-8 字符串排序

设计思路:利用指针数组,将字符串间接存放在其中,通过strcmp的比较,利用冒泡排序法得出顺序。

15-5 建立学生信息链表

设计思路:理解链表的概念,就是将多个结构体连接到一起,用next连接。

二.源程序

11-5 打印杨辉三角

#include<stdio.h>
int main(){
int n,i=0,j,k,h=0;
scanf("%d",&n);
int a[n][n];
a[0][0]=1;
for(j=1;j<n;j++){
a[i][j]=0;
}
for(i=1;i<n;i++){
for(j=0;j<n;j++){
if(j==0){
a[i][j]=1;
continue;
}
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
k=0;
for(i=0;i<n;i++){
k=h;
for(;k<n-1;k++)
printf(" ");
for(j=0;j<n;j++)
if(a[i][j]!=0)
printf("%4d",a[i][j]);
printf("\n");
h+=1;
}
}

12-7 输出大写英文字母

#include<stdio.h>

int main(){

  char a[80],b[80];

  int i=0,h=0,q=1,j=0,k;

  while((a[i]=getchar())!='\n')i++;

  a[i]='\0';

  for(i=0;a[i]!='\0';i++){

    if(a[i]>='A'&&a[i]<='Z'){

      b[j]=a[i];j++;

      q=0;

    }else h=1;

  }

  b[j]='\0';

  for(j=0; b[j]!='\0';j++){

    for(k=j+1;b[k]!='\0';k++){

      if(b[j]==b[k]){

        b[k]=1;

      }

    }

  }

  if(h==1&&q==1)printf("Not Found");

  else for(k=0;b[k]!='\0';k++){

    if(b[k]!=1)printf("%c",b[k]);

  }

}

 

13-6 数组循环右移

 

#include <stdio.h>
#define MAXN 10
 
int ArrayShift( int a[], int n, int m );
 
int main()
{
    int a[MAXN], n, m;
    int i;
 
    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
 
    ArrayShift(a, n, m);
 
    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
 
    return 0;
}

int ArrayShift( int a[], int n, int m ){

  int b[1000];

  int i,j,t;

    for(i=0;i<n;i++){

      t=(i+m)%n;

      b[t]=a[i];

    }

   for(j=0;j<n;j++){

     a[j]=b[j];

   }

   return a;

}

 

 

14-8 字符串排序

#include<stdio.h>
#include<string.h>
int main(){
char *color[5],*t;
char a[5][100];
int i=0,k,j;

while(i<5){
scanf("%s",a[i]);
color[i]=a[i];
i++;
}


for(k=1;k<5;k++){
for(j=0;j<5-k;j++){
if(strcmp(color[j],color[j+1])>0){
t=color[j];
color[j]=color[j+1];
color[j+1]=t;
}
}
}
printf("After sorted:\n");
for(i=0;i<5;i++){
printf("%s\n",color[i]);
}

}

15-5 建立学生信息链表

void input()
{
struct stud_node *q;
q=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d", &q->num);
while(q->num != 0)
{
scanf("%s %d", q->name, &q->score);
if(head == NULL)
{
head = q;
head->next = NULL;
}
if(tail != NULL)
{
tail->next = q;
}
tail = q;
tail->next = NULL;
q=(struct stud_node *)malloc(sizeof(struct stud_node));
scanf("%d", &q->num);
}
}

三、实验小结

1.没理解strcmp 函数的使用方法。

  当strcmp 返回的值为0时,表示这两个字符串相等,若返回的数值不为0,则表示两个字符串第一次出现不同的字母的差值。

2.没理解指针的概念。

  指针存放的是地址,使用指针可以简化代码。

3.注意冒泡排序,选择排序在字符串中的应用,即注意知识的迁移。

  冒泡排序和选择排序不仅仅适用于数字数组,也适用于字符串数字,两种排序提供了排顺序的思路。

posted on 2018-01-29 17:11  晚宴99  阅读(141)  评论(0编辑  收藏  举报