C语言程序设计错题归纳

C语言程序设计错题归纳

判断题、选择题和填空题

1.在C语言中能逐个地使用下标变量,也能一次引用整个数组。(F)
解析:不能一次引用整个数组

2.数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。(F)
解析:数组名不是指针,是元素首地址

3.一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。类型名 数组名[数组长度];(F)
解析:其中的类型名是指数组元素的类型。

4.不正确的赋值或赋初值的方式是__C__。
A.char str[]=“string”;
B.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C.char str[10];str=“string”;
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, '\0’};
解析:不能给数组名赋值

5.对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是: (C)
A12 ,13
B.3 ,11
C.3 ,9
D.3 ,4

6.以下哪个定义中的p不是指针,请选择恰当的选项: (C)
A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p都是指针
解析:*p[6]代表指针数组,其中的元素才代表指针

7.在以下描述中,( AB)是正确的。
A.int a[5] = {1, 2, 3, 4, 5};
定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。
B.static int b[10];
定义了静态数组b,且10个数组元素的初值都为0。
C.int fib[45] = {1, 1};
定义了数组fib,并对数组 fib 的前2个元素赋初值,其余元素的值都为0。
D.static int week[7] = {1, 2, 3};
定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。

解析:只有静态staic定义的数组,经过初次赋值后,没有赋值的元素值默认为0,并不是不确定的

8.在以下描述中,( ABCD)是正确的。
A.int a[3][3] = {1};
定义了数组a,并对数组a赋初值。此时,a[0][0]的值为1,而其余元素的值都是不确定的。
B.static int b[4][3] = { { }, { }, { },{9}};
定义了静态数组b,并对数组赋初值。此时,b[3][0]的值为9,而其余元素的值都为0。
C.int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
和int a[3][3] = { {1,2,3},{4,5,6},{7,8,9}};
等价。
D.static int b[4][3] = { {1, 2, 3}, { }, {4, 5}};
和static int b[4][3] = {1, 2, 3, 0, 0, 0, 4, 5};
等价。
E.int a[3][3] = { {},{4},{}};
定义了数组a,并对数组a赋初值。此时,a[1][1]的值为4,而其余元素的值都是不确定的。

解析:.int a[3][3] = { {},{4},{}};此时,a[1][0]的值才是为4,而其余元素的值都是不确定的。

9…int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素(F)
解析:p是一个指针变量
知识拓展:int (*p)[n]; 是数组指针,小括号优先,所以 是 1个指针,用来指向 有5个元素的数组。int *p[n]; 指针数组,有 5 个成员,每个成员都是一个指针,共有5 个指针

10.结构体类型本身不占用内存空间,结构体变量占用内存空间(T)(结构体成员)

11.语句int *p; *p=50;执行时,不会有任何错误(F)
解析:P需要指向一个地址后才能对 *p赋值.

12.对于定义int a[10] , *p=a;(赋的是一个首地址) 语句p=a+1;和a=a+1;都是合法的。 (F)
解析:a是数组,只能对数组元素赋值,要有下标。

13.在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。(T)

14.假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 *p.num=100; 是正确的。(F)
15. 若变量已正确定义并且指针P已经指向某个变量X,则(*P)++相当于 (x++)

16.下列程序段的输出是 ( 5 )。
int c[]={1, 3, 5};

int *k=c+1;

printf("%d",
*++k);

17.若定义pf为指向float类型变量f的指针,下列语句中_B_是正确的。 (2分)

A.float f, *pf = f;(地址没有浮点型的)

B.float f, *pf = &f;

C.float *pf = &f, f;

D loat f, *pf =0.0;

解析:定义时初始化float *pf = &f;的等价的语句是: float *pf; pf = &f;.

18.根据声明int (*p)[10],单独的 p是一个( 指针)

19.根据声明int a[10], *p=a; ,下列表达式错误的是( a++)。(a是常量,不能自增)

  1. int a[2]={1,3},
 *p=&a[0]+1;               结果是3

 printf("%d",*p);

20.对于以下结构定义,++p->str中的++加在指针str上____。 (2分)

struct {

int len; 

char *str;

} *p;

  1. 程序是由函数构成

  2. 注释/*和 */,还有//

  3. a=(3,4,5)此时a=5; a=3,4,5此时a=3.

  4. 设double
    x=2.5,y=4.7;int a=7;则x+a%3*(int)(x+y)%2/4为_____2.5___。(从左至右,赋值最低)

  5. 定义:double
    x=3.5,y=3.2;则表达式(int)x*0.5的值是__1.5_____,表达式y+=x++的值是___6.7____。

解析:x++是先使用后加,下次中的x的值才会加一;
int(这里面的才会变,不打括号就是把靠它最近的强制转换)

  1. 定义:int m=5,n=3;则表达式m/=n+4(和m=m/(n+4)一样)的值是____0___,表达式m=(m=1,n=2,n-m)的值是___1_____,m+=m-=(m=1)*(n=2)(当有多个赋值时,从右往左计算)的值是____-2____。
    
  2. 在C语言,标识符分为三类:_关键字_____、__用户自定义标识符____和_预定义标识符______。
    
  3.  合法的标识符由字母、数字、下划线组成(数字不能放最前面),变量名不能由关键字(如case)组成。
    
  4. 这个字符串的长度是9——这个字符串的长度是9——a \x44 \ a b
    c d \101 b——这是因为C/C++的字符串中由\引导的是“转义字符”或叫“换码序列**”。下面只对转义字符予以说明:
    \x44——以\x引导的是十六进制ASCII码,\x44表示0x44,即大字字母D;\——由于\被赋予换码序列的引导符,所以字符串中使用字符’'时要双写;\101——八进制ASCII码,八进制101就是十进制65**,即大字字母A。

30.!逻辑非与!=不等于

31.设int a=0,b=5;执行表达式++a||++b(当前面满足有一个是非0是,就不会执行后面的了),a+b后,a,b和表达式的值分别是( 1,5,6 )

32.运算符的先后高低(单目乘除为关系,逻辑三目后赋值)。

单目:单目运算符±(负数) +±等

乘除:算数单目运算符* / % ±

为:位移单目运算符<< >>

关系:关系单目运算符><>=<===!=

逻辑:逻辑单目运算符&&|| &|^

三目:三目单目运算符A>B?X:Y

后:无意义,仅仅为了凑字数

赋值:赋值=),数学运算与C语言运算的符号区别,运算

33.int
k=2;while(k=0){printf("%d",k);k–;}则下面描述中正确的是( 循环体语句一次也不执行 )(0为假,1为真,执行循环,不满足退出)

链表

  1. 在单向链表中,头指针中存放的是头结点的内容(F)(有区别)

  2.  用链表代替数组进行数据操作时,查询更加方便。(F)(数组内存连续,占用大,查找更方便,链表插入删除方便,但不可随机访问)
    

编程题

1.阶乘计算升级版
本题要求实现一个打印非负整数阶乘的函数。
输入样例:15
输出样例:1307674368000

#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
   
    int N;
	
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}
void Print_Factorial ( const int N )
 
 {
   d
  • 15
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值