C语言刷题笔记 day009 2021.8.30

这篇博客探讨了C语言的基础知识,包括二维数组的使用、继承的概念、for循环的语法、函数指针的定义以及字符串处理。文章通过示例程序解释了如何输出二维数组的子数组,并详细阐述了继承在面向对象编程中的重要性。此外,还介绍了C语言中for循环的特殊形式,以及如何使用函数指针。最后,展示了如何通过字符串操作改变字符数组的内容并输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.以下程序的输出结果是

void main()
{
char w[ ] [10]={"ABCD","EFGH","IJKL","MNOP"},k;
for (k=1;k<3;k++) printf("%s\n",w[k]);
}

解析:

EFGH
I J K L

对于二维数组w[][10]

w[]就相当于其二维数组的名字

格式化%s输出遇到\0停止

所以w[1] w[2]为

EFGH
I J K L

2.下列关于继承的描述中,正确的是

  • 继承不是类之间的一种关系
  • C++语言仅支持单一继承
  • 继承会增加程序的冗余性
  • 继承是面向对象方法中一个很重要的特性

解析:

面向对象的三大特性:封装 继承 多态

3.for(表达式1;;表达式3)可理解为 for(表达式1;1;表达式3)。请问这句话的说法是正确的吗?

解析:正确

在C中0为假,!=0 为真

for循环不能没有退出判断,如果缺省则默认为true

4.对定义:

void  (*f)(int *, int *);

描述正确的是

  • 定义了函数的指针f,f所指函数返回指针
  • 声明了一个返回值为指针的函数f
  • 声明了一个无返回值的函数f
  • 定义了函数的指针f,f所指函数无返回值

解析:

  • 指向函数的指针

int (*a)(int,int);

指向函数的指针,其指向函数的起始地址

  • 函数的返回值为指针

int * a(int,int);

定义函数a其返回值为地址

5.以下叙述中正确的是

  • 在语句char str[] = “string!”;中,数组str的大小等于字符串的长度
  • 语句 char str[10] = “string!”; 和 char str[10] = {“string!”}; 并不等价
  • 对于一维字符数组,不能使用字符串常量来赋初值
  • 对于字符串常量 “string!”,系统已自动在最后加入了"\0"字符,表示串结尾

解析:字符串在内存中以字符数组形式存储

为了方便统计实际字符串长度,系统会默认在字符串末尾加\0

6.C 语言源程序文件的缺省扩展名为

解析:C

文件扩展名为.c的为c编译器下
文件扩展名为.cpp的为c++编译器下
.obj为编译后生成目标文件扩展名
.exe为可执行文件是编译,链接后生成的

7.下面的程序的输出是什么?

#include<stdio.h>

int main(void)
{
 int n;
 char y[10] = "ntse";
 char *x = y;
 n = strlen(x);
 *x = x[n];
 x++;
 printf("x=%s\n",x);
 printf("y=%s\n",y);
 return 0;
}

解析:x=tse,y=

*是取值运算符,在

*x = x[n]

是将x[4]的值赋给y数组的首元素

y数组也就变成了 /0tse,printf输出是遇到\0结束

而x++使x指向第二个元素

所以输出

x=tse,y=

8.以下代码最后一次打印结果是

void fun(int iinputnum)
{
  static int icount=1;
  icount=icount+iinputnum;
  print( “ \n icount =%d ” ,icount+iinputnum);
}
for(i=1;i<3;i++) fun(i);

解析:iCount=6

静态局部变量是存储在静态存储区

生命域是从程序开始到结束

icount的值依次是 1 2 4

最后与传入参数相加 4+2 = 6

9.有以下程序

#include &lt;stdio.h&gt;
main()
{
    int a=2, c=5;
    printf( "a=%%d,b=%%d\n", a,c );
}

则程序的输出结果是

解析:

a=%d,b=%d

C 语言中用 “%%” 打印输出字符 “%”, 所以 %%d, 输出为 %d 两个普通字符 , 而不是格式控制符 “%d” 的含义

#include<stdio.h>
int main()
{
    unsigned char i=7;
    int j=0;
    for(;i>0;i-=3)
    {
       ++j;
     }
     printf("%d\n",j);
     return 0;
}

请问该程序的输出是多少?

解析:

173

unsigned char 8位数据位,范围0-255,
所以-2(11111110)时,溢出变成254;
同理-1(11111111)时,溢出变成255;
最后减到0时,不满足循环条件,for停止。
刚好173次。
7 4 1 ==> 共(7-1)/3+1=3次(1-3=-2,即254,继续循环)
254 251 … 5 2 ==> 共(254-2)/3+1=85次(2-3=-1,即255,继续循环)
255 252 … 6 3 ==> 共(255-5)/3+1=85次(3-3=0,退出循环)
所以总共173次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值