安为科技笔试题 用C语言编程语言写一段程序 程序的功能是找出两个集合的不同元素。例如,两个集合A和B,程序可以找出在集合A中,但不在集合B中的元素。
答案
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 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 int main () { int A[MAXSIZE], B[MAXSIZE]; int m, n; int i, j; printf ("请输入集合A的元素个数m:" ); scanf ("%d" , &m); printf ("请输入集合A的元素:\n" ); for (i = 0 ; i < m; i++) { scanf ("%d" , &A[i]); } printf ("请输入集合B的元素个数n:" ); scanf ("%d" , &n); printf ("请输入集合B的元素:\n" ); for (i = 0 ; i < n; i++) { scanf ("%d" , &B[i]); } printf ("集合A中,但不在集合B中的元素有:\n" ); for (i = 0 ; i < m; i++) { int flag = 1 ; for (j = 0 ; j < n; j++) { if (A[i] == B[j]) { flag = 0 ; break ; } } if (flag) { printf ("%d " , A[i]); } } printf ("\n" ); return 0 ; }
给定一个数字数组,写一个C或C++语言函数,将所有的0移到数组最后,同时保持其他非0数字相对顺序不变。 例如:输入 – [2,0,15,9,0,7]
输出 – [2,15,9,7,0,0]
答案
1 2 3 4 5 6 7 8 9 10 11 void moveZero (int array [], int len) { int flag = 0 ; for (int i=0 ; i<len; i++){ if (array [i] != 0 ){ array [flag++] = array [i]; } } while (flag < len){ array [flag++] = 0 ; } }
写一个C语言函数计算一个字符串中字符的数量
答案
1 2 3 4 5 6 7 8 9 int CountChar (char * str) { int count = 0 ; while (*str != '\0' ) { count++; str++; } return count; }
请解释一下void *
的意义和作用
答案
void *
是一种特殊的指针类型,它可以指向任何类型的数据,但是不能解引用。它的作用是可以用来存储任意类型的指针,当作函数参数时,可以接受任何类型的指针。它还可以用于动态内存分配,使用malloc
和free
函数来分配和释放内存空间。
写一个socket tcp
通信程序 支持并发客户端经服务器转发实现通信,测试方法:本机打开4个客户端,两两实现经过服务器转发的通信,服务端收到信息后,分别向对应客户端转发信息。
答案
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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8888 #define MAX_CLIENTS 4 #define BUFFER_SIZE 1024 int main () { int server_fd = socket(AF_INET, SOCK_STREAM, 0 ); struct sockaddr_in server_addr ; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1" ); server_addr.sin_port = htons(PORT); bind(server_fd, (struct sockaddr*)&server_addr, sizeof (server_addr)); listen(server_fd, MAX_CLIENTS); struct sockaddr_in client_addr [MAX_CLIENTS ]; int client_fd[MAX_CLIENTS]; int client_id[MAX_CLIENTS]; int num_clients = 0 ; while (1 ) { int addrlen = sizeof (client_addr[num_clients]); client_fd[num_clients] = accept(server_fd, (struct sockaddr*)&client_addr[num_clients], &addrlen); printf ("连接地址:%s\n" , inet_ntoa(client_addr[num_clients].sin_addr)); char * welcome = "Welcome to server" ; send(client_fd[num_clients], welcome, strlen (welcome), 0 ); int recv_len; char buffer[BUFFER_SIZE]; while (1 ) { recv_len = recv(client_fd[num_clients], buffer, BUFFER_SIZE, 0 ); printf ("收到客户端的信息:%s\n" , buffer); char * reply = "Received your message" ; send(client_fd[num_clients], reply, strlen (reply), 0 ); if (recv_len == 0 ) { break ; } } num_clients--; close(client_fd[num_clients]); } close(server_fd); return 0 ; }
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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8888 #define BUFFER_SIZE 1024 int main () { int client_fd = socket(AF_INET, SOCK_STREAM, 0 ); struct sockaddr_in server_addr ; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1" ); server_addr.sin_port = htons(PORT); connect(client_fd, (struct sockaddr*)&server_addr, sizeof (server_addr)); char buffer[BUFFER_SIZE]; recv(client_fd, buffer, BUFFER_SIZE, 0 ); printf ("%s\n" , buffer); while (1 ) { char buffer[BUFFER_SIZE]; printf ("输入要发送的信息:" ); scanf ("%s" , buffer); send(client_fd, buffer, strlen (buffer), 0 ); recv(client_fd, buffer, BUFFER_SIZE, 0 ); printf ("%s\n" , buffer); } close(client_fd); return 0 ; }