2014.3.12-C语言小测试

测试代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
学号: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("\n");
    }
}
 
 
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])!=‘\0‘; ++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]!=‘\0‘){
        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("\n");
}
 
 
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("\n");
}
 
8.请实现一个函数,功能为统计字符串中的单词个数
 
int countword(char *str){
    int i, cnt;
    i = cnt = 0;
    while(str[i] != ‘\0‘){
        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!=‘\0‘;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("\n");
    }
}
 
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]!=‘\0‘;++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\n", 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\n", s[i]);
            else printf("\n");
            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\n", s[i]);
            else printf("\n");
            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是不二人选

2014.3.12-C语言小测试,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。