首页 > 编程语言 >NEFU高级程序设计-期末复习习题组

NEFU高级程序设计-期末复习习题组

时间:2023-06-07 14:01:10浏览次数:44  
标签:char 复习 int void next NEFU 习题 include cur


1. 用链表实现单词序列倒序输出

题目

用链表实现单词序列倒序输出。与以往不同,请考虑采用一种完全的动态分配方式! 为降低难度,“仁慈”的我已经给出了输出和释放的代码,你只要写出创建链表的creat函数定义就可以了。

比如输入为: abc bcd cde

则输出为: cde bcd abc

见题干!

你只能在代码输入框中:"//start(或#start)“行的下面,”//end(或#end)“行的上面输入你的代码, 而不能改变”//start(或#start)“以及其上所有行的代码,包括添加空格与空行, 也不能改变”//end(或#end)"以及其下所有行的代码,包括添加空格与空行.

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
struct node
{
    char * data;
    struct node *next;
};
typedef struct node NODE;
NODE* creat()
{
    NODE *head,*cur;
    char in[N];
    //start
    head=(NODE *)malloc(sizeof(NODE));
    head->next=NULL;
    while(scanf("%s", in)!=EOF)
    {
        cur=(NODE *)malloc(sizeof(NODE));
        cur->data=(char *)malloc(sizeof(char) * N);
        strcpy(cur->data, in);
        cur->next=head->next;
        head->next=cur;
    }
    //end
    return head;
}
int main()
{
    NODE *head,*cur,*pre;
    /*creat list*/
    head = creat();
    /*print list*/
    cur = head->next;
    while(cur!=NULL&&cur->next!=NULL)
    {
        printf("%s ",cur->data);
        cur = cur->next;
    }
    if(cur!=NULL)
        printf("%s\n",cur->data);
    /*release list*/
    while(head->next!=NULL)
    {
        pre = head;
        cur = head->next;
        while(cur->next!=NULL)
        {
            pre = cur;
            cur = cur->next;
        }
        free(cur->data);
        free(cur);
        pre->next = NULL;
    }
    return 0;
}

2. 二值图像处理

题目

别紧张,你只把这个简单的二值图像处理的问题当成C语言的一道题目就可以。 输入为一个nn的二维整型矩阵(矩阵中元素的最小值为0,最大值不超过1),输出其中0、1这两种值的个数。输入数 据有多组,首先输入一个整数n(0<n<10),代表矩阵的维数,接着是nn个0或者1。

比如输入为:

8

0 0 0 0 0 0 0 0

0 0 1 1 1 1 1 0

0 0 0 0 0 1 0 0

0 0 0 0 1 0 0 0

0 0 0 1 0 0 0 0

0 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

则输出为: 53 11

代码

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int n, ans0=0, ans1=0;
    scanf("%d", &n);
    for(int i=0;i<n*n;i++)
    {
        int tmp;
        scanf("%d", &tmp);
        if(!tmp)    ans0++;
        else    ans1++;
    }
    printf("%d %d", ans0, ans1);
    return 0;
}

3.计算不同类型字符的数量

题目

如标题所示。数据数据有多组,每组为一个用空白符分隔的字符串(长度<100),请试着统计其中字母(大小写均为字 母)、数字(0~9)和其它字符的个数并输出。

比如输入为: Iloveprograming1@2#3

则输出为: 15 3 2

注意:字符串可能以’\0’或者"\r\0"作为结束标志!

见题干!

代码

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main()
{
    char str[110];
    while(scanf("%s", str)!=EOF)
    {
        int ansalpha=0, ansnum=0, ansother=0;
        int len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if(isalpha(str[i])) ansalpha++;
            else if(isalnum(str[i]))    ansnum++;
            else    ansother++;
        }
        printf("%d %d %d\n", ansalpha, ansnum, ansother);
    }
    return 0;
}

PS

这道题题目里面还给了结束符的类型,应该还要做具体的判定,在这里就先不用了,到时候具体问题还需要根据调试做修改

4. 实现字符串排序

题目

实现字符串排序。与以往不同,请考虑采用一种完全的动态分配方式。请你: 1. 定义一个整型变量n,用于确定数组字符串的个数; 2. 用动态分配定义一个指针数组,用于存储每一个待排序字符串的首地址; 3. 定义一个输入缓冲区(长度不超过100的一维字符数组),用于存储不带分隔符的字符串; 4. 根据输入缓冲区中当前串的长度,动态分配空间,并将其复制到新分配的空间中; 5. 用函数实现字符串按字典升序排序,并输出排序后的字符串(每串一行); 6. 记得释放所有之前动态分配开辟的空间!

比如输入为: 3 banana apple peach

则输出为: apple banana peach

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void sort(char **prelist, int n)
{
    char tmp[110];
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            if(strcmp(prelist[i], prelist[j])>0)
            {
                strcpy(tmp, prelist[i]);
                strcpy(prelist[i], prelist[j]);
                strcpy(prelist[j], tmp);
            }
        }
    }
}

int main()
{
    int n;
    scanf("%d", &n);
    char **prelist=(char **)malloc(sizeof(char *)*n);
    char str[110];
    for(int i=0;i<n;i++)
    {
        scanf("%s", str);
        int len=strlen(str);
        char *p=((char *)malloc(sizeof(char)*len));
        strcpy(p, str);
        prelist[i]=p;
    }
    sort(prelist, n);
    for(int i=0;i<n;i++)
    {
        printf("%s ", prelist[i]);
    }
    return 0;
}

代码(重构)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void sort(char **prelist, int n)
{
    char tmp[110];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(strcmp(prelist[i], prelist[j])<0)
            {
                strcpy(tmp, prelist[i]);
                strcpy(prelist[i], prelist[j]);
                strcpy(prelist[j], tmp);
            }
        }
    }
}

int main()
{
    int n;
    scanf("%d", &n);
    char **prelist;
    prelist=(char **)malloc(sizeof(char *)*n);
    for(int i=0;i<n;i++)
    {
        char str[110];
        scanf("%s", str);
        char *newarr=(char *)malloc(sizeof(char) * strlen(str));
        strcpy(newarr, str);
        prelist[i]=newarr;
    }
    sort(prelist, n);
    for(int i=0;i<n;i++)
        printf("%s ", prelist[i]);
    return 0;
}

5. 战旗游戏

题目

我知道你们男生女生都喜欢打游戏,下面这道简单的编程题是某战棋游戏的一部分,实现的功能是向上、向下、向左、 向右、向左上、向左下、向右上、向右下这八个方向移动一格。请编写一个process函数,实现对上述八个函数的调 用。 比如:

输入2 3

则输出为:3 3

代码

#include <stdio.h>
#include <stdlib.h>
void process(int *x, int *y, void (*fun)(int *x, int *y))
{
    //start
    fun(x, y);
    //end
}
void up(int *x, int *y)
{
    *y = *y - 1;
    return ;
}
void down(int *x, int *y)
{
    *y = *y + 1;
    return ;
}
void left(int *x, int *y)
{
    *x = *x - 1;
    return ;
}
void right(int *x, int *y)
{
    *x = *x + 1;
    return ;
}
void up_left(int *x, int *y)
{
    *x = *x - 1;
    *y = *y - 1;
    return ;
}
void up_right(int *x, int *y)
{
    *x = *x + 1;
    *y = *y - 1;
    return ;
}
void down_left(int *x, int *y)
{
    *x = *x - 1;
    *y = *y + 1;
    return ;
}
void down_right(int *x, int *y)
{
    *x = *x + 1;
    *y = *y + 1;
    return ;
}
int main(void)
{
    int x,y;
    while(scanf("%d%d",&x,&y)==2)
    {
        process(&x,&y,up);
        process(&x,&y,right);
        process(&x,&y,right);
        process(&x,&y,up_right);
        process(&x,&y,left);
        process(&x,&y,down);
        process(&x,&y,down_left);
        process(&x,&y,up_left);
        process(&x,&y,down_right);
        printf("%d %d\n",x,y);
    }
    return 0;
}

6. 期末成绩统计

题目

期末大考周即将到来了。诸位要面临C语言、高数、大物的期末考试。请你编写一个程序,记录全班同学的三科成绩并 按C语言成绩的降序排序输出。 输入数据有多组:先用一个整型变量n存储班级同学的人数;接着存储这n名同学的三科(C语言、高数、大物)成绩 (类型为整型);排序后输出。 比如,

输入为: 3 张三 80 70 60 李四 90 80 70 王五 100 90 80

则输出为: 王五 100 90 80 李四 90 80 70 张三 80 70 60

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 20
#define N 40
struct stu
{
    char name[LEN];
    int scores[3];
}student[N];
int main(void)
{
    int n;
    void input(struct stu *s,int n);
    void sort(struct stu *s,int n);
    void print(struct stu *s, int n);
    while(scanf("%d",&n)==1)
    {
       input(student,n);
       sort(student,n);
       print(student,n);
    }
    return 0;
}
void input(struct stu *s,int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        scanf("%s",s[i].name);
        for(j=0;j<3;j++)
           scanf("%d",&s[i].scores[j]);
    }
    return ;
}
void sort(struct stu *s,int n)
{
//start
    struct stu tmp;
    for(int i=0;i<n;i++)
        for(int j=i;j<n;j++)
        {
            if(s[i].scores[0]<s[j].scores[0])
            {
                tmp=s[i];
                s[i]=s[j];
                s[j]=tmp;
            }
        }
//end
}
void print(struct stu *s, int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        printf("%s ", s[i].name);
        for(j=0;j<3;j++)
           if(j<2)
              printf("%d ",s[i].scores[j]);
           else
              printf("%d\n",s[i].scores[j]);
    }
    return ;
}


标签:char,复习,int,void,next,NEFU,习题,include,cur
From: https://blog.51cto.com/u_15567308/6431288

相关文章

  • 数据库习题一
    8.数据库管理系统的功能主要有哪些方面?有效地组织、存取和维护数据数据的定义功能数据的操纵功能数据库的事务管理和运行管理数据库的建立和维护功能9.调查业界常用的数据库管理系统软件,简要叙述其中1~2个产品的情况。Oracle;sqlServer;人大金仓kingbase;达梦DMsqlServ......
  • C++-语法复习
    记录一些刷算法题中的常用C++语法。STL相关向量Vector头文件:#include<vector>初始化:vector<数据类型>变量名(长度,初始化值)赋值初始化:vector<数据类型>变量名={1,2,3,4,5}可以作为数组数组开头:array.begin()数组结尾:array.end()数组大小:array.size()添加元素到......
  • 数字逻辑期末复习(二)
    数字逻辑期末复习(二)标签(空格分隔):未分类目录数字逻辑期末复习(二)null第三章组合逻辑电路3.1组合逻辑电路的特点3.2组合逻辑电路的分析3.2.1分析方法3.3组合逻辑电路的设计3.3.1逻辑抽象组合逻辑电路设计含有无关项的组合逻辑电路设计3.5常用组合逻辑电路3.5.1编码器普......
  • 王道练训练营习题7.1
    /*题目:输入一个整型数,存入变量i,通过子函数change把主函数的变量i除2,然后打印i,,例如:如果输入的为10,打印出5,如果输入的是7,打印3*/#include<stdio.h>#pragmawarning(disable:4996)voidchange(int*j){ *j=*j/2;}intmain(){ while(1) { inti; scanf......
  • 操作系统期末复习
    操作系统进程三种状态级变化在操作系统中,进程是程序在操作系统中的一次执行过程。进程状态指的是进程当前在操作系统中的状态。在操作系统中,进程状态主要分为三种:就绪状态、运行状态和阻塞状态。就绪状态:指进程已经准备好运行,并等待系统分配资源来运行。就绪状态的进程通常处......
  • 树状数组的思想复习
    树状数组的复习前言:学树状数组的时候第一没理解透彻,第二还没写博客用于复习,所以这里写一下用于复习树状数组:作用:lognlogn时间实现单点修改区间查询;区间修改单点查询;区间修改区间查询。但是区间修改区间查询还是线段树好,因为扩展性很强特点:父子节点关系例如当前节点为x,那么......
  • 云计算期末复习
    云计算期末复习目录云计算期末复习一、云计算简介云计算主要服务模式云计算主要部署模式二、云计算技术什么是云计算与边缘计算云计算的特点虚拟化技术的概念虚拟化技术的特点虚拟化技术的优势什么是容器技术什么是DockerDocker概述\三大核心概念三、云原生云原生的概念常考命令......
  • 信号与系统基础复习:系统分析、求解方程、电路基础
    信息与系统总论信息是人类社会和自然界中需要传送、交换、存储和提取的抽象内容。信息存在于一切事物之中,事物的一切变化和运动都伴随着信息的交换和传送。各种各样的社会活动、无线电波的传播、计算机的运算等都是信息交换和传输的过程。信息是抽象的内容,为了传送和......
  • sql 重点关键词快速复习
    sql重点关键词快速复习distinct去重:distinct例句:SELECTdistinctprod_idFROMOrderItems orderby排序:orderby例句:#根据列名排序#注意:是order_date降序,而不是order_numSELECTcust_id,order_numFROMOrdersORDERBYcust_id,order_dateDESCwhere过滤......
  • Spring的AOP复习
     连接点:所有业务方法切入点:被挖掉共性功能的业务方法 通知:共性功能构成的方法通知类型:前面还是后面  切面:描述切入点和通知的关系 目标对象 织入:将共性功能放回去 代理引入......