1. 知识重点:数据类型、循环、数组、函数、指针、结构体与共同体

2. 求程序的运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     short int m=32767, n=032767;
  7.     printf("%d, %o \n", m, n);
  8.     return 0;
  9. }

3. 自增和自减运算符的运算对象可以为char, int, float

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     float scanf = 9.12345678; 
  7.     // warning C4305: 'initializing' : truncation from 'const double' to 'float'
  8.     
  9.     double main = 9.12345678;
  10.  
  11.     printf("%.10f \n", scanf++); // 9.1234569550
  12.     printf("%.10f \n", scanf); // 10.1234569550
  13.  
  14.     printf("%.10f \n", main++); // 9.1234567800
  15.     printf("%.10f \n", main); // 10.1234567800
  16.  
  17.     return 0;
  18. }

4. 求运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     char a, b, *c;
  7.     //a = '\'; //错误。正确的转义形式为:a = '\\';
  8.     a = '\ '; //正确。
  9.     b = '\x31'; //表示ASCII码为49的字符,也即字符'1'
  10.     c = "\0157"; //指针c指向的字符串为"\r7",它包含一个回车符,一个字符'7',和一个'\0'
  11.     printf("%c, %c, %s \n", a, b, c);
  12.  
  13.     return 0;
  14. }

5. C语言中没有以B结尾的二进制整数常量,如 int x = 101011B; 是不对的

6. 不能定义为用户标识符的是:(  )

(A) scanf    (B) Void    (C) _3com_    (D) int

注:用户标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线,C语言中的关键字(保留字)不能用于用户标识符。D选项为关键字,所以不能作用户标识符。

7. 以下为非法表达式的是:(  )

(A) 0<=x<100    (B) i=j==0    (C) (char) (65+3)    (D) x+1=x+1

注:不能对表达式进行赋值。

8. 写出运行结果:

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     int a;
  7.     char c = 10;
  8.     float f = 110.0;
  9.     double x;
  10.  
  11.     a=f/=c*=(x=6.5);
  12.  
  13.     printf("%d %d %3.2f %3.1f %3.1f\n",a,c,f,f,x); 
  14.  
  15.     return 0;
  16. }

注:赋值运算符的结合性为从右向左结合;输出中的精度控制会产生四舍五入。

9. 运算符的优先级,如:

(1) k=(n=b>a)||(m=a<b),先做两个括号内的表达式,再将两个表达式的结果做||运算,再将运算结果赋值给k。

(2) 0<=x<100,关系运算符从左往右结合,所以先判断0<=x,再将判断结果与100比较。整个表达式的值总是为真。

(3) i=j==0,先判断变量j是否等于0,再将判断结果赋值给变量i,因此变量i的值或为0,或为1。

(4) a>b>c

(5) (c-1>=d)==1

注:在整个优先级中,逗号运算符的优先级最低,其次是赋值运算符。关系运算符的优先级高于赋值运算符。

如下为常用运算符的优先级,逗号运算符的优先级最低,圆括号的优先级最高。未写结合性的为从左往右结合:

( )  (圆括号)

++  --  *(指针)  &(取地址)          结合性:R -> L

*  /  % (乘,除,取余)

+  - (加,减)

<  <=  >  >=  (关系运算符)

==  !=  (等于,不等于)

&&  (逻辑与)

||  (逻辑或)

=   +=   -=   *=   /=   %=   >>=   <<=   &=   ^=   !=  (简单赋值和复合赋值运算符)       结合性:R -> L

,  (逗号运行符)

10. 将x中的值保留到小数点后两位,并将第三位四舍五入

  1. float x=1.236;
  2. x=(int)(x*100+0.5)/100.0;
  3. printf("%f \n", x); //1.240000

11. (1) 取余运算符%两边必须是整数;

(2) 赋值运算符=左边必须是变量,不能是常量或表达式;

(3) #define n 2 后,n为符号常量;

(4) 当除号 / 两边的运算对象都是整型时,为整除,即结果的小数部分被忽略掉。

12. 写出程序结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     char a = 'D'-'A'+'0';
  7.     printf("%c \n", a);
  8.  
  9.     /* 以下为附加内容 */
  10.     printf("%c %d \n", 'z'-'A', 'z'-'A'); //9 57
  11.     printf("%c %c %c %d \n", '0', '\0', '\000', '0'); //0    48
  12.     printf("%c %d \n", a, a); //3 51
  13.  
  14.     return 0;
  15. }

注:字符'0'的ASCII码值是十进制的48,或十六进制的30

13. 输入12<回车>,请写出程序的运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     char ch1, ch2;
  7.     int n1, n2;
  8.  
  9.     ch1 = getchar(); 
  10.     ch2 = getchar();
  11.  
  12.     n1 = ch1 - '0';
  13.     n2 = n1*10 + (ch2 -'0');
  14.  
  15.     printf("%d \n", n2);
  16.  
  17.     return 0;
  18. }

14. 写程序运行结果:

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     int i;
  7.     for(i=0; i<3; i++)
  8.         switch(i)
  9.     {
  10.         case 1: printf("%d", i);
  11.         case 2: printf("%d", i);
  12.         default: printf("%d", i);
  13.     }
  14.  
  15.     return 0;
  16. }

15. 与 k=a>b?(b>c?1:0):0;功能等价的是:(  )

(A) if((a>B) &&(b>C) ) k=1;   (B)  if((a>B) ||(b>C) )  k=1
                  else  k=0;
(C) if(a<=B)   k=0;             (D) if(a>B)   k=1;
     else if(b<=C)   k=1;              else if(b>C)   k=1;
                                          else k=0;

16. int N=5, b[N][N]; 是错误的。数组长度应为常量,不能动态定义数组长度。

17. 写出程序运行结果

  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. main()
  6. {
  7.     char s1[ ] = "\n123\\";
  8.     char s2[8] = "\n123\\";
  9.  
  10.     printf("%d %d ", strlen(s1), sizeof(s1));
  11.     printf("%d %d \n", strlen(s2), sizeof(s2));
  12.  
  13.     return 0;
  14. }

注:考查转义字符,空字符'\0',strlen库函数和sizeof操作符的用法

18. 以下正确的是:( D )

(A) char s[8]; s = {"Beijing"};

(B) char s[8]; s = "Beijing";

(C) char *s;   s = {"Beijing"};

(D) char *s;   s = "Beijing";

注:{"Beijing"}的表达方式只能在字符串定义时初始化。对于B,数组名s存储的是该数组的首地址,为一个常量,不能对其赋值。对于D,是将字符串的首地址赋给指针变量s,是对的。

19. 写出程序的输出结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     int a[3][3], *p, i;
  7.     p = &a[0][0];
  8.     for(i=0; i<9; i++)
  9.         p[i] = i+1;
  10.     printf("%d \n", a[1][2]);
  11.  
  12.     return 0;
  13. }

注:考查二维数组在内存中的存放方式以及指针的正确使用。

20. 输入一个含有数字的字符串,输出数字部分。如输入abc123kkkj456,则输出123456。

  1.  
  2. #include <stdio.h>
  3. #define N 30
  4.  
  5. main()
  6. {
  7.     int i, j;
  8.     char src[N], dest[N];
  9.  
  10.     gets(src);
  11.     for(i=j=0; src[i]!='\0'; i++)
  12.         if(src[i]>='0' && src[i]<='9')
  13.         {
  14.             dest[j]=src[i];
  15.             j++;
  16.         }
  17.     dest[j]='\0';
  18.     puts(dest);
  19.  
  20.     return 0;
  21. }

21. 全局变量,局部变量,变量的存储类型,变量作用域(空间角度),生存期(时间角度)

局部变量:函数内部定义。如主函数定义的局部变量的作用范围仅限于主函数及调用函数

全局变量:函数外部定义。作用范围从定义开始到源文件结束。

全局变量在一个文件中定义,在别一个文件中引用时,要用extern进行说明。这时该变量的作用域可扩展到有extern说明的其它源文件。若不希望该全局变量在其它文件中被引用,可加static进行限定。

按生存期可分为静态和动态变量。

没有对static变量赋初值时,系统自动赋值。如static int x; 系统自动赋值0。auto变量为随机值。

static变量的生存期贯穿于整个程序运行期间。

函数形参都属于局部变量。

当函数或复合语句中的局部变量与全局变量同名时,全局变量无效。

22. 将以下程序编译连接后生成一个text.exe文件,进入MS-DOS窗口,切入该文件所在目录,输入test.exe abc<回车>。请写出运行结果:

  1.  
  2. #include <stdio.h>
  3.  
  4. int func()
  5. {
  6.     static int s=0;
  7.     s+=1;
  8.     return s;
  9. }
  10.  
  11. main(int argc, char *argv[])
  12. {
  13.     int n, i=0;
  14.     while(argv[1][i] != '\0')
  15.     {
  16.         n=func();
  17.         i++;
  18.     }
  19.     printf("%d \n", n*argc);
  20.  
  21.     return 0;
  22. }

注:局部静态变量只初始化一次,在以后的调用当中不再进行初始化。

23. 写出程序运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. void func( int *)
  5. {
  6.     a[0] = a[1];
  7. }
  8.  
  9. main()
  10. {
  11.     int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;
  12.     for(i=2; i>=0; i--)
  13.         func(&a[i]);
  14.     printf("%d \n", a[0]);
  15.  
  16.     return 0;
  17. }

24. 写出程序运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. int a=2;
  5.  
  6. int f(int *a)
  7. {
  8.     return *a++; /* 注意运算符的优先级 */
  9.     printf("a=%d", a); 
  10. }
  11.  
  12. main()
  13. {
  14.     int s=0;
  15.     {
  16.         int a=5;
  17.         s+=f(&a);
  18.         printf("locala=%d ", a);
  19.     }
  20.     s+=f(&a);
  21.     printf("globala=%d ", a);
  22.     printf("s=%d \n", s);
  23.  
  24.     return 0;
  25. }

25.

int *q;

q=NULL; q指向地址为0的单元

*q=0;  对该单元赋值没有意义

26. 函数的返回值类型为指针

  1.  
  2. #include <stdio.h>
  3.  
  4. int *f(int *x, int *y)
  5. {
  6.     if(*x<*y)
  7.         return x;
  8.     else
  9.         return y;
  10. }
  11.  
  12. main()
  13. {
  14.     int a=7, b=8, *p, *q, *r;
  15.     p=&a;
  16.     q=&b;
  17.     r=f(p, q);
  18.     printf("%d %d %d \n", *p, *q, *r);
  19.  
  20.     return 0;
  21. }

27. 写出程序运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6.     char *s[] = { "one", "two", "three" }, *p;
  7.     p = s[1];
  8.     printf("%c %s \n", *(p+1), s[0]);
  9.  
  10.     return 0;
  11. }

28. 写出以下程序运行结果

  1.  
  2. #include <stdio.h>
  3.  
  4. union
  5. {
  6.     unsigned int n;
  7.     unsigned char c;
  8. }u;
  9.  
  10. main()
  11. {
  12.     u.c='A';
  13.     printf("%c \n", u.n);
  14.  
  15.     return 0;
  16. }

29. *++p, ++*p, *p++的区别

  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. { 
  6.     int a[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}, *p=&a[0];
  7.  
  8.     printf("%d %d %d %d \n", *p, *p++, *p++, *p);
  9.     printf("%d %d %d %d \n", *p, *p++, *p++, *p);
  10.     printf("%d %d %d %d \n", *p, *++p, *++p, *p);
  11.     printf("%d %d %d %d \n", *++p, ++*p, *p++, *p);
  12.  
  13.     return 0;
  14. }
  1.  
  2. #include <stdio.h>
  3.  
  4. main()
  5. { 
  6.     int a[5] = {1, 2, 3, 4, 5}, *p=&a[0];
  7.  
  8.     printf("%d %d %d %d \n", *++p, ++*p, *p++, *p);
  9.     printf("%d %d %d %d \n", *++p, ++*p, *p++, *p);
  10.  
  11.     return 0;
  12. }

两个版本的字符串复制函数 _CRTIMP char *  __cdecl strcpy(char *, const char *) 对比:

版本1:

  1.  
  2. strcpy(char * dest, const char * src)
  3. {
  4.     char *p=dest;
  5.     while(*dest++ = *src++)
  6.         ;
  7.     dest=p;
  8. }

版本2:

  1.  
  2. strcpy(char * dest, const char * src)
  3. {
  4.     int i=0;
  5.     for(; *(src+i)!='\0'; i++)
  6.         *(dest+i) = *(src+i);
  7.     *(dest+i) = '\0';
  8. }

注:指针运算符*, 自增运算符++是从右往左结合的;

实例:

  1.  
  2. #include <stdio.h>
  3.  
  4. strcpy_v1(char * dest, const char * src)
  5. {
  6.     char *p=dest;
  7.     while(*dest++ = *src++)
  8.         ;
  9.     dest=p;
  10. }
  11.  
  12. strcpy_v2(char * dest, const char * src)
  13. {
  14.     int i=0;
  15.     for(; *(src+i)!='\0'; i++)
  16.         *(dest+i) = *(src+i);
  17.     *(dest+i) = '\0';
  18. }
  19.  
  20. main()
  21. { 
  22.     char a[]="abcd";
  23.     char b[]="abc";
  24.     strcpy_v1(a, b);
  25.     puts(a);
  26.  
  27.     char c[]="abcd";
  28.     char d[]="abc";
  29.     strcpy_v2(c, d);
  30.     puts(d);
  31.  
  32.     return 0;
  33. }

输出:

abc
abc

参考答案:

2. 32767, 32767

3. 7  1,

6. D

7. D

8. 1 65 1.69 1.7 6.5

12. 3

13. 12

14. 011122

15. A

17. 5 6 5 8

19. 6

22. 6

23. 4

24. 7

26. 7 8 7

27. w one

28. A

29.

10 10 10 10
30 30 30 30
70 70 60 50
80 71 70 70

2 2 1 1
4 4 3 3

二级C语言真题笔记的更多相关文章

  1. 计算机二级-C语言-程序修改题-190108记录-字符串处理

    //程序修改题:给定程序MODI1.C中函数fun的功能是:先将字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面.例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为 ...

  2. 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。

    //程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...

  3. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

    //程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...

  4. 计算机二级-C语言-程序设计题-190118记录-通过数组和指针两种方式对字符串进行处理。

    //编写一个函数fun,比较两个字符串的长度,(不使用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符长度相同,则返回第一个字符串. //重难点:通过数组处理和通过指针进行处理的不同 ...

  5. 计算机二级-C语言-程序修改题-190113记录-对指定字符串的大小写变换处理。

    //给定程序中fun函数的功能是:将p所指的字符串中每个单词的最后一个字母改成大写.(这里的“单词”是指由空格隔开的字符串) //重难点:指针对数组的遍历.大小写转换的方法.第一种使用加减32 得到, ...

  6. 计算机二级-C语言-程序修改题-190123记录-对整数进行取余和除以操作。

    //函数fun功能:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位. //重难点:思路:因为不是字符串,所以可以把问题变成整数的操作,采用取余和除的操作.对整 ...

  7. 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。

    //编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...

  8. 计算机二级-C语言-程序修改题-190116记录-对数组进行排序的两种方法。

    //函数fun的功能是:将n个无序整数从小到大排序. //冒泡排序法:小数往下浮,大数往上浮.把数都存到一个数组,然后两两比较,大数往后交换.双层递减循环. //第二种方法:都放入一个数组中,然后记录 ...

  9. 计算机二级-C语言-程序修改题-190114记录-对整型变量进行取余操作可以取得各个位上的值。

    //给定程序中fun函数的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新的数放在t中.高位仍在高位,低位仍在低位.例如:当s中的数为7654321时,t中的数为7531. //重难点 ...

随机推荐

  1. SimpleDateFormat是线程不安全的

    线程不安全的SimpleDateFormat SimpleDateFormat是线程不安全的 SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但 ...

  2. Qt5.3.1,的linux平台体验之旅

    1. samba安装:http://blog.csdn.net/voice_shen/article/details/7692605 2. 安装run,  sudo chmod 777 filenam ...

  3. HDU 4714 Tree2cycle (树形DP)

    题意:给定一棵树,断开一条边或者接上一条边都要花费 1,问你花费最少把这棵树就成一个环. 析:树形DP,想一想,要想把一棵树变成一个环,那么就要把一些枝枝叶叶都换掉,对于一个分叉是大于等于2的我们一定 ...

  4. Java SimpleDateFormat用法

      ? Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是Si ...

  5. 5、Semantic-UI之基础按钮样式

    5.1 基础按钮样式   在Semantic-UI中定义了很多的按钮样式,可以通过class="ui button"来指定,也可以在class中指定颜色. 示例:定义基础按钮样式 ...

  6. Visual Studio Error

    Visual Studio Error 注意:文中所有“系统”用词,均指Windows Console操作系统IO Debug Error 错误类型 #0表示调用约定错误 可以考虑在指针前面加上_st ...

  7. html5 表格标签 table tr td

      最重要的三个 <table>     表格声明标签 属性: boarder    边框粗细 style    可配合css 使用 <tr>    行标签 table row ...

  8. Centos7 中使用搭建devpi并且使用Supervisor守护进程

    一.先介绍一下supervisor 1.安装supervisor 使用yum安装或者使用pip安装都可以,使用yum安装的相对简单一些,并且不用拷贝一份 supervisord.conf 的配置文件, ...

  9. [转]什么是VUE?为什么用VUE?

    Vue.js新手入门指南 最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的 ...

  10. Python3.4程序异常判断

    实例代码[更多实例,请访问:www.yeayee.com] 1 #idle中按F5可以运行代码 2 #引入外部模块 import xxx 3 #random模块,randint(开始数,结束数) 产生 ...