c语言第二次实验报告

·实验题目,设计思路,实现方法

实验题目:

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;    /*指向下个结点的指针*/
};

单向链表的头尾指针保存在全局变量headtail中。

输入为若干个学生的信息(学号、姓名、成绩),当输入学号为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教材的步骤。

转载于:https://www.cnblogs.com/huangguangyu/p/8340553.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个C语言实验报告的模板,供您参考: # 实验名称:C语言栈的实现 ## 实验目的: 1. 理解栈的基本概念和特点。 2. 掌握栈的基本操作:push和pop。 3. 熟悉栈的应用场景。 ## 实验环境: - 操作系统:Windows 10 - 编程语言:C语言 - 开发工具:Visual Studio Code ## 实验内容: ### 1. 栈的定义 栈是一种后进先出(Last In First Out,LIFO)的数据结构,它只允许在表的一端进插入和删除运算。根据栈的定义,可以使用数组来实现栈。 ### 2. 栈的基本操作 栈的基本操作包括push和pop。push操作将元素插入栈顶,pop操作将栈顶元素删除。 以下是栈的基本操作的伪代码: ``` push(S, x): if stack is full: error "stack overflow" else: top ← top + 1 stack[top] ← x pop(S): if stack is empty: error "stack underflow" else: top ← top - 1 return stack[top + 1] ``` ### 3. 栈的应用场景 栈广泛应用于编程语言的解析、函数调用、表达式求值等场景。例如,在编程语言的解析过程,可以使用栈来判断括号是否匹配。 ## 实验结果: 在实验过程,我们成功实现了一个基于数组的栈,并完成了push和pop操作。通过实验,我们深入理解了栈的基本概念和特点,并掌握了栈的基本操作。同时,我们也熟悉了栈的应用场景,为以后的编程工作打下了基础。 ## 总结: 本次实验让我们掌握了栈的基本操作和应用场景,这对我们以后的编程工作非常有帮助。通过实验,我们也发现了栈的局限性,例如栈的存储空间有限,只能在栈顶进插入和删除操作等。因此,在实际应用,我们还需要结合具体场景选择合适的数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值