zoukankan      html  css  js  c++  java
  • 2014.3.12-C语言小测试

    测试代码:

    学号:1402049
    
    1.请实现一个函数,功能为使用循环输出以下的图案
    
    void print_alpha(int n)
    {
        int i, j;
        for(i=0;i<n;++i){
            for(j=0;j<=i;++j)
                printf("%c", 'A'+ j);
            printf("
    ");
        }
    }
    
    
    2.请实现一个函数,功能为删除数组指定位置的元素
    
    void delete(int *arr, int index, int len){
        int i;
        for(i=index;i<len;++i)
            arr[i] = arr[i+1];
        arr[len-1] = 0;
        --len;
    }
    
    
    3.请实现一个函数,功能为使用选择排序对数组进行排序
    
    void sortarr(int *arr, int len){
        int i, j, min, tmp;
        for(i=0;i<len-1;++i){
            min = i;
            for(j=i+1;j<len;++j)
                if(arr[min] > arr[j]){
                    int tmp;
                    tmp = arr[min];
                    arr[min] = arr[j];
                    arr[j] = tmp;
                }
        }
    }
    
    4.请实现一个函数,功能为将一个数插入到一个有序的数组中
    
    void insert(int *arr, int n, int len){
        int i, key;
        ++len;
        for(i=0;i<len;++i)
            if(n > arr[i])
                continue;
            else{
                key = i;
                break;
            }
    
        for(i=len-1;i>=key;--i)
            arr[i+1] = arr[i];
        arr[key] = n;
    }
    
    5. 请实现一个函数,功能和系统的strcpy函数相似
    
    void mystrcpy(char *dst, const char* src){
        int i;
        for(i=0;(dst[i] = src[i])!=''; ++i)
            ;
    }
    
    6. 请实现一个函数,功能为输入一个字符串,找出其中长度最大的单词。要求从键盘输入一行字符,最后打印出长度最大的字符串
    输入:when i was young i'd listen to the radio waiting for my favorite songs
    输出:favorite
    '
    void show_string(char a[]){
        int i,j;
        int tmp, max, tmax, mmp;
        i = j = mmp = tmp = max = tmax = 0;
        while(a[i]!=''){
            if(isalpha(a[i])){
                tmp = i;
                for(;isalpha(a[i]);++i){
                    tmax = i-tmp;
                    if(tmax > max){
                        max = tmax;
                        mmp = tmp;
                    }
                }
            }
            else{
                tmp = tmax = 0;
                ++i;
            }
        }
        max++;
        for(i=mmp;max--;++i)
            printf("%c", a[i]);
        printf("
    ");
    }
    
    
    7.请实现一个函数,功能为显示一个整数的二进制
    
    void binshow(int num, int len)
    {
        int i = 0;
        int dd = 0;
        for (i=len-1; i>=0; --i){
            dd = num >> i & 1;  
            printf("%d", dd);
        }
        printf("
    ");
    }
    
    8.请实现一个函数,功能为统计字符串中的单词个数
    
    int countword(char *str){
        int i, cnt;
        i = cnt = 0;
        while(str[i] != ''){
            if(isalpha(str[i]) && (!isalpha(str[i+1])) )
                ++cnt;
            ++i;
        }
        return cnt;
    }
    
    9.请实现一个函数,功能和系统的strrchr函数相同
    
    char *mystrrchr(char *str, int c){
        char *pre = 0;
        for(;*str!='';str++)
        if(*str == c) 
            pre = str;
        return pre;
    }
    
    10.请实现一个函数:根据用户指定的行数打印出对应行数的杨辉三角
    
    void yangHuiSanJiao(int n){
        int a[100][100];
        int i, j;
        a[0][1] = 1;
        for(i=1;i<=n;++i){
            for(j=1;j<=i;++j){
                a[i][j] = a[i-1][j-1] + a[i-1][j];
                if(j == 1)
                printf("%d", a[i][j]);
                else printf(" %d", a[i][j]);
            }
            printf("
    ");
        }
    }
    
    11.请实现一个函数,功能为将一个新节点添加到链表的末尾
    
    typedef struct node *link;
    typedef struct node{
        int id;
        int data;
        struct node *next;
    }Node;
    
    void append(struct node *head, int id, int data){
        link p = head;
        link y = malloc(sizeof(Node));
        y->id = id;
        y->data = data;
        while(p->next) p = p->next;
        y->next = p->next;
        p->next = y;
    }
    
    
    12.请实现一个函数,功能为求一个由10个整数组成的数组中的所有递增和递减序列的个数,
    并且输出所有的递增和递减序列
    例如:   
    输入:1 10 8 5 9 3 2 6 7 4   
    输出:6   
    对应的递增或递减子序列为:   1 10    10 8 5    5 9   9 3 2   2 6 7
    
    void xulie(int s[]){
        int i, j, mark;
        mark = 0;
        i = 0;
        int cnt = 0;
        int m = 0;
        int n = 0;
        for(j=0;s[j]!='';++j){
            while(s[j] > s[j+1]){
                n = 1;
                ++j;
            }
            if(n){
                cnt++;
                n = 0;
            }
            while(s[j] < s[j+1]){
                m = 1;
                ++j;
            }
            if(m){
                cnt++;
                m = 0;
            }
        }
        printf("%d
    ", cnt);
        cnt = 0;
        while(i<10){
            while(s[i] < s[i+1] && i<10){
                mark = 0;
                printf("%d ", s[i]);
                ++i;
            }
            if(i==10) --i;
            if(mark == 0 ){
                if(i<10)
                    printf("%d
    ", s[i]);
                else printf("
    ");
                mark = 1;
                ++i;
            }
            --i;
            if(i==10) break;
            while(s[i] > s[i+1] && i<10){
                mark = 0;
                printf("%d ", s[i]);
                ++i;
            }
            if(mark == 0){
                if(i<10)
                    printf("%d
    ", s[i]);
                else printf("
    ");
                mark = 1;
                ++i;
            }
            if(i==10) break;
            --i;
        }
    }
    
    
    二.问答题(2分/题,共10分)
    1.请简述你所了解的C语言的特点
    
    答:简洁,运行速度快,是用汇编来构造的语言,够稳定,Linux系统内核大多数都是用C语言来构造,内存需要自己回收,可以直接控制内存,因为有指针,可能会导致程序的不安全,毕竟程序员不是神,但是自由,可以随意操控内存变量,虽说没有JAVA安全,但那是对于菜鸟而言,C语言的安全程度是针对程序员的变成能力而言,锻炼我们缜密的思维,C语言是面向过程语言。
    2.谈谈你对C语言内存管理的认识
    
    答: C语言内存管理分为堆、栈、代码段、扩展段、全局变量区、静态池,堆申请过的内存要及时回收,系统没有自动帮你回收的机制,因为可回收,所以可以大量申请堆内存空间,而栈不会及时回收,所以不会申请很多空间。
    3.谈谈你对C语言中数据(各种常量,变量,函数参数,字符串)的存储认识
    
    答: 常亮存取在全局变量区,变量存取在栈中,函数参数存取在栈中,用完直接释放不需要手动释放,字符串看如果存取,如果是动态分配就存取在堆中,如果直接声明,就存取在栈中。
    4.谈谈你再解决一个编程问题时使用的方法和技巧
    
    答:编程的时候,经常遇到一些bug,很难去调试,所以就利用gdb 这个强大的调试工具,去调试我们很难找出bug的C程序,利用好调试软件会让我们更轻松的去编程。
    5.列举你学过的编程语言,谈谈你对这些语言的认识
    
    答: 
    JAVA 虽然足够安全,那是因为指针被封装了,导致内存不会轻易被修改,但是不够自由,不如C灵活,而且代码足够长,不简洁。只是应用层开发语言。
    C++  虽然足够强大,面向对象语言,但是由于C++的可操控性太强,不是我们一般程序员能驾驭的。很多bug十分难调,没有几年编程经验,很难灵活的使用C++ 去搞大工程的项目,如果只是会语法,那只是表面,真正的C++强大之处没有几十年的经验,无法深深体会这门语言的精华所在
    PYTHON 虽然足够简洁,但是由于是用C来开发的脚本语言,不可改变的速度慢,做大型项目,会受到脚本语言的限制,速度太慢,无法让客户体验其安全性,但是最大的优点是语言简洁,功能强大,开发效率极其高,语法比C简洁,开发和lips速度相提并论,如果在Linux下写一些不要求速度的脚本,那python是不二人选
    
  • 相关阅读:
    Vuejs之Component slot 插槽详解
    ASP.NET MVC生命周期与管道模型
    Unity IoC Base On MVC
    轻量级IoC框架Ninject.NET搭建
    原创【前端控件】之日历控件
    出现了内部错误-网站中X509Certificate2加载证书时出错
    windows service 1053错误 启动失败
    关于浏览器Number.toFixed的错误修复
    vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦
    ubuntu开发项目不能执行热更新
  • 原文地址:https://www.cnblogs.com/firstrate/p/3597147.html
Copyright © 2011-2022 走看看