C语言练习题(一)

项目二 初识C语言

课后习题

 

1、选择题

(1)下列不属于c语言特点是(    )。

A、简洁紧凑、灵活方便。

B、运算符丰富 

C、C语言允许直接访问物理地址,可以直接对硬件进行操作

D、能够编写复杂程序

(2)下列不属于c语言优点的是(    )。

A、不依赖计算机硬件。

B、简洁、高效 

C、可移植性。

D、面向对象。

(3)以下选项中,哪个不属于C语言的关键字(    )。

A、break    B、case    C、for    D、name

(4)下面选项中,那个不是C语言的数据类型(     )。

A、整型   B、数组类型  C、结构体类型  D、类

(5)以下选项中,哪个属于C语言的关键字(    )。

A、class    B、date C、name    D、if

任务二 开发第一个C语言

课后作业

1、选择题

(1)C语言的主函数是(    )。

A、main。

B、return 

C、include

D、printf

(2)一个C程序的执行是从(    )。

A、本程序的main函数开始,到main函数结束。

B、本程序文件的第一函数开始,到本程序文件的最后 一个函数结束。

C、本程序的main函数开始,到本程序文件的最后一个函数结束。

D、第一个函数开始,到本程序main函数结束。

(3)下列选项中,哪一个书单行注释(    )。

A、//

B、\\

C、/**/

D、/** */。

(4)C语言属于下列哪类计算机语言(    )。

A、汇编语言   B、 高级语言    C、机器语言    D、以上均不属于

(5)下列关于主函数说法错误的是?(    )。

A、一个C程序中只能包含一个主函数

B、主函数是C程序的入口

C、C程序中可以包含多个函数

D、主函数只能包含输出语句

2、填空题

(1)C语言中源文件的后缀名为      

(2)在程序中,如果使用printf()函数,应该包        头文件。

(3)表示 main 函数执行到此处时结束返回函数执行结果的是   return    语句。

(4)C语言程序在运行时,要经历                      四个步骤。

(5)C语言程序由      组成,其中必须有且只能有一个名为      的函数。

 

3、编程操作题

(1) 将个人的基本信息(姓名、性别、籍贯、住址)打印到控制台上输出。效果如下。

*************************

姓名:张良

性别:男

国籍:中国

地址:承德

*************************

 

(2)程序改错题,指出程序错误的代码。

#include

int main()  

 {  printf("C语言\n")

    return 0;  

  }  

项目三 数据类型及控制流

任务一 C语言基本数据类型

任务实施

1.任务实施内容

掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,了解字符型数据和整型数据的内在关系。掌握不同的类型数据之间赋值的规律。

2.具体实施步骤:

步骤一  创建 工程将工程命名为 exercise3a,并创建命名为datatype.c的源文件。

步骤二  按照下面步骤完成操作。

(1)录入程序,并以文件名datatype.c保存在用户目录下;

(2)编译运行,观察运行结果;

(3)与阅读分析结果进行比较。

参考代码:

#include

 main( ) {

int a=3, b;   

float x=8.5, y=6;

char c1='\n', c2='a';

    b=a+x;

//①输出整型变量a的值

printf("a的值=%d",a);

 //② 输出浮点类型变量x的值

printf("x的值=%d",x);  

//③输出浮点类型变量b的值

printf("y的值=%d",y);  

//④ 输出字符类型变量c1的值

printf("c1的值=%c",c1);  

    //⑤输出字符类型变量c2的值

printf("c2的值=%c",c2);  

 //⑥输出整型变量b的值

printf("b的值=%d",b);  

//⑦字符型数据与int类型进行运算

c1=c2+32;   

printf("c1=%c,c1=%d\n",c1,c1);  

 

}

 

阅读分析结果                     实际运行结果

步骤三  分析与讨论

(1)如何给变量正确进行赋值赋值?

(2)简述转义字符:‘\n’,‘\t’,‘\b’的功能?

(3)在数据类型转换的过程中应注意什么?

课后作业

1、选择题

(1)下列选项中,不是C语言关键字的选项是(    )。

 

A、main

B、return 

C、if

D、break

(2)下列选项中正确定义了c语言的整数类型的常量是(    )。

 

A、321L。

B、’C’

C、-1.20。

D、566。

(3)下列选项中,合法的用户标识符的选项是(    )。

 

A、switch

B、demo

C、for

D、123hello。

 

(4)C语言中的标识符只能由字母、数字和下划线三种字符组成.且第一个字符(    )。

A、必须是字母

B、必须是下划线

C、必须是字母或是下划线

D、必须是字母或是下划线或是数字。

(5)下列不是C语言基本数据类型的是(    )。

 

A、整数类型

B、浮点类型

C、字符类型

D、指针类型。

2、填空题

(1)定义两个 float 类型的变量 f1 和 f2,如下所示:

float f1 = 3.3;

float f2 = 3.8;

它们转换为 int 类型后的值分别                。

(2)求下面数学运算int a = 10 + 8 - 4 * 3 + 24 / 4 * 6 + 3;的结果是        

(3)标识符的只能由字母、数字和       组成。

(4)c语言中数据类型可以分为四种,分别是是基本类型、       、指针类型、      

(5)数据数据类型转换 :主要有两种情况,一是         ,另外一种情况是        

3、编程操作题

(1)输入一个 ASCII 码值,输出所对应的的字符。效果如下。

**************************************************

请输入一个数值,程序会输出ASCLL所对应的字符

65

数值所对应ASCLL的字符是A

************************* *************************

   

(2)要求编写求三个已知数(1、2、6)的乘积。效果如下。

*********************

a*b*c=12

********************

任务二  C语言的输入与输出函数介绍及使用

课后作业

1、选择题

(1)printf()函数的调用格式为:printf("格式化字符串",输出表列),其中格式串不包含哪个对象(    )。

A、字符串常量

B、格式控制字符串

C、转义字符

D、输出的数据

(2)正确输出一个整数类型的数据正取的选项是(    )。

A、printf("%d",23)

B、printf(23)

C、printf("%f",23)

D、printf("%c",23)

(3)下列中正取使用scanf函数的是(    )。

 

A、scanf("%d",23)

B、scanf(2345)

C、scanf("%d",&23)

D、int  i=23;scanf("%c",&i)

 

(4)若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是(    )。

A、read(a,b,c);   

B、scanf(“ %d%d%d” ,a,b,c);

C、scanf(“ %D%D%D” ,&a,%b,%c);

D、scanf(“ %d%d%d”,&a,&b,&c);

(5)下面程序段的输出结果是(   )。
int i=40000;
printf("%d\n",i);
 A、40000
 B、32767
 C、程序出错
 D、不确定的数

2、填空题

(1)printf()函数的调用格式为:printf("格式化字符串",输出表列)。其中格式串分(1)         ; (2)          ; (3)        。 

(2)printf 中数据类型一定不能用错,float 类型必须用      ,整数必须用      

(3)在使用printf函数也可以用%d 输出 char,输出的就是字符的        

(4)putchar()是函数的作用_____一个字符。

(5)使用printf()函数输出一个整数类型的需要使用的格式控制字符串是____。

3、编程操作题

(1) 输出班级的相关的信息(班级名称、班级人数、班主任、班长)。效果如下。

*********************

班级:计算机1801

人数:45

班主任:李老师

班长:张志强

*********************

 

(2)编写计算圆周长、面积和圆柱体积的程序。效果如下。

 

*********************

c=94, s=706 , v=2118

*********************

 

项目四 运算符与表达式

【任务1】

已知:int a=2,int  b=3,float  x=3.9,float  y=2.3,计算算术表达式

a+b+x+y/a的数值。试编程上机验证。

  阅读分析结果                     实验运行结果

 

                                                          

【任务2】

已知:int a=12,int  n=5,计算下面表达式运算后a的值。编程上机验证。

(1)a+=a  (2)a-=2  (3)a*=2+3  (4)a/=a+a  (5)a%=(n%=2)  (6)a+=a-=a*=a

阅读分析结果                     实验运行结果

(1)      (2)       (3)           (1)      (2)       (3)      

(4)      (5)       (6)           (4)      (5)       (6)       

【任务3】

阅读并分析出下面程序结果。并上机验证。

main()

{

  int i,j,m,n;

  i=7;  j=12;

  m=++i;

  n=j++;

  printf("i=%d, j=%d, m=%d, i=%d\n",i,j,m,n);

}

阅读分析结果                     实验运行结果

 

                                                          

 

课后作业

1、选择题

(1)下列运算符中优先级最高的运算符是 (   )。

A、+   B、- C、 ++ D、%

(2)若变量已正确声明为int类型 a=3,变量自增一运算正确的是(  )。

A、a++

B、a+3

C、a/2

D、a%2

(3)若a、b、c、d、都是int类型变量且初值为0,以下选项中不正确的赋值语句是 (  ) 。         

A、 a=b=c=d=100;  

 B、d++;    

 C、 c+b;   

 D、 d=(c=22)-(b++);

 (4)以下不 合法的C语言赋值语句是(    )。

A、 a=b=58   

B、 k=int(a+b);   

C、a=58,b=58   

D、 --i;

(5)c语言中要求运算量必须为整形的运算符是哪个(   )。

A、 /      B、 %        C、 +      D、 *

(6)若定义x和y为double类型的数据,则表达式x=1;y=x+3/2的值是(   )。

A、 1      B、 2        C、 2、0      D、 2、5

(7)设 f是实型变量,下列表达式中不是逗号表达式的是(  )。

A、 f= 3.2, 1.0     

B、 f>0, f<10     

C、 f=2.0, f>0     

D、 f=(3.2, 1.0) 

2、填空题

(1)有以下定义:int  a=5.8,b=2; 则表达式 a/b 的值是       

(2)有以下定义:double  x=10; 则表达式 x/4 的值是          

(3)表达式 5%7 的值是         

(4)表达式 10%1 的值是           

(5)若已定义 x 和 y为double 类型,则表达式 x=1;y=x+3/2 的值是      

3、编程操作题

(1)已知梯形的上底为a,下底为b,高为h,求梯形的面积s。效果如下。

*******************

面积s=67

*******************

 

(2)设有如下变量int i,j; 实现i++与++j运算结果差异的程序。提示如下。

 

*******************

int i=20,j=20;

i++:20

++j:21

*******************

 

任务二 比较运算符、逻辑运算符

课后作业

1、选择题

(1)算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(     )。

A、算术运算、赋值运算、关系运算    

B、算术运算、关系运算、赋值运算

C、关系运算、赋值运算、算术运算    

D、关系运算、算术运算、赋值运算

(2)逻辑运算符中,运算优先级按从高到低依次为(      )。

A、&&!||    

B、||&&!    

C、&&||!    

D、!&&||

(3)表达式!x||a==b 等效于(    )。

A、!((x||a)==b)     

B、!(x||y)==b     

C、!(x||(a==b))    

D、(!x)||(a==b)

(4)设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b),(n=c>d)后, m,n 的值是(     )。

A、0,0    

B、0,1   

C、1,0   

D、1,1

(5)设有语句 int a=3;则执行了语句 a+=a-=a*=a;变量 a 的值是(     )。

A、 3      B、 0     C、 9     D、 -12

(6)在以下一组运算符中,优先级最低的运算符是(   )。

A、 *      B、 !=      C、 +     D、 = 

2、填空题

(1)C 语言中的逻辑值“真”是用      表示的,逻辑值“假”是用    表示的。

(2)C语言的sizeof运算符,该运算主要用于         

(3)C语言有六种关系运算符分别是                                    

(4)在C语言中使用||(逻辑或)               表示逻辑的三种运算符。

(5)所有的双目运算符中只有           的结合方向是从右向左。

3、编程操作题

(1)从键盘录入两个变量,比较变量a与变量b的各种关系,效果如下。

 

**********

 int a=23;

 int b=45;

a==b 0

a<=b 1

a>=b 0

a>b 0

a

a!=b 1

**********

 

(2)使用sizeof测试个类型在内存所占的字节数。

 

**********

char 1

short 2

int 4

long 4

float 4

double 8

变量int v_int 4

**********

 

项目五 程序结构

课后作业

1、选择题

(1)运行下面程序时,从键盘输入字母H,则输出结果是(  )。

#include

   main( )

   { char ch;

     ch=getchar( );

     switch(ch)

     { case 'H':printf("Hello!\n");

       case 'G':printf("Good morning!\n");

       default:printf("Bye_Bye!\n");

     }

   }

A、Hello!                   B、 Hello! Good Morning!

C、Hello!                      D、Hello!

Good morning! Bye_Bye!            Bye_Bye!

(2)执行下列程序段后的输出结果是(   )。

    int x=1,y=1,z=1;

      x+=y+=z;

printf("%d\n",x

A、 3         B、 2          C、1         D、 4

(3)设ch是char型变量,值为'A',则表达式ch=(ch>='A' && ch<='Z')?ch+32:ch的值是(   )。

A、  Z        B、  a         C、  z       D、 A

(4)下面程序的输出结果是(    )。

  #include

   void main( )

{ int x=8,y=-7,z=9;

     if (x

if (y<0) z=0;

        else z-=1;

     printf("%d\n",z);

   }

A、8          B、 1           C、 9         D、 0

(5)假定等级和分数有以下对应关系:

    等级:A    分数:85~100

  等级:B    分数:60~84

  等级:C    分数:60 以下

对于等级grade输出相应的分数区间,能够完成该功能的程序段是(    )。

A、switch (grade)

   {

    case 'A':printf("85--100\n");

    case 'B':printf("60--84\n");

    case 'C':printf("60以下\n");

    default:printf("等级错误!\n");

   }

B、switch (grade)

   {

    case 'A':printf("85--100\n");break;

    case 'B':printf("60--84\n");

    case 'C':printf("60以下\n");

    default:printf("等级错误!\n");

   }

C、switch (grade)

   {

    case 'A':printf("85--100\n");break;

    case 'B':printf("60--84\n");break;

    case 'C':printf("60以下\n");

    default:printf("等级错误!\n");

   }

D、switch (grade)

   {

    case 'A':printf("85--100\n");break;

    case 'B':printf("60--84\n");break;

    case 'C':printf("60以下\n")break;

    default:printf("等级错误!\n");

   }

  1. 执行下列程序后,变量i的正确结果是(  )。
        int i=20;
        switch(i)
       {
              case 19:i+=1;
              case 20:i+=1;
              case 21:i+=1;
              case 22:i+=1;
            }

A、20
B、21
C、22
    D、23

2、填空题

(1)在c语言中,有三种流程控制结构:                   

(2)在c语言中使用             来实现选择结构。

(3)让程序有选择的的执行,分支控制if语句有三种:                   。 

(4)假设程序int  x=2,三元运算符表达式 x>0?x+12:5的运算结果是        

(5)switch后面的“表达式”,通常为      型或        型表达式。

3、编程操作题

(1)编写程序,实现对奇数和偶数的判断。

提示: 1.在键盘录入一个整数类型的变量

2.使用if语句对变量进行判断,如果是奇数就输出”奇数”,否则输出”偶数”实现结果如下。

 

 

 

****************

请输入一个数

你输入的是2该数是偶数

****************

(2)使用三元运算符实现两个数的大小比较,实现结果如下。

 

****************

请输入两个数

第一个数是23

第二个数是45

最大时数是45

****************

任务二 循环结构

课后作业

1、选择题

(1)下面程序的运行结果是(    )。

   int a=1,b=10;

     do

      { b-=a;a++;

      } while(b--<0);

      printf("%d,%d\n",a,b);

A、3,11        B、 2,8      C、1,-1         D、4,9

(2)下面程序段的运行结果是(     )。

int n=0;

   while (n++<=2)

       printf("%d",n);

A、012       B、123      C、 234     D、错误信息

 

(3)下面程序段的运行结果是(    )。

int x=0,y=0;

   while (x<15) y++,x+=++y;

   printf("%d,%d",y,x);

A、20,7       B、 6,12       C、20,8        D、8,20

(4)下面程序的运行结果是(    )。

    int s=0,i=1;

     while (s<=10)

      { s=s+i*i;

        i++;

      }

     printf("%d",--i);

A、4          B、 3          C、5        D、 6

(5)下列语句哪些属于循环语句(    )。

A、for语句    B、if语句    C、break语句    D、switch语句

2、填空题

(1)C语言主要提供了三种循环语句:                

(2)通常情况下使用      语句来跳出当前循环,用跳出整个循环。

(3)for关键字的后面( )有三部分的内容,分别是初始化表达式、         

(4)通常goto语句与     连用,当满足某一条件时,程序跳到标号处运行。

(5)循环程序跳转的方式有三种分别为       、continue和goto语句。

3、编程操作题

(1)编写程序,实现对”2+4+6+8+........+100”的求和功能。

提示

①使用循环语句遍历自然数1-100。

②在遍历的过程中,判断遍历的数是否为偶数,如果是就累加,否则不加。实现的效果如下。

 

********************

1-100的偶数和=2550

********************

(2)统计1——100之间能被5整除但不能被3整除的个数,实现的效果如下图

分析

①使用while循环语句遍历自然数1-100。

② 定义一个 count 保存满足条件的数的个数。

③定义 i = 1  max=100 控制循环的次数。

*****************

1-100之间能被5整除但不能被3整除的个数为14个

*****************

 

项目六:数组

任务一 一维数组

课后作业

1、选择题

(1)若int arr[5]={1,2,3}则arr[2]的值为(   )。

    A、1    B、2   C、3   D、null

(2)数组的下标是从( )开始的。

    A、1    B、2   C、3    D、0

 (3)下面对数组描述正确的是(  )。

  A、数组的长度是不可变的。 

B、数组不能先声明长度再赋值。

    C、数组没有初始值。

D、数组只能存整数数据类型。

(4)下面哪种写法可以实现访问数组arr的第1个元素?(   )。

A、arr[0]  B、arr(0)  C、arr[1]  D、arr(1)

(5)若int arr[5]={1,2,3}则arr的长度为(  )。

    A、1    B、2  C、3  D、5

2、填空题

  (1)数组是一组具有相同数据类型的变量的      

(2)数组也是一种数据类型,是      

  (3)一维数组有两种初始化形式              

  (4)在 C 语言中,数组元素下标从         开始。

  (5)若数组int a[]={1,4,9,4,23}; 则a[2]=         

3、编程操作题

(1)已知数组 int nums[ ]={3,5,999,2,12},编写程序找到数组中最大值。执行结果如下。

 

*****************

最大值max=999

*****************

(2)输入5个学生的成绩,计算5个学生的平均分、最高分和最低分。

*****************

输入10个数:

78 88  99 45 55 21 66 23 78 98

最大值=99

最小值=21

10个数的和为:651

平均值为: 65.10

*****************

任务三 字符数组与字符串

课后作业

1、选择题

(1)下列初始化语句中,正确且与语句

char  c[ ]="string";等价的是(       )。

A、 char  c[ ]={'s','t','r','i','n','g'};

B、 char  c[ ]='string';

C、 char  c[7]={'s','t','r','i','n','g','\0'};

D、 char  c[7]={'string'};

(2)若有说明char  c[7]={'s','t','r','i','n','g'};则对元素的非法引用是(   )。

A、 c[0]     B、 c[9-6]       C、 c[4*2]     D、 c[2*3]

(3)如有说明:char s1[5],s2[7]; ,要给数组s1和s2整体赋值,下列语句中正确的是(      )。

A、 s1=getchar();  s2=getchar();

B、 scanf("%s%s",s1,s2);

C、 scanf("%c%c",s1,s2);

D、 gets(s1,s2);

 

(4)若有说明:char  c[10]={'E','a','s','t','\0'};,则下述说法中正确的是(   )。

A、 c[7]不可引用       B、 c[6]可引用,但值不确定

C、 c[4]不可引用       D、 c[4]可引用,其值为空字符

(5)若有说明:char  c[10]={'E','a','s','t','\0'};其字符串的长度是(     )。

A、4     B、5       C、6]    D、10

2、填空题

  (1)在c语言中,获取字符长度的函数是        

  (2)字符数组char c[3]={‘a’,’b’,’c’}中c[1]的值是        

  (3)为了方便数组的初始化,可以直接使用       来为字符数组赋值。

  (4)在C语言中,没有字符串变量,字符串的存储是通过      来实现的。

  (5) strlen函数的功能是        ,strcmp函数的功能是        

3、编程操作题

   (1)编写一个程序,实现两个字符串进行比较,实现的结果如下。

 

 

**********************

Hello World与hello world内容不同

**********************

(2)答案如下编写程序实现字符的长度,实现的结果如下图

 

**********************

Hello字符串的长度是5  

**********************

 

项目七 进制及位运算

任务一 进制及位运算

;

任务实施

1、选择题

(1)下列整数中表示八进制的数值是(  )。

A、0x12;

B、012;

C、12;

D、e12;

(2)下列整数中表示十六八进制的数值是(  )。

A、0x12;

B、012';

C、12;

D、e12;

 

(3)以下程序的功能是进行位运算(  )。

 int a, b;

   a=7^3;    b= 4 & 3;  

printf("%d %d ",a,b);

 

  A、4  3   

 B、7  3   

 C、7  0   

 D、4  0

 

 

(4) 设有定义语句:int  c1=92,c2=92;,则以下表达式中值为零的是(  )。

  A、 c1^c2    

 B、 c1&c2    

 C、 ~c2    

 D、 c1|c2

(5)在格式控制符中加上(    )即可输出进制的前缀。

     A、!

 B、@

 C、#

 D、%

2、填空题

(1)在c语言中对于整数,有四种表示方式____、八进制、           

(2)位运算符是针对二进制数的每一位进行运算的符号、它是专门针对数字      进行操作的。

(3)八进制必须以      开头。

(4)十六进制必须以    开头。

(5)在格式控制符中加上     即可输出前缀。

3、编程操作题

(1)编写程序如何将0x123转换成十进制(写明详细的步骤)

(2)实现变量a与b的位运算,假设a=3,b=5,效果如下。

 

*********************

a&b=1   a|b=7     a^b=6

 ~a=d    a<<2=12   a>>2=0

*********************

 

 

项目八 函数

 

任务一 函数

课后作业

1、选择题

(1)在c语言中以下不正确的说法是:(  )。

A、实参可以是常量、变量、或表达式

B、形参可以是常量、变量或表达式

C、实参可以为任意类型

D、形参应与其对应的实参类型一致

(2)以下函数声明中正确的是:(  )。

A、 void play(var :Integer,var b:Integer) ;

B、 int play(int a,b);

C、 void play(int a,int b) ;

D、 Sub play(a as integer,b as integer);

(3)下述函数定义形式正确的是(      )。

A、 int f(int x; int y)     B、 int f(int x,y)

C、 int f(int x, int y) D、 int f(x,y: int)

(4)以下程序的输出结果是(      )。

fun(int a,int b,int c)

{

c=a+b;

}

int main()

{ int c;

fun(2,3,c);

printf(“%d\n”,c);

    return 0;

}

A、2   B、3   C、5   D、无定值

(5)现有如下程序
#include "stdio.h"

int fun(int x) {

printf("x=%d\n",++x);

}

int main() {

fun(12+5);

return 0;

}

则程序的输出结果是(      )。 

A、x=12  B、x=13  C、x=17  D、x=18
2、填空题

(1)在 C 语言中,函数既可以有参数,也可以没有参数,是根据        判断的。

(2)c语言中,按作用的范围不同可以分为              

(3)c语言中负责从控制台输入信息的函数是        

(4)在C语言中,用于结束函数并返回函数值的是        关键字。

(5)定义在函数内部的变量被称为          

  3、编程操作题

  (1)请编写一个程序实现两个求和、求差的操作

1.在控制台上输入两个函数,并在程序中获取

2.在main函数中定义a,b接输入的变量

3.定义sum函数和min函数来实现两个数相加和相减

4.在main函数中调用sum函数和min函数实现两个数的相加和相减

实现的效果如下。

 

 

****************

请输入两个数 12 34

两个数的和为a+b=46

两个数的差为a-b=22

*****************

 

任务二 函数的进阶

 

任务实施

课后作业

1、选择题

(1)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。

A、 地址传递                         B、 单向值传递

C、 由实参传给形参,再由形参传回实参 D、 传递方式由用户指定

(2)有以下程序

void fun (int a,int b,int c)

{ a=456; b=567; c=678;}

int main()

{ int x=10, y=20,z=30;

fun (x,y,z);

printf("%d,/%d,%d\n",x,y,z);

return 0;

}

输出结果是( )。

A、30,20,10                B、10,20,30

C、456,567,678             D、678,567,456

(3)以下正确的函数形式是(   )。

A、 double fun(int x,int y)

{ z=x+y; return z; }

B、 fun(int x,y)

{ int z; return z; }

C、 fun(x,y)

{ int x,y; double z; z=x+y; return z; }

D、 double fun(int x,int y)

{ double z; z=x+y; return z; }

(4)分析以下程序的运行结果(    )。

func(int a,int b)

{

int temp=a;

a=b; b=temp;

}

int main()

{

int x,y;

x=10; y=20;

func(x,y);

printf((“%d,%d\n”,x,y);

return 0 ;

}

  1. 10,20 B、10,10
  2. C、 20,10 D、20,20

(5) 下列关于函数的说法正确的是 (   )。

A、函数必须有返回值类型

B、定义函数时必须确定参数个数

C、函数是C语言的基本组成元素

D、函数不能进行嵌套调用

(6)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(  )

A函数调用可以作为独立的语句存在

B函数调用可以作为一个函数的实参

C函数调用可以出现在表达式中

D函数调用可以作为一个函数的形参

(7)一个函数的返回值由(     )确定。

A、 return语句中的表达式 B、 调用函数的类型

C、 系统默认的类型 D、 被调用函数的类型

(8)有以下程序

int f(int n) {

if(n==1) return 1; else return f(n-1)+1;

}

int main() {

int i,j=0;

for(i=1;

i<3;

i++) j+=f(i);

printf("%d\n",j);

return 0;

}

程序运行后的输出结果是 (  )

 

A、4  B、3  C、2  D、1

(9) 在有返回值的函数中,必须使用下列哪个关键字(  )

 

A、extern     B、void     C、return     D、static

(10)下列关于函数的返回值说法正确的是(  )

 

A、函数必须有返回值类型。

B、函数返回值使用的关键字是break。

C、函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果。

D、函数不能递归调用。

2、填空题

(1)提到参数的时候有“形参”、“实参”两个概念,全称是              

(2)函数实参,就是调用函数时传入的数据,形参只能是        

(3)函数形参,就是函数定义时函数名后面小括号中的        

(4)实参可以是                  等形式。

(5)参数传递的过程中,也有两种形式:一种是另外一种是       

(6)在c语言中,用于结束函数并返回函数的关键字是         

(7)函数内部调用自身的过程称为函数的        调用。

(8)如果函数没有返回值,则返回值类型要声明为        

(9)在没有返回值的函数体中的         可以省略不写。

(10)函数调用的一般形式为:                   

3、编程操作题

(1)定义一个实现两个数交换的函数

提示

1.在控制台上输入两个整数

2.在main函数定变量a,b变量来接收输入的两个数

3.定义changeData()函数来实现两个交换

4.在main函数调用changeData()函数,结果要实现交换 ,实现的效果如下图

 

*******************

输入两个数

调用之前是12,23

调用之后实现交换23,12

*******************

  1. 请通过递归的方式实现1-100的求和。效果如图。

*******************

请输入要n的值:100

sum=5050

*******************

 

项目九 指针

项目概述

任务一 指针

任务实施

课后作业

1、选择题

(1)变量的指针,其含义是指该变量的(     )。

A、值                B、地址

C、名                D、一个标志

(2)若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是(     )。

A、a,point,*&a            B、&*a,&a,*point

C、*&point,*point,&a      D、&a,&*point ,point

(3)若有说明;int *p,m=5,n;以下正确的程序段的是(       )。

A、p=&n;               B、p=&n;

   scanf("%d",&p);        scanf("%d",*p);

C、scanf("%d",&n);    D、p=&n;

   *p=n;                 *p=m;

(4)以下程序中调用scanf()函数给变量a输入数值的方法是错误的,其错误原因是(     )。

main()

{

int *p,*q,a,b;

p=&a;

printf(“input a:”);

scanf(“%d”,*p);

……

}

A、*p表示的是指针变量p的地址

B、*p表示的是变量a的值,而不是变量a的地址

C、*p表示的是指针变量p的值

D、*p只能用来说明p是一个指针变量

(5)有以下程序

   #include

   main()

{  int m=1,n=2,*p=&m,*q=&n,*r;

   r=p;p=q;q=r;

   printf("%d,%d,%d,%d\n",m,n,*p,*q);

}

程序运行后的输出结果是(     )。

A、1,2,1,2                   B、1,2,2,1

C、2,1,2,1

2、填空题

(1)在C语言        是 C 语言中的取地址符。

(2)在C语言有一种变量专门存放其他变量的地址值,这种变量称为       

(3)格式符       表示以 16 进制格式输出内存地址。

(4)定义指针变量与定义普通变量非常类似,格式为         

(5)指向指针的指针也称为          

3、编程操作题

(1)编写一个程序,声明不同的基本数据类型的变量,然后声明对应的指针指向变量地址。效果如下。

 

*******************

如声明

int a=15

int *p_a=&a

 

*******************

任务二 指针的进阶

9-2-1  指针与整数之间的加减法

课后作业

1、选择题

(1)已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是(    )。

void print_value(int *x)

{   printf(“%d\n”,++*x);}

A、23      B、24     C、25     D、26

(2)下面程序段的运行结果是(    )。

  char *s="abcde";

  s+=2;printf("%s",s);

    A、cde     B、字符'c'     C、字符'c'的地址     D、无确定的输出结果

(3)在16位编译系统上,若有定义int  a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是(    )。

A、p向高地址移了一个字节 B、p向高地址移了一个存储单元

C、p向高地址移了两个字节 D、p与a+1等价

(4)下列选项中哪一个不属于指针变量p的常用运算的是(    )。

A、p++ B、p*1 C、p-- D、p+2

(5)下列关于指针变量的描述,不正确的是(    )。

A、在没有对指针变量赋值时,指针变量的值是不确定的

B、同类指针类型可以进行相减操作

C、在使用没有赋值的指针变量时,不会出现任何问题

D、可以通过指针变量来取得它指向的变量值

2、填空题

(1)指针的加减法运算实质上在内存中移动某个数据类型所占的       

(2)指向指针的指针称为          

(3)指向数组的指针常被简称为        ,而具有指针类型元素的数组则被称为    

(4)指针加上或减去一个整数n,将相对于当前位置前移或后移      

(5)数组指针就是指向数组元素的         

(6)当使用指针指向一个函数时候,这个指针被称为         

3、编程操作题

(1)封装函数,利用指针指向数组的知识实现对数组int arr[5] = {1000, 2, 3, 17, 50}进行遍历。效果如下。

****************

使用指针的数组值

*(p + 0) : 1000

*(p + 1) : 2

*(p + 2) : 3

*(p + 3) : 17

*(p + 4) : 50

使用 arr 作为地址的数组值

*(arr + 0) : 1000

*(arr + 1) : 2

*(arr + 2) : 3

*(arr + 3) : 17

*(arr + 4) : 50

**********************

(2)定义一个用指针实现两个数交换的函数。

提示

1.在控制台上输入两个整数。

2.在main函数定变量a,b变量来接收输入的两个数。

3.定义swap()函数来实现两个交换。

4.在main函数调用swap()函数,结果要实现交换 ,实现效果如下。

 

*********************

交换之前 n1=1 n2=2

交换之后 n1=2 n1=1

*********************

 

项目十 结构体

任务一 初始结构体

课后作业

1、选择题

  (1)在C语言中,系统为结构体分配的内存是依据(     )。

     A、成员变量内存的总和

     B、结构体第一个变量的内存

     C、成员变量最大内存

     D、最后一个成员变量的内存

  (2)在C语言中, 结构体声明的关键字是(     )。

     A、struct

     B、return

     C、union

     D、class

  (3)在C语言中, 结构体变量声明中,合法的结构体的名字是(     )。

     A、data

     B、return

     C、123data

     D、$data

  (4)在C语言中, 结构体变量声明中,不合法的结构体的名字是 (     )。

     A、data

     B、name

     C、123data

     D、a

(5)设有如下定义:

struct  sk{int a; float b;}data;

      则对data中成员a的引用正确的是?(     )

       A、data.a    B、data->a    C、a    D、data

2、填空题

(1)在c语言中,结构体类型属于        

(2)定义结构体的关键字是           

(3)在一个结构体变量a中,定义一个int和float类型的成员变量,那么a分配的内存是         

(4)在一个结构体变量a中,定义一个char和float类型的成员变量,那么a分配的内存是         

(5)在一个结构体变量a中,定义一个double和float类型的成员变量,那么a分配的内存是       

3、编程题

盒子结构体

  1. 编程创建一个Box结构体,在其中定义三个成员表示一个立方体的长、宽和高,长宽高可以通过控制台输入。实现的效果如下。

**********************

请分别输入长、宽、高

长是=12.00  宽是=2.23  高是=3.00

*******************

 

  1. 创建一个结构体,打印给定尺寸的立方体的体积。实现的运行效果如下

**********************

请分别输入长、宽、高

长是=12  宽是=2  高是=2

体积是48.00

*******************

 

 

任务二 结构体的进阶

课后作业

1、选择题

(1)设有如下定义

 struct sk{int  a; float b } ;

struct sk t={1,10.23};

struct sk*p_k=&t; 引用正确的是(  )。

A、(*p).data.a     B、(*p).a

C、p->data.a       D、p.data.a

(2)能够逐个访问结构体成员的成员运算符是(   )。

  A.“.”       B.“,”

C.“:”       D.“;”

(3)设有以下结构类型说明和变量定义,则变量引用ave;正确的是(   ) 。

struct stud

{

char num[6];

int s[4];

    double ave;

   } a;

  1. a.ave B、ave C、a,ave D、a:ave

(4)设有以下说明语句
struct ex
{ int x ;

float y;

char z ;} example;

则下面的叙述中不正确的是(    )。

A、struct ex是结构体类型 B、example是结构体类型名

C、x,y,z都是结构体成员名 D、struct是结构体类型的关键字

(5)下面对结构变量的叙述中错误的是(     )。

A、相同类型的结构变量间可以相互赋值

B、通过结构变量,可以任意引用它的成员

C、结构变量中某个成员与这个成员类型相同的简单变量间可相互赋值

D、结构变量与简单变量间可以赋值

2、 填空题

(1)结构体指针即指向结构体变量的指针,它是一个指针变量,而且其目标变量是一个结构体变量,其内容是             

(2)C语言允许用户使用          关键字来定义自己习惯的数据类型名称。

3、编程题

(1)某班有5名同学,每名同学的数据包括学号、姓名、3门课的成绩,使用结构体数组表示出来。实现的效果如图。

**************************

请输入第1个学生信息

张三

输入各科成绩

12 45 77

请输入第2个学生信息

李四

输入各科成绩

89 100 99

请输入第3个学生信息

王五

输入各科成绩

99 88 77

请输入第4个学生信息

陈七

输入各科成绩

77 22 44

请输入第5个学生信息

小明

输入各科成绩

11 22 33

******************

(2)请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭

住址,性别,联系方式等。并定义一个结构体数组。编程:

 编写函数input() ,输入基本信息(3~5 条记录);

 编写函数print(),输出全体记录信息;实现的效果如图。

*********************

请输入第1个学生的信息:

姓名: 李达

学号: 11298

籍贯: 中国

身份证号: 430x

年龄: 24

家庭住址: 北京

性别(M/F): F

电话: 1778X

**********************

 

 

 

参考答案

项目一

任务一 

  • 选择题

1.D 2.D 3.B 4.B 5.A 6.A

 

  • 填空题

1、算机系统由硬件软件两大部分组成。

2、计算机中是最基本的存储单元是字节(byte) 。每个字节由8个比特构成。

3、计算机的语言大致可以分为3类,机器语言汇编语言高级语言

4、冯·诺依曼体系结构冯·诺依曼理论的要点是_数字计算机的数制采用二进制

5、计算机内所有的信息都是以二进制形式存放的

三、操作题

 (1)参考答案  16GB*1024M*1024KB*1024B

     (2)参考答案  70  

项目二

  任务一 

  • 选择题  

  1.D 2.D 3.D 4.D    5.D

 

  • 填空题
  1. 1999年,ISO修订了C语言C99的标准。
  2. C语言一共只有32个关键字,9种控制语句,共有种34个运算符。
  1. C是一种高效的语言。 在设计上它充分利用了当前计算机在能力上的优点。一般只比汇编程序生成的目标代码效率低10へ20%
  2. C语言的诞生是和UNIX操作系统的开发密不 可分的

5、语言中具有特殊用途的单词被称为关键字,也称作保留字

 

 

 

任务二

  • 选择题  

1.A 2.A 3.A 4.B 5.D

 

    二、填空题  

  1. C语言中源文件的后缀名为C
  2. 在程序中,如果使用printf()函数,应该包含_stido、h头文件。
  3. 表示 main 函数执行到此处时结束返回函数执行结果的是_return语句。
  4. C语言程序在运行时,要经历编辑编译链接运行四个步骤。
  5. C语言程序由_函数组成,其中必须有且只能有一个名为main的函数。

 

  • 编程操作题
  1. 参考答案

#include

int main()  

 {  //将个人的基本信息(姓名、性别、籍贯、住址)

    printf("姓名:张良\n");

    printf("性别:男\n");

    printf("国籍:中国\n");

    printf("地址:承德\n");

    return 0;  

  }  

 

  1. 程序改错题

#include

int main()  

 {  printf("C语言\n")<---------加上

   

    return 0;  

  }  

 

 

项目三

  任务一

  • 选择题

     1.A 2.D 3.B 4.C 5.D

 

  • 填空题

1、定义两个 float 类型的变量 f1 和 f2,如下所示:

float f1 = 3.3;

float f2 = 3.8;

它们转换为 int 类型后的值分别_3_、3_。

2、求下面数学运算int a = 10 + 8 - 4 * 3 + 24 / 4 * 6 + 3;的结果是45

3、标识符的只能由字母、数字和下划线组成。

4、c语言中数据类型可以分为四种,分别是是基本类型、构造类型(数组、结构体、共用体)、指针类型、空类型

5、数据数据类型转换 :主要有两种情况,一是自动类型转换,另外一种情况是强制类型转换

 

  • 编程操作题
  1. 参考答案

  #include "stdio.h"

main(){

        printf("请输入一个数值,程序会输出ASCLL所对应的字符\n");

        int a;

        scanf("%d",&a);

   printf("数值所对应ASCLL的字符是%c",a); }

  1.  参考答案

        main(){

int a,b,c;

a=1;

b=2;

c=6;

printf("a*b*c=%d\n",a*b*c);

}

 

任务二

  • 选择题

1.D 2.A 3.D 4.D 5.D

 

  • 填空题
  1. printf()函数的调用格式为:printf("格式化字符串",输出表列)。其中格式串分为

(1)字符串常量; 

  1. 格式控制字符串; 

(3)转义字符。 

  1. printf 中数据类型一定不能用错,float 类型必须用%f,整数必须用%d。
  2. 在使用printf函数也可以用%d 输出 char,输出的就是字符的 ASCII 码
  3. putchar()是函数的作用__输出___一个字符。
  4. 使用printf()函数输出一个整数类型的需要使用的格式控制字符串是%d

 

  • 编程操作题
  1. 参考答案

#include "stdio.h"

main(){

    printf("班级:%s\n","计算机1801");

    printf("人数:%d\n",45);

    printf("班主任:%s\n","李老师");

    printf("班长:%s\n","张志强");

}

  1. 参考答案

  main(){

int r,h,c,s,v;

r=15;

h=3;

c=2*3.14*15; s=3.14*r*r; v=s*h;

printf("c=%d, s=%d , v=%d\n",c,s,v);

}

 

项目四

  任务一  

  • 选择题

1.C 2.A 3.B 4.D 5.B 6.C 7.B

 

  • 填空题
  1. 有以下定义:int  a=5.8,b=2; 则表达式 a/b 的值是 __2________
  2. 有以下定义:double  x=10; 则表达式 x/4 的值是 ___2_______
  3. 表达式 5%7 的值是____7____
  4. 表达式 10%1 的值是__0______
  5. 若已定义 x 和 y为double 类型,则表达式 x=1;y=x+3/2 的值是_2.0___

 

  • 编程操作题
  1. 已知梯形的上底为a,下底为b,高为h,求梯形的面积。

答案如下:

main(){

int a,h,b,s;

a=15;

b=30;

h=3;

s=(a+b)*h/2; ;

printf(" s=%d \n",s);

}

  1. 设有如下变量int i,j; 实现i++与++j运算结果差异的程序。

答案如下

main(){

int i=20,j=20;

printf("i++:%d\n++j:%d\n",i++,++j);

}

 

  任务二

  • 选择题

1.B 2.D 3.D 4.A 5.B 6.D  

 

  • 填空题
  1. C 语言中的逻辑值“真”是用    1    表示的,逻辑值“假”是用  0     表示的。
  2. C语言的sizeof运算符,该运算主要用于____获取数据类型在内存中的字节数__
  3. C语言有六种关系运算符分别是==(等于)<小于<=小于或等于>大于>=大于或等!=等于
  4. 在c语言中使用&&(逻辑与) ||(逻辑或)!(逻辑非)表示逻辑的三种运算符。
  5. 所有的双目运算符中只有赋值运算符的结合方向是从右向左

 

  • 编程操作题

  1、答案如下

main(){

   int a=23;

   int b=45;

   printf("%d",a==b);

   printf("%d",a<=b);

   printf("%d",a>=b);

   printf("%d",a>b);

   printf("%d",a

   printf("%d",a!=b);

}

 

  1.  

答案如下:

#include   

 int main()

{  

//通过数据类型计算类型所占的空间大小

   printf("char %d \n",sizeof(char));

    printf("short %d \n",sizeof(short));

    printf("int %d \n",sizeof(int));

    printf("long %d \n",sizeof(long));

   printf("float %d \n",sizeof(float));

   printf("double %d \n",sizeof(double));

    //通过变量名称计算变量所占的空间大小

   int v_int =23;

    int v_double=23.45;

    printf("v_int %d \n",sizeof(v_int));

    printf("v_int %d \n",sizeof(v_double));

    return 0;

}

 

 

项目五

   任务一

  • 选择题

1.C 2.A 3.B 4.C 5.D 6.D

  • 填空题

1、在c语言中,有三种流程控制结构:顺序结构选择结构循环结构

2、在c语言中使用if控制语句switch语句来实现选择结构。

3、让程序有选择的的执行,分支控制if语句有三种: 1) 单分支 2) 双分支 3) 多分支

4、假设程序int  x=2,三元运算符表达式 x>0?x+12:5的运算结果是14_

5、switch后面的“表达式”,通常为型或字符型表达式。

 

  • 编程操作题

1、答案如下

#include "stdio.h"

main(){

   int a;

   if(a%2==0){

     printf("是偶数");

   } else{

     printf("是奇数");

  }

}

2、答案如下

 

int x = 10;

int y = 99;

int max;

max = x > y ? x : y;

 

任务二

  • 选择题

1.B 2.B 3.D 4.B 5.A

 

  • 填空题
  1. C语言主要提供了三种循环语句:while循环do...while循环for循环。
  2. 通常情况下使用continue语句来跳出当前循环,用break跳出整个循环。
  3. for关键字的后面()有三部分的内容,分别是初始化表达式__条件表达式___、变量迭代表达式。
  4. 通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。
  5. 循环程序跳转的方式有三种分别为___break__、continuegoto语句。

 

  • 编程操作题

1、答案如下

#include "stdio.h"

main(){

   int a=0;

   int sum=0;

   for(a=0;a<=100;a++){

   if(a%2==0){

     sum+=a;

   }

   }

   printf("%d",sum);

}

 

     2、答案如下 :

#include "stdio.h"

main(){

   int a=0;

   int count=0;

   for(a=0;a<=100;a++){

   if(a%5==0&&a%3!=0){

     count++;

}

   }

   printf("%d",count);

}

 

 

项目六

任务一

  • 选择题

1.C 2.D 3.A 4.A 5.D

 

  • 填空题

1、数组是一组具有相同数据类型的变量的_集合___

2、数组也是一种数据类型,是构造类型

3、一维数组有两种初始化形式,静态初始化动态初始化

4、在 C 语言中,数组元素下标从 0 开始

5、若数组int a[]={1,4,9,4,23}; 则a[2]= ___9___。

 

  • 编程操作题

1、答案如下

#include "stdio.h"

main() {

int x[5] = {

3,5,999,2,12

};

int max= 0;

int i = 0;

for (i = 1; i < 5; i++) {

if (x[i] > max) {

max= x[i];

}

}

printf("最大值是=%d\n", max);

}

2、答案如下

#include "stdio.h"

main() {

int i,num[10];

int max,min,sum=0;

float average;

printf("输入10个数:\n");

for (i=0;i<10;i++) {

scanf("%d",&num[i]);

/* 输入数值 */

sum+=num[i];

/* 累加求和 */

}

average=(float)sum/10;

/* 求平均值 */

max=min=num[0];

for (i=1;i<10;i++)

if(num[i]>max)max=num[i];

/*求最大值*/ else if(num[i]

/*求最小值*/

printf("最大值=%d\n",max);

printf("最小值=%d\n",min);

printf("10个数的和为:%d\n",sum);

printf("平均值为:%6.2f",average);

}

 

  任务二

  • 选择题

1.C 2.B 3.D 4.A 5.C

 

  • 填空题
  1. 若有int a[2][2]={{1,2},{3,4}};则a[1][1]的值为___4___
  2. 在二维数组中一般称前个下标为行,第二个称为列
  3. 若int a[3][3]={{1,2,3},{4,5,6}},则a[1][0]的值为__4___
  4. 二维数组的引用方式同一维数组的引用方式一样,也是通过数组名和下标的方式来引用数组元素
  5. 对二维数组的赋值也有两种方式____静态赋值__和动态赋值。

 

  • 编程操作题

1、 答案如下

main() {

int i,j,row=0,col=0,max;

int a[4][6]={{99,45,66,77,34,77},

{99,45,66,77,34,77},

{99,45,66,77,34,77},

{99,45,66,77,34,77}};

max=a[0][0];

for (i=0;i<4;i++)

     for (j=0;j<6;j++)

     if(a[i][j]>max) {

  max=a[i][j];

       printf("max=%d",a[i][j]);

}

printf("max=%d",max);

}

2、答案如下

#include

void main()

{

int i,j,s=0,l,v[3],a[5][3]={{88,77,99},{76,89,54},{67,45,99},{88,77,34},{88,98,45}};

for(i=0;i<3;i++){

for(j=0;j<5;j++){

s=s+a[j][i];}

v[i]=s/5;

s=0;

}

l=(v[0]+v[1]+v[2])/3;

printf("math:%d\nc languag:%d\ndbase:%d\n",v[0],v[1],v[2]);

printf("total:%d ",l);

}

 

任务三 

  • 选择题

1.C 2.C 3.C 4.D 5.A

 

  • 填空题

1、在c语言中,获取字符长度的函数是___strlen()___

2、字符数组char c[3]={‘a’,’b’,’c’}中c[1]的值是__b____

3、为了方便数组的初始化,可以直接使用__字符串常量____来为字符数组赋值。

4、在C语言中,没有字符串变量,字符串的存储是通过__字符数组__来实现的。

5、strlen函数的功能是__测试字符串的长度__,strcmp函数的功能是__比较两个字符串的大小

 

  • 编程操作题

1、答案如下

#include

#include

int main() {

    char *str1 = "Hello World!";

    char *str2 = "hello world!";

    printf("%d", strcmp(str1, str2));

    return 0;

}

 

   2、答案如下

int main(){

char  c[10]={'E','a','s','t','\0'};

printf("%d",strlen(c));

}

 

项目七

任务一 

  • 选择题

1.B 2.A 3.D 4.A 5.C

 

  • 填空题
  1. 在c语言中对于整数,有四种表示方式__二进制__、八进制、十进制十六进制
  2. 位运算符是针对二进制数的每一位进行运算的符号、它是专门针对数字01进行操作的
  3. 八进制必须以_ 0____开头。
  4. 十六进制必须以__0x或0X_____开头。
  5. 在格式控制符中加上#即可输出前缀。

 

  • 进制转换操作题

1、 答案:  规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

案例:请将 0x123 转成十进制的数

0123 = 3 * 16 ^ 0 + 2 * 16 ^ 1 + 1 * 16^2 = 291

2、参考答案

   #include

int main()

{

   int  a=3,b=5;

   

   printf("a&b=%d\t",a&b);

   printf("a|b=%d\t",a|b);

   printf("a^b=%d\n",a^b);

   printf("~a%=d\t",~a);

   printf("a<<2=%d\t",a<<2);

   printf("a>>2=%d\n",a>>2);

    

    return 0;

}

项目八

任务一

  • 选择题

1.B 2.C 3.C 4.D 5.D 6.B

 

  • 填空题

1、在 C 语言中,函数既可以有参数,也可以没有参数,是根据__参数__判断的。

2、C语言中,按作用的范围不同可以分为__局部变量____和____全局变量____。

3、c语言中负责从控制台输入信息的函数是___scanf()函数__

4、在C语言中,用于结束函数并返回函数值的是___return___关键字。

5、义在函数内部的变量被称为局部变量

 

  • 编程操作题

1、答案如下

#include "string.h"

max(int a,int b){

   printf("a+b=%d \n",a+b);

}

min(int a,int b) {

  printf("a-b=%d",a-b);

}

main()

{

int a,b;

scanf("%d%d",&a,&b);

   max(a,b);

   min(a,b);

}

 

任务二

  • 选择题

1.B 2.B 3.D 4.A 5.C 6.D 7.D 8.B 9.C 10.C

 

  • 填空题

1、提到参数的时候有“形参”、“实参”两个概念,全称是“形式参数”、“实际参数”

2、函数实参,就是调用函数时传入的数据,形参只能是__变量___。

3、函数形参,就是函数定义时函数名后面小括号中的变量

4、实参可以是常量变量表达式等。

5、参数传递的过程中,也有两种形式:一种是数据复制方式,另外一种是地址传值方式

6在c语言中,用于结束函数并返回函数的关键字是___return__

7函数内部调用自身的过程称为函数的___递归__调用。

8、如果函数没有返回值,则返回值类型要声明为void。

9、在没有返回值的函数体中的return语句可以省略不写。

10、函数调用的一般形式为:函数名 (参数列表);

 

  • 编程操作题

   1、 答案如下

#include

void changData(in n1, int  n2) {

int temp = n1;// 表示将 n1 这个指针指向的变量的值赋给 temp

n1 = n2;  //表示将 n2 这个指针指向的变量的值赋给 n1这个指针指向的变量

n2 = temp;// 表示将 temp 值赋给 n2这个指针指向的变量

printf("main n1=%d n2=%d", n1, n2); //n1= 2 n2 = 1

}

void main() {

int n1 ;

int n2 ;

scanf("%d%d",n1,n2);

changData(n1, n2);

getchar();

}

 

2、答案如下  

#include

int Sum(int n);

int main(void)

{

int n;

printf("请输入 n 的值:");

scanf("%d", &n);

printf("sum = %d\n", Sum(n));

return 0;

}

int Sum(int n)

{

if(n<=0)

{

return -1;

}

else if(1==n)

{

return 1;

}

else

{

return n + Sum(n-1);

}

}

 

 

项目九

任务一

  • 选择题

1.B  2.D  3.D  4.B  5.B

 

  • 填空题

1、在c语言&是 C 语言中的取地址符

2、在c语言有一种变量专门存放其他变量的地址值,这种变量称为____指针变量__

3、格式符.%p 表示以 16 进制格式输出内存地址。

4、定义指针变量与定义普通变量非常类似,格式为:类型说明符  *变量名。

5、指向指针的指针也称为二级指针。

 

  • 编程操作题

 1、答案如下 :

#include

int main(){

    int a = 15;

    int *p = &a;

    printf("%d, %d\n", a, *p);  //两种方式都可以输出a的值

    return 0;

}

 

任务二

  • 选择题

1.D 2.A 3.C 4.B 5.C

 

  • 填空题

1、指针的加减法运算实质上在内存中移动某个数据类型所占的字节

2、指向指针的指针称为___多级指针__

3、指向数组的指针常被简称为数组指针,而具有指针类型元素的数组则被称为指针数组

4、指针加上或减去一个整数n,将相对于当前位置前移或后移n个存储单元

5、数组指针就是指向数组元素的指针变量

6、当使用指针指向一个函数时候,这个指针被称为___函数指针_____

 

  • 编程操作题

1、答案如下:

#include

int main () {

/* 带有 5 个元素的整型数组 */

int arr[5] = {

1000, 2, 3, 17, 50

};

int * p;

int i;

p = arr;

/* 输出数组中每个元素的值 */

printf( "使用指针的数组值\n");

for ( i = 0; i < 5; i++ ) {

printf("*(p + %d) : %d\n", i, *(p + i) );

}

printf( "使用 arr 作为地址的数组值\n");

for ( i = 0; i < 5; i++ ) {

printf("*(arr + %d) : %d\n", i, *(arr + i) );

}

return 0;

}

 

    2、答案如下:

#include

void swap(int *n1, int *n2) {

int temp = *n1;// 表示将 n1 这个指针指向的变量的值赋给 temp

*n1 = *n2;  //表示将 n2 这个指针指向的变量的值赋给 n1这个指针指向的变量

*n2 = temp;// 表示将 temp 值赋给 n2这个指针指向的变量

}

void main() {

int n1 = 1;

int n2 = 2;

swap(&n1, &n2);

printf("main n1=%d n2=%d", n1, n2); n1= 2 n2 = 1

getchar();

}

 

项目十

任务一

  • 选择题

1.A 2.A 3.A 4.A 5.A

 

  • 填空题

1、在c语言中,结构体类型属于结构体类型。

2、定义结构体的关键字是struct

3、在一个结构体变量a中,定义一个int和float类型的成员变量,那么a分配的内存是8个字节

4、在一个结构体变量a中,定义一个char和float类型的成员变量,那么a分配的内存是 8个字节        

5、在一个结构体变量a中,定义一个double和float类型的成员变量,那么a分配的内存是  16个字节         

 

  • 编程题

 

1、答案如下

struct Box{

    float a;//长

    float b;//宽

    float c;//高

}

main(){

 

struct Box box;

   scanf("%f%f%f",&(box.a),&(box.b),&(box.c));

   printf("长=%f,宽=%f,高=%f",box.a,box.b,box.c);

}

 

2、答案如下

struct Box{

   float a;//长

   float b;//宽

   float c;//高

}

main(){

  struct Box box;

  scanf("%f%f%f",&(box.a),&(box.b),&(box.c));

  printf("volume%f",box.a*box.b*box.c);

}

 

任务二  

  • 选择题

1.B 2.A 3.A 4.B 5.D

 

  • 填空题

1、结构体指针即指向结构体变量的指针,它是一个指针变量,而且其目标变量是一个结构体变量,其内容是结构体变量的首地址

2、C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称

 

  • 编程题

1、答案如下:

#include

struct ST {

int ID;

char name[20];

float score[3];

};

int main() {

int i, j;

struct ST sts[5];

for (i = 0; i < 5; i++) {

printf("请输入第%d个学生信息\n", i+1);

scanf("%d", &sts[i].ID);

scanf("%s", sts[i].name);

printf("输入各科成绩\n");

for (j = 0; j < 3; j++) {

scanf("%f", &sts[i].score[j]);

}

}

return 0;

}

2、答案如下:

 

#include

#include

struct student

{

char name[20];

char num[15];

char place[20];

char id[20];

int age;

char address[100];

char sex;

char phone[15];

} stu[3];

void main(){

char name[20];

input(stu);

print(stu);

 

}

void input(struct student stu[]){

int i=0;

  for(i=0; i<3; i++){

printf("请输入第%d个学生的信息:\n", i+1);

printf("姓名: ");

scanf("%s", stu[i].name);

printf("学号: ");

scanf("%s", stu[i].num);

printf("籍贯: ");

scanf("%s", stu[i].place);

printf("身份证号: ");

scanf("%s", stu[i].id);

printf("年龄: ");

scanf("%d", &stu[i].age);

printf("家庭住址: ");

scanf("%s", stu[i].address);

fflush(stdin);

printf("性别(M/F): ");

scanf("%c", &stu[i].sex);

printf("电话: ");

scanf("%s", stu[i].phone);

printf("\n");

}

}

void print(struct student stu[])

{

printf("姓名学号 籍贯 身份证号 年龄地址 性别电话\n");

int i=0;

for(i=0; i<3; i++)

printf("%-8s%-12s%-10s%-20s%-4d%-10s%-3c%-10s\n", stu[i].name,

stu[i].num, stu[i].place, stu[i].id, stu[i].age, stu[i].address, stu[i].sex,

stu[i].phone);

}

 

任务三

  • 选择题

1.B 2.A

 

  • 填空题

1、定义共用体类型的关键字是__union__

2、有如下共用体

union {   

int i;

float f;

char ch;

  }data1,data2;

  此共用体在内存中占__4___个字节。

 

  • 编程操作题

   

共用体变量中的所有成员共享一段公共存储区,所以共用体变量所占内存字节数与其          成员中占字节数最多的那个成员相等

项目十一

  任务一  

  • 选择题

1.D 2.D 3.B 4.C 5.D

 

  • 填空题

1、声明不带参数的宏定义的指令是#define 标识符 字符串

2、文件包含的指令是___#include__-_

3、以#号开头的命令称 为预处理命令

4、宏定义分为带参数的宏定义不带参数的宏定义

5、预处理指令有三种:宏定义、文件包含、条件编译。

 

  • 编程操作题

      1、答案如下

#include "stdio.h"

#define  DIV(x,y)  x/y

main(){

int a,b,d;

    scanf("%d%d",&a,&b);

    d=DIV(a,b);

    printf("%d\n",d);

}

2、答案如下

#include

#include

#define PI 3.1415926

#define CIR_S(r) PI*r*r

#define CIR_L(r) 2*PI*r

void main(){

float r;

printf("请输入圆的半径:\n");

scanf("%f", &r);

printf("圆的面积:%.2f\n", CIR_S(r));

printf("圆的周长:%.2f\n", CIR_L(r));

system("pause");

}

 

项目十二

任务一

  • 选择题

1.B 2.B 3.A 4.D 5.C 6.C 7.A

 

  • 填空

1、在c语言中根据存储的方式把文件分为____文本文件____和__二进制文件_____两种

2、在c语言中,打开文件的函数是fopen函数,用于关闭文件的函数是fclose函数

3、定义文件指针变量的格式为__FILE *fp__ 。

4、以只读方式打开一个文本文件的模式是__r_____

5、以读写方式打开一个文本文件的模式是___w+__若文件存在则文件长度清为零,即该文件内容会消失

 

  • 编程题  

    1、答案如下  

#include

int main(){

     FILE *fp;

     char ch;

     if((fp=fopen("D:\\hello.txt","w"))==NULL)    //以写的方式打开文件,如果没有文件,自动//创建文件

         printf("文件不能正常打开\n");

     else

         printf("文件正常打开,等待操作\n");//这里操作的是文件的书写,我们后面讲

     if(fclose(fp)!=0)

         printf("文件不能正常关闭 \n");

     else

         printf("文件关闭 \n");

     return 0;

}

 

任务二

  • 选择题

1.B 2.A 3.C 4.C 5.C

 

  • 填空题

1、rewind函数使文件的读/写位置指针重新指向文件的开头

2、对流式文件可以进行顺序读写,也可以进行随机读写,关键是_如何控制文件的位置指针_ 。

3、当你正常打开了文件的时候,系统为每个文件设置了一个位置指针,该指针被称为文件位置指针,用来对文件读写进行控制。

4、在C语言中,针对字符的读写提供了fgetc()和fputc()函数

5、C语言使用fread()函数和fwrite()函数实现了对二进制数据进行读取

 

  • 编程题

1、答案如下

#include

FILE *fp;

main(){

char * ch="hello";

fp=fopen("c:\\hello.txt","w");

fputs(ch,fp);

fclose(fp);

}

2、 答案如下:

#include

FILE *fp;

main(){

char *a;

if((fp=fopen("c:\\hello.txt","r"))==NULL){

printf("cannot open file\n");

exit(1);

}

fgets(a,13,fp);

clrscr();

printf("%s\n",a);

fclose(fp);

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

[1]《C程序设计(第二版)》,谭浩强编,清华大学出版社,1999年12月。

[2]《C语言程序设计题解与上机指导》,谭浩强编,清华大学出版社,2000年11月。

[3]《The C Programming Language》,by Brian W. Kernighan and Dennis M. Ritchie.,Pubilished by Prentice-Hall in 1988。

[4]《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社,1994年9月。

附录A ASCLL码表

ASCII值

控制字符

ASCII值

控制字符

ASCII值

控制字符

ASCII值

控制字符

0

NUT

32

(space)

64

@

96

1

SOH

33

65

A

97

a

2

STX

34

66

B

98

b

3

ETX

35

#

67

C

99

c

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

E

101

e

6

ACK

38

&

70

F

102

f

7

BEL

39

71

G

103

g

8

BS

40

(

72

H

104

h

9

HT

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

K

107

k

12

FF

44

76

L

108

l

13

CR

45

-

77

M

109

m

14

SO

46

.

78

N

110

n

15

SI

47

/

79

O

111

o

16

DLE

48

0

80

P

112

p

17

DCI

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

X

115

s

20

DC4

52

4

84

T

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

TB

55

7

87

W

119

w

24

CAN

56

8

88

X

120

x

25

EM

57

9

89

Y

121

y

26

SUB

58

:

90

Z

122

z

27

ESC

59

;

91

[

123

{

28

FS

60

<

92

/

124

|

29

GS

61

=

93

]

125

}

30

RS

62

>

94

^

126

~

31

US

63

?

95

127

DEL

 

附录B 标准库数学函数

1. abs

  原型:extern int abs(int x);  

  功能:求整数x的绝对值  

  说明:计算|x|, 当x不为负时返回x,否则返回-x

2. fabs

  原型:extern float fabs(float x);

  功能:求浮点数x的绝对值  

  说明:计算|x|, 当x不为负时返回x,否则返回-x

3. sin

  原型:extern float sin(float x);

  功能:计算x(弧度表示)的正弦值。

 

  说明:x的值域为[-1.0,1.0]。

4. cos

  原型:extern float cos(float x);  

  功能:求x(弧度表示)的余弦值  

  说明:返回值在[-1.0,1.0]之间

5. tan

  原型:extern float tan(float x);

  功能:计算x(弧度表示)的正切值。  

  说明:返回x的正切值

6. ceil

  原型:extern float ceil(float x);  

  功能:求不小于x的最小整数  

  说明:返回x的上限,如74.12的上限为75,-74.12的上限为-74。返回值为float类型。

7. log

  原型:extern float log(float x);

  功能:计算x的自然对数。  

  说明:x的值应大于零。

8. log10

  原型:extern float log10(float x);

  功能:计算x的常用对数。  

  说明:x的值应大于零。

9. pow

  原型:extern float pow(float x, float y);  

  功能:计算x的y次幂。  

  说明:x应大于零,返回幂指数的结果。

10. sqrt

  原型:extern float sqrt(float x);  

  功能:计算x的平方根。  

  说明:x应大于等于零。

附录C 标准库字符串函数及说明

一、strlen

1、原型:size_t strlen(char const* string);

2.功能:返回字符串 string 的长度(不包含字符串终止符NUL)

3.注意:size_t是一个无符号整数类型

二、strcpy

1、原型:char *strcpy(char *dst, char const *src);

2、功能:将参数src字符串复制到dst参数中。如果参数src和dst在内存中出现重叠,其结果是未定义的。由于dst参数将进行修改,所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针,不能使用字符串常量。返回参数dst的一份拷贝。

3、注意:

目标参数dst的以前内容将被覆盖并丢失。即使新的字符串比dst原先的内存更短,由于新字符串是以NUL字符结尾,所以老字符串最后剩余的几个字符也会被有效的删除。如果字符串比数组长,多余的字符仍被复制,它们将覆盖原先存储于数组后面的内存空间的值。所以必须保证目标字符数组的空间足以容纳需要复制的字符串。

三、strcat

1、原型:char *strcat(char *dst, char const *src);

2、功能:将一个字符串添加(连接)到另一个字符串的后面。

3、注意:src和dst的所指的内存区域不能重叠,如果发生重叠,其结果是未定义的。

四、strncat

1、原型:char *strncat(char *dst, char const *src, size_t len);

2、功能:它从src最多复制 len个字符到dst中。但是, strncat总是在结果字符串后面添加一个NUL字符。

3、注意:src和dst所指的内存区域不能重叠,并且dst必须有足够多的空间来容纳src的字符串。

五、strcmp

1、原型:int strcmp(char const *s1, char const *s2);

2、功能:比较两个字符串。如果s1小于s2,strcmp函数返回一个小于零的值。如果s1大于s2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。

 

  1. 注意:由于strcmp并不修改它的任何一个参数,所以不存在溢出字符数组的危险。但是,和其他不受限制的字符串函数(strcpy, strcat)一样,strcmp函数的字符串参数也必须以一个NUL字符结尾。如果并非如此,strcmp就可能对参数后面的字符进行比较,这个比较结果将不会有什么意义。

 

 

 

 

 

 

 

 

 

 

 

 

 

附录D 关键字

 

auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

 

 

 

 

 

你可能感兴趣的:(中职C语言)