char str[81] = "";表示什么意思?

  75、以下条件表达式中能完全等价于条件表达式x的是____B___.

  76、若运行下面程序时,给变量a输入15,则输出结果是___A___.

  77、运行下面程序后,输出是___D___.

  D) 有语法错误不能通过编译

  78、执行下面程序的输出结果是____C____.

  A) 有语法错误不能编译 B) 能通过编译,但不能通过连接 C) 输出 **** D) 输出 ####

  79、为了避免嵌套的if-else语句的二义性,C语言规定else总是与___C___组成配对关系. A) 缩排位置相同的if B) 在其之前未配对的if C) 在其之前尚未配对的最近的if D) 同一行上的if

  A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误

  82、对下面程序段描述正确的是___B____.

  C) 程序段中的控制表达式是非法的 D) 程序段循环无数次

  83、下面程序段的输出结果是____C____.

  84、下面程序的运行结果是____B____.

  88、函数pi的功能是根据以下近似公式求π值:____C______

  89、下面程序段的运行结果是____B____.

  93、以下程序运行后的输出结果是___D_____.

  94、以下函数的功能是:求x的y次方,请填空.____C______

  该程序的执行结果是___B____

  C) 不输出任何内容 D) 陷入死循环 96、以下程序段的执行结果是____C____.

  99、执行以下程序后,输出的结果是_____D_____.

  100、有如下程序

  102、以下循环体的执行次数是___D____

  103、在执行以下程序时,如果从键盘上输入:ABCdef<回车>,则输出为____B____.

  106、下面程序是计算n个数的平均值,请填空.____B___

  107、以下程序的功能是:从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。___D_____

  108、阅读以下程序,程序运行后的输出结果是__B____.

  则下列循环的输出结果是___B____.

  A) continue语句的作用是结束整个循环的执行

  B) 只能在循环体内和switch语句体内使用break语句 C) 在循环体内使用break语句或continue语句的作用相同

  D) 从多层循环嵌套中退出时,只能使用goto语句 115、在下列选项中,没有构成死循环的程序段是___D_.

  117、下面程序段中,循环体的执行次数是____C_____.

  118、若i为整型变量,则以下循环语句的循环次数是_B_.

  A) do-while的循环体至少无条件执行一次

  B) while 的循环控制条件比do-while 的循环控制条件严格

  则程序中的划线处应填入___B_____.

  123、给出以下定义:

  B) 数组x和数组y的长度相同

  C) 数组x的长度大于数组y的长度 D) 数组x的长度小于数组y的长度

  124、定义如下变量和数组:

  则下面语句的输出结果是___C_____.

  A) 数组a中首尾的对应元素的乘积 B) 数组a中首尾的对应元素的乘积之和 C) 数组a中相邻各元素的乘积

  D) 数组a中相邻各元素的乘积之和

  126、若希望下面的程序运行后输出45,程序空白处的正确选择是___C_____.

  127、若有以下说明:

  则以下对数组元素或数组的输出语句中,正确的是__C___.

  129、运行下面程序段的输出结果是___A_____.

  130、以下程序段的输出结果是____B____.

  132、下列初始化语句中,正确且与语句

  140、当接受用户输入的含有空格的字符串时,应使用____A____函数.

  143、以下对二维数组a进行正确初始化的是__B_____.

  144、以下关于数组的描述正确的是____C______. A) 数组的大小是固定的,但可以有不同类型的数组元素。B) 数组的大小是可变的,但所有数组元素的类型必须相同。C) 数组的大小是固定的,所有数组元素的类型必须相同。D) 数组的大小是可变的,可以有不同类型的数组元素。

  152、以下定义语句中,错误的是___B_____.

  153、以下定义语句中,错误的是____D____.

  155、下述对C语言字符数组的描述中错误的是___C__.

  A) 字符数组可以存放字符串

  B) 字符数组中的字符串可以整体输入、输出

  C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

  D) 不可以用关系运算符对字符数组中的字符串进行比较

  158、有如下程序

  该程序的功能是____D____. A) 测字符数组ch的长度

  B) 将数字字符串ch转换成十进制数 159、设有如下定义:

  A) aa是个二维数组,可以存放2个19个字符以下的字符串

  B) aa是个二维数组,每行中分别存放了字符串"abcd"和"ABCD"

  C) aa[0]可以看作是一维数组名 D) aa[0][0]可以看作是一维数组名

  160、以下对C语言函数的有关描述中,正确的是___A__.

  A) 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

  B) C函数既可以嵌套定义又可以递归调用 C) 函数必须有返回值,否则不能使用函数

  D) C程序中有调用关系的所有函数必须放在同一个源程序文件中

  164、请读程序:

  上面程序的输出结果是___B_____.

  165、请读程序:

  上面程序的输出结果是___B_____.

  167、对以下程序,正确的说法是__D______.

  A) 实参与其对应的形参类型不一致,程序不能运行 B) 被调函数缺少数据类型说明,程序不能运行

  C) 主函数中缺少对被调函数的说明语句,程序不能运行 D) 程序中没有错误,可以正常运行

  169、若函数调用时用数组名作为函数参数,以下叙述中,不正确的是____C____.

  A) 实参与其对应的形参共占用同一段存储空间 B) 实参将其地址传递给形参,结果等同于实现了参数之间的双向值传递

  C) 实参与其对应的形参分别占用不同的存储空间 D) 在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组

  170、以下叙述中,不正确的是____B____.

  A) 使用static float a定义的外部变量存放在内存中的静态存储区

  B) 使用float b定义的外部变量存放在内存中的动态存储区

  C) 使用static float c定义的内部变量存放在内存中的静态存储区

  D) 使用float d定义的内部变量存放在内存中的动态存储区

  171、如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一个变量,则该变量___C_____.

  A) 为全局变量,在本程序文件范围内有效 B) 为局部变量,只在该函数内有效 C) 为局部变量,只在该复合语句中有效 D) 定义无效,为非法变量

  172、调用函数时,当实参和形参都是简单变量时,它们之间数据传递的过程是____D____. A) 实参将其地址传递给形参,并释放原先占用的存储单元

  B) 实参将其地址传递给形参,调用结束时形参再将其地址回传给实参

  C) 实参将其值传递给形参,调用结束时形参再将其值回传给实参

  D) 实参将其值传递给形参,调用结束时形参并不将其值回传给实参

  173、以下叙述中,不正确的是___B_____.

  A) 在同一C程序文件中,不同函数中可以使用同名变量

  B) 在main函数体内定义的变量是全局变量 C) 形参是局部变量,函数调用完成即失去意义 D) 若同一文件中全局变量和局部变量同名,则全局变量在局部变量作用范围内不起作用

  174、若函数调用时参数为基本数据类型的变量(俗称简单变量),以下叙述正确的是____C____. A) 实参与其对应的形参共占存储单元

  B) 只有当实参与对应的形参同名时才共占存储单元 C) 实参与其对应的形参分别占用不同的存储单元 D) 实参将数据传递给形参后,立即释放原先占用的存储单元

  175、若主调用函数类型为double,被调用函数定义中没有进行函数类型说明,而return语句中的表达式类型为float型,则被调函数返回值的类型是____A____。 A) int 型 B) float 型

  176、在以下叙述中,不正确的选项是____B____。 A) C语言程序总是从main( )函数开始执行

  B) 在C语言程序中,被调用的函数必须在main( )函数中定义

  C) C程序是函数的集合,在这个函数集中包括标准函数和用户自定义函数

  D) 在C语言程序中,函数的定义不能嵌套,但函数的调用可以嵌套

  177、C语言中,若未说明函数的类型,则系统默认该函数的类型是___C_____。

  B) 比较两个字符串的大小

  C) 将字符串s复制到字符串t中 D) 将字符串s接续到字符串t中

  179、设有如下函数定义:

  如果在主程序中用下面的语句调用上述函数,则输出结果为___C_____.

  180、对于C语言的函数,下列叙述中正确的是___A___. A) 函数的定义不能嵌套,但函数调用可以嵌套 B) 函数的定义可以嵌套,但函数调用不能嵌套 C) 函数的定义和调用都不能嵌套 D) 函数的定义和调用都可以嵌套

  A) C语言程序总是从第一个定义的函数开始执行 B) 在C语言程序中,要调用的函数必须在main()函数中定义

  C) C语言程序总是从main()函数开始执行

  D) C语言程序中的main()函数必须放在程序的开始部分

  183、以下函数func()的功能是:使具有n个元素的一维数组b的每个元素的值都增加2,划线处应填入__D_.

  184、设有以下函数:

  185、设有以下函数:

  如果在下面的程序中调用该函数,则输出结果是___A_.

  186、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_____B___. A) 地址传递 B) 单向值传递 C) 由实参传给形参,再由形参传回实参 D) 传递方式由用户指定

  187、C语言规定,除主函数外,程序中各函数之间__A__.

  A) 既允许直接递归调用也允许间接递归调用 B) 不允许直接递归调用也不允许间接递归调用 C) 允许直接递归调用不允许间接递归调用 D) 不允许直接递归调用允许间接递归调用 188、以下函数fun形参的类型是____D____.

  190、下列程序执行后输出的结果是___C_____.

  191、C语言中规定函数的返回值的类型是由__D______.

  A) return语句中的表达式类型所决定

  B) 调用该函数时的主调用函数类型所决定 C) 调用该函数时系统临时决定

  D) 在定义该函数时所指定的类型所决定

  198、在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:____D____.

  199、C语言中,凡未指定存储类别的局部变量的隐含存储类别是____A____.

  程序改错题(共15题)

  1、在考生文件夹下,给定程序MODI.C的功能是: 求一维数组a中所有元素的平均值,结果保留两位小数。 例如,当一维数组a中的元素为:10,4,2,7,3,12,5,34,5,9 程序的输出应为:The aver is: 9.10 。

  2、在考生文件夹下,给定程序MODI.C的功能是: 求二维数组a中的最大值和最小值。 例如,当二维数组a中的元素为: 4 4 34 37 3 12 5 6 5

  3、在考生文件夹下,给定程序MODI.C的功能是: 求一维数组a中的最大元素及其下标。

  4、在考生文件夹下,给定程序MODI.C的功能是: 求二维数组a中的最小值。

  求一维数组a中所有元素的平均值。

  6、在考生文件夹下,给定程序MODI.C的功能是: 输入一个百分制成绩,打印出五级记分成绩。考试成绩在90分或90分以上为优秀,80~89分为良好,70~79为中等,60~69为及格,低于60分为不及格。

}

C语言中的指针是C语言的精髓,也是C语言的重难点之一。
然而,很少有教程能把指针讲的初学者能听懂,还不会引起歧义。
本文章会尝试做到这一点,如有错误,请指出。

我们先抛开指针不谈,来讲一个小故事:

一天,小L准备去找小S玩。但是小L不知道小S的家住在哪里,正当他着急的时候,他看到了一个路牌,上面写着:小S的家在神仙小区403

哦,真的是要素过多。为什么这么说?

  1. 小L和小S:我们可以看做是两个变量/常量。
  2. 小S的家:这里可以看做是变量/常量小S的地址。
    我们要搞清楚,每个变量/常量都和我们一样:我们每个人都有自己的家,正如变量也有自己的地址。通俗的理解,地址是给变量/常量来存放值的地点
  3. 路牌:注意注意注意!这里就指出了变量/常量小S的地址:神仙小区403
    事实上,我们等会会讲,输出一个变量的地址其实是个16进制的数字。

搞懂了上面,我们再来聊聊&
&这个符号我们一个不陌生,你最初用到应该是在:scanf("%d",&a)里边。
&叫做取址符,用来获取一个变量/常量的地址。
那么我们为什么要在scanf里边用&,不在printf里边用呢?
一开始我也很疑惑,后来我看到了这个例子:
你是一个新生,你要进教室。
但是你并不知道教室在哪里,这个时候你需要教室的地址。
由于你已经在教室里了,你就不需要获取教室的地址就可以出去了。


一定要记住:指针就是个变量!
指针就是个变量!他储存的是地址!他自己也有地址!
指针就是个变量!他储存的是地址!他自己也有地址!
指针就是个变量!他储存的是地址!他自己也有地址!

为什么这么说?我们从指针的定义开始:

也就是说,指针的定义大概是这样的:

这么写当然没问题,但是对于初学者来说,有两个问题:

  1. 有的初学者会把*p当做是指针名
  2. 有的初学者会把定义时出现的*p取值时出现的*p弄混

指针他有没有值?有!我们会在下一节给他赋值。
既然他的定义方式和变量一样,他也有值,他为什么不是变量呢?


与指针相关的符号有两个,一个是&,一个是*
&我们上面讲过,他是来取地址的。举个例子:

%p用来输出地址,当然,你也可以写成%d或者%x。先不管这个,我们来看看他会输出什么:
那么也就是说,变量ab的地址是FE1CFE18
那么我们怎么把这个地址给指针呢?很简单:p = &a;,举个例子:

指针p自身的地址:FE10
指针p指向的地址:FE1C

你发现了吗?如果我们有p = &a;,我们发现:直接输出p会输出a的地址,输出&p会输出p的地址(这就是为什么我一再强调p是个变量,他有自己的地址,正如路牌上有地址,路牌自身也有个地址一样)。

请注意!如果你的指针为int*,那么你只能指向int类型;如果是double*类型,只能指向double类型,以此类推

当然,void*类型的指针可以转化为任何一种不同的指针类型(如int*,double*等等)

那么,我们来聊聊第二个符号*
*有两个用法。第一个在定义指针时用到,第二个则是取值,什么意思?看下面这个例子:

指针p自身的地址:FE10
指针p指向的地址:FE1C
指针p指向的地址的值:10

哈,我们得到了a的值!
也就是说,当我们有p = &a,我们可以用*p得到a的值。
那能不能操作呢?当然可以。
我们可以把*p当做a的值,那么,我们尝试如下代码:

指针p指向的地址的值:10
指针p指向的地址的值:13
指针p指向的地址的值:16
指针p指向的地址的值:13
指针p指向的地址的值:117
指针p指向的地址的值:39
指针p指向的地址的值:0

棒极了!我们可以用指针来操作变量了。
那么,我们要这个干什么用呢?请看下一节:实现交换函数


交换函数是指针必学的一个东西。一般的交换我们会这么写:

那么我们把它塞到函数里边:

好,我们满怀信心的调用他:

于是乎,你得到了这个输出:

啊啊啊啊啊啊啊啊,为什么不行!!!
问题就在你的swap函数,我们来看看他们做了些啥:

各位同学,函数体内有任何一点谈到了x和y吗?
所谓的交换,交换的到底是a和b,还是x和y?
我相信你这时候你恍然大悟了,我们一直在交换a和b,并没有操作x和y

那么我们怎么操作?指针!
因为x和y在整个程序中的地址一定是不变的,那么我们通过上一节的指针运算可以得到,我们能够经过指针操作变量的值。
那么,我们改进一下这个函数

我们再来试试,然后你就会得到报错信息。

我想,你是这么用的:swap(x,y)
问题就在这里,我们看看swap需要怎样的两个变量?int*int*类型。
怎么办?我告诉你一个小秘密:
任何一个变量加上&,此时就相当于在原本的类型加上了*


char*这个神奇的类型可以表示个字符串,举个例子:


请注意:输入和输出字符串的时候,都不能带上*&

你可以用string.h中的函数来进行操作


当你没有让p指向某个地方的时候,你还把他用了!这个时候就会产生野指针。
第一种是指向不可访问(操作系统不允许访问的敏感地址,譬如内核空间)的地址,结果是触发段错误,这种算是最好的情况了;

第二种是指向一个可用的、而且没什么特别意义的空间(譬如我们曾经使用过但是已经不用的栈空间或堆空间),这时候程序运行不会出错,也不会对当前程序造成损害,这种情况下会掩盖你的程序错误,让你以为程序没问题,其实是有问题的;

第三种情况就是指向了一个可用的空间,而且这个空间其实在程序中正在被使用(譬如说是程序的一个变量x),那么野指针的解引用就会刚好修改这个变量x的值,导致这个变量莫名其妙的被改变,程序出现离奇的错误。一般最终都会导致程序崩溃,或者数据被损害。这种危害是最大的。

不论如何,我们都不希望看到这些发生。
于是,养成好习惯:变量先赋值。

指针你可以这么做:int *p =NULL;让指针指向空

不论如何,他总算有个值了。


本文干货全部在这里了:

  1. 指针是个变量,他的类型是数据类型+*,他的值是一个地址,他自身也有地址
  2. 指针有两个专属运算符:&*
  3. 指针可以操作变量,不能操作常量
  1. const修饰指针会怎么样?
}

我要回帖

更多关于 unsigned char啥意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信