1、char s[] = “china”;
char *p;
p=s;
则下列叙述正确的是(D )。
A.s和p完全相同
B.数组s中的内容和指针变量p中的内容相等
C.s数组长度和p所指向的字符串长度相等
D.*p与s[0]相等
tips: D. *p与s[0]相等
解释:指针p
指向数组s
的第一个元素,因此*p
(解引用指针p)和s[0]
(数组s的第一个元素)都是‘c’,所以它们是相等的。
A. s和p完全相同
解释:s
是一个数组名,表示数组的起始地址,而p
是一个指针变量。虽然它们指向同一内存位置,但它们的类型不同。s
是一个数组类型,而p
是一个指针类型,二者并不完全相同。
B. 数组s中的内容和指针变量p中的内容相等
解释:这个说法不准确,因为“内容”一词可能引起误解。虽然p
指向s
的起始地址,因此*p
的内容等于s[0]
的内容,但p
本身并不存储数组的完整内容,而是指向数组的地址。
C. s数组长度和p所指向的字符串长度相等
解释:s
数组的长度是固定的(在这个例子中是6,包括结束符‘\0’),而p
是一个指针,它并不持有长度信息。虽然p
指向的字符串“china”的长度(不包括结束符)是5,但p
并没有存储这个长度信息。因此,这个说法是不准确的。
2、已知:int n, i=1, j=2; 执行语句 n=i<j ? i++ : j++; 则i和j的值是( C)。
A.1, 2
B.1, 3
C.2, 2
D.2, 3
tips:
要分析这段代码,首先执行条件判断 i < j。因为 1 < 2 为真,所以会执行 i++。此时,i 的值从 1 增加到 2,但表达式返回的是 1(执行前的值)。j 的值保持为 2。最终,i和 j 的值为 2 和 2,所以答案是 C. 2, 2。
3、链式栈与顺序栈相比,一个比较明显的优点是( B)。
A.插入操作更加方便
B.通常不会出现栈满的情况
C.不会出现栈空的情况
D.删除操作更加方便
tips:链式栈与顺序栈相比,一个比较明显的优点是 B. 通常不会出现栈满的情况。链式栈通过节点动态分配内存,不受固定大小限制.
4、下列哪些语句关于内存回收的说明是正确的(C )。
A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象
tips:
A. 程序员必须创建一个线程来释放内存:错误。在 C 语言中,程序员并不需要创建线程来释放内存。内存的释放是通过调用 free 函数完成的,与线程无关。
B. 内存回收程序负责释放无用内存:部分正确,但不适用于 C 语言。C 语言没有内置的内存回收程序,程序员需要手动释放不再使用的内存。
C. 内存回收程序允许程序员直接释放内存:正确。在 C 语言中,程序员使用 free 函数手动释放之前分配的内存(例如使用 malloc、calloc 或 realloc),这相当于“直接释放内存”。
D. 内存回收程序可以在指定的时间释放内存对象:错误。C 语言没有自动内存回收机制,内存释放的时机完全由程序员控制,程序员不能指定特定时间来释放内存。
5、下面关于关键字的描述及使用中,错误的是( D)。
A.volatile可用于定义多线程应用中的共享变量
B.const可用于定义全局变量
C.一个变量既可以是 const,同时也是volatile
D.register static int i = 0
tips:
A. volatile可用于定义多线程应用中的共享变量:正确。volatile 关键字用于告诉编译器某个变量可能在程序的其他部分(如多线程环境)被异步修改,因此编译器不会优化对这个变量的访问,确保每次访问都从内存中读取其最新值。
B. const可用于定义全局变量:正确。const 关键字可以用于定义全局变量,这意味着该变量的值在定义后不能被修改。
C. 一个变量既可以是 const,同时也是 volatile:正确。在 C 和 C++ 中,一个变量可以同时被声明为 const 和 volatile。这表示变量的值不应该被修改(const),但可能在程序的其他地方(如中断处理程序或多线程环境)被改变(volatile)。
D. register static int i = 0:错误。register 和 static 不能同时用于同一个变量。register 表示希望将变量存储在寄存器中以提高访问速度,而 static 表示变量的生命周期为整个程序运行期间。两者的含义互相矛盾,因此不能同时使用。
6、在C语言中,如果下面的变量都是int类型,则输出结果是 7 。
sum = pad =5;
pad = sum++, pad++, ++pad;
printf(“%d\n”, pad);
tips:
初始化:sum = pad = 5;
这时 sum 和 pad 都是 5。
语句:pad = sum++, pad++, ++pad;
sum++:这个表达式的值是 5(因为是后缀递增),但 sum 会在此语句执行后增加到 6。
pad++:这个表达式的值也是 5,pad 会在此语句执行后增加到 6。
++pad:此时 pad 的值是 6,经过前缀递增后,pad 变为 7,表达式的值是 7。
在此语句执行后,pad 的最终值是 7,因为赋值是从右到左执行。
最后,执行 printf("%d\n", pad);,输出的是 pad 的当前值。
所以,输出结果是 7。
7、使用冒泡算法实现对一维数组A中的10个元素进行排序。
int sort(int *p,int n)
{
int i,j;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1-i; j++)
{
if(p[j]>p[j+1])
{
int temp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
return 0;
}
int main()
{
int i;
int buf[10]={10,7,98,2,963,9,815,74,56,589};
sort(buf,10);
for(i=0; i<10; i++)
printf("排序之后: %d\n",buf[i]);
return 0;
}
8、用户输入M、N值,从1至N开始顺序循环数数,每数到M的倍数输出该数值,自至全部输出。写出C程序
int main()
{
int i,N,M;
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++)
{
if(i%M==0)
{
printf("%d\n",i);
}
}
return 0;
}
9、用C语言实现函数功能:找出一个整数数组中,第二大的数。
int find_sec_max(int data[], int count)
{
int max = data[0];//max取数组的第一个元素
int sec_max;//定义第二大的数
for (int i = 1; i < count; i++)
{
if (data[i] > max)
{
sec_max = max;
max = data[i];
}
else
{
if (data[i] > sec_max)
{
sec_max = data[i];
}
}
}
return sec_max;
}
int main()
{
int arr[] = {1,5,3,6,4,7,8,10};
int secondnum = find_sec_max(arr,(sizeof(arr)/sizeof(arr[0])));
printf("%d\n",secondnum);
return 0;
}
标签:int,max,practice,++,pad,内存,数组
From: https://www.cnblogs.com/hhail08/p/18434257