C语言软件开发笔试题目

2024-06-11

C语言软件开发笔试题目(精选8篇)

C语言软件开发笔试题目 第1篇

约定: 1)下面的测试题中, 认为所有必须的头文件都已经正确的包含了 2)数据类型

char 一个字节 1 byte int 两个字节 2 byte(16位系统, 认为整型是2个字节)long int 四个字节 4 byte float 四个字节4 byet double 八个字节 8 byte long double 十个字节 10 byte pointer 两个字节 2 byte(注意, 16位系统, 地址总线只有16位)第1题: 考查对volatile关键字的认识 #include static jmp_buf buf;main(){ volatile int b;b =3;if(setjmp(buf)!=0){ printf(“%d “, b);exit(0);} b=5;longjmp(buf , 1);} 请问, 这段程序的输出是(a)3(b)5(c)0(d)以上均不是 第2题:考查类型转换 main(){ struct node { int a;int b;int c;};struct node s= { 3, 5,6 };struct node *pt = &s;printf(“%d” , *(int*)pt);} 这段程序的输出是:(a)3(b)5(c)6(d)7 第3题:考查递归调用 int foo(int x , int n){ int val;val =1;if(n>0){ if(n%2 == 1)val = val *x;val = val * foo(x*x , n/2);} return val;} 这段代码对x和n完成什么样的功能(操作)?(a)x^n(x的n次幂)(b)x*n(x与n的乘积)(c)n^x(n的x次幂)(d)以上均不是

第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人 main(){ int a[5] = {1,2,3,4,5};int *ptr =(int*)(&a+1);printf(“%d %d” , *(a+1), *(ptr-1));} 这段程序的输出是:(a)2 2(b)2 1(c)2 5(d)以上均不是

第5题:考查多维数组与指针 void foo(int [][3]);main(){ int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};foo(a);printf(“%d” , a[2][1]);} void foo(int b[][3]){ ++ b;b[1][1] =9;} 这段程序的输出是:(a)8(b)9(c)7(d)以上均不对 第6题:考查逗号表达式 main(){ int a, b,c, d;a=3;b=5;c=a,b;d=(a,b);printf(“c=%d” ,c);printf(“d=%d” ,d);} 这段程序的输出是:(a)c=3 d=3(b)c=5 d=3(c)c=3 d=5(d)c=5 d=5 第7题:考查指针数组 main(){ int a[][3] = { 1,2,3 ,4,5,6};int(*ptr)[3] = a;printf(“%d %d “,(*ptr)[1],(*ptr)[2]);++ptr;printf(“%d %d” ,(*ptr)[1],(*ptr)[2]);} 这段程序的输出是:(a)2 3 5 6(b)2 3 4 5(c)4 5 0 0(d)以上均不对 第8题:考查函数指针 int *f1(void){ int x =10;return(&x);} int *f2(void){ int*ptr;*ptr =10;return ptr;} int *f3(void){ int *ptr;ptr=(int*)malloc(sizeof(int));return ptr;} 上面这3个函数哪一个最可能引起指针方面的问题(a)只有 f3(b)只有f1 and f3(c)只有f1 and f2(d)f1 , f2 ,f3 第9题:考查自加操作(++)main(){ int i=3;int j;j = sizeof(++i+ ++i);printf(“i=%d j=%d”, i ,j);} 这段程序的输出是:(a)i=4 j=2(b)i=3 j=2(c)i=3 j=4(d)i=3 j=6 第10题:考查形式参数, 实际参数, 指针和数组 void f1(int *, int);void f2(int *, int);void(*p[2])(int *, int);main(){ int a;int b;p[0] = f1;p[1] = f2;a=3;b=5;p[0](&a, b);printf(“%dt %dt”, a, b);p[1](&a, b);printf(“%dt %dt”, a, b);} void f1(int* p , int q){ int tmp;tmp =*p;*p = q;q= tmp;} void f2(int* p , int q){ int tmp;tmp =*p;*p = q;q= tmp;} 这段程序的输出是:(a)5 5 5 5(b)3 5 3 5(c)5 3 5 3(d)3 3 3 3 第11题:考查自减操作(–)void e(int);main(){ int a;a=3;e(a);} void e(int n){ if(n>0){ e(–n);printf(“%d”, n);e(–n);} } 这段程序的输出是:(a)0 1 2 0(b)0 1 2 1(c)1 2 0 1(d)0 2 1 1 第12题:考查typedef类型定义,函数指针 typedef int(*test)(float * , float*)test tmp;tmp 的类型是

(a)函数的指针, 该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to function of having two arguments that is pointer to float(b)整型(c)函数的指针, 该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型 Pointer to function having two argument that is pointer to float and return int(d)以上都不是

第13题:数组与指针的区别与联系 main(){ char p;char buf[10] ={ 1,2,3,4,5,6,9,8};p =(buf+1)[5];printf(“%d” , p);} 这段程序的输出是:(a)5(b)6(c)9(d)以上都不对

第14题: 考查指针数组的指针 void f(char**);main(){ char * argv[] = { “ab” ,”cd” , “ef” ,”gh”, “ij” ,”kl” };f(argv);} void f(char **p){ char* t;t=(p+= sizeof(int))[-1];printf(“%s” , t);} 这段程序的输出是:(a)ab(b)cd(c)ef(d)gh 第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会情有可原 #include int ripple(int ,);main(){ int num;num = ripple(3, 5,7);printf(” %d” , num);} int ripple(int n,){ int i , j;int k;va_list p;k= 0;j = 1;va_start(p, n);for(;j{ i = va_arg(p , int);for(;i;i &=i-1)++k;} return k;} 这段程序的输出是:(a)7(b)6(c)5(d)3 第16题:考查静态变量的知识 int counter(int i){ static int count =0;count = count +i;return(count);} main(){ int i , j;for(i=0;i <=5;i++)j = counter(i);} 本程序执行到最后,j的值是:(a)10(b)15(c)6(d)7 详细参考答案 第1题:(b)volatile字面意思是易于挥发的。这个关键字来描述一个变量时, 意味着 给该变量赋值(写入)之后, 马上再读取, 写入的值与读取的值可能不一样,所以说它“容易挥发”的。

这是因为这个变量可能一个寄存器, 直接与外部设备相连, 你写入之后, 该寄存器也有可能被外部设备的写操作所改变;或者, 该变量被一个中断程序, 或另一个进程 改变了.volatile 不会被编译器优化影响, 在longjump 后,它的值 是后面假定的变量值,b最后的值是5,所以5被打印出来.setjmp : 设置非局部跳转 /* setjmp.h*/ Stores context information such as register values so that the lomgjmp function can return control to the statement following the one calling setjmp.Returns 0 when it is initially called.Lonjjmp: 执行一个非局部跳转 /* setjmp.h*/ Transfers control to the statement where the call to setjmp(which initialized buf)was made.Execution continues at this point as if longjmp cannot return the value 0.A nonvolatile automatic variable might be changed by a call to longjmp.When you use setjmp and longjmp, the only automatic variables guaranteed to remain valid are those declared volatile.Note: Test program without volatile qualifier(result may very)更详细介绍, 请参阅 C语言的setjmp和longjmp 第2题:(a)结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的。如果一个结构体的指针被看成 它的第一个成员的指针,那么该指针的确指向第一个成员 第3题:(a)此题目较难.这个程序的非递归版本 int what(int x , int n){ int val;int product;product =1;val =x;while(n>0){ if(n%2 == 1)product = product*val;/*如果是奇数次幂, x(val)要先乘上一次,;偶数次幂, 最后返回时才会到这里乘以1*/ val = val* val;n = n/2;} return product;} /* 用二元复乘策略 */ 算法描述(while n>0){ if next most significant binary digit of n(power)is one then multiply accumulated product by current val, reduce n(power)sequence by a factor of two using integer division.get next val by multiply current value of itself } 第4题:(c)a的类型是一个整型数组,它有5个成员。&a的类型是一个整型数组的指针, 所以&a + 1指向的地方等同于a[6], 所以*(a+1)等同于a[1] ptr等同a[6], ptr-1就等同与a[5] 第5题:(b)题目自身就给了足够的提示 b[0][0] = 4 b[1][0] = 7 第6题:(c)考查逗号表达式,逗号表达式的优先级是很低的, 比 赋值(=)的优先级 低.逗号表达式的值就是最后一个元素的值

逗号表达式的还有一个作用就是分割函数的参数列表..E1, E2, …, En 上面这个表示式的左右是,E1, E2,… En的值被分别计算出来, En计算出来的结构赋给整个逗号表达式

c=a,b;/ *yields c=a* / d=(a,b);/* d =b */ 第7题:(a)ptr是一个数组的指针, 该数组有3个int成员 第8题:(c)f1显然有问题, 它返回一个局部变量的指针, 局部变量是保存在stack中的,退出函数后, 局部变量就销毁了, 保留其指针没有意义, 因为其指向的stack空间可能被其他变量覆盖了

f2也有问题, ptr是局部变量, 未初始化, 它的值是未知的, *ptr不知道指向哪里了, 直接给*ptr赋值可能会覆盖重要的系统变量, 这就是通常说的野指针的一种 第9题:(b)sizeof 操作符给出其操作数需要占用的空间大小, 它是在编译时就可确定的, 所以其操作数即使是一个表达式, 也不需要在运行时进行计算.(++i + ++ i)是不会执行的, 所以i的值还是3 第10题:(a)很显然选a.f1交换*p 和 q的值, f1执行完后, *p 和 q的值的确交换了, 但q的改变不会影响到b的改变, *p 实际上就是a 所以执行f1后, a=b=5 这道题考查的知识范围很广,包括typedef自定义类型,函数指针,指针数组void(*p[ 2 ])(int *, int);定义了一个函数指针的数组p,p有两个指针元素.元素是函数的指针, 函数指针指向的函数是一个带2个参数,返回void的函数, 所带的两个参数是指向整型的指针, 和整型

p[ 0 ] = f1;p[ 1 ] = f2 contain address of function.function name without parenthesis represent address of function Value and address of variable is passed to function only argument that is effected is a(address is passed).Because of call by value f1, f2 can not effect b 第11题:(a)考查–操作和递归调用,仔细分析一下就可以了 第12题:(c)建议不会的看看C专家编程

从左往有, 遇到括号停下来, 将第一个括号里的东西看成一个整体 第13题:(c)考查什么时候数组就是指针.对某些类型T而言, 如果一个表达式是 T[](T的数组), 这个表达式的值实际上就是指向该数组的第一个元素的指针.所以(buf+1)[5]实际上就是*(buf +6)或者buf[6] 第14题:(b)sizeof(int)的值是2,所以p+=sizeof(int)指向 argv[2],这点估计大家都没有什么疑问(p+=sizeof(int))[-1] 指向 argv[1],能理解吗, 因为(p+=sizeof(int))[-1] 就相当于(p+=2)[-1] ,也就是(p+2-1)第15题:(c)在C编译器通常提供了一系列处理可变参数的宏, 以屏蔽不同的硬件平台造成的差异, 增加程序的可移植性。这些宏包括va_start、va_arg和va_end等。

采用ANSI标准形式时, 参数个数可变的函数的原型声明是:type funcname(type para1, type para2, …)这种形式至少需要一个普通的形式参数, 后面的省略号不表示省略, 而是函数原型的一部分。type是函数返回值和形式参数的类型。

不同的编译器, 对这个可变长参数的实现不一样 , gcc4.x中是内置函数.关于可变长参数,可参阅

http://puter science and engineering.Ashok recently completed a book about’ “Advanced Test in C and Embedded System Programming”, Published by BPB , ND.

C语言软件开发笔试题目 第2篇

c语言笔试题目及答案

一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选

项涂写在答题卡相应位置上,答在试卷上不得分。

(1)数据的存储结构是指________。

A)存储在外存中的数据 B)数据所占的存储空间量

C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示

答案:D

评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。

(2)下列关于栈的描述中错误的是________。

A)栈是先进后出的线性表

B)栈只能顺序存储

C)栈具有记忆作用

D)对栈的插入与删除操作中,不需要改变栈底指针

答案:B

评析:栈是一种特殊的线性表,又称先进后出表(FILO―First In Last Out)。

(3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是

________。

A)冒泡排序为n2 B)冒泡排序为n

C)快速排序为n D)快速排序为n(n一1)/2

答案:D

评析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。

(4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。

A)log2n B)n/2 C)n D)n+l

答案:C

评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。

(5)下列对于线性链表的描述中正确的是________。

A)存储空间不一定是连续,且各元素的存储顺序是任意的

B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面

C)存储空间必须连续,且前件元素一定存储在后件元素的前面

D)存储空间必须连续,且各元素的存储顺序是任意的

答案:A

评析:在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。

(6)下列对于软件测试的描述中正确的是________。

A)软件测试的目的是证明程序是否正确

B)软件测试的目的是使程序运行结果正确

C)软件测试的目的是尽可能多地发现程序中的错误

D)软件测试的目的是使程序符合结构化原则

答案:C

评析:关于软件测试的目的,Grenford J.Myers再《The Art of Software Testing》一书中给出了深刻的阐述,整体来说,软件测试的目的就是尽可能多地发现程序中的错误。

(7)为了使模块尽可能独立,要求________。

A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

答案:B

评析:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。软件设计,应尽量做到高内聚,低耦合,有利于提高模块的独立性。

(8)下列描述中正确的是________。

A)程序就是软件

B)软件开发不受计算机系统的限制

C)软件既是逻辑实体,又是物理实体

D)软件是程序、数据与相关文档的集合

答案:D

评析:计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。

(9)数据独立性是数据库技术的重要特点之一,所谓数据独立性是指________。

A)数据与程序独立存放

B)不同的数据被存放在不同的文件中

C)不同的数据只能被对应的应用程序所使用

D)以上三种说法都不对

答案:D

评析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。选项A、B、C三种说法都是错误的。

(10)用树形结构表示实体之间联系的模型是________。

A)关系模型 B)网状模型 C)层次模型 D)以上三个都是

答案:C

评析:层次模型是最早发展起来的数据库模型,它的基本结构是树形结构。

(11)算法具有五个特性,以下选项中不属于算法特性的是________。

A)有穷性 B)简洁性 C)可行性 D)确定性

答案:B

评析:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的基本特性。

(12)以下选项中可作为C语言合法常量的是________。

A)-80. B)-080 C)-8e1.0 D)-80.0e

答案:A

评析:c语言的常量分为整型常量、实型常量和字符型常量。选项A属于实型常量中的十进制小数形式的表示法,是合法的。

(13)以下叙述中正确的是________。

A)用C程序实现的算法必须要有输入和输出操作

B)用C程序实现的算法可以没有输出但必须要输入

C)用C程序实现的算法可以没有输入但必须要有输出

D)用C程序实现的算法可以既没有输入也没有输出

答案:C

评析:算法的特性中包括“有零个或多个输入”及“有一个或多个输出”这两个特性。一个算法得到的结果就是算法的输出,没有输出的算法是没有意义的,所以一个算法必须至少有一个输出。

(14)以下不能定义为用户标识符的是________。

A)Main B)_0 C)_int D)sizeof

答案:D

评析:C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。注意:大写字母和小写字母被认为是两个不同的字符。A中Main与主i函数名main不同。

(15)以下选项中不能作为合法常量的是________。

A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0

答案:B

评析:指数形式的实型常量要求字每e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。

(16)数字字符0的ASCII值为48,若有以下程序

main

{char a=”1″,b=”2″;

printf(“%c,”,b++);

printf(“%d ”,b-a);

)

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

A) 3,2 B)50,2 C)2,2 D)2,50

答案:C

评析l执行语句“printf(“%c,ll,b++);”后,b的值变成字符3,执行“printf(“%d ”,b-a);”,即‘3’-‘1’。

(17)有以下程序

main( )

{

int m=12, n=34;

printf(“%d%d”,m++,++n);

printf(“%d%d ”,n++,++m);

}

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

A)12353514 B)12353513 C)12343514 D)12343513

答案:A

评析:执行“printf(“%d%d”m++,++n);”后,输出的是m和n+l的值1235,接着执行

“printf(“%d%d”,n++,++m);”输出n和m+l的值3514。

(18)有定义语句:int b;char c[10】;,则正确的输入语句是________。

A) scanf(”%d%s“,&b,&C); B) scanf(”%d%s“,&b,C);

C) scanf(”%d%s“,b,C); D) scanf(”%d%s“,b,&C);

答案:B

评析:scanf函数中的“格式控制”后面应当是地址,而不是变量名。对于变量,通过地址运算符“&”求出内存中的地址;对于数组c[10],数组名c即为数组在内存中的地址。

(19)有以下程序

main()

{int m,n,p;

scanf(“m=%dn=%dp=%d”,&m,&n,&p);

printf(“%d%d%d”,m,n,p);

}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,

则正确的输入是________。

A) m。123n=456p=789 B) m=123 n=456 p=789

C) m=123,n=456,p=789 D) 123 456 789

答案:A

评析:根据本题的数据输入形式“scanf(“m=%dn=%dp=%d”&m,&n,&p);”说明在输入数据时,必须输入“m=”、“n=”、“p=”字符,且中间不能含有空格。

(20)有以下程序

main()

{ int a,b,d=25;

a=d/10%9;

b=a&&(-1);

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

}

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

A)6,l B)2,l C)6,0 D)2,0

答案:B

评析:本题中“a=d/10%9;”的值为25/10%9=2; “b=a&&(-1);”为2&&(-1)=1(注意:-1表示真,只有O才表示假),所以a,b的值分别为2,1。

(21)有以下程序

main()

{

int i=1 j=2,k=3;

if(i++==1&&(++j==3||k++==3))

printf(“%d%d%d”,i,j,k);

}

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

A)l 2 3 B)2 34 C) 2 2 3. D)2 3 3

答案:D

评析:执行“i++==1&&(++j==3‖k++==3)”时,表达式“i++==1”嗨值为真,其值为1,表达式“++j=3”的值为真,根据短路原理,右边的表达式“k++==3”不再进行运算。括号中表达的值为l,作与运算后整个表达式的值也为l,输出i.j,k时,由于未执行过k,所以它们的值分别为2,3,3。

(22)若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a

A)l B)2 C)3 D)4

答案:A

评析:条件表达式的一般形式为:表达式17表达式2:表达式3

本题先求的是a

(23)有以下程序

main( )

{

int p[8]={11,12,13,14,15,16,17,18},i=O,j=0;

while(i++<7)if p[i]%2)j+-=p[i];

printf(“%d”,j);

}

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

A)42 B)45 C)56 D)60

答案:B

评析:本程序的作用是求除p[O]外的其它奇数的和。

(24)有以下程序

main()

{

char a[7]= “a0OaO”; int i,j;

i=sizeof(a);j=strlen(a);

printf(“%d%d”,i,j);

)

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

A)2 2 B)76 C)7 2 D)6 2

答案:C

评析:c语言中以‘’作为字符串的结束符,且strlen()函数计算的是‘’字符前的所有字符的个数。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。

(25)以下能正确定义一维数组的选项是________。

A)int a[5]={0,1,2,3,4,5; B)char a[]={0,1,2,3,4,5};

C)char a={’A’,’B’,’C’}; D)int a[5]=”0123″;

答案:B

评析:选项A中定义的是5个数组元素,但赋值的时候赋的是6个元素,所以出错;选项c不符合数组定义形式,数组名后应加上“[]”;选项D的类型说明符错误,如果用char定义就对了;选项B中的0,1,2,3,4,5分别表示对应字符的ASCII码,所以选项B是正确的。

(26)有以下程序

int fl(int x,int y){return x>y?x:y;}

int f2(int x,int y){return x>y?y:x;}

main()

{

int a=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,b),f1(c,d));f=fl(f2(a,b),f2(c,d));

g=a+b+c+d-e-f;

printf(“%d,%d,%d”,e,f,g);

)

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

A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7

答案:A

评析:函数n的功能是返回两个数中比较大的值,f2的功能是返回两个数中比较小的值。

(27)已有定义:char a[]=”xyz”,b[]={’x’,’y’,’z};,以下叙述中正确的是________。

A)数组a和b的长度相同 B)a数组长度小于b数组长度

C)a数组长度大于b数组长度 D)上述说法都不对

答案:C

评析:c语言规定‘’为字符串结束标志。所以“char a[]=“xyz””的数组长度为4,而“b[]={‘x’,‘y’,‘z’};”的数组长度为3,数组长度与strlen函数所求的长度不同,本题是指数组占内存空间的大小。

(28)有以下程序

Void f(int *x, int *y)

{

int t;

t= *x; *x=*y;’*y=t;

)

main( )

{

int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(p

{f(p,q); p++; qC;} 。

for(i=0;i<3;i++) printf(“%d”,a[1][i]);

}

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

A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4.

C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,l,

答案:D

评析;本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。

(29)有以下程序

main()

{

im a[3][3],*p,i;

p=&a[0][o];

for(i=0;j<9;i++) p[i]=I;

for(i=0;j<3;i++)printf(“%d”,a[1][i]);

)

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

A)012 B)123 C)234 D)345

答案:D

评析:本题赋值后,a的数组元素的值分别为a[01[0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本题输出的值为345。

(30)以下叙述中错误的是________。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B)数组名代表的是数组所占存储区的首地址,其值不可改变

C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越

界”的出错信息

D)可以通过赋初值的方式确定数组元素的个数

答案:C

评析:在c语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出“下标越界”的错误提示。

(31)有以下程序

#define N20

fun(int a[],int n,int m)

{ int i,j;

for(i=m;i>=n;iC)a[i+1]=a[i];

}

main()

{

int i,a[N]={1,2,3,4,5,6,7,8,9,10};

fun(a,2,9);

for(i=O;i<5;i++) printf(“%d”,a[i]);

}

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

A)10234 B)12344 C)12334 D)12234

答案:C

评析:本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用“fun(a,2,9);”可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。

(32)有以下程序

main()

{

int a[3][2]={0},(*ptr)[2],i,j;

for(i=0;i<2;i++) {ptr=a+i; scanf(“%d”,ptr); ptr++;}

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

{ for(i=0;j<2;j++) printf(“%2d”,a[i][j]);

printf(“”);

}

}

若运行时输入:1 2 3<回车>,则输出结果是________。

A)产生错误信息

B)l0 C)l 2 D)l 0

2 O 3 0 2 0

0 0 0 O 3 0

答案:B

评析:二维数组a,通过a[3][2]={0}将数组中的各个元素初始化为0,指针变量ptr,指向包含2个元素的一维数组。a[0][0]:l,a[1][0]=2,故本题的输出选B。

(33)有以下程序

prt(int *m, int n)

{ int i;

for(i=O;i

)

main()

{

int a[]={ 1,2,3,4,5 },i;

prt(a,5);

for(i=O;i<5;i++)

printf(“%d,”,a[i]);

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

A)l,2,3,4,5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1,

答案:B

评析:用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。

(34)有以下程序

main()

{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;

for(p=a;p

}

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

A)l,2,3,4,5,6,7,8,9,0, B)2,3,4,5,6,7,8,9,10,1,

C)0,1,2,3,4,5,6,7,8,9, D)l,l,1,l,l,l,l,l,l,l,

答案:A

评析:c语言规定数组变量名代表数组的首地址,即第0号元素的地址。本题将a数组中的值全部输出,即为l,2,3,4,5,6,7,8,9,0,。

(35)有以下程序

#define P 3

void F(int x){return(P*x*x);}

main()

{printf(“%d”,F(3+5));}

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

A)192 B)29 C)25 D)编译出错

答案:D

评析:return语句用于从被调函数带回一个函数值。void关键字表示“无类型”,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。

(36)有以下程序

main()

{int c=35;printf(“%d”,c&C);}

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

A)0 B)70 C)35 D)1

答案:C

评析:按位“与”时,1&1=1,其他都等O。因为本题中相与的两个值相等,即对应位上的二进制值相等,所以“与”的结果也即为其值本身。

(37)以下叙述中正确的是________。

A)预处理命令行必须位于源文件的开头

B)在源文件的一行上可以有多条预处理命令

C)宏名必须用大写字母表示

D)宏替换不占用程序的运行时间

答案:D

评析:通常,预处理命令位于源文件的开头,也可以写在函数与函数之间;不能在一行上写多条预处理命令:宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。

(38)若有以下说明和定义

union dt

{int a;har b;ouble c;}data;

以下叙述中错误的是________。

A)data的每个成员起始地址都相同

B)变量data所占的内存字节数与成员c所占字节数相等

C)程序段:data.a=5;pintf(“%f ”,data.C);输出结果为5.000000

D)data可以作为函数的实参

答案:C

评析:union是表示共用体的关键字,成员a,b,c共占用同一个内存空间,data的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量’data所占的内存字节数与成员c所占字节数相等;执行“data.a=5;printf(“%f ”,data.C);”printf函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数,故C是错误的。

(39)以下语句或语句组中,能正确进行字符串赋值的是________。

A)char*sp;*sp=”right!”; B)char s[lO];s=”right! “;

C)char s[10];*s=”right! “; D)char*sp=”right! “;

答案:D

评析:选项A定义了字符型的指针变量sp,则*sp存储的是第一个字符,而给它赋的是字符串,故错;

选项B表示代表数组的首地址,而题中给它赋的是字符串,所以错误;

选项c定义了一个字符型的数组s[10],再通过+s给数组元素赋初值,这时是与选项A相同的错误。

(40)设有如下说明

typedef struct ST

{long a; int b; char c[2];}NEW;

则下面叙述中正确的是________。

A)以上的说明形式非法 B)ST是一个结构体类型

C)NEW是一个结构体类型 D)NEW是一个结构体变量

答案:C

评析:typedef关键字用于声明一个新的类型名代替已有的类型名。

本题中如果没有用typedef进行定义的话,则struct ST为结构体类型,现在用typedef定义后,相当于用NEW代表了struct ST这一结构体类型,故NEW为结构体类型。

(41)有以下程序

main()

{ int a=1,b;

for(b=l;b<10;b++)

{ if(a>=8)break;

if(a%2==1){a+=5;continue;}

a-=3;

)

printf(“%d”,b);

}

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

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

答案:B

评析:break和continue的区别是:continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环过程,.不再判断执行的条件是否成立。

(42)有以下程序

main()

{ char s[]=”l 59″,*p;

p=s;

printf(“%c”,*p++);printf(“%c”,*p++);

}

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

A)15 B)16 C)12 D)59

答案:A

评析:本题通过“p=s”将指针变量p指向字符数组s,在第一次输出时,由于++和*为同一优先级,“*p++”相于“+(p++)”。p指向s[1],输出为s[1]的值。

C语言教学网站的研究与开发 第3篇

随着教育科学和计算机网络技术的发展, 以多媒体技术、网络技术等为代表的信息技术迅猛的发展, 给现代教育带来了发展动力, 对教学手段和模式产生了巨大的影响。在这种形式下发展以互联网为基础的远程教育必将成为现代教育的发展方向。作为高等院校, 将基础教育及基础学科的建设与网络教学联系起来, 是提高教学质量的有效方法。

C语言作为高校理工科大学生的必修课, 它有着丰富的数据类型和数据结构, 是程序设计的首要语言, 是计算机类各专业的重要专业技术基础课程、是程序设计类的核心入门课程, 因此这门课程能否学习好对后续课程起着决定性的作用。然而这门课程的理论性、操纵性都较强, 仅凭老师在课堂上的有限讲授, 学生很难充分理解和掌握。开发一个C语言的公共教学网站, 学生可以学习C语言知识、做课后练习和模拟测验, 并且可以通过E-mail、论坛等与教师交流、向老师提问等, 以改变传统的教学和答疑模式, 提高C语言教学质量, 激发学生学习C语言的兴趣。

2. 网站设计原则

实用性:系统以用户需求为目标, 以方便用户为原则, 同时融入先进的管理经验。根据用户实际的需求情况开发的网上教学系统, 并且将在统一的Windows图形界面下提供各种实用功能, 使用前无须任何的培训。充分满足老师和学生现在及未来几年内的各种需求, 真正为老师和学生提供一个良好的教、学环境。

先进性:本设计将充分应用现有成熟的计算机技术、网络技术、软件开发技术, 为用户提供高性能的系统。系统将运用先进的B/S结构, 采用ASP.NET为开发平台, SQL Server 2005作为后台数据库, 可以方便地满足老师和学生在教和学的需要。

高可靠性:一个实用的网站同时必须是可靠的, 本设计通过合理而先进的网络设计以及软、硬件的优化选型, 可保证网站的可靠性与容错性。

高安全性:在设计中, 将充分利用网络软、硬件提供的各种安全措施, 既可以保证用户共享资源, 同时也可保证关键数据的安全性。

采用标准技术:本系统的所有设计遵循国际上现行的标准进行, 以提高网站的开放性。

可维护性:系统的设计要求方便维护, 包括硬件的维护, 软件的维护和网络的维护。

可扩展性及灵活性:系统的设计以方便未来业务的扩展和系统扩充为目标, 系统要求能够方便的升级, 充分保护系统的投资。

3. 网站主要实现目标:

(1) 适用于Internet国际互联网络、Intranet内部网络环境下基于网站的网络教学。

(2) 提供丰富的知识库与信息库。

(3) 可直播或点播教学内容。

(4) 学生和教师用计算机和网络完成教学教学全过程, 达到课堂现场教学同样的效果。

(5) 通过网络考试对学生进行实时考核。

4. 网站功能结构设计

系统用户分分为两类:学生和教师 (教师同时也是管理员) 。

本系统前台共分为8大部分, 20个完整的功能模块, 系统结构如图1所示。

本系统后台分为6大部分, 17个完整的功能模块。系统结构如图2所示。

5. 系统功能简介如下:

5.1 系统前台各功能模块的具体功能:

(1) 用户管理模块功能说明:用于用户登录, 通过用户输入的用户名、密码判断用户份的有效性, 有效用户根据用户的角色定向到相应的功能界面, 无效用户定向到登录失败页面。若丢失密码, 则可以通过你的密码提示和相应的密码答案可以找到自己的密码。若想成为有效用户, 则可以注册用户, 成功后定向到相应的功能页面。

(2) 课程列表模块功能说明:只有有效用户可以看到这个模板的内容。通过选择专业来选择课程, 然后进入学习内容 (学习目的、参阅资料、参阅书目、学习提纲) , 除了参阅资料是连接到相关网页外, 其他都是以DOC形式, 这样方便用户, 可以直接在线阅读, 也可以下载后随时阅读。

(3) 远程教学模块功能说明:有效用户可以通过选择学习方式 (课件点播和视频点播) 来学习相关的章节。是以播放器的形式出现在学习者的面前。

(4) 网上考试模块功能说明:有效用户可以通过选择在线考试来测试自己学习的情况, 考试完了后, 可以通过学生证号来查询自己的考试成绩。

(5) 公告栏模块功能说明:有效用户可以通过点击相关公告的题目, 进入相应的详细内容。了解最近有些什么新的消息或动向。

(6) 在线论坛模块功能说明:有效用户进入讨论主题, 可以选择任何一个讨论话题进入后, 可以选择新的话题, 也可以回复别人的问题, 如果是管理员, 可以删除一些主题。

(7) 学习资料库模块功能说明:有效用户通过选择资料类别来选择相应的学习资料来源, 这里主要是以连接其他网站为主要方式来学习, 即提供学习资料的来源。

(8) 作业提交模块功能说明:有效用户可以提交已完成的作业, 查询作业的成绩等。

5.2 系统后台各功能模块的具体功能:

(1) 用户管理:对于一些已毕业或修完这门课的学生, 可以在这里删除用户信息。

(2) 作业管理:可以添加新的作业, 删除旧的作业, 教师批改好作业后公布作业成绩。

(3) 远程教学管理:主要是对课件、视频的归类、添加、修改、删除等操作。

(4) 网上试题库管理:对试题库的更新, 例如进行试题的添加、修改、删除等, 还有对考生考试成绩的管理。

(5) 学习资料库管理:对学习资料的添加、修改、删除等。

(6) 公告栏管理:教师 (管理员) 发布一些公告信息, 对公告信息的修改、删除等操作。

6. C语言教学网站系统开发环境

网站建立在Windows操作系统平台之上, 采用B/S即浏览器/服务器体系结构, 是在微软公司的ASP.NET2.0 (Active Server Pages.NET2.0) 开发环境中使用C#语言及MS SQL Server 2005设计开发实现。

7. 结束语

本文给出了一个动态的教学网站的设计与实现方法。从网站项目的开发上看, 该网站具有如下优点:操作简单、高效;教学资源丰富、使用灵活;安全性能良好;数据库管理方便快捷;网站的运行效率较高, 能为用户提供较好的教育教学服务, 能弥补课堂教学的不足, 提高学生的自学能力, 激发学生的学习兴趣, 使学生由害怕学生C语言转变为爱学C语言, 从而达到提高教学质量的目的。

参考文献

[1]刘然, 韩悌祥, 田杰.C语言教学网站的设计与开发[J].软件导刊, 2007.8.

[2]赵丽萍.C语言教学网站的设计与实现[J].应用能源技术, 2009.10.

[3]沈丽容.C语言教学网站设计与实现[J].计算机教育, 2006.4.

[4]刘源, 何玉香等.基于ASP.NET的网络教学网站设计与实现[J].学术交流.

C语言软件开发笔试题目 第4篇

关键词:职业岗位;课改;基于工作过程;职业能力

中图分类号:C41 文献标识码:A文章编号:1007-9599 (2010) 04-0000-01

Exploration of Curriculum Development Based on CLanguage

Working Process

Wei Feng

(Heilongjiang Information&Technology College,Harbin150025,China)

Abstract:The goal of higher professional education is to train the qualified personnel to meet the needs of the society.But the traditional teaching model of C Language has not adapted to the need of the professional position in the modern society.So the course reform is imperative.The article, explore the course C Language based on the work process with new model and strengthen training students’comprehensive abilities.

Keywords:Professional position;Course reform;Based on work process;

Professional ability

一、引言

目前国内多数高校,把《C语言》作为新生学习计算机知识的基础语言。但由于我国多年的应试教育,使学生学习主动性不强,学习兴趣不高,只是为了应付考试被动地学习。而传统C语言教学注重由设计算法到书写程序的过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。因此要对《C语言》教学进行改革,提高高职高专院校《C语言》教学质量。

高职高专教育人才培养模式的基本特征是:以培养高等技术应用性专门人才为根本任务;以适应社会需要为目标、以培养技术应用能力为主线设计学生的知识、能力、素质结构和培养方案,毕业生应具有基础理论知识适度、技术应用能力强、知识面较宽、素质高等特点。可以看出在高职教育中,强调以就业为导向。

目前,随着教学改革的不断深入,涌现出很多新的教学模式和教学方法。其中基于工作过程的改革模式比较适合高职院校《C语言》的教学。

基于工作过程的课程是通过整体化职业分析(关注的是工作过程的系统化知识和完成工作任务的职业行动能力,而不仅仅是独立的、点状的岗位技能和知识),开发出一系列典型工作任务,按照人的职业能力形成规律进行序列化,形成学习领域,并按照工作过程进行基于教学论的组合和序化构成教学内容体系,以工作过程行动导向为教学实施原则的课程模式。

二、基于工作过程的《C语言》课程开发过程

(一)职业岗位分析

目前我国大力发展信息化、智能化产业,因此具有编程水平高,技术熟练的技能型人才是社会岗位急需的。由于C语言使用范围广,如果能够熟练掌握C语言进行程序设计,则对学习其它高级程序设计语言也会有很大帮助。综合分析我校学生的就业特点,对基本使用岗位进行职业技能与职业素质分析,把本课程职业岗位定位为程序设计人员。通过企业调研、毕业生回访、与企业管理与技术人员交流等方式,认真分析岗位工作任务的职业能力,细化对应的知识点,使课程内容的构建与实际工作过程相联系。

(二)学习情境的设计

学习情境是实现学习领域能力目标的具体的课程方案,是整个教学设计的关键。通过精心设计的一个个理论和实践一体化的工作任务和项目,将专业知识点合理串联起来,学生通过工作任务循序渐进的完成,逐步深入地掌握离散的知识点,不断提高实际解难能力。

在C语言课程开发中,将内容设计成4个学习情境,分别为“走进高级语言程序设计”,“数值计算”,“基础部分应用能力训练”,“图形处理及综合能力应用”。每个情境设计若干个工作任务,如在“图形处理及综合能力应用”情境中包含“绘制几何图形、卡通时钟、学生信息管理系统、”等任务。通过学生编制和修改源程序,理解程序设计的语法规则和设计思想。学习情境设计围绕岗位工作过程所涉及的知识与技能,根据学生的认知特点,逐层递进、由简入繁展现教学内容,通过真实“项目+任务”的结构组织教学内容,使学生在项目活动中掌握岗位技能,培养学生在软件工程实施过程中的职业能力。

(三)在教学中的实施

在教学过程中,通过校企合作、校内实训基地建设等多种途径,采取工学结合、课程设计等形式,充分开发学习资源,给学生提供丰富的实践机会。教学效果评价采取过程性评价与结果性评价相结合,理论与实践相结合,理论考试重点考核与实践能力紧密相关的知识,重点评价学生的职业能力。教师在给予评价时,指出不足,更要肯定学生的闪光之处,这将会很好的激发学生的学习热情,激励学生不断进取。

三、总结

基于工作过程的课程不再把知识传授和技能训练作为教学的核心任务,而是把完成具体的工作任务、提高学生的职业行动能力作为教学目标。基于工作过程的《C语言》课程改革实施的过程中,笔者发现学生在上课时课堂气氛活跃,学生逃课、上课开小差的现象减少了,学生学习的兴趣大大提高了,取得了比较明显的课堂教学效果。同时培养了学生创新意识和创新精神,团队合作能力和组织实施操作能力以及自主学习的能力。

参考文献:

[1]徐健.构建基于人的发展的职业教育课程模式[J].教育与职业,2007,6

[2]姜大源.职业教育研究新论[M].北京:教育科学出版社,2007

作者简介:

魏峰,职称:副教授,单位:黑龙江信息技术职业学院

c软件开发笔试题目 第5篇

A)指针和引用作为函数参数都可以改变实参

B)指针和引用都可以在定义后任意的改变指向,引用是不可以改变的。

C)引用必须在创建的时候初始化,而指针则不需要

D)不能空引用,但是可以有空指针

2、(2分) 运算符的重载形式有两种,重载为_重载为类的内部成员函数____________和_重载为类的友元函数______________________

3、(2分) main主函数执行完毕后,是否可能会再执行一段代码?请说明理由? 可以使用注册函数让程序在推出main之后,程序终止之前执行自定义的一些代码!

全局对象的构造函数会在main 函数之前执行

利用atexit函数可以在程序终止前完成一些“清理”工作——如果将指向一组函数的指针传递给atexit函数,那么在程序退出main函数后(此时程序还未终止)就能自动调用这组函数。在使用atexit函数时你要注意这样两点:

main 之前:预编译 全局变量的初始化等

main 之后:全局变量的释放

main函数执行之前,主要就是初始化系统相关资源

mainCRTStartup中被调用的

在main之前会调用一系列初始化函数来初始化这个进程

而在main之后会调用exit(int)来进行进程的清理工作。可以用_onexit 注册一个函数

,可以用_onexit 注册一个函数,它会在main 之后执行int fn1(void), fn2(void), fn3(void), fn4 (void);

可能会执行一些注册过的Hook

注意,atexit以栈的方式注册函数,后注册的函数会先执行。

_onexit和atexit一样是以占的方式注册函数的,后注册的函数会被先执行。

C/C笔试题目 第6篇

答:char *strcpy(char *strDest, const char *strSrc)

{

if ( strDest == NULL || strSrc == NULL)

return NULL ;

if ( strDest == strSrc)

returnstrDest ;

char *tempptr = strDest ;

while( (*strDest++ = *strSrc++) != ‘’);

returntempptr ;

}

2. 头文件中的ifndef/define/endif的作用?

答:防止该头文件被重复引用。

3. #i nclude与#i nclude “file.h”的区别?

答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。

4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?

答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。

通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

5. 面向对象的三个基本特征,并简单叙述之?

答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)

2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。

C/C笔试题目 第7篇

答:从定义上来说:

重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

重写:是指子类重新定义复类虚函数的方法。

从实现原理上来说:

重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。

重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

2. 多态的作用?

答:主要是两个:1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

3. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。

答:BOOL :if ( !a ) or if(a)

int :if ( a ==0)

float :const EXPRESSION EXP = 0.000001

if ( a < EXP && a >-EXP)

pointer : if ( a != NULL) or if(a == NULL)

4. 请说出const与#define 相比,有何优点?

答案:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

5.简述数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

char a = “hello”;

a[0] = ‘X’;

char *p = “world”; // 注意p 指向常量字符串

p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

char a = “hello world”;

char *p = a;

cout< cout< 计算数组和指针的内存容量

voidFunc(char a[100])

{

C语言智能学习系统设计与开发 第8篇

《C语言程序设计》是计算机专业的基础课程, 大部分高校都开设了该课程。为了帮助学生更好地掌握C语言程序设计的技能, 开发一套C语言学习系统很有必要。

1 系统功能

基于对高校学生学习C语言实际情况的调查, 本文C语言智能学习系统主要包括以下功能:① 能调阅C语言电子教程, 帮助学生进行复习和理解;②能进行模拟考试和练习, 试题分为填空、改错和编程共3类题型;③能够根据学生模拟考试和练习的结果进行智能评分;④学生平时做错的题目可以被学习系统记录, 以便下次调用并再次练习。

2 系统设计

针对以上功能, 设计总体结构如图1所示:

软件使用者从主界面可以查阅C语言方面的电子教材, 方便学习。此外, 学生可以从主界面进入模拟考试系统, 巩固自己所学内容。主界面还提供了软件正版注册功能, 允许合法授权的用户使用该软件的所有功能, 而非授权的用户只能试用该软件的部分功能。

(1) 题库存储。作为该软件的主要功能, 模拟考试练习需要题库支持。本软件的题库采用数据库存储, 表结构如表1所示。题库表TBL_Timu主要存储题目的基本信息, 包括题目编号、内容和类型。

(2) 智能评分。根据用户提交的模拟试卷进行评分, 让学生了解自己对C语言知识点的掌握程度。答案表TBL_Answer存储题库表TBL_Timu中每个题目的标准答案。由于部分填空题和改错题的答案不是唯一的, 所以在答案表TBL_Answer中存在同一个题目编号对应多个答案记录的情况。答案表TBL_Answer结构如表2所示。

为解决部分填空题和改错题答案不唯一的问题, 本系统在评分时首先将用户填写的内容与答案表TBL_An-swer中TAnswer字段题目编号对应的所有答案进行比对, 如果匹配, 则认为用户该题填写正确;如果不匹配, 则在后台启动C编译器, 编译该题目对应的C语言文件, 并通过链接得到对应的执行文件, 然后运行该执行文件, 根据执行结果判断该执行文件是否能得到预期结果。如果执行后得到预期结果, 系统认为用户填写的答案正确。这种后台运行判断用户答案的方式也适用于编程题的评分。

(3) 错题记录。为了提高练习效率, 用户在评分之后可以对自己做错的题目进行标注, 以便再次练习。用户所标注的错题信息将存储在错题表TBL_Wrong中, 其结构如表3所示。在错题表TBL_Wrong中, WFlag字段可以标注所加入错题难度, 以便用户选择对应难度的错题进行练习。

(4) 出卷。用户在进行模拟考试练习时, 可以选择“新考试”、“错题练习”两种形式。当用户选择“新考试”后, 系统便从题库表TBL_Timu中根据TType字段的值分别在填空题、改错题和编程题3种题目类型中各随机抽取1个题目编号, 即共抽取3个TNo字段的值, 然后提取对应的TContent字段的内容最终形成测试试卷。 当用户选择“错题练习”之后, 系统便从错题表TBL_Wrong中根据用户在系统界面上选择的日期或者难度标记 (即WDate和WFlag字段) 等条件通过SQL语句查询得到符合条件的题目编号 (即TNo字段) , 然后在题库表TBL_Timu中提取题目的具体内容 (即TContent字段) 。对错题练习进行评分时, 在答案表TBL_Answer中通过TNo字段关联取得要评分题目的答案, 即TAnswer字段的内容。具体评分过程和方法同智能评分功能。

(5) 历史成绩。系统为用户记录历史成绩并以各种形式呈现, 可以图表的形式呈现成绩的变化情况。为保存历史成绩, 需要在数据库中设计成绩表TBL_Score (见表4) 。用户可以在系统界面上查看选择起止日期的测试成绩, 并以图表的形式呈现, 让用户了解成绩变化情况。

(6) C语言电子教程。本系统启动后, 在Windows系统的托盘区放置本学习系统的图标。鼠标右击该图标, 可以查阅C语言的相关教程。这些资料均以Word文件的形式存储于本系统的安装路径中, 并在用户使用查阅功能时嵌入系统界面。用户可以点击相关章节查阅自己感兴趣的内容。

(7) 正版注册。本学习系统为单机使用版本, 提供合法用户的授权注册功能。当用户安装后, 可以在相关界面看到本台电脑的机器码。机器码是一种根据电脑所携带的硬盘等硬件信息所生成的字符串, 相当于电脑的身份证号码。只有合法授权的用户才能被授权正确的、与该电脑机器码匹配的序列号。本学习系统每次启动时会检查用户的序列号是否和机器码匹配, 只有在两者匹配的情况下学习系统才能正常使用。

3 结语

本文设计的C语言智能学习系统具有良好的实用性, 实践表明, 该软件系统能够很好地辅助学生C语言课程学习。

摘要:为提高C语言程序设计课程学习效果, 开展C语言智能学习系统软件设计与开发。该软件主要包括模拟练习考试、智能评分、电子阅读和错题记录等功能。实践结果表明, 该软件对学生学习《C语言程序设计》课程起到了很好的辅助作用。

关键词:C语言,软件设计,学习系统

参考文献

[1]姜春茂, 曲明成, 张伟, 姚艳雪.基于学生软件开发团队的沟通机制研究[J].计算机教育, 2013 (6) .

[2]李震, 杨海亮, 胡毅, 马天丁.需求工程对于软件开发的重要性[J].计算机技术与发展, 2013 (3) .

[3]蒋铁山.常用软件开发工具有效利用分析[J].软件导刊, 2013 (2) .

[4]沈鹏.浅谈计算机软件开发与数据库管理[J].电脑知识与技术, 2013 (5) .

[5]兰峰.计算机软件开发与实用价值[J].数字技术与应用, 2013 (1) .

上一篇:杜绝零食倡议书下一篇:颈椎病的试验检查方法及临床意义