独家c语言测试题

2024-08-09

独家c语言测试题(共7篇)

独家c语言测试题 篇1

测试题(C语言+逻辑推理)

1、求1+2+3+……….+100。(循环)

2、求1*2*3*……….*10。(循环)

3、输入三个数字,输出他们的最大值。(if)

4、输入两个数,交换他们的值并输出。(元素交换)

5、输出9*9乘法表。(双层循环)

逻辑推理题

一、简单推理题

1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?

二、主观题(说明:在以后的工作过程中,我们可定会犯这样那样的错误。既然错误已经酿成,损失在所难免,我们只能想办法把损失减少到最小。如果能巧妙地回答出这些问题,再发生错误的情况下。能让客户有最少的抱怨,公司有最少的损失。)

1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半(不是冲放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机的折换券。请给所有已购买的用户写信告诉解决方案。

2.一高层领导在参观某博物馆时,向博物馆馆员小王要了一块明代的城砖作为纪念,按国家规定,任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领导,将城砖取回。

3.营业员小姐由于工作失误,将2万元的笔记本电脑以1.2万元错卖给李先生,王小姐的经理怎么写信给李先生试图将钱要回来?

独家c语言测试题 篇2

2008年下半年二级C语言程序设计的全国报考人数为50.99万人,笔试试卷的整卷难度为0.57,整卷的信度达到了0.89。本次考试二级C全国取证率为32.3%。全卷的难度适中,信度较好。现就将本次考试中的部分难题做简要分析,以帮助考生复习备考,取得满意的成绩。

选择题第32题:

有以下程序

#include

void fun( int a, int b )

{intt;

t=a; a=b; b=t;

}

main()

{intc[10]={1,2,3,4,5,6,7,8,9,0}, i;

for (i=0; i<10; i+=2)fun(c[i], c[i+1]);

for (i=0;i<10; i++)printf("%d,", c[i]);

printf("n");

}

程序运行后的输出结果是

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

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

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

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

【答案】A

【分析】

(1)该题考生答对率只有29.6%,59.1%的考生选择了错误项B。

(2)这是一道典型的调用函数与被调用函数之间数据传递的问题。在调用函数时,实参的值将传送给对应的形参,但形参的变化不会影响对应的实参。教材例7.3(P.82)深刻地说明了这个过程。估计很多考生知道这一点,但理解不够深刻,故一旦试题更换格式,就会出错。

(3)这道题区分度较高,达到0.347,说明是一道好题。

选择题第40题:

有以下程序

#include

main()

{ FILE *pf;

char *s1="China", *s2="Beijing";

pf=fopen("abc.dat","wb+");

fwrite(s2,7,1,pf);

rewind(pf); /*文件位置指针回到文件开头*/

fwrite(s1,5,1,pf);

fclose(pf);

}

以上程序执行后abc.dat文件的内容是

A)ChinaB)Chinang

C)ChinaBeijingD)BeijingChina

【答案】B

【分析】

(1)只有28.5%的考生答对,有37.9%的考生选择了D。属于本套试卷里最难的选择题。

(2)在文件使用方式上,本题使用的是“wb+”,意思是为写建立一个新的二进制文件,并在读和写过程中,可以由位置函数设置读和写的起始位置。为降低试题难度,本题特地在语句rewind(pf);后面有注解提示:文件位置指针回到文件开头。因此,在写入字符串“Beijing”后,文件指针回到文件头,再写入“China”,文件的内容就成为“Chinang”,正确答案是B。

(3)该题区分度0.375,属好题。

填空题第8题:

以下程序的输出结果是___。

#include

main()

{int i,j,sum;

for(i=3;i>=1;i--)

{sum=0;

for(j=1;j<=i;j++)sum+=i*j;

}

printf("%dn",sum);

}

【答案】1

【分析】

(1)本题只有19.2%的考生答对。

(2)该题考核考生做题时的细心。在第一个for循环体中,由于每次循环都将sum置0,因此,影响sum值的因素就只与最后一次循环语句相关,此时,i为0,j为1,sum只能是1了。

(3)这道题本身不难,如果考生能够仔细阅题,掌握关键点,就不会出错了。

填空第9题:

以下程序的输出结果是___。

# include

main()

{ intj, a[]={1,3,5,7,9,11,13,15}, *p=a+5;

for(j=3;j;j--)

{switch ( j )

{ case1:

case2:printf("%d", *p++);break;

case3:printf("%d", *(--p));

}

}

}

【答案】9911

【分析】

(1)本题只有16.3%的考生答对,是难题。

(2)该题主要考核考生三个方面的知识,一是选择结构switch语句,一个是自加减运算,另一个是指针。j=3时,执行printf("%d", *(--p));语句,结果是输出9;j=2时,执行printf("%d", *p++); break; 结果是输出9,这是答对本体的关键!*p++指的是使*p作为表达式的值,然后使指针变量p本身增1;j=1时,执行空语句后,继续执行case2语句,此时输出11。所以本题的答案是9911。

C语言笔试题答案 篇3

A)数据库系统减少了数据冗余

B)数据库系统避免了一切冗余

C)数据库系统中数据的一致性是指数据类型的一致

D)数据库系统比文件系统能管理更多的数据

答案:A

评析:由数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据的不同出现应保持相同的值。

(2)关系表中的每一横行称为一个________。

A)元组 B)字段 C)属性 D)码

答案:A

评析:在关系数据库中,关系模型采用二维表来表示,简称“表”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。

(3)数据库设计包括两个方面的设计内容,它们是________。

A)概念设计和逻辑设计 B)模式设计和内模式设计

C)内模式设计和物理设计 D)结构特性设计和行为特性设计

答案:A

评析:数据库设计可分为概念设计与逻辑设计。概念设计的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。逻辑设计的主要工作是将ER图转换为指定的RDBMS中的关系模型。

(4)请读程序:

#include

main

{

int a;float b,c;

scanf(“%2d%3P%4f’,&a,&b,&C);

printf(”na=%d,b=%ec。%fn”,a,b,C);

}

若运行时从键盘上输入9876543210l,则上面程序的输出结果是________。

A)a=98,b=765,c=432 1

B)a=1 0,b=432,c=8765

C)a=98,b=765.000000,c=432 1.000000

D)a=98,b=765.0,c=432 1.0

答案:C

评析:scanf把用户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf遗弃。这时变量a、b、c的值分别为:98、765.000000、4321.000000。

(5)一个良好的算法由下面的基本结构组成,但不包括__________。

A)顺序结构 B)选择结构 C)循环结构 D)跳转结构

答案:D

评析:1966年,Bohra和Jacopini提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元:1、顺序结构;2、选择结构;3、循环结构。

(6)请选出以下程序的输出结果________。

#include

sub(x,y,z)

int x,y,*z:

{*z=y-x;}

main{

int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&C);

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

}

A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7

答案:B

评析:sub函数的作用是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a/I,10和5属于值传递,a是属于地址传递,也就是a与z指向了同一个存储单元,在执行函数后,a的值随*z变化,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化,其值为-5-7=-12,在sub(a,b,&C)后,c的值发生变化,其值为-12-(-5)=-7。

(7)下面程序在屏幕上的输出是________。

main

{

printf(”abbb c”);

}

A)abbb c B)a c C)abc D)ab c

答案:B

评析:c语言中允许使用一种特殊形式的字符常量,、就是以一个“”开头的字符序列,这样的字符称为“转义字符”。常用的转义字符有:n,换行;t,水平制表;b,退格;r,回车。

(8)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。

A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=

答案:A

评析:选项A将变量x的地址赋给指针变量pb,使pb指向x‘选项B是将x的值当作地址赋给指针pb,Db指向一个地址等于x值的内存单元;选项c将x的地址赋给指针pb指向的地址等于x的内存单元。

(9)设整型数i=5,则printf(“%d”,i+++++i);的输出为________。

A)10 B)1l C)12 D)语法错误

答案:D

评析:c语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、–),在c语言解析表达式时,它总是进行贪婪咀嚼,这样,该表达式就被解析为i++ ++ +i,显然该表达式不合c语言语法。

(10)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元

int *p;

p=___________malloc(sizeof(im));

则应填入__________。

A)int B)int C)(*int) D)(int*)

答案:D

评析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型+)。

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

main

{

int i=5,J=9,x;

x=(I==j?i:(j=7));

printf(”n%d,%d”,I,J);

}

A)5,7 B)5,5 C)语法错误 D)7,5

答案:A

计算机二级C语言测试题含答案 篇4

1、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。

A.7 B.8 C.9 D.10

参考答案:B

参考解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。

2、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()。

A.控制流 B.加工 C.存储文件 D.源和潭

参考答案:A

参考解析:数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括4个方面,即加工、数据流、存储文件、源和潭。

3、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()。

A.并运算 B.交运算 C.差运算 D.积运算

参考答案:A

参考解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。

4、下列方法中,属于白盒法设计测试用例的方法的是()。

A.错误推测 B.因果图 C.基本路径测试 D.边界值分析

参考答案:C

参考解析:白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。

5、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=RX S,则T的元组的个数为()。

A.6 B.8 C.9 D.1

2参考答案:C

参考解析:R为n元关系,有P个元组S为m元关系,有q个元组。两个关系笛卡儿积是一个n+m元的关系,元组个数是qXp。所以T的元组的个数为9个。

6、在数据库系统中,数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述是()。

A.外模式 B.逻辑模式 C.概念模式 D.物理模式

参考答案:A

参考解析:外模式也称子模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。…个概念模式可以有若干个外模式。

7、数据管理技术发展的三个阶段中,()没有专门的软件对数据进行管理。

I.人工管理阶段

II.文件系统阶段

Ⅲ.数据库阶段

A.仅I B.仅Ⅲ C.I和II D.II和Ⅲ

参考答案:A

参考解析:数据管理技术发展的兰个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。

8、数据库系统的核心是()。

A.数据模型 B.软件开发 C.数据库设计 D.数据库管理系统

参考答案:D

参考解析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。

9、以下叙述正确的是()。

A.变量的作用域取决于变量定义语句的位置

B.全局变量可以在函数以外的任何部位进行定义

C.局部变量的作用域可用于其他函数的调用

D.一个变量说明为static存储类型是为了限制其他编译单元的引用

参考答案:D

参考解析:本题考查函数调用的变量作用域。全局变量不在任何函数俸内定义,作用域为整个文件i局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。

10、下列选项中,不属于数据管理员(DBA)职责的是()。

A.数据库维护 B.数据库设计

C.改善系统性能,提高系统效率 D.数据类型转换

参考答案:D

参考解析:数据库管理员(DataBaseAdministrator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:

·数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计。

·数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护。

·改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。

C语言开发工程师笔试题 篇5

在二叉树中找出和为某一输入值的所有路径。

#include

void getPath(struct treeNode星符号 node, int sum, vector& stack, int currentSum) { //stack用来存放路径,sum为输入值

} if (node == NULL) return; currentSum += node->id; stack.push_back(node->id); if (node->lchild != NULL) getPath(node->lchild, sum, stack, currentSum); if (node->rchild != NULL) getPath(node->rchild, sum, stack, currentSum); if (node->lchild == NULL && node->rchild == NULL) { if (currentSum == sum) { vector::iterator it = stack.begin; for (; it != stack.end; ++it) printf(”%d “, 星符号it); printf(”/n“); } } stack.pop_back;

青岛科技大学c语言期末考试题1 篇6

5.根据以下说明语句,则下面的叙述中不正确的是_____。struct student { int num;char name[10];int score;}stu;A.struct是定义结构体类型的关键字 B.stu是结构体变量名

C.num, name, score都是结构体成员名 D.stu是结构体类型名

6.已知字母A的ASCII码为十进制数65,变量ch1为字符型,则执行语句ch1=‘A’+‘5’-‘2’;后,ch1中的值是_____。

A.D B.67 C.一个不确定的值 D.C 7.以下哪种方法不能对一维数组进行正确的初始化_____。A.int a[ ]={1,2,3};B.int a[5]={ };C.int a[5]=(1,2,3,4,5);D.int a[ ]={2,3,4*5,6};8.已正确定义字符变量ch1,下面能正确赋值的是_____。A.ch1=“a”;B.ch1=‘a’;

C.ch1=“C语言程序设计”;D.ch1=‘ C语言程序设计’;9.逗号表达式(a=3*4,a*4),a+5 的值是_____。A.53 B.17 C.20 D.48 10.设n为float型,m为int型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入的表达式是_____。

A.n=(n*100+0.5)/100.0 B.n=n*100+0.5/100.0 C.m=n*100+0.5,n=m/100.0 D.n=(n/100+0.5)*100.0 11.设i=2,j=3,则表达式(i++)*(++j)的值为_____。A.6 B.8 C.9 D.12 12.关于以下程序段,说法正确的是_____。x=-1;do { x=x*x;}while(!x);A.死循环 B.循环体执行二次 C.循环体执行一次 D.有语法错误

13.若有下列定义:char c[5],*p=c;则对c数组元素地址的正确引用是_____。A.p+2 B.&c[5] C.c++ D.&c 14.当调用函数时,实参是一个数组名,则向函数传送的是_____。A.数组的长度 B.数组每个元素中的值 C.数组每一个元素的地址 D.数组的首地址

15.文件中利用fopen函数打开文件,如果以只读方式打开二进制文件,则以下打开方式正确的是_____。A.r+ B.rb C.wb D.ab

二、填空题(5个小题,每题2分,共10分):

1.若有int i=1,j=7,a;执行语句 a=i+(j%4!=0);后,a的值是_______。2.执行以下程序后,运行结果是_______。#include void main(){ int a,b;for(a=1,b=1;a<=100;a++){ if(b>=10)break;if(b%3==1){ b+=3;continue;} } printf(“%dn”,a);}

3.源程序中用到了strcat函数,需要包含的头文件(即库文件)为_______。4.执行以下程序后,运行结果是_______。#include void main(){ int a=2;float n=5.888,b;b=a+(int)n;printf(“%fn”,b);}

5.语句 scanf(“a=%d,b=%d”,&a,&b);若将3和4分别输入给a和b,则正确的输入方式为____

三、程序分析题,写出程序的运行结果(5个小题,每题4分,共20分): 1.#include void main(){ int x=1,y=0,a=0,b=0;switch(x){ case 1: switch(y){ case 0: a++;break;case 1: b++;break;} case 2: a++;b++;break;} printf(“a=%d,b=%dn”,a,b);}

2.在运行以下程序时,输入“Turbo C++ 3.0”,写出程序的运行结果。#include void main(){ char str[40];printf(“Input a string:”);scanf(“%s”,str);puts(str);} 3.#include void f(int y){ static int i=5;int j=3;j++;printf(“%d+%d+%d=%dn”,i,j,y,i+j+y);i*=2;} void main(){ int x;for(x=1;x<=2;++x)f(x);} 4.#include void swap(int *pa,int *pb){ int *p;p=pa;pa=pb;pb=p;} void main(){ int a=10,b=20;int *p1=&a,*p2=&b;if(a int a=5;int b=7;int plus(int x,int y){ int z;z=x+y;return(z);} void main(){ int a=4,b=5,c;c=plus(a,b);printf(“a+b=%dn”,c);}

四、程序填空题,将下面程序补充完整(10个填空,每空2分,共20分): 1.输出九九表。#include “stdio.h” void main(){ int i,j;for(i=1;i<=9;i++){for(j=1;①;j++)

printf(“%3d*%d=%2d”,i,j,i*j);②;} } 2.利用函数形式,求x数组所有元素的平均值并输出。#include “stdio.h” ①;

void main(){ float avg,x[10]={1.2,3.6,4.5,5.1,6.9,7,8,9,10.5,11.3};avg=average(x);printf(“The average is %5.2fn”,avg);} float average(float a[10]){ int i;float sum=0;for(i=0;i<10;i++)sum=sum+a[i];②;} 3.编写一个计算字符串长度的函数length。#include “stdio.h” void main(){ char str[20];int m;int length(char *p);printf(“Input a string:n”);gets(str);①;

printf(“n the length of str is%d ”,m);} int length(char *p){ int n=0;while(②){ n++;p++;} return n;} 4.输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。#include “stdio.h” void main(){ int i,n=10,a[10];float avg=0;for(i=0;i=‘A’&&*cp<=‘Z’)①;

else if(*cp>=‘a’&&*cp<=‘z’)*cp=*cp-32;②;} puts(str);}

五、程序设计题(3个小题,共20分):

1.设三个整型变量a,b,c,编写程序为a,b,c输入数据,并要求a,b,c按由小到大排序后输出。(5分)2.学生成绩可分为五分制与百分制,编程将百分制转换为五分制输出。(5分)3.编写排序函数sort(int a[ ]),实现对数组a中的元素进行排序,并利用该函数,从键盘输入若干个数(如10个)将其按升序排列。(10分)

第一套试题

一、单项选择题(15个小题,每题2分,共30分): 1-5:AABCD 6-10:ACBBC 11-15:BCADB

二、填空题(5个小题,每题2分,共10分): 1.2 2.4 3.string.h 4.7.000000 5.a=3,b=4

三、程序分析题,写出程序的运行结果(5个小题,每题4分,共20分): 1.a=2,b=1 2.Turbo 3.5+4+1=10 4.10,20 5.a+b=9 10+4+2=16

四、程序填空题,将下面程序补充完整(10个填空,每空2分,共20分): 1.①j<=i ②printf(“n”)

2.①float average(float a[10])或 float average(float a[ ])②return(sum/10)

3.①m=length(str)②*p!=‘’ 或 *p 4.①i%3==0 ②avg+=a[i] 或 avg=avg+a[i] 5.①*cp=*cp+32或*cp=*cp+‘a’-‘A’ ②cp++

五、程序设计题(3个小题,共20分): 1.#include “stdio.h” void main(){ int a,b,c,t;printf(“input a,b and c:”);scanf(“%d%d%d”,&a,&b,&c);„„1分 if(a>b){ t=a;a=b;b=t;} „„3分 if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf(“%d%d%d”,a,b,c);„„1分 } 2.#include “stdio.h” void main(){ float score;printf(“Input a score:”);scanf(“%f”,&score);

while(score>100||score<0)„„2分

独家c语言测试题 篇7

?? 金额=单价*数量计算得出。函数ReadDat( )读取这100个销售记录并存入结构数组sell中。请编制函数SortDat( ), 其功能要求: 按金额从小到大进行排列, 若金额相等, 则按产品代码从小到大进行排列, 最终排列结果仍存入结构数组sell中。最后main( )函 数调用函数WriteDat把结果输出到文件OUT1.DAT中。 注意: 部分源程序存放在PROG1.C中。

?? #define MAX 100

?? typedef struct {

?? char dm[5] ; /* 产品代码 */

?? char mc[11] ; /* 产品名称 */

?? int dj ; /* 单价 */

?? int sl ; /* 数量 */

?? long je ; /* 金额 */

?? } PRO ;

?? 函数解析://if((sell[i].je>sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,

?? sell[j].dm)>0))是此题的精华所在理解它 就理解了这道题的编程道理

?? 首先sell[i].je>sell[j].je如果金额大小成立的话,就条件成立,把两个数据换位置,如果前者不成立,就判定金额是否 相等,如果相等的话,代码还有大小的话,按从小到大的顺序排列。

?? 这种函数的编程方法,适用于有一定基础的编程者,如果是初学者的话建议用以下函数来表达, 此方法是按照题意一部一部来分析的,是比较保守的编程方法。

?? void SortDat()

?? { int i,j;

?? PRO swap;

?? for(i=0; i < MAX-1; i++)

?? { for(j=i+1; j < MAX; j++)

?? if(sell[i].je>sell[j].je)

?? {swap=sell[i]; sell[i]=sell[j]; sell[j]=swap;}

?? else if((sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,sell[j].dm)>0))

?? {swap=sell[i]; sell[i]=sell[j]; sell[j]=swap;}

?? }

??100个产品销售记录排序其余9题说明

?? 1) in.dat 内容完全相同。

?? 2) 程序也基本雷同,仅排序的要求不一样。

?? 3) 考生应熟悉 strcmp() 函数,否则有的题相当不好处理。

?? 试题变化 :

?? 排序要求:

?? 按金额从小到大进行排列, 若金额相等, 则按产品代码从大到小 进行排列 相应语句:

?? if((sell[i].je>sell[j].je)||( (sell[i].je==sell[j].je) && (strcmp(sell[i].dm, sell[j].dm) < 0)))

?? 排序要求: 按金额从大到小进行排列, 若金额相等, 则按产品代码从小到大 进行排列 相应语句: if((sell[i].je < sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm, sell[j].dm)>0))

?? 排序要求:

?? 按金额从大到小进行排列, 若金额相等, 则按产品代码从大到小 进行排列 相应语句:

?? if((sell[i].je < sell[j].je)||(sell[i].je==sell[j].je)&&(strcmp(sell[i].dm,sell[j].dm)<0))

?? 排序要求:

?? 按产品名称从小到大进行排列, 若产品名称相同, 则按金额从小 到大进行排列

?? if((strcmp(sell[i].mc, sell[j].mc)>0)||(strcmp(sell[i].mc,sell[j].mc)==0)&&(sell[i].je>sell[j].je))

?? 排序要求:

?? 按产品名称从小到大进行排列, 若产品名称相同, 则按金额从大 到小进行排列

?? if(strcmp(sell[i].mc, sell[j].mc)>0 || (strcmp(sell[i].mc, sell[j].mc)==0)&&(sell[i].je < sell[j].je))

?? 排序要求:

?? 按产品名称从大到小进行排列, 若产品名称相同, 则按金额从小 到大进行排列

?? if((strcmp(sell[i].mc, sell[j].mc) < 0) || (strcmp(sell[i].mc,sell[j].mc)==0)&&(sell[i].je>sell[j].je))

?? 排序要求:

?? 按产品名称从大到小进行排列, 若产品名称相同, 则按金额从大 到小进行排列

?? if((strcmp(sell[i].mc, sell[j].mc) < 0)|| (strcmp(sell[i].mc, sell[j].mc)==0)&&(sell[i].je < sell[j].je))

?? 排序要求:

?? 按产品代码从小到大进行排列, 若产品代码相同, 则按金额从小 到大进行排列

?? if((strcmp(sell[i].dm, sell[j].dm)>0)||(strcmp(sell[i].dm,sell[j].dm)==0)&&(sell[i].je>sell[j].je

??

??第二类习题 300个四位数问题:

?? 300个四位数问题(此类共10题) 本类10题中,五题产生数组B,并对B按一定要求排序;

?? 其余五题是求平均值。我把它们分成两组五题来讨论。 以下为产生数组B之题一:

?? 已知数据文件IN.DAT中存有300个四位数, 并已调用读函数 readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功 能是: 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次 存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。 最后main( )函数调用写函数writeDat()把数组b中的数输出到文 件OUT.DAT。

?? 例如: 1239, 9-1-2-3>0, 则该数满足条件存入数组b中, 且个数cnt=cnt+1。

?? 8129, 9-8-1-2<0, 则该数不满足条件忽略。 程序中已定义数组: a[300], b[300], 已定义变量: cnt

?? #include

?? int a[300], b[300], cnt=0 ;

?? jsvalue()

?? {/**/

?? int i,j,g,s,b,q,t;

?? for(i=0; i < 300; i++)

?? {g=a[i]%10; /*个位的数字*/

?? s=a[i]/10%10; /*十位的数字*/

?? b=a[i]/100%10; /*百位的数字*/

?? q=a[i]/1000; /*千位的数字*/

?? if(g-q-b-s>0)

?? b[cnt++]=a[i];

?? for(i=0; i < cnt-1; i++)

?? for(j=i+1; j < cnt; j++)

?? if(b[i] < b[j])

?? { t=b[i]; b[i]=b[j]; b[j]=t; }

?? }

?? /**/

?? }

?? 相似题 求出所有这些四位数是素数的个数cnt, 再把所有满足此 条件的四位数依次存入数组b中, 然后对数组b的四位数按从小到 大的顺序进行排序。

?? jsvalue()

?? { int i,j,t;

?? for(i=0; i < 300; i++)

?? { for(j=2;j?? if(a[i]%j==0) break;

?? if(j==a[i])

?? b[cnt++]=a[i];

?? for(i=0; i < cnt-1; i++) /*排序*/

?? for(j=i+1; j < cnt; j++)

?? if(b[i] < b[j])

?? { t=b[i]; b[i]=b[j]; b[j]=t; }

?? }

?? 要求: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次 存入数组b中, 然后对数组b的四位数按从小到大的顺序进行排序。

?? if(q-b-s-g>0)

?? b[cnt++]=a[i];

?? 要求: 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt, 再把所有满足此条件的四位数依次存入 数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。

?? if((q+b)==(s+g))

?? b[cnt++]=a[i];

??

??

??类型题三:300个数满足条件的求平均值

??

??求满足条件的数的个数、平均值及不满足条件的数的平均 值等,此类也是五题。本处仅给出一个全题,其余题只给出不同 之处。

?? 已知数据文件IN.DAT中存有300个四位数, 并已调用读函数 readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功 能是: 求出千位数上的数减百位数上的数减十位数上的数减个位 数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。最后 main()函数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到 OUT.DAT文件。

?? 例如: 9123, 9-1-2-3>0, 则该数满足条件计算平均值pjz1, 且个数cnt=cnt+1。 9812, 9-8-1-2<0, 则该数不满足条件计算平均值pjz2。 程序中已定义数组: a[300], 已定义变量: cnt,pjz1,pjz2

??

?? int a[300], cnt=0 ;

?? double pjz1=0.0, pjz2=0.0 ;

?? jsvalue()

?? {/**/

?? int i,g,s,b,q;

?? for(i=0; i < 300; i++)

?? {g=a[i]%10; /*个位的数字*/

?? s=a[i]/10%10; /*十位的数字*/

?? b=a[i]/100%10; /*百位的数字*/

?? q=a[i]/1000; /*千位的数字*/

?? if(g-q-b-s>0)

?? { cnt++; pjz1+=a[i]; }

?? else pjz2+=a[i];

?? if(cnt) pjz1/=cnt;

?? if(cnt<300) pjz2/=300-cnt;

?? /**/

?? }

?? 之二 要求:

?? 求出千位数上的数加百位数上的数等于十位数上的数加个 位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值 pjz1, 以及所有不满足此条件的四位数平均值pjz2。

?? if((q+b)==(g+s))

?? { cnt++; pjz1+=a[i]; }

?? else pjz2+=a[i];

?? 之三 要求:

?? 求出个位数上的数减千位数上的数减百位数上的数减十位 数上的数小于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

?? if(g-q-b-s<0)

?? { cnt++; pjz1+=a[i]; }

?? else pjz2+=a[i];

?? 之四 要求:

?? 求出所有这些四位数是素数的个数cnt, 再求出所有满足 此条件的四位数平均z值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

?? jsvalue()

?? {/**/

?? int i,j,t;

?? for(i=0; i < 300; i++)

?? { for(j=2;j?? if(a[i]%j==0)

?? {pjz2+=a[i];

?? break;}

?? if(j==a[i])

?? {cnt++; pjz1+=a[i];}

?? if(cnt) pjz1/=cnt;

?? if(cnt<300) pjz2/=300-cnt;

?? }

??

?? 之五 要求:

?? 求出千位数上的数加个位数上的数等于百位数上的数加十 位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值 pjz1, 以及所有不满足此条件的四位数平均值pjz2。

?? if((q+g)==(b+s))

?? { cnt++; pjz1+=a[i]; }

?? else pjz2+=a[i];

?? code:

?? /*

??类型题四: 200个四位数题:

??

?? 已知数据文件IN.DAT中存有200个四位数, 并已调用读函数 readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其 功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新

?? 十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两 个十位数ab>cd, ab必须是偶数且能被5整除, cd必须是奇数,同 时两个新数的十位数字均不为零,则将满足此条件的四位数按从 大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的 个数cnt。 程序中已定义数组: a[200], b[200], 已定义变量: cnt

?? #include

?? #define MAX 200

?? int a[MAX], b[MAX], cnt = 0 ;

?? void jsVal()

?? {/**/

?? int i,j,k,A,B,C,D;

?? for(i=0; i < MAX; i++)

?? { A=a[i]/1000; B=a[i]/10%10; C=a[i]%10; D=a[i]/100%10;

?? if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D))

?? b[cnt++]=a[i];

?? }

?? for(i=0; i < cnt-1; i++)

?? { k=i;

?? for(j=i+1; j < cnt; j++)

?? if(b[k] < b[j]) k=j;

?? if(k!=i) {A=b[k]; b[k]=b[i]; b[i]=A;}

?? }

?? /**/

?? }

??200个四位数题之其余九题说明

?? 之二 要求:

?? 把千位数字和十位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的千位数字,新十位数的个位数字是 原四位数的十位数字), 以及把个位数字和百位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的个位数字, 新十 位数的个位数字是原四位数的百位数字), 如果新组成的两个十

?? 位数均是素数且新数的十位数字均不为零,则将满足此条件的四 位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的 四位数的个数cnt。

??

?? 要求: 把个位数字和千位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的个位数字,新十位数的个位数字是 原四位数的千位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十 位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一 个数能被17整除,同时两个新数的十位数字均不为零, 则将满足 此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足

?? 上述条件的四位数的个数cnt。

?? 之四 要求:

?? )把这些数存入数组a中,请考生编制一函数jsVal(),其 功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两 个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新 数的十位数字均不为零,则将满足此条件的四位数按从大到小的 顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。

?? 之五 要求: 如果四位数各位上的数字均是0或2或4或6或8, 则统计 出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存 入数组b中。

?? 之六 要求:

?? 把千位数字和个位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的千位数字,新十位数的个位数字是 原四位数的个位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十

?? 位数均是奇数并且两个十位数中至少有一个数能被5整除, 同时 两个新数的十位数字均不为零,则将满足此条件的四位数按从大 到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个 数cnt。

?? 之七 要求:

?? 把个位数字和千位数字重新组成一个新的十位数(新十 位数的十位数字是原四位数的个位数字,新十位数的个位数字是 原四位数的千位数字), 以及把百位数字和十位数字组成另一个 新的十位数(新十位数的十位数字是原四位数的百位数字, 新十 位数的个位数字是原四位数的十位数字), 如果新组成的两个十

?? 位数均是偶数并且两个十位数中至少有一个数能被9整除, 同时 两个新数的十位数字均不为零,则将满足此条件的四位数按从大 到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个 数cnt。

?? 之八 要求:

?? 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两

?? 个十位数ab 同时两个新数的十位数字均不为零,则将满足此条件的四位数按 从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数 的个数cnt。

?? 之九 要求:

?? 如果四位数各位上的数字均是奇数,则统计出满足此条 件的个数cnt并把这些四位数按从大到小的顺序存入数组b中。

?? 之十 要求:

?? 把千位数字和十位数字重新组成一个新的十位数ab(新 十位数的十位数字是原四位数的千位数字,新十位数的个位数字 是原四位数的十位数字), 以及把个位数字和百位数字组成另一 个新的十位数cd (新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两

?? 个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数, 同时两个新 数的十位数字均不为零,则将满足此条件的四位数按从大到小的 顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。

??

??

?? 类型题五

?? 已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整 数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编 制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个正整数totNum; 2. 求这些数右移1位后, 产生的新数是奇数的数 的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平均值totPjz。最后main()函数调用函数WriteDat()把所求的结果输出到文件OUT.DAT中。

?? #define MAXNUM 200

?? int xx[MAXNUM] ;

?? int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */

?? int totCnt = 0 ; /* 符合条件的正整数的个数 */

?? double totPjz = 0.0 ; /*平均值 */

?? void Calvalue(void)

?? {/**/

?? for(; xx[totNum]; totNum++)

?? if((xx[totNum]>>1)%2)

?? { totCnt++; totPjz+=xx[totNum];}

?? if(totCnt) totPjz/=totCnt;

?? /**/

?? }

??

?? 类似题一、编制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个 正整数totNum; 2. 求这些数右移1位后, 产生的新数是偶数的数 的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平均值totPjz。

?? void Calvalue(void)

?? {/**/

?? for(; xx[totNum]>0; totNum++)

?? if((xx[totNum]>>1)%2==0)

?? { totCnt++; totPjz+=xx[totNum]; }

?? if(totCnt) totPjz/=totCnt;

?? /**/

??

??类型题六

??

?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数SortCharD( ), 其函数的功能是: 以行为单位对字符按从大到小的顺序进行排序, 排序后的结果仍按行

?? 重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把 结果xx输出到文件OUT2.DAT中。 例: 原文: dAe,BfC.

?? CCbbAA

?? 结果: fedCBA.,

?? bbCCAA

?? char xx[50][80] ;

?? int maxline = 0 ; /* 文章的总行数 */

?? void SortCharD(void)

?? {/**/

?? int i,j,k,m,n; char ch;

?? for(i=0; i < maxline; i++)

?? { j=strlen(xx[i]); /*求出每行的字符个数*/

?? for(m=0; m < j-1; m++)

?? { for(n=m+1; n < j; n++)

?? if(xx[i][m] < xx[i][n])

?? { ch=xx[i][m]; xx[i][m]=xx[i][n]; xx[i][n]=ch; }

?? }

?? }

?? /**/

?? }

?? 处理字符串类型题之二

?? code:

?? /* 请编制函数ConvertCharA(), 其函数的功能是: 以行为单位 把字符串中的所有小写字母改写成该字母的下一 个字母, 如果是字母z, 则改写成字母a,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。

?? void ConvertCharA(void)

?? {/**/

?? int i,j;

?? for(i=0; i < maxline; i++)

?? for(j=0; j < strlen(xx[i]); j++)

?? if(xx[i][j]==#39;z#39;) xx[i][j]=#39;a#39;; /*如果是z的话,就变为a*/

?? else if((xx[i][j]>=#39;a#39;)&&(xx[i][j]<#39;z#39;))

?? xx[i][j]++;/*如果不是z的话就把字符向

?? 后移动一个。*/

?? /**/

?? }

??

?? 字符串类型题之三

?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数SortCharA( ), 其函数的功能是: 以行为单位对字符按从小到大的顺序进行排序, 排序后的结果仍按行 重新存入字符串数组xx中。

?? void SortCharD(void)

?? {/**/

?? int i,j,k,m,n; char ch;

?? for(i=0; i < maxline; i++)

?? { j=strlen(xx[i]); /*求出每行的字符个数*/

?? for(m=0; m < j-1; m++)

?? { for(n=m+1; n < j; n++)

?? if(xx[i][m] > xx[i][n])

?? { ch=xx[i][m]; xx[i][m]=xx[i][n]; xx[i][n]=ch; }

?? }

?? }

??

??字符串处理之四

?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数StrCharJL( ), 其函数的功能是: 以 行为单位把字符串中的所有字符的ASCII值左移4位, 如果左移后, 其字符的ASCII值小于等于32或大于100, 则原字符保持不变, 否则就把左移后的字符ASCII值再加上原字符的ASCII值, 得到新的字符仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新

?? 存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果 xx输出到OUT7.DAT文件中。

?? void StrCharJL(void)

?? {/**/

?? int i,j; char m;

?? /****此题的关键是定义 char m ,如果定义为int c的话就会出现错误

?? for(i=0; i < maxline; i++)

?? for(j=0; j < strlen(xx[i]); j++)

?? { m=xx[i][j]<<4;

?? if((m>32)&&(m<=100))

?? xx[i][j]+=m;

?? }

?? }

?? 字符串处理之五 :

?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到 字符串数组xx中; 请编制函数StrCharJR( ), 其函数的功能是: 以行为单位把字符串中的所有字符的ASCII值右移4位, 然后把右移后 的字符ASCII值再加上原字符的ASCII值, 得到新的字符仍存入原字符串对应的位置上,之后把已处理的字符串仍按行重新存入字符串 数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文 件OUT8.DAT中。

?? void StrCharJR(void)

?? {/**/

?? int i,j;

?? for(i=0; i

?? for(j=0; j

?? xx[i][j]+=xx[i][j]>>4;

?? /**/

?? }

??字符串处理之六:

??

?? 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入 到字符串数组xx中; 请编制函数ConvertCharD(), 其函数的功能 是: 以行为单位把字符串中的所有小写字母改写成该字母的上一 个字母, 如果是字母a, 则改写成字母z,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。

?? void ConvertCharD(void)

?? {/**/

?? int i,j;

?? for(i=0; i < maxline; i++)

?? for(j=0; j < strlen(xx[i]); j++)

?? if(xx[i][j]==#39;a#39;) xx[i][j]=#39;z#39;;

?? else if(islower(xx[i][j])) xx[i][j]-=1;

?? /**/

上一篇:企业各项职务职责下一篇:形体训练审美能力