1.关于C语言,以下叙述不正确的是(B )。
A.分号是C语言的必要组成部分
B.主函数的名字不一定用main表示
C.C程序的注释可以写在句的后面
D.函数是C程序的基本单位
tips:
A. 分号是C语言的必要组成部分
正确。在C语言中,分号。用于结束一条语句。因此,分号是C语言语法的必要组成部分,缺少分号会导致编译错误。
B. 主函数的名字不一定用main表示
不正确。C语言的标准规定,程序的入口函数必须是 main。尽管在某些特定情况下,可能会定义其他名称的函数,但程序的执行始终是从 main 函数开始的。所以,主函数的名称必须是 main。
C. C程序的注释可以写在句的后面
正确。C语言支持两种类型的注释:单行注释(//)和多行注释(/* ... */)。在一条语句的后面添加注释是完全合法的,编译器会忽略这些注释。
D. 函数是C程序的基本单位
正确。在C语言中,函数是程序的基本构建块,每个函数可以执行特定的操作,并且可以被其他函数调用。程序的结构通常由多个函数组成。
结论
综上所述,选项 B 是不正确的,因为主函数的名字必须是 main。
2.有以下程序
int main()
{
int a=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d\n”,*p,*q,a,b);
}
程序运行以后的输出结果是(C)
A)8,7,8,7 B) 7,8,7,8
C) 8,7,7,8 D) 7,8,8,7
变量的初始状态
a 的值是 7
b 的值是 8
p 指向 a
q 指向 b
r 最开始也只是一个指针,还没有实际的指向,但在执行 r = p; 时,r 会指向 a。
指针的操作
p = &a;:p 现在指向 a,即 *p 的值是 7。
q = &b;:q 现在指向 b,即 *q 的值是 8。
r = p;:r 现在指向 a,*r 的值是 7。
p = q;:p 现在指向 b,即 *p 的值是 8。
q = r;:q 现在指向 a,即 *q 的值是 7。
最终状态
*p:指向 b,所以 *p 的值是 8。
*q:指向 a,所以 *q 的值是 7。
a 的值仍然是 7。
b 的值仍然是 8。
3.假设平台是32位指令集,请计算sizeof的值:
void *p = malloc(1000);
sizeof(p) = 4__。
tips:
指针大小:在32位系统中,指针的大小是4个字节。
sizeof运算符:sizeof 是一个编译时运算符,用于计算数据类型或变量所占用的字节数。在这里,p 是一个 void * 类型的指针。
void * 类型:虽然 p 指向了通过 malloc 分配的内存(1000字节),但 sizeof(p) 计算的是指针本身的大小,而不是它所指向的内存块的大小。
sizeof(p) 在32位平台上等于 4 字节。
4.int (*a[10])(int);代表什么意思__________。
这是一个代表一个长度为10的指针数组,数组元素是指向一个整型函数的指针。这个函数接受一个整型参数(int),并返回一个整型值(int)。简洁地说,这个表达式表示有10个指针,它们分别指向不同的整型函数。
5.strcpy与memcpy的区别
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
6.数组和指针的区别?
- 本质:数组是一段连续的内存空间,用于存储相同类型的数据;指针是一个内存地址,用于指向某个变量或数据。
- 访问方式:数组使用索引直接访问,索引值即为元素在数组中的位置;指针使用间接访问,通过指针值获取指向的内存地址,再通过该地址访问数据。
- 动态性:数组在创建时需指定固定的大小,无法动态扩展;指针可以动态分配内存,适用于动态数据结构。
- 修改性:数组元素可以被修改,但数组名(即数组首元素的地址)不能被修改;指针变量可以修改其指向的内存地址。
- 字符串处理:字符数组用于存储字符串,字符串以'\0'(null)结尾;字符串指针指向字符串的首字符,不可修改。
综上,数组和指针在本质、访问方式、动态性、修改性和字符串处理方面有所区别。
7.编程题:输出9*9口诀。
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d*%d=%d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
8.用一个递归函数实现n的阶乘。即:n! = n*(n-1)!
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("%d的阶乘是:%d\n", n, factorial(n));
return 0;
}
9.实现在一个源字符串中查找指定的子串是否存在,如果存在则返回第一次出现的地址,不存在则返回NULL。
原型:char *mystrstr(const char *haystack, const char * needle)
char *mystrstr(const char *haystack, const char * needle)
{
while(1)
{
if(*haystack == *needle){
char *hp = haystack;
char *np = needle;
int isFind=1;
while(*np != '\0')
{
if(*hp++ != *np++){
isFind = 0;
break;
}
}
if(isFind)
return hp;
}
if(*haystack++ == '\0')
break;
}
return NULL;
}
标签:练习题,函数,指向,int,数组,main,指针
From: https://www.cnblogs.com/hhail08/p/18457097