教学2023项目组招新
lihuibear一、选择题(6×5=30分)
1、下列程序段的时间复杂度是( B)
int sum = 0; for (int i = 1; i < n; i *= 2) for (int j = 0; j < i; j++) sum++;
|
A. O*(log*n)
B. O*(*n)
C. O*(nlogn)
D. O*(*n²)
根据给定的代码片段,我们可以分析其时间复杂度。
外层循环的迭代次数由 i *= 2
控制,i
的初始值为 1,每次循环将 i
乘以 2,直到 i
不小于 n
时退出循环。因此,外层循环的迭代次数为 log₂(n)
。
内层循环的迭代次数由外层循环的当前 i
控制,每次循环从 0 迭代到 i-1
,共 i
次迭代。
因此,总的迭代次数可以表示为:
1 + 2 + 4 + 8 + ... + n/4 + n/2 + n
|
这是一个等比数列求和,根据等比数列求和公式,可知总的迭代次数为 2n - 1
。
因此,根据迭代次数分析,给定代码片段的时间复杂度为 O(n)
。
2、以下叙述中正确的是( A)
A、函数名代表该函数入口地址
B、所有函数不能接受函数名作为实参传入
C、函数体中的语句不能对自己的调用
D、如果函数带有参数,就不能调用自己
3、在 C 语言中,以下哪个选项是正确的文件打开模式(B )
A. r+b
B. w+b
C. a+b
D. r+w+b
解析:w+b 是 C 语言中用于读写二进制文件的模式。其他选项分别表示读取文本文件(r)、写入文本文件(w)和追加文本文件(a)
4、在 Java 语言中,以下哪个选项是正确的错误处理方式( A)
A. try-catch-finally
B. throw-catch-finally
C. catch-throw-finally
D. finally-catch-throw
5、C语言中,不合法的字符常量是( B)
A. ‘\t’
B.“a”
C. ‘a’
D.‘\x32’
6、C语言的编译过程( B)
a.预处理 b.汇编 c.编译 d. 链接
A. abcd
B. acbd
C. adbc
D. abc
二、填空题(6×5=30分)
1、下面代码的f()
执行了( 10)次
int n = 11; while(--n) f();
|
2、已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式 ch = 'a' + 8 - 3;
,ch
的值为( ‘f’)(用字符来表示)
3、char str[]=“1234”
, *p=str
,则 *(p+1)
是(2 )
4、下面代码输出是(6)
int a = 10 + 2 >> 1; printf("%d", a);
|
5、以下代码段的输出结果是(12 )
int x = 5; int y = x++ + ++x; printf("%d", y);
|
6、以下代码段的输出结果是(a )
char ch1='A',ch2='a'; printf("%c",(ch1,ch2));
|
在给定的代码中,使用了逗号操作符(ch1, ch2)
作为printf函数的参数。
逗号操作符在C语言中的作用是对多个表达式进行求值,并返回最后一个表达式的值。在这种情况下,(ch1, ch2)
首先对ch1求值,然后对ch2求值,最终返回ch2的值。
三、算法设计-反转链表(20分)
csdn:
https://blog.csdn.net/nanfeibuyi/article/details/90116419?ops_request_misc=%7B%22request%5Fid%22%3A%22168777884716800188565755%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=168777884716800188565755&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-90116419-null-null.142
#include <stdio.h> #include <stdlib.h>
typedef struct s_node { int data; struct s_node* pNext; }Node; Node* create_list_head(); Node* create_new_node(int node_data); int add_node_head(Node* head, Node* new_node); void display_list(Node* head); void free_list(Node* head); Node* revert_list(Node* head); int main(int argc, char *argv[]) { Node* head = create_list_head(); if(NULL == head) { printf("create_list_head failed!\n"); return -1; } int i; for(i=1; i<8; i++) add_node_head(head, create_new_node(i)); printf("befor "); display_list(head); head = revert_list(head); printf("after "); display_list(head); free_list(head); return 0; }
Node* create_list_head() { Node* head = (Node*)malloc(sizeof(Node)); if(NULL != head) { head->data= -1; head->pNext= NULL; } return head; }
Node* create_new_node(int node_data) { Node* new_node = (Node*)malloc(sizeof(Node)); if(NULL != new_node) { new_node->data= node_data; new_node->pNext= NULL; } return new_node; }
int add_node_head(Node* head, Node* new_node) { if(NULL == head || NULL == new_node) return -1; new_node->pNext = head->pNext; head->pNext = new_node; return 0; }
void display_list(Node* head) { if(NULL == head) return; Node* tmp = head; printf("list data:"); while(NULL !=(tmp=tmp->pNext)) { printf("%d ", tmp->data); } printf("\n"); }
void free_list(Node* head) { if(NULL == head) return; Node* p = head; while(p = p->pNext) { head->pNext = p->pNext; free(p); p = head; } free(head); }
Node* revert_list(Node* head) { if(NULL == head) return; Node* p = head->pNext; head->pNext= NULL; Node* tmp = NULL; while(p) { tmp = p->pNext; add_node_head(head, p); p = tmp; } return head; }
|