1、c语言整份代码的入口是main函数

2、

#define a 1+2

定义的是字符串,不能说a就等于3

摘抄别人的段落:

#define N 2+2

void main()

{

int a=N*N;

printf(“%d”,a);

}

出现问题:在此程序中存在着宏定义命令,宏N代表的字符串是2+2,在程序中有对宏N的使用,一般同学在读该程序时,容易产生的问题是先求解N为 2+2=4,然后在程序中计算a时使用乘法,即N*N=4*4=16,其实该题的结果为8,为什么结果有这么大的偏差?

问题解析:如1节所述,宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方 只是简单地使用串2+2来代替N,并不会增添任何的符号,所以对该程序展开后的结果是a=2+2*2+2,计算后=8,这就是宏替换的实质,如何写程序才 能完成结果为16的运算呢?

解决办法:将宏定义写成如下形式

#define N (2+2)

这样就可替换成(2+2)*(2+2)=16

3、如果一个自动变量被编译器分配到CPU内部的寄存器存储,对这个变量使用&运算符取地址往往是无意义的,因为在许多机器的硬件实现中,并不为寄存器指定与外部存储器统一编址的地址。由于寄存器变量的分配是由编译器自动完成的,程序员在写程序是并不能保证所声明的变量是不是会自动的被分配到寄存器中,所以不要对自动变量进行取地址操作是最安全的做法。

4、

main() {int a=5,b=4,c=3,d=2;if (a>b>c) printf("%d\n", d); else if ( (c-1 >= d) ==1) printf("%d\n", d+1); elseprintf("%d\n", d+2);
}

a<b<c被解释成:(a<b)<c,如果(a<b)成立,则(a<b)等于1,否则等于0

所以结果是3

5、int a=1,b=2,c=3,d=4,m=2,n=2;
     (m=a>b)&&(n=c>d);

"&&"为逻辑与运算符(左右均为正才为真),具有左结合性(从左往右),题目中(m=a>b)结果为m=0,答案为零,所以结果为假。逻辑与运算符具有“若左边判定为假,则结果为假,不再进行后续判断”。所以(n=c<d)并未执行,所以n=2

int  i=1, j=1, k=2;if ( (j++ || k++) && i++)   printf("%d,%d,%d\n", i, j, k);

同理,“||"符号(左右有一个为真即可)也为左结合性,左侧 j++ 与右侧 i++ 相等,结果为真,不再执行 k++,故输出结果为2 2 2.

6、++、-- 与<、>混合时要注意优先顺序

int x;  scanf("%d",&x); //假设输入5if(x--<5)   //此时x=5!不是4!不是4!printf("%d",x); else   printf("%d",x++);//跳到此步:执行x--后x=4
return 0;//此时为执行x++后,x=5!
if(n++<10)     //输入n=9,先判断n小于10,再让n+1==10printf ("%d\n",n); else  //输出n=10printf("%d\n",n--);  

7、case后面可以跟N个语句

8、if语句中,条件表达式不只是关系表达式或逻辑表达式,还能是数值表达式,如if(a)

9、(条件表达式) ? (结果1) : (结果2)

条件运算符是唯一的三目运算符,其优先级低于所有其他运算符,赋值运算符 = 除外,结合方向是自右至左。

10、case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。常量表达式只能是整型、字符型或枚举型常量的一种。

default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。

多个case可以共用一组执行语句块

11、printf控制位数:

d 格式,用来输出十进制整数。

  • %d:按整型数据的实际长度输出;
  • %md:m为指定的输出宽度。如果数据的位数小于m,则左端补空格;若大于m,则按实际位数输出;
  • %0md:同上,但这里如果数据的位数小于m,则左端补0;若大于m,则按实际位数输出。

f 格式,用来输出小数。

  • %f:整数部分全部输出,并输出6位小数;
  • %.nf:整数部分全部输出,并输出n位小数;
  • %m.nf:输出共占m列,n位小数,若数值宽度小于m则左端补空格。

s 格式,用来输出字符串。

  • %s:输入全部字符串;
  • %ms:输出的字符串共占m列,若字符串本身的长度小于m,则左补空格;若字符串本身的长度大于m,则全部输出。

12.取模:%

不要对浮点数使用该运算符,那将是无效的。

如果第一个操作数为负数,那么得到的模也为负数;如果第一个操作数为正数,那么得到的模也为正数。

取模公式:a % b == a - (a/b) * b

——用整形的a除以2.0得到的还是整数www

——位运算的优先级:由高到低的顺序是:~ → << 、>> → & → | → ^

13.对于 int 型, 13! 会溢出
对于 long long 型,21!会溢出

14.

  • 形参在函数中是变量名,在函数调用时,形参被临时分配相应的内存,调用结束后,形参单元被释放,而实参单元保留并维持原值。
  • 实参是表达式,负责向对应的形参标识的内存单元传递数据,实参向形参的数据传递是“值传递”。
  • 实参与形参必须个数相同
  • 对应的形参和实参的类型必须一致
  • “函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。”
  • 函数返回值在寄存器中, 没有地址, 不能作为形参,但可以作为实参

15. 用户标识符:用户根据需要自己定义的标识符。一般用来给变量、函数、数组等命名。用户标识符如果与关键字相同,则编译时会出错;如果与预定义标识符相同,编译时不会出错,但预定义标识符的原意失去了,或会导致结果出错,因此预定义标识符一般不用来作为用户标识符。

16.主函数
1)main是主函数名,C语言规定必须用main作为主函数名
2)主函数后的一对括号中间可以是空的,但这一对括号不能省略。
3)一个C程序可以包含任意多个不同名字的函数,但必须有且只有一个主函数。
4)C程序的运行总是从主函数开始执行。

main不是关键字、保留字,但也不能做标识符。

17.在C语言中定义函数后,在使用前,需要在main函数前进行声明,否则会报错。

或者将函数定义在main函数的前面,则不需要声明。

18.不同函数中可以使用相同名字的变量,它们代表不同的变量,互不干扰。

在一个函数内部,可以在复合语句中定义变量,这些变量仅在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。

19.一个C源程序是由一个main函数和若干个其他函数组成的。函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己定义的函数。

在C语言中,不能存在过程的概念。

在C语言中,函数允许单独编译,可以为单独文件形式存在。

20.全局变量的弊端 增加内存开销 降低函数的通用性

21.

1、以下叙述正确的是( B )

A)C语言的源程序不必通过编译就可以直接运行。

B)C语言中的每条可执行语句最终都将被转换成二进制的机器指令。

C)C语言源程序经编译形成的二进制代码可以直接运行。

D)C语言中的函数不可以单独进行编译。

2、一个C语言的源程序中( A )

A)必须有一个主函数

B)可能有多个主函数

C)必须有除主函数外其它函数

D)可以没有主函数

3、以下不能定义为用户标识符的是( D )

A)scanf B)Void C)_3com D)int

4、若以下选项中的变量已正确定义,则正确的赋值语句是( C )

A)x1=26.8%3; B)1+2=x2; C)x3=0x12; D)x4=1+2=3;

5、设有定义:float a=2,b=4,h=3;以下C语言表达式中与代数式的计算结果不相符的是( B )

A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2 D)h/2*(a+b)

22.main函数可以被递归调用(c语言中)

23.

先定义int n = 5;
再定义int a[n] = {0};
编译怎么不通过啊?
 
n必须为常量
如果想实现你说的,应该用宏。
#define n 5
int a[n]={0};
这样就可以了。
你如果非要n的。可以用动态申请长度为n的数组,
int n=5;
int *a=new int[n];
然后对数组赋值。
a[0]=0;

补充下:
如果你写的C++,可以用
const int n = 5;
int a[n]; 
但是这种写法,在C中是不可以使用的。

24.

char s[5]="asdf";
这句不是赋值而是初始化;
讲的赋值语句是在程序执行中的赋值,就像
int a;
int b;
b=a;  这是赋值;
对于字符而言,要赋值就要采用strcpy(s1,s2)这个函数。

25.C语言中\既是接续符也是转义字符。

接续:编译器将反斜杠去除,然后把反斜杠后面的和下面那一行原封不动的接上来。

所以在接续单词的时候下一行不能有空格,反斜杠后面也不能有空格。

转义:

当反斜杠\作为转义字符使用时必须在单引号或双引号之间。

以下程序段的输出结果是 A) 9 B) 12 C) 13 D) 14
char s[]="\\141\141abc\t";
printf ("%d\n",strlen(s));

\\算一个转义字符,代表一个反斜线字符
1算一个字符
4算一个字符
1算一个字符
\141算一个转义字符
a算一个字符
b算一个字符
c算一个字符
\t算一个转义字符,代表横向跳格

问1 char *s="\ta\017bc"中指针变量s 指向的字符串所占字节数是6的原因。

问2 char *s="\ta\018bc";

for(;*s!='\0';s++)

printf("*"); 的循环次数是6的原因。

答1  '\t' 是一个转义字符 相当于键盘“Tab”键
  ‘a’ 普通字符
   '\017'转义字符 ASCII代码值为8进制数17即10进制数15的那个符号(LZ可以自己去查下看是什么符号)
  ‘b’ 普通字符
  ‘c’ 普通字符  
   然后再加一个字符串结束标志‘\0’所以指针变量s 指向的字符串所占字节数是6
答2 循环次数应该是6次吧??因为"\ta\018bc"中有六个字符加'\0'占7个字节,循环条件是*s!='\0',所以应该是循环6次!
其中 '\01'转义字符, soh . ASCII代码值为8进制数1即10进制数1的那个符号
千万不要理解'\018'为1个转义字符,因为018不是一个正确的8进制数(只能出现0~7的数码符号)

26.

char c = 1 表示ASCII码=1的字符

char c = "1" 语法错误

char c = '1' 表示1这个字符

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

但是可以比较普通字符串

对两个字符串运用关系运算符,许多人认为小于表示“在字母顺序上靠前”,大于表示“在字母顺序上靠后”,但是事实并非如此。对于字符串,第一个字符串中的每个字符的代码都会和第二个字符串中对应位置上的字符的代码进行比较。完成这种比较操作后,会返回一个Boolean值。问题在于大写字母的代码都小于小写字母的代码,这就意味着可能会遇到下面这种情况:

var bResult = "Brick" < "alpha";

alert(bResult);// output:true;

在这个例子中,字符串“Brick”小于字符串“alpha”,因为字母B的字符代码是66,字母a的字符代码是97。要强制得到按照字母顺序比较得到的结果,必须把两个运算数转换成相同的大小写形式(全大写或者全小写)然后在尽行比较。例如:

var bResult = "Brick".toLowerCase() < "alpha".toLowerCase();

alert(bResult);// output:false;

另一种棘手的情况发生在比较两个字符串形式的数字的时候,例如:

var bResult= "23" < "3";

alert(bResult);//output:true;

因为这两个运算时都是字符串,因此将比较他们的字符代码(”2“的字符代码是50;”3“的字符代码是51)因此输出true;

不过把上述例子中的其中一个运算符改为数字的时候,那么就有趣了,例如:

var bResult= "23" < 3;

alert(bResult);//output:false;

如论合适比较一个字符串数字和一个数字,ECMAscript都会把字符串的数字转化为数字,然后在比较大小。

不过,如果字符串不能被转化成数字的时候,又该怎么办呢?

var bResult= "a" < 3;

alert(bResult);//output:false;

字母a不能换转成有意义的数字,不过调用parseInt()方法,返回的是NaN,根据规则,任何包含NaN的关系运算都要返回false,因此这段代码也输出false;

var bResult= "a" < 3;

alert(bResult);//output:false;

通常,如果小于运算的两个值返回false,那么大于等于运算必须返回true;不过如果某个数字是NaN,则情况并非如此。

28.

int *p()是返回指针的函数

int (*p)()是指向函数的指针

错题更正~(摘抄为主相关推荐

  1. 21年研究生入学考试(哈尔滨工程大学)复试准备——《网络安全》选择题错题总结

    前言 这些知识点都是从我的错题集上总结出来的,仅供参考,如有错误可以留言我将更正. 2011年期末试卷错题 2.在密钥分配中可信第三方TTP的主要参与方式不包括(). A协调 B联机 C带外 D脱机 ...

  2. 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...

    四年级数学易错题练习 一.填空题 1.1.25×0.8表示(              ). 2.去掉0.25的小数点,就是把这个数扩大(      ):把50.4的小数点向左移动两位,就是把它缩小到 ...

  3. 细节决定成败(竞赛错题经验总结)

    整理的算法模板合集: ACM模板 没有灵异事件,只有我是傻逼 图论的数组,涉及到点的开N,涉及到边的开M,开多了会TLE!根据题目要求设定, 凡是涉及到位运算的我都要累括号!!!位运算的优先级太糟糕了 ...

  4. php自动打印小票_错题打印机哪个品牌质量好?【2020双12】错题打印机品牌排行...

    2020年11月22日更新: 帮帮机销量3天增加1万: 帮帮机D1目前京东促销99元,击穿行业底价! 本文目录: 什么是错题打印机? 错题打印机能用普通纸吗,耗材贵吗? 高性价比错题打印机参数对比 1 ...

  5. 为了探究不同光照处理_浅谈中考物理实验探究易错题

    中考实验探究易错题主要在于伏安法实验和物质密度的测量.伏安法就是用电压表和电流表测量电阻或测量小灯泡的电功率的方法.伏安法测量电阻和测量电功率的实验是初中物理电学中重要的实验,也是每年中考实验探究题中 ...

  6. 2017-2018-1 《信息安全系统设计基础》课下测试错题汇总

    2017-2018-1 <信息安全系统设计基础>课下测试错题汇总 (多选题|1分)假设用ADD指令完成C表达式t=a+b的功能,有关条件码寄存器的说法正确的是() A.若t==0,则ZF= ...

  7. c++如何让字符串重复输出_2020.10.02错题总结之字符串相关函数

    C/C++每日总结 点击上方「嵌入式龙憨憨」,选择「置顶/星标公众号」第一时间查看编程笔记! 特别设置[每日总结]专栏: 对专业课--C/C++的复习刷题进行总结,归纳错题知识点,记录知识点掌握不足的 ...

  8. C语言易错题集 第四部

    C语言易错题集 第四部 一.位操作相关 二.switch()相关 三.输出相关 四.实数相关 五.指针&a相关 六.指针访问数组元素相关 七.转义字符相关 八.类型提升问题 九.是不是正确的浮 ...

  9. C语言易错题集 第二部

    C语言易错题集后续 一.共用体相关(union) 二.do,while相关 三.char溢出相关 四.printf()相关 五.++相关 六. for语句相关 七.calloc()相关 八.defin ...

最新文章

  1. 德国波恩大学于鹏组根系与微生物互惠方向招收博士研究生
  2. iOS学习笔记2-微博cell界面的实现
  3. H.264编码系统几个比较重要的算法
  4. python经典程序练习题-99道经典练习题助你全面掌握python基础知识,附技巧答案...
  5. Oracle 中定位重要(消耗资源多)的SQL
  6. 径向基神经网络(实例故障分类)
  7. 恐怖地狱火恶魔叉404模板下载
  8. java php serialize_PHP serialize 和 JSON 解析与区别
  9. EditPlus中有用的快捷键
  10. iOS The document “(null)” requires Xcode 8.0 or later.解决办法
  11. 学会QT从这里开始——教你快速学会QT
  12. 最小生成树MST详解
  13. 小程序开发 tips——2
  14. Redis学习之旅--Redis的数据类型你都知道吗?
  15. 怎样搭建企业内部知识库
  16. Tomcat 输入http://localhost:8080网页打不开
  17. WebApi 路由机制剖析
  18. 专车新规或下周发布,估计有大量司机流失
  19. html中伪类定义,伪类
  20. 文华财经-wh8-MTM动力指标

热门文章

  1. uniapp 检查网络状态并封装
  2. 放苹果(C语言 递归)
  3. vscode找不到python环境_在vscode成功配置Python环境
  4. 一看就懂系列之Golang的goroutine和通道
  5. asp.net二手车交易管理系统
  6. 人工智能原理复习 | 基础总结 概念、简答题
  7. 随着投资者转向其他投资领域,证券交易狂热有所缓解
  8. 《python初级爬虫》(二)
  9. 如何提升儿童客流统计
  10. html动态加载图片,javascript实现瀑布流动态加载图片原理