一·实验题目,设计思路,实现方法
实验题目:
11-5 打印杨辉三角(20 分)
本题要求按照规定格式打印前N行杨辉三角。
输入格式:
输入在一行中给出N(1)。
输出格式:
以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。
输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
设计思路:
通过找规律发现除了最两端的“1”外,每行的第n个数等于上一行的第n-1个数与第n个数之和。
实现方法:
定义二维数组,利用for循环完成对数据的求和并赋值,利用对格式的控制使二维数组呈三角形输出。
12-2 统计字符出现次数(20 分)
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
设计思路:
将字符串看成字符数组,与指定字符一一比较。
实现方法:
定义一个为0的值,利用for循环和if语句,若出现字符与指定字符相同,该值+1,最后输出该值即出现次数。
13-4 使用函数的选择法排序(25 分)
本题要求实现一个用选择法对整数数组进行简单排序的函数。
函数接口定义:
void sort( int a[], int n );
其中a
是待排序的数组,n
是数组a
中元素的个数。该函数用选择法将数组a
中的元素按升序排列,结果仍然在数组a
中。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
void sort( int a[], int n );
int main()
{
int i, n;
int a[MAXN];
scanf("%d", &n);
for( i=0; i<n; i++ )
scanf("%d", &a[i]);
sort(a, n);
printf("After sorted the array is:");
for( i = 0; i < n; i++ )
printf(" %d", a[i]);
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4
5 1 7 6
输出样例:
After sorted the array is: 1 5 6 7
设计思路:
从第一个元素开始,每个元素先找出之后最小的元素,在每个元素与对应最小的元素交换值。
实现方法:
利用双重循环中将轮到得元素与其后最小元素交换实现从小到大的依次排序。
实验题目:
14-1 使用函数实现字符串部分复制(20 分)
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
happy new year
输出样例:
new year
设计思路:
新建字符串,与指定字符串的指定位置开始累加赋值。
实现方法:
建立循环,初始值为指定位置的序号,在循环中对新建字符串一一赋值。
实验题目:
15-5 建立学生信息链表(20 分)
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。
函数接口定义:
void input();
该函数利用scanf
从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:
struct stud_node {
int num; /*学号*/
char name[20]; /*姓名*/
int score; /*成绩*/
struct stud_node *next; /*指向下个结点的指针*/
};
单向链表的头尾指针保存在全局变量head
和tail
中。
输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node *head, *tail;
void input();
int main()
{
struct stud_node *p;
head = tail = NULL;
input();
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d\n", p->num, p->name, p->score);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
输出样例:
1 zhang 78 2 wang 80 3 li 75 4 zhao 85
设计思路、实现方法:
构建链表。
二·源程序
11-5 打印杨辉三角
#include<stdio.h>
int main()
{
int N,a[10][10],i,j,k;
scanf("%d",&N);
a[0][0]=1;
a[1][0]=1;
a[1][1]=1;
for(i=2;i<N;i++){
a[i][0]=1;
for(j=1;j<i;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
a[i][i]=1;
}
for(i=0;i<N;i++){
for(j=(N-i-1);j>0;j--)printf(" ");
for(k=0;k<=i;k++)printf("%4d",a[i][k]);
printf("\n");
}
return 0;
}
12-2 统计字符出现次数
#include<stdio.h>
int main()
{
char str[80],a;
int k=0,i,count=0;
while((str[k]=getchar())!='\n')
k++;
scanf("%c",&a);
for(i=0;i<=k;i++){
if(str[i]==a)
count++;
}
printf("%d",count);
return 0;
}
13-4 使用函数的选择法排序
void sort( int a[], int n )
{
int u,i,min,temp,k;
for(i=0;i<n-1;i++){
k=i;
for(u=i+1;u<n;u++){
if(a[u]<a[k])k=u;
}
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
14-1 使用函数实现字符串部分复制
void strmcpy( char *t, int m, char *s )
{
int i,j;
j=0;
for(i=m-1;t[i]!='\0';i++)
s[j++]=t[i];
s[j]='\0';
}
15-5 建立学生信息链表
void input()
{
struct stud_node *p;
head = (struct stud_node*)malloc(sizeof(struct stud_node));
head->next = NULL;
p = head;
while(1)
{
tail = (struct stud_node*)malloc(sizeof(struct stud_node));
scanf("%d", &tail->num);
if (!tail->num) break;
scanf("%s%d", tail->name, &tail->score);
p->next = tail;
p= tail;
}
head = head->next;
}
三、遇到的问题和解决办法。
1.将杨辉三角看作几何图形觉得无从下手,需要发现杨辉三角是一个变形的二维数组;
2.选择排序双重循环用的两个变量i和u数量相同范围不同,设元素个数为n,若i和u都小于n运行时出现错误,将i的范围改为小于n-1和u为小于n才能正常运行;
3.对链表不熟悉,只能copy教材的步骤。