第3部分
典型例题
3.1C语言概述
1.应用程序ONEFUNC.C中只有一个函数,这个函数的名称是_____________。
【分析】任何一个C程序总是由若干个函数构成的。
其中有且仅有的是main函数。
若应用程序中只有一个函数,它一定是main函数。
【解答】main
2.一个函数由__________和_________两部分组成。
【解答】函数首部,函数体
3.C语言源程序文件的扩展名是________;编译后生成目标程序文件,扩展名是________;连接后生成可执行程序文件,扩展名是_________;运行得到结果。
【解答】.c,.obj,.exe4.编写一个C程序,上机运行要经过的4个步骤是:______________________。
【解答】编写,编译,连接,运行
5.C语言中的标识符只能由三种字符组成,它们是_____________、__________和 ____________。
且第一个字符必须为____________。
【解答】字母,数字,下划线,字母或数字
6.C语言中的标识符可分为关键字、__________和_________三类。
【解答】用户定义标识符,标准标识符
7.一个C程序的执行是从____________。
A.本程序的main函数开始,到main函数结束
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C.本程序的main函数开始,到本程序文件的最后一个函数结束
D.本程序文件的第一个函数开始,到本程序main函数结束【分析】C程序的执行过程总是从main函数开始,当main函数执行结束,整个程序的 运行就结束了。
程序中的其他函数,只有当被调用时才会被执行。
【解答】A8.以下叙述不正确的是____________。
A.一个C源程序可由一个或多个函数组成
B.一个C源程序必须包含一个main函数
C.在C程序中,注释说明只能位于一条语句的后面
D.C程序的基本组成单位是函数 【分析】程序的注释可以出现在程序中的任何地方。
【解答】
C 9.C语言规定:在一个源程序中,main函数的位置____________。
A.必须在程序的开头
B.必须在系统调用的库函数的后面
C.可以在程序的任意位置
D.必须在程序的最后 【解答】
C 10.C编译程序是____________。
A.将C源程序编译成目标程序的程序
B.一组机器语言指令
C.将C源程序编译成应用软件
D.C程序的机器语言版本 【解答】
A 11.要把高级语言编写的源程序转换为目标程序,需要使用____________。
A.编辑程序
B.驱动程序
C.诊断程序
D.编译程序 【分析】编译程序又称为编译器,它可以将高级语言的源程序翻译为机器语言程序。
【解答】
D 12.以下叙述中正确的是____________。
A.在C语言中,main函数必须位于程序的最前面
B.C语言的每行中只能写一条语句
C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误 【分析】C程序中,main函数可以出现在程序中的任何位置;可以将多个语句书写在 同一行上;源程序中的注释是不进行编译的,因此编译时不会检查注释中的拼写错误;
C 语言本身并没有输入输出语句,输入输出是通过调用标准函数来实现的,如用
scanf函数 实现输入,用printf函数进行输出。
【解答】
C 3.2基本数据类型、运算符与表达式
1.C语言规定在程序中对用到的所有数据都必须指定其_________类型,对变量必须 做到先_________,后___________。
【分析】程序中所有数据都应该指定其数据类型,以明确数据所占内存空间的大小, 以及在数据上能进行什么样的操作。
对程序中所有的变量,必须先通过定义,为其申请内 存空间,然后才能对变量进行操作。
没有定义的变量无法在内存中得到其所需要的内存空 间,也就无法存储其数据,更加无法进行其他运算。
【解答】数据,定义,使用 81
2.设
C语言中的一个基本整型数据在内存中占两个字节,若需将整数135791存放到第 变量a中,应采用的类型说明语句是_______________。
3 部 分 典型例题 C程序设计实验指导与题解 【分析】如果基本整型占两个字节,则其取值范围为–32768~+32767;整数135791 已超出了其取值范围,如果用基本整型来存储该数,将发生溢出。
因此定义长整型的变量 a来存储该数。
82 【解答】longinta=135791;
3.C语言中,转义字符'\n'的功能是______________;转义符'\r'的功能是________。
【分析】注意,“回车”令光标回到当前行的行头;“回车换行”令光标去到下一行的 行头。
【解答】回车换行,回车
4.C
语言中,&作为双目运算符时表示的是______________,而作为单目运算符时表 示的是_______________。
【解答】按位与,取内存地址
5.在C语言的赋值表达式中,赋值号左边必须是_______________。
【分析】赋值号的左边只能是变量,如下写法是错误的: a+b=
5 因为赋值运算符是将右边表达式的值写入到左边的变量所处的内存单元中去。
只有变 量的内存空间才允许写入数据,而表达式
a+b是没有自己的内存空间的,因此不能写入 数据。
【解答】变量
6.自增运算符++、自减运算符––,只能用于___________,不能用于常量或表达式。
++和––的结合方向是“自_________至_____________”。
【分析】++,––运算符只能用于变量,如5++,(a+b)––这样的操作是非法的。
C语言 的单目运算符的结合方向是右结合的。
【解答】变量,右,左
7.若有定义:intx=3,y=2;floata=2.5,b=3.5;,则下面表达式的值为______________。
(x+y)%2+(int)a/(int)b 【分析】注意,两个整数相除,其结果是取整。
【解答】
1 8.下列
4组选项中,均是C语言关键字的选项是____________。
A.auto B.switch C.signed D.if enum typedef union struct include continue scanf type 【解答】
B 9.sizeof(float)是____________。
A.一个双精度型表达式
B.一个整型表达式
C.一种函数调用
D.一个不合法的表达式 【分析】sizeof()用于计算某种数据类型在内存中所占的字节数,其结果是一个整数。
【解答】
B 10.在
C语言中,要求运算数必须是整型的运算符是_____________。
A.% B./
C.<
D.!
【分析】%运算符要求参与运算的两个数均是整型数据,/、<和!既适用于整型数据, 也适用于浮点型或字符型数据。
【解答】
A 11.下面正确的字符常量是____________。
A."C"
B."\\"
C.'W'
D.'' 【分析】字符常量是用单引号引起来的单个字符。
因此选项
A和B都是错误的。
选项 D仅仅是一对单引号,不是合法的字符常量。
【解答】
C 12.以下正确的叙述是____________。
A.在C语言中,每行中只能写一条语句
B.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C.在C程序中,无论是整数还是实数,都能被准确无误地表示
D.在C程序中,%是只能用于整数运算的运算符 【分析】C程序可以将多条语句写在同一行上;对于实型变量a来说,只能存储实型的 数据。
虽然可以进行赋值a=10,但在赋值时由于两边数据类型不一样,系统会进行隐式类 型转换,最终仍然是将一个实型数赋值给a。
在计算机中,由于浮点数受其存储精度的限 制,因此是不可能被完全准确无误地表示出来的。
%是只能用于整数运算的操作符,故本 题正确答案选择
D。
【解答】
D 13.表示条件:10
【分析】注意,根据关系运算的规则,表达式10正确的表示方法应该是:x>10&&x<100。
【解答】x>10&&x<100||x<
0 14.逻辑运算符两侧运算对象的数据类型____________。
A.只能是0或
1 B.只能是0或非0正数
C.只能是整型或字符型数据
D.可以是任何类型的数据 【分析】逻辑运算符是根据操作数为0或非0来判定真假值的,因此,任何类型的数 据都可以进行逻辑运算,如!
5,'a'||'b',都是正确的表达式。
【解答】
D 15.运行下面的程序,如果从键盘上输入
6,输出的结果是_________________。
voidmain(){ intx;scanf("%d",&x);if(x++>5) printf("%d",x);else printf("%d\n",x--);} 【解答】
7 83第3部分 典型例题 C程序设计实验指导与题解 3.3顺序结构程序设计 84
1.结构化程序设计的三种基本结构是 、 、 。
【分析】结构化程序设计中包含三种基本结构,就是顺序、选择和循环。
结构化程序 设计方法认为,无论程序的结构有多复杂,总是能分解成这三种基本结构的组合。
【解答】顺序,选择,循环
2.下面语句中正确的是_____________。
A.scanf
("a=b=%d",&a,&b); B.scanf("a=%d,b=%f",&m,&f); C.scanf("%c","c"); D.scanf("%7.2f",&f); 【分析】在使用scanf函数时,应注意格式符与被输入的数据在三个方面要完全对应: 个数、顺序和数据类型。
输入float型数据时,不能指定精度,因此不能选
D。
【解答】
B 3.执行scanf("%c%c",&a,&b)语句,若要使变量a和b的值分别为'a'和'b',则正确的 输入方法为_________________。
A.ab
B.'a''b' C.ab D.a,b 【分析】scanf函数中的格式为“%c%c”,表示输入两个字符。
在两个字符输入时,中 间不能用空白符号分开,也不需要输入单引号,因此正确答案选择
A。
如果要采用D的输 入方式,其格式符应写为“%c,%c”。
【解答】
A 4.下面程序运行后,从键盘输入31,则程序的输出结果是__________________。
voidmain() { inta; scanf("%d",&a); printf("a=%d,Ha=%x,Oa=%o",a,a,a); } 【分析】注意格式符所代表的含义:%d为十进制整数;%f为float型数据;%o为八进 制数;%x为十六进制数。
此外,还应注意其他常用格式符的用法,包括%f,%s等。
【解答】a=31,Ha=1f,Oa=37
5.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=
2,则 逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值是_______________。
【分析】C语言的逻辑表达式在计算时,只有在必须执行下一表达式才能求解时,才执 行下一表达式。
在本题中,首先执行逻辑与(&&)左边的表达式(m=a>b),其结果为
0, 同时m的值也变为
0,此时整个逻辑表达式的结果已经可以确定为0了,因此&&运算符 右边的表达式(n=c>d)就不再执行了,所以变量n保持其原来的值不变,仍然是
2。
【解答】
2 6.编写程序:输入华氏温度
F,要求输出摄氏温度
C。
要求计算结果后保留两位小数。
计算公式为:c95F32。
【分析】本题中,不能将表达式写成c=5/9×(f–32)。
因为5/9的结果是取其整数商,即为
0。
因此,将表达式写成5.0/9×(f–32),可以保留运算结果的小数部分。
【参考程序】 #includevoidmain(){
floatc,f;printf("请输入一个华氏温度:\n");scanf("%f",&f);c=5.0/9*(f-32);printf("华氏温度F=%.2f\n",f);printf("摄氏温度c=%.2f\n",c);}
7.编写程序:已知圆半径和圆柱高,求圆柱的体积。
要求计算结果后保留两位小数。
【分析】可以将圆周率定义为符号常量PI,为使运算结果保留两位小数,输出时采用的格式符为%.2f。
【参考程序】 #include#definePI3.1415926voidmain(){
floatr,h,v;printf("请输入圆半径,圆柱高:");scanf("%f%f",&r,&h);v=PI*r*r*h;printf("圆柱体积=%.2f\n"v);}
8.编写程序:将任意一个两位正整数平方后,取其百位数和十位数,构成一个新的两位整数。
【分析】对任意一个整数取其个、
十、百位,或其他位,均可采用算术运算符/和%的组合来进行。
注意本题的输出是b*10+a,如果写成: printf("所构成的两位正整数为:%d%d\n",b,a); 是不满足题目要求的。
【参考程序】 #includevoidmain(){
intx,a,b;printf("请输入一个两位正整数:");
85第3部分
典型例题
C程序设计实验指导与题解
scanf("%d",&x);
x*=x;
a=x%10;
86
b=x/100%10;
printf("所构成的两位正整数为:%d\n",b*10+a);
}
3.4
选择结构程序设计
1.编写一个C程序,要求从键盘输入三个整数x、y、z,请把这三个数由小到大输出。
【分析】排序问题。
想办法把三个数进行调换,使得最小的数放到x变量里,最大的数放在z变量里。
具体方法如下:先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小;然后将y与z比较,并将较小的值保存在y里而较大的值放在z里。
最后,依次输出x、y、z。
【参考程序】 #include
voidmain()
{
intx,y,z,a;
printf("input3integer:\n");
scanf("%d,%d,%d",&x,&y,&z);
if(x>y)
/*使x<=y*/
{
a=x;
x=y;
y=a;
}if(x>z)
/*使x<=z*/
{
a=x;
x=z;
z=a;
}if(y>z)
/*使y<=z*/
{
a=z;
z=y;
y=a;
}
printf("\nx=%d,y=%d,z=%d\n",x,y,z);
}
2.编写一个C程序,要求从键盘输入一个不多于5位的正整数x,在屏幕上输出: ①它是几位数;②逆序打印出各位数字。
例如:原数为789,应输出987。
【分析】该问题的核心是分解出每一位上的数字: a=x/10000;b=x%10000/1000;c=x%1000/100;d=x%100/10;e=x%10; /*分解出万位上的数字*//*分解出千位上的数字*//*分解出百位上的数字*//*分解出十位上的数字*//*分解出个位上的数字*/ 通过检测各数字是否为零,便可知道x是几位数。
例如,if(a>0)则x是5位数。
【参考程序】 #includevoidmain(){
longx;inta,b,c,d,e;printf("\ninputx:");scanf("%ld",&x);e=x%10;d=x/10%10;c=x/100%10;b=x/1000%10;a=x/10000;if(x>=1E+5||x<=0)
printf("Outofrange!
\n");else{ if(a>0)printf("5位数,反序数字是:%d%d%d%d%d\n",e,d,c,b,a); elseif(b>0)printf("4位数,反序数字是:%d%d%d%d\n",e,d,c,b); elseif(c>0)printf("3位数,反序数字是:%d%d%d\n",e,d,c); elseif(d>0)printf("2位数,反序数字是:%d%d\n",e,d); elseprintf("1位数,数字是:%d\n",e); }}
3.编写程序:要求从键盘输入两个数,并依据提示输入的数字,选择对这两个数的 运算,并输出相应运算结果。
提示为:1:作加法;2:作乘法;3:作除法。
【分析】可使用switch语句,以提示输入的数字为依据,作分支结构设计,使得提示 输入1时,将两数之和输出;提示输入2时,将两数之积输出;提示输入3时,将两数之 商输出。
注意,除数不可为零的检测与提示。
【参考程序】 87 第 #include
3 voidmain() 部 分 典型例题 C程序设计实验指导与题解 { floatop1,op2;intsign; printf("请输入两个操作数:ab\n"); 88 scanf("%f%f",&op1,&op2); printf("请选择进行的运算(1,2,3,4):\n"); printf("1:+\n"); printf("2:-\n"); printf("3:*\n"); printf("4:/\n"); printf("您选择:"); scanf("%d",&sign); switch(sign) { case1:printf("\n%f+%f=%f\n",op1,op2,op1+op2);break; case2:printf("\n%f-%f=%f\n",op1,op2,op1-op2);break; case3:printf("\n%f*%f=%f\n",op1,op2,op1*op2);break; case4:if(op2) { printf("\n%f/%f=%f\n",op1,op2,op1/op2);break; } else { printf("\n除数不能为0\n");break; } default:printf("\n您选择的运算不对\n"); } }
4.输入某年某月某日,判断这一天是这一年的第几天。
【分析】以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
【参考程序】 #includevoidmain(){
intday,month,year,sum,leap;printf("\npleaseinputyear,month,day\n");scanf("%d,%d,%d",&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/{
case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;
case5:sum=120;break;
case6:sum=151;break;
case7:sum=181;break;
case8:sum=212;break;
case9:sum=243;break;
case10:sum=273;break;
case11:sum=304;break;
case12:sum=334;break;
default:printf("dataerror");break;
}sum=sum+day;
/*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!
=0)) /*判断是不是闰年*/ leap=1; else leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于
2,总天数应该加一天*/ sum++; printf("Itisthe%dthday.\n",sum); } 3.5循环结构程序设计
1.输入一行字符,分别统计出其中字母、数字和其他字符的个数。
【参考程序】 #include
voidmain()
{
charch;
inti,j,k;
i=j=k=0;
while((ch=getchar())!
='\n') {if(ch>'a'&&ch<'z'||ch>'A'&&ch<'Z') i++; /*统计字母*/ elseif(ch>'0'&&ch<'9') j++; /*统计数字*/ elsek++; /*统计其他*/ } printf("字母个数:%d,数字个数:%d,其他字符:%d\n",i,j,k); } 89
2.求解爱因斯坦数学题。
有一条长度不多于1000步的阶梯,若每步跨2阶,则最后第3剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,部 分 典型例题 C程序设计实验指导与题解 则最后剩5阶,若每步跨7阶,最后一阶都不剩,问总共有多少级阶梯?【分析】若每步跨m阶,则最后剩n阶,其实就是取m的余数值为n。
【参考程序】 90 #includevoidmain(){
intn;for(n=1;n<=1000;n++)
if(n%7==0&&n%6==5&&n%5==4&&n%3==2&&n%2==1)printf("爱因斯坦数学题答案:%d\n",n);
}
3.100匹马驮100担货,大马一匹驮三担,中马一匹驮两担,小马两匹驮一担,求大、中、小马的数目,要求列出所有的可能。
【分析】百马百担货问题是循环结构的一个经典习题。
解决该问题的办法是采用穷举的方法。
穷举法也称为蛮力法,它的基本思想是:列举出大、中、小马所有可能的组合,然后根据条件,挑选出其中满足条件的组合。
【参考程序】 #includevoidmain(){
intx,y,z;for(x=0;x<=100/3;x++)
for(y=0;y<=100/2;y++){
z=100-x-y;if(3*x+2*y+z/2.0==100)
printf("大马=%d匹,}}
/*注意此处不能是z/2*/中马=%d匹,小马=%d匹\n",x,y,z);
4.编写程序,求1~9999之间的全部同构数。
同构数是这样一组数;它出现在平方数的右边。
例如:5是25的右边的数,25是625的右边的数,5和25都是同构数。
【分析】本题不需要任何输入数据,因为已知待处理的数据是1~9999之间的数。
因此,采用循环结构,将1~9999之间的数逐个取出,通过设定条件来判断其是不是同构数即可。
【参考程序】 #includevoidmain(){
intn,k;for(n=1;n<10000;n++){
k=n*n;if(n==k%10||n==k%100||n==k%1000||n==k%10000)
printf("%6d",n);}printf("\n");}
5.编写程序,对数据进行加密。
从键盘输入一个数,对每一位数字均加
2,若加2后大于
9,则取其除10的余数。
例如,2863加密后得到4085。
【分析】解此题有多种方法,这里列出了4种。
前三种解法是把数据作整数处理,都是由低位向高位取数字;也可由高位向低位取数字,但处理起来要麻烦些,请读者思考。
第4种方法是把数据作为字符串,处理起来更为简单,最高位可为
0,也不限数据长度,更符合加密的应用。
如应用字符数组,处理起来更加简单,这个问题留给读者。
【参考程序】 /*方法1:将数据当作整数处理*/ #include
voidmain()
{
intx,pass=0,i=1;
shortmod;
printf("\ninputx:");
scanf("%d",&x);
printf("\n原数据:%d\n",x);
do
{/*由低位向高位逐位求得加密数字,并放入加密后数据pass中*/
mod=x%10;
/*取当前数的最低位*/
mod=(mod+2)%10;
/*求加密后的数字*/
pass=pass+mod*i;
/*将此位加密后的数字放入加密数据中*/
x=x/10;
/*计算舍弃最低位的新数据*/
i=i*10;
/*计算下一数位的权值*/
}while(x);
printf("\n加密后:%d\n",pass);
}/*方法2:将数据当作整数处理,计算权值用了数学函数pow()*/
#include
#include
voidmain()
{
intx,pass=0,i=1;
shortmod;
printf("\ninputx:");
91
scanf("%d",&x);
第
printf("\n原数据:%d\n",x);
3 for(i=0,pass=0;x>0;i++) /*此处i表示的是数位*/ 部 分 典型例题 C程序设计实验指导与题解 {mod=x%10; /*求最低位的数字*/ mod=(mod+2)%10; /*求加密后的数字*/ 92 pass=pass+mod*pow(10,i);/*将此位加密后的数字放入加密数据中*/ x=x/10; /*计算舍弃最低位的新数据*/ } printf("\n加密后:%d\n",pass); } /*方法3:将数据当作整数处理,采用了数组存储每位密码数字*/ #include
voidmain()
{
intx,a[10],i=0,j;
printf("\n请输入一个正整数:\n");
scanf("%d",&x);
printf("\n原数据:%d\n",x);
do
{a[i]=x%10;a[i]=(a[i]+2)%10;x=x/10;
/*求最低位的数字*//*求加密后的数字*//*计算舍弃最低位的新数据*/
i++;
}while(x);
printf("\n加密后:");
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");
}/*方法4:将数据当作字符串处理,这样不限数据长度,最高位也可以为0*/
#include
voidmain()
{
charc;
c=getchar();while(c>='0'&&c<='9')
/*如不是数字,则退出循环*/
{c=c+2;
/*数字加密*/
if(c>'9')
c=c-10;putchar(c);
c=getchar();
/*输出加密后数字*//*接收下一个数字*/
}
putchar('\n');
}
6.打印如下的九九乘法表。
1 2
3 4
5 6
7 8
9 -------------------------------------------------------------------------------------------------
1 2
4 3
6 9
4 8 12 16
5 10 15 20 25 …
9 18 27 36 45 54 63 72 81 【分析】本题是循环结构的经典习题。
和本题相似的还有:打印矩形、打印菱形、打
印三角形等。
类似的图案具有一个共同点,就是具有多行和多列。
一般采用两重循环结构,用外循环控制行,用内循环控制一行内的若干列的方法。
【参考程序】 #includevoidmain(){
inti,j;for(i=1;i<=9;i++)
printf("%-5d",i);printf("\n--------------------------\n");for(i=1;i<=9;i++){
for(j=1;j<=i;j++)printf("%-5d",i*j);
printf("\n");}}
7.古典问题:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【分析】兔子的规律为数列1,1,2,3,5,8,13,21,…,这就是斐波那契数列。
该数列除前两项为1外,从第三项开始,每一项都等于前两项之和。
【参考程序】 #includevoidmain(){
longf1,f2;inti;f1=f2=1;for(i=1;i<=20;i++)
93第3部分
典型例题
C程序设计实验指导与题解
{
printf("%12ld%12ld",f1,f2);
f1=f1+f2;
/*前两个月加起来赋值给第三个月*/
94
f2=f1+f2;
/*前两个月加起来赋值给第三个月*/
}
}
8.从
3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。
【参考程序】 #includevoidmain(){
inti,j,k;printf("\nhongbaihei\n");for(i=0;i<=3;i++)
for(j=1;j<=5;j++){
k=8-i-j;if(k>=0&&k<=6)
printf("%3d%3d%3d}}
\n",i,j,k);
9.将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*
5。
【分析】对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成。
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
【参考程序】 #includevoidmain(){
intn,i;printf("\npleaseinputanumber:\n");scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){
while(n!
=i){ if(n%i==0) {printf("%d*",i);n=n/i; }else break;}}printf("%d",n);} 10.判断一个整数是不是回文数。
回文数是这样一种数字,它正读倒读是一样的。
如98789,正读是98789,倒读也是98789,所以这个数字就是回文数。
【分析】根据题意,不妨将待判断的数定义为标准整型int。
因此在程序运行时,待判断的数的范围应在int之内。
回文数可以考虑为:如某数逆序后和原数相等,则它是回文数。
【参考程序】 #includevoidmain(){
intx,t,y=0;printf("\npleaseinputanumber:\n");scanf("%d",&x);t=x;while(t!
=0){ y=y*10+t%10;t=t/10;}if(x==y)printf("%d是回文数!\n",x);elseprintf("%d不是回文数!\n",x);} 3.6数组
1.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺 序每5个数求出一个平均值,放在另一个数组中并输出。
请编程。
95 【分析】本例是一维数组的基础操作题。
在对一维数组元素进行访问时,一般采用循第 环结构,通过数组元素的下标,对数组元素进行逐个访问。
程序中应注意防止数组的下标
3 越界。
部 分 典型例题 C程序设计实验指导与题解 【参考程序】 #include
96
#defineSIZE30
voidmain()
{
floatb[SIZE/5],sum;
inta[SIZE],i,k;
for(k=2,i=0;iresultis:\n");
for(i=0;i2.下面是一个5×5阶的螺旋方阵。
试编程打印出此形式的n×n(n<10)阶的方阵(顺时针方向旋进)。
12345161718196152425207142322218131211109 【分析】从4个方向考虑下标的变化。
【参考程序】 #include#defineN10voidmain(){
inta[N][N],i,j,k=0,m,n;
printf("Entern(n<10):\n");scanf("%d",&n);if(n%2==0)
m=n/2;else
m=n/2+1;for(i=0;i=i;j--){k++;a[n-i-1][j]=k;}for(j=n-i-2;j>=i+1;j--){k++;a[j][i]=k;}}for(i=0;i3.从键盘输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。
若该字符不在a中,则打印出提示信息:Thecharisnotinthestring。
试编程。
【分析】折半查找的算法思想是:将数列按有序化(递增或递减)排列,查找过程中 采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。
通过一次比较,将查找区间97缩小一半。
折半查找是一种高效的查找方法。
它可以明显减少比较次数,提高查找效率。
第但是,折半查找的先决条件是查找表中的数据元素必须有序。
部
3 分典型例题 C程序设计实验指导与题解 【参考程序】 #include
98
#include
#defineN81
voidmain()
{
chara[N]="abcdefghijklmn",c;
int,bot,mid;
printf("Inputacharacter\n");
scanf("%c",&c);
printf("c=%c\n",c);
=0,bot=strlen(a)<=bot;)
{
mid=+bot)/2;
if(c==a[mid])
{
printf("The
positionis%d\n",mid+1); break; } elseif(c>a[mid]) top=mid+1; else bot=mid-1; } >bot) printf("Thecharisnotinthestring.\n"); }
4.编写程序:从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前5个字符连接到串a中;如果b的长度小于
5,则把b的所有元素都连接到a中。
【参考程序】 #include#include#defineN81voidmain(){
chara[N],b[N];inti=0,j;printf("Inputtwostrings.\n");gets(a);gets(b);while(a[i++]!
='\0'); for(j=0,i--;j<5&&b[j]!
='\0';j++)a[i++]=b[j]; a[i]='\0';puts(a);}
5.输入10个0~100的随机整数到指定的数组中。
【参考程序】 #include#include#includevoidmain(){
inti,a[10]={0};/*time():返回从格林威治时间1970年1月1日0点0分0秒到现在的秒数*//*srand():随机函数rand的种子函数*/
srand(time(NULL));for(i=0;i<10;i++){
a[i]=rand()%100;/*产生100以内的随机整数*/}for(i=0;i<10;i++)
printf("%4d\n",a[i]);}
6.编写程序:找出一个二维数组的“鞍点”。
【分析】“鞍点”是指某位置上的元素在该行上最大,在该列上最小。
当然,二维数组 可能有几个鞍点,也可能没有鞍点。
程序中如找到“鞍点”,则打印其位置(行,列)和其 值;如没有找到“鞍点”,则提示没有“鞍点”存在。
【参考程序】 #include
#defineN10
#defineM10
voidmain()
{
inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;
printf("\n输入行数n:");
scanf("%d",&n);
printf("\n输入行数m:");
scanf("%d",&m);printf("输入%d个整数:\n",m*n);
for(i=0;imax)
{
max=a[i][j];
maxj=j;
}for(k=0,flag1=1;ka[k][maxj])
flag1=0;if(flag1)
/*flag1==
1,该数是鞍点*/ { printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max); flag2=1; } } if(!
flag2) printf("\n矩阵中无鞍点!\n"); } 3.7函数
1.编写一个函数,其功能是计算二维数组每行之和以及每列之和。
【参考程序】 voidfun(inta[][4],intn,introw[],intcol[]){ inti,j;for(i=0;i2.从键盘上输入多个单词,输入时各单词用空格隔开,用'#'结束输入。
编写一个函数,将每个单词的第一个字母转换为大写字母。
在主函数中实现单词的输入。
【参考程序】 voidfun(charstr[]){ inti=0,j=0;while(str[i]!
='#'){ if(str[i++]==''){ if(str[j]>='a'&&str[j]<='z')str[j]-=32; j=i;}}}
3.编写函数fun(charstr[20],intnum[10])。
它的功能是:分别找出字符串中每个数字字符(0,1,2,3,4,5,6,7,8,9)的个数,用num[0]来统计字符0的个数,用num[1]来统计字符1的个数,用num[9]来统计字符9的个数。
字符串在主函数中输入。
【参考程序】 fun(charstr[],intnum[10]){ inti;for(i=0;i<10;i++) num[i]=0;for(i=0;str[i]!
='\0';i++) num[str[i]-'0']++;}
4.有5个人坐在一起,问第五个人多少岁?他说比第四个人大两岁。
问第四个人的 岁数,他说比第三个人大两岁。
问第三个人,又说比第二人大两岁。
问第二个人,说比第 一个人大两岁。
最后问第一个人,他说是
10岁。
请问第五个人多大? 【分析】本题可利用递归的方法来解决。
递归分为递推和回溯两个阶段。
递推的过程如下。
(1)要想知道第五个人的年龄,首先要知道第四个人的年龄。
(2)要想知道第四个人的年龄,首先要知道第三个人的年龄。
(3)要想知道第三个人的年龄,首先要知道第二个人的年龄。
(4)要想知道第二个人的年龄,首先要知道第一个人的年龄。
(5)第一个人的年龄为
10岁;此时即可向上回溯。
【参考程序】 101 intage(intn) 第 {
3 部 分 典型例题 C程序设计实验指导与题解 intc; if(n==1)c=10; 102 else c=age(n-1)+2; return(c); } voidmain() { printf("%d\n",age
(5)); } /*第1个人的年龄是10岁*//*第n个人比第n–1个人大两岁*/ 3.8指针
1.编写程序:输入10个整数到一维数组中,把该数组中所有为偶数的数,放到另一个数组中去。
用指针法对数组进行访问。
【分析】利用指向数组的指针对数组元素进行访问。
初始时,令指针指向数组的第一个元素,通过指针的++运算即可逐个访问数组元素。
【参考程序】 #includevoidmain(){
inta[10],*p,*q;intb[10];for(p=a;p2.对一维数组中的10个整数进行操作:从第三个元素开始直到最后一个元素,依次向前移动一个位置,输出移动后的结果。
用指针对数组进行访问。
【分析】将第三个元素向前移动,是指将第三个元素的值赋给数组的第二个元素。
这样,数组的第二个元素的值将被覆盖。
可见,当数组的元素依次向前移动时,其前面的元素逐个被覆盖。
这种操作常用于删除数组中某一元素的值。
【参考程序】 #includevoidmain(){
inta[10],*p;for(p=a;p3.在一个字符数组中存放“AbcDEfg”字符串,编写程序,把该字符串中的小写字母变为大写字母,把该字符串中的大写字母变为小写字母。
要求用指针对字符串进行访问。
【参考程序】 #includevoidmain(){
chara[10]="AbcDEfg",*p;for(p=a;*p!
='\0';p++){ if(*p>='a'&&*p<='z')*p=*p-32; elseif(*p>='A'&&*p<='Z')*p=*p+32; }printf("theresultis:");puts(a);}
4.输入5个字符串,比较它们的大小,输出5个字符串中最大的字符串。
要求用指针实现对字符串的访问。
【分析】在字符串之间比较大小时,不能使用C语言的关系运算符,如>,<等进行比较,而需调用标准字符串函数strcmp,用于比较两个字符串的大小关系。
在使用该函数时,应包含“string.h”这个头文件。
【参考程序】 #include#includevoidmain(){
103第3部分
典型例题
C程序设计实验指导与题解
chara[5][20],*p;
inti;
for(i=0;i<5;i++)
104
{
gets(a[i]);
}
for(i=1,p=a[0];i<5;i++)
{
if(strcmp(a[i],p)>0)p=a[i];
}
printf("theresultis:");
puts(p);
}
5.编写程序:在主函数中输入20个数到一个数组中,通过其他函数找出数组中最大值的下标并返回给主函数,在主函数中输出数组的最大值(设最大值是唯一的)。
【分析】本题需要用数组作为函数的参数。
主函数将数组的首地址传递给其他函数,其他函数在访问了数组元素后,将最大值的下标作为返回值,返回给主函数。
【参考程序】 #includeintfun(inta[],intn){
inti,maxi;for(i=1,maxi=0;ia[maxi])maxi=i;return(maxi);}voidmain(){inta[20],maxi;inti;for(i=0;i<20;i++){
scanf("%d",&a[i]);}maxi=fun(a,20);printf("themaxiis%d,themaxis%d\n",maxi,a[maxi]);}
6.在主函数中有30个学生,三门课程的成绩,用二维数组存放该信息;用子函数分别进行如下的操作:①输出每门课程的平均分;②输出每门课程的最高分、最低分;③统 计每门课程不及格人数。
【参考程序】 #include
#defineN30
voidaverage(inta[][3],intn)
{
inti,j;
floatave[3],num[3];
for(i=0;i<3;i++)
num[i]=0.0;
for(j=0;j<3;j++)
for(i=0;imax[j])
max[j]=a[i][j];
if(a[i][j]maxandminis\n");
for(i=0;i<3;i++)
printf("the%dcourse'maxis%d,minis%d\n",i+1,max[i],min[i]);
}
voidcount(inta[][3],intn)
{
inti,j,num[3];
for(i=0;i<3;i++)
num[i]=0;
105
for(j=0;j<3;j++)
第
for(i=0;i3
if(a[i][j]<60)
部
分
典型例题
C程序设计实验指导与题解
num[j]++;
for(i=0;i<3;i++)
printf("the%dcourse'under60numberis%d\n",i+1,num[i]);
106
}
voidmain()
{
inta[N][3];
inti,j;
for(i=0;i1.编程,定义一个带参数的宏maxd,计算从键盘输入两个数值中的最大值。
【参考程序】 #include#definemaxd(x,y)((x)>(y)?
(x):(y))voidmain(){ intx,y;printf("Pleaseinputxandy:\n");scanf("%d%d",&x,&y);printf("maxd=%d\n",maxd(x,y));}
2.编程,定义一个带参数的宏,用来判断整数n是否能被5和7同时整除,其中n是由键盘任意输入的整型数据。
【参考程序】 #include#definecube(n)(((n)%5==0)&&((n)%7==0)?
voidmain(){ intn,t;printf("pleaseinputn:\n");scanf("%d",&n);t=cube(n);if(t==1) 1:0) printf("%d能被5和7同时整除!\n",n);else printf("%d不能被5和7同时整除!\n",n);}
3.编程,用条件编译方法实现:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如'a'变成'b',…,'z'变成'a'),其他非字母字符不变。
用#define命令来控制是否要译成密码。
例如: #defineCHANGE
1 则输出密码。
若 #defineCHANGE
0 则不译成密码,按原码输出。
【参考程序】 #include"stdio.h" #defineCHANGE1 voidmain(){ charstr[81],c;inti=0;gets(str);while(str[i]!
='\0'){ #ifCHANGEif(str[i]=='Z'||str[i]=='z')str[i]=str[i]-25;elseif(str[i]>='A'&&str[i]<'Z'||str[i]>='a'&&str[i]<'z')str[i]=str[i]+1; #endifi++; } puts(str); } 3.10复杂数据类型
1.编写一个函数output,打印一个学生的成绩数组,该数组中有5个学生的数据记录, 每个记录包括学号、姓名和三门课程成绩。
在主函数中输入这些记录,用output函数输出 这些记录。
【参考程序】 107 第 #include
3 #defineN5 部 分 典型例题 C程序设计实验指导与题解 structstu { intnum; 108 charname[20]; floatscore[3]; }stus[N]; voidmain() { voidoutput(structstustudents[]); inti,j; printf("pleaseinputarraydata:\n"); for(i=0;i2.在题1的基础上,编写一个函数input,用来输入5个学生的数据记录。
【参考程序】 #include#defineN5structstu{
intnum;charname[20];floatscore[3];}stus[N];voidmain(){
voidinput(structstustudents[]);voidoutput(structstustudents[]);input(stus);output(stus);}voidoutput(structstustudents[]){inti,j;for(i=0;i3.试利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。
【参考程序】 #includevoidmain(){
structstudy{
intmid;intend;intaverage;}math;scanf("%d%d",&math.mid,&math.end);math.average=(math.mid+math.end)/2;printf("average=%d\n",math.average);
109第3部分
典型例题
C程序设计实验指导与题解
}
4.试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期110末成绩,然后计算其平均成绩并输出成绩表。
【参考程序】 #includestructstu{
intnum;intmid;intend;intave;}s[3];voidmain(){structstu*p;for(p=s;pnum),&(p->mid),&(p->end));p->ave=(p->mid+p->end)/2;}for(p=s;pnum,p->mid,p->end,p->ave);}
5.输入10个同学的姓名、数学成绩、英语成绩和物理成绩,确定总分最高的同学,并打印其姓名及其三门课程的成绩。
【参考程序】 #include"stdio.h" #include"string.h"structStudent /*定义结构体structStudent*/ {charName[20]; /*姓名*/ floatMath; /*数学*/ floatEnglish; /*英语*/ floatPhysical; /*物理*/ }; voidmain() {/*定义structStudent类型结构体数组存储所有同学的相关信息*/ structStudentoStudents[10]={{"",0,0,0}};/*定义structStudent类型指针存储总分最高的同学的地址信息*/ structStudent*pMaxStu; structStudent*pStudent;floatfMaxScore,fTotal;floatfMath,fEnglish,fPhysical;charszName[20];printf("\nPleaseinput10studentsandtherescore\n");/*提示信息*/printf("----------------------------------------\n");printf("NameMathEnglishPhysical\n");printf("----------------------------------------\n");fMaxScore=0;pMaxStu=oStudents;for(pStudent=oStudents;pStudentName,szName);pStudent->Math=fMath;pStudent->English=fEnglish;pStudent->Physical=fPhysical;fTotal=pStudent->Math+pStudent->English+pStudent->Physical;/*获得当前最高分的同学*/if(fMaxScoreName,pMaxStu->Math,pMaxStu->English,pMaxStu->Physical);}
3.11文件
1.将文件file1.c的内容输出到屏幕,并复制到file2.c中。
【参考程序】 #includevoidmain(){
FILE*fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");while(!
feof(fp1)) putchar(getc(fp1));rewind(fp1); 111第3部分 典型例题 C程序设计实验指导与题解 while(!
feof(fp1)) putc(getc(fp1),fp2); fclose(fp1); 112 fclose(fp2); }
2.统计文件letter.txt中小写字母c的个数。
【参考程序】 #includevoidmain(){
FILE*fp;charch;intn=0;if((fp=fopen("letter.txt","r"))==NULL){
printf("打不开文件\n");exit
(0);}while(!
feof(fp)){ch=fgetc(fp);if(ch=='c') n++;}printf("count=%ld\n",n);fclose(fp);}
3.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test.dat中保存。
输入的字符串以回车结束。
【参考程序】 #includevoidmain(){
FILE*fp;charstr[100];inti=0;if((fp=fopen("test.dat","w"))==NULL){
printf("打不开文件\n");exit
(0);}printf("输入一个字符串:\n");gets(str); while(str[i]!
='\0'){ if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-32; fputc(str[i],fp);i++;}fclose(fp);fp=fopen("test.dat","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}
4.有5个学生,每个学生有三门课的成绩,从键盘输入数据(包括学号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud.dat中。
【参考程序】 #defineN2#include"stdio.h"structstudent{ charnum[6];charname[8];intscore[3];floatavr;}stu[N];voidmain(){inti,j,sum;FILE*fp;for(i=0;i=1)
printf("filewriteerror\n");
fclose(fp);
}
3.12综合练习
1 一、单选题(每题2分,共60分)
1.以下能正确定义整型变量a、b和c并为其赋初值5的语句是______。
A.inta=b=c=5; B.inta=5,b=5,c=5; C.inta,b,c=5; D.a=b=c=5;
2.有以下程序: main(){inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;pa=a;for(i=0;i<3;i++)if(i<2) pa[1][i]=pa[1][i]-1;else pa[1][i]=1;printf("%d\n",a[0][1]+a[1][1]+a[1][2]);} 执行后输出结果是______。
A.无确定值 B.
7 C.
6 D.
8 3.若已定义:inta[9],*p=a;,并在以后的语句中未改变p的值,不能表示a[1]地址的 表达式是______。
A.a++ B.a+
1 C.p+
1 D.++p
4.与数学式子3乘以x的n次方/(2x–1)对应的C语言表达式是______。
A.3*x^n/(2*x–1) B.3*x**n/(2*x–1) C.3*pow(n,x)/(2*x–1) D.3*pow(x,n)*(1/(2*x–1))
5.在
C语言中,不正确的int类型的常数是______。
A.32768 B.
0 C.0xAF D.037
6.以下选项中,非法的字符常量是______。
A.'\17'
B.'\t'
C."\n"
D.'\xaa'
7.若执行以下程序时从键盘上输入
9,则输出结果是______。
main(){intn; scanf("%d:",&n);if(n++<10) printf("%d\n",n);else printf("%d\n",n--);} A.10 B.11 C.
9 D.
8 8.以下叙述中正确的是______。
A.花括号“{”和“}”只能作为函数体的定界符
B.构成C程序的基本单位是函数,所有函数名都可以由用户命名
C.分号是C语句之间的分隔符,不是语句的一部分
D.C程序中注释部分可以出现在程序中任意合适的地方
9.下面的函数调用语句中func函数的实参个数是______。
func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8))); A.
3 B.
4 C.
8 D.
5 10.下面4个选项中,均是合法转义字符的选项是_______________。
A.'\'''\\''\n'
B.'\018''\f''xab'
C.'\''\017''\'''
D.'\\0''\101''x1f' 11.下面程序段 x=3;do{y=x--; if(!
y){printf("x");break;}printf("#");}while(1<=x<=2);
A.是死循环
B.将输出###x
C.将输出##
D.含有不合法的控制表达式 12.若有说明:inti,j=
7,*p=&i;,则与i=j;等价的语句是______。
A.i=*p;
B.*p=*&j; C.i=**p; D.i=&j; 13.以下程序的输出结果是______。
#includemain(){char*a="abcdefghi";
fun(a);puts(a);}fun(char*s)
{intx,y;charc;for(x=0,y=strlen(s)-1;
x=8)break;
if(a%2==1){a+=5;continue;}
a-=3;}printf("%d\n",b);}
程序运行后的输出结果是______。
A.
6 B.
4 15.有以下程序: C.
5 main(){intm=3,n=4,x; x=-m++;x=x+8/++n;printf("%d\n",x);} 程序运行后的输出结果是______。
A.–1 B.
5 C.
3 16.下列函数定义中,会出现编译错误的是______。
A.max(intx,inty,int*z) {*z=x>y?
x:y;} B.intmax(intx,inty) {return(x>y?
x:y);} C.max(intx,inty) {intz;z=x>y?
x:y;return(z);} D.ihgfedcba D.3D.–
2 D.intmax(intx,y) {intz;z=x>y?
x:y;returnz;} 17.执行以下程序段后,w的值为______。
intw='A',x=14,y=15;w=((x||y)&&(w<'a'));
A.–1 B.
1 C.NULL D.
0 18.若要求从键盘读入含有空格字符的字符串,应该使用函数______。
A.getchar() B.gets() C.getc() D.scanf() 19.若有以下说明和语句 int
c[4][5],(*p)[5];p=c; 能够正确引用c数组元素的是______。
A.*(p+3) B.p+
1 20.有以下程序:
C.*(p+1)+
3 D.*(p[0]+2) voidswap(char*x,char*y){chart; t=*x;*x=*y;*y=t;}main(){char*s1="abc",*s2="123"; swap(s1,s2);printf("%s,%s\n",s1,s2);} 程序执行后的输出结果是______。
A.321,cba B.abc,123 C.1bc,a23 D.123,abc 21.在一个C源程序文件中,若要定义一个只允许本源程序文件中所有函数使用的全 局变量,则该变量需要使用的存储类别是______。
A.auto B.static C.extern D.register 22.下列叙述中正确的是______。
A.C
语言编译时不检查语法
B.C语言的函数可以嵌套定义
C.C语言的子程序有过程和函数两种
D.C语言的函数可以嵌套调用 23.有以下程序: 117 main() 第 {chark;inti;
3 for(i=1;i<3;i++) 部 分 典型例题 C程序设计实验指导与题解 {scanf("%c",&k);switch(k){ aassee''01''::pprriinnttff((""annuomtbheerr\\nn""));; }} } 程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。
A.another number C.number numbernumbernumber 24.有如下程序段: B.another another D.another numbernumber inta=14,b=15,x;charc='A';x=(a&&b)&&(c<'B'); 执行该程序段后,x的值为______。
A.true B.
0 C.false 25.下面程序的功能是输出以下形式的金字塔图案: D.
1 ****************main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf("");for(j=1;j<=______;j++)printf("*");printf("\n");}} 在下划线处应填入的是______。
A.2*i+
1 B.2*i–
1 C.i D.i+
2 26.可在C程序中用作用户标识符的一组标识符是______。
A.Hi
B.Date C.and D.case Dr.Tom y-m-d __2007 Bigl 27.下面函数 int
fun1(char*x){char*y=x; while(*y++);return(y-x-1);} 的功能是______。
A.求字符串的长度
B.将字符串x连接到字符串y后面
C.将字符串x复制到字符串y
D.比较两个字符串的大小 28.不能把字符串:Hello!
赋给数组b的语句是______。
A.charb[10]="Hello!
"; B.charb[10]={'H','e','l','l','o','!
','\0'}; C.charb[10]={'h','e','l','l','o','!
'}; D.charb[10];strcpy(b,"Hello!
"); 29.设变量已正确定义并赋值,以下正确的表达式是______。
A.int(15.8%5)B.x=y+z+
5,++y C.x=25%5.0D.x=y*5=x+z 30.下述对C语言字符数组的描述中错误的是______。
A.字符数组可以存放字符串
B.不可以用关系运算符对字符数组中的字符串进行比较
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.字符数组的字符串可以整体输入、输出
二、填空题(每题
4分,共20分)
1.以下程序的输出结果是______。
#includemain(){inta=252;
printf("a=%oa=%#o\n",a,a);printf("a=%xa=%#x\n",a,a);}
2.以下程序运行后的输出结果是______。
main() {inti,n[]={0,0,0,0,0}; for(i=1;i<=4;i++){n[i]=n[i-1]*2+1; printf("%d",n[i]); } 119 } 第
3.若已经定义inta=25,b=14,c=19;,以下三目运算符(?
:)所构成的语句的执行结果部
3 分 典型例题 C程序设计实验指导与题解 是______。
a++<=2&&b--<=2&&c++?
printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("a=%d, 120 b=%d,c=%d\n",a,b,c);
4.设有以下程序: main()
{inta,b,k=4,m=
6,*p1=&k,*p2=&m; a=p1==&m;b=(*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);} 执行该程序后,a的值为_________,b的值为________。
5.有intx,y,z;且x=3,y=–4,z=
5,则以下表达式的值为______。
!
(x>y)+(y!
=z)||(x+y)&&(y-z)
三、编程题(每题10分,共20分)
1.编写程序:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。
例如,若输入整数:2310,则应输出:2,3,5,7,11。
2.编写程序:将仅在字符串s中出现而不在字符串t中出现的字符,及仅在字符串t中出现而不在字符串s中出现的字符,构成一个新字符串放在u中,u中的字符按原字符串中字符顺序排列,不去掉重复字符。
例如,当s="112345",t="24677"时,u中的字符串为"1135677"。
3.13综合练习
2 一、单选题(每题2分,共60分)
1.若有以下程序: main(){intk=2,i=2,m;m=(k+=i*=k);printf("%d,%d\n",m,i);} 执行后的输出结果是______。
A.8,
3 B.8,
6 C.6,
4 D.7,
4 2.以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。
#includevoidf(charp[][10],intn)
{chart[20];inti,j;for(i=0;i
A.
5 B.
3 C.
4 D.
6 3.若有说明“inta[3][4];”,则对a数组元素的正确引用是______。
A.a[1,3] B.a[2][4] C.a[1+1][0] D.a
(2)(1)
4.以下不能正确表示代数式2ab的C语言表达式是______。
cd A.a*b/c/d*
2 B.2*a*b/c/d C.a/c/d*b*
2 D.2*a*b/c*d
5.在C语言中,合法的长整型常数是______。
A.4962710
B.OL C.324562& D.216D
6.以下关于long、int和short类型数据占用内存大小的叙述中正确的是______。
A.根据数据的大小来决定所占内存的字节数
B.均占4个字节
C.由用户自己定义
D.由C语言编译系统决定
7.若执行下面程序时从键盘上输入
5,则输出是______。
main(){ intx;scanf("%d",&x);if(x++>5)printf("%d\n",x);elseprintf("%d\n",x--);} A.
6 B.
7 C.
5 D.
4 8.以下叙述中正确的是______。
A.C语言的源程序不必通过编译就可以直接运行
B.C语言程序经编译形成的二进制代码可以直接运行
C.C语言中的每条可执行语句最终都将被转换成二进制的机器指令
D.C语言中的函数不可以单独进行编译
9.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为______。
121第3部分 典型例题 C程序设计实验指导与题解
A.自动(auto)
B.外部(extern)
C.静态(static)
D.寄存器(register) 10.判断char型变量ch是否为大写字母的正确表达式是_______。
122
A.'A'<=ch<='Z'
B.('A'<=ch)AND('Z'>=ch)
C.(ch>='A')&&(ch<='Z')
D.(ch>='A')&(ch<='Z') 11.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
voidsort(inta[],intn){inti,j,t; for(i=0;i
A.1,2,10,9,8,7,6,5,4,
3 B.10,9,8,7,6,5,4,3,2,
1 C.1,2,3,8,7,6,5,4,9,10 D.1,2,3,4,5,6,7,8,9,10 12.若指针
p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句 是______。
A.p=2*(int*)malloc(sizeof(int)); B.p=(int*)calloc(2,sizeof(int)) C.p=(int*)malloc(2*2) D.p=(int*)malloc(2*sizeof(int)) 13.设有定义“char
p[]={'1','2','3'},*q=p;”,以下不能计算出一个char型数据所占字节 数的表达式是______。
A.sizeof(char)B.sizeof(p) C.sizeof(*q)D.sizeof(p[0]) 14.有以下程序: main(){intk=4,n=0; for(;n=0)continue;k--;}printf("%d,%d\n",k,n);}
程序运行后的输出结果是______。
A.4,
4 B.2,
2 C.3,
3 D.1,
1 15.设有语句inta=3;,则执行了语句a+=a–=a*a;后,变量a的值是______。
A.
0 B.
3 C.
9 D.–12 16.以下程序运行后的输出结果是______。
#definef(x)(x*x)main(){inti1,i2;i1=f
(8)/f
(4);i2=f(4+4)/f(2+2);printf("%d,%d\n",i1,i2);} A.64,28 B.4,
4 17.以下程序的输出结果是______。
C.64,64 D.4,
3 #defineSQR(X)X*Xmain(){inta=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);} A.16 B.
1 18.以下程序的输出结果是______。
C.
9 D.
2 #include#includemain(){
inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf("%f\n",z);}
A.14.000000
B.14.900000C.13.700000D.15.400000
19.若二维数组a有m列,则在a[i][j]前(包括a[i][j])的元素个数为___________。
A.i*m+j–
1 B.i*m+j C.j*m+i D.i*m+j+
1 20.有以下程序: main(){charch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5));} 程序运行后的输出结果是______。
A.z
B.元素ch[5]的地址 123第3部分 典型例题 C程序设计实验指导与题解 C.
0 D.字符y的地址 21.假定以下程序经编译和链接后生成可执行文件PROG.EXE,如果在此可执行文件 所在目录的DOS提示符下输入:PROGABCDEFGHIJKL↙,则输出结果为______。
124 main(intargc,char*argv[]) {while(--argc>0)printf("%s",argv[argc]); printf("\n"); }
A.ABCDEFGC.ABCDEFGHIJKL22.在一个C语言程序中______。
A.main函数必须出现在所有函数之前C.main函数必须出现在所有函数之后23.有以下程序:
B.IJKLABCDEFGHD.IJHL B.main函数必须出现在固定位置D.main函数可以在任何地方出现 main(){inta=15,b=21,m=0; switch(a%3){ case0:m++;break;case1:m++;switch(b%2) {default:m++;case0:m++;break; }}printf("%d\n",m);} 程序运行后的输出结果是______。
A.
1 B.
3 C.
2 24.C源程序中不能表示的数制是______。
A.二进制
B.十六进制
C.十进制 25.以下程序的输出结果是______。
D.4D.八进制 main(){inti,k,a[10],p[3]; k=5;for(i=0;i<10;i++) a[i]=i;for(i=0;i<3;i++) p[i]=a[i*(i+1)];for(i=0;i<3;i++) k+=p[i]*2;printf("%d\n",k);} A.23 B.21 C.22 D.20 26.以下4组用户定义标识符中,全部合法的一组是______。
① _mainencludesin ② If-maxturbo ③ txtREAL3COM ④ intk_2_001
A.②
B.①
C.③ 27.以下程序的输出结果是______。
D.④ intx=3; main() {inti; for(i=1;i
A.14
B.
7 C.12 D.
5 29.若以下选项中的变量已正确定义,则正确的赋值语句是______。
A.x1=26.8%3; B.1+2=x2; C.x3=0x12; D.x4=1+2=3; 30.有如下程序: main()
{ inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; 125第3部分 典型例题 C程序设计实验指导与题解 printf("%d\n",s);} 126 该程序的输出结果是______。
A.18 B.19 C.21
二、填空题(每题4分,共20分)
1.若有以下程序: D.20 intf(intx,inty){return(y-x)*x;} main(){inta=3,b=4,c=5,d; d=f(f(3,4),f(3,5));printf("%d\n",d);} 执行后输出结果是______。
2.在C语言中,二维数组的定义方式为:intn=10,a[n][n];,这个定义是否正确。
_____
3.假设所有变量均为整型,表达式(a=2,b=5,a>b?
a++:b++,a+b)的值是:_______。
4.以下程序的输出结果是______。
main(){inta=177; printf("%o\n",a);}
5.条件“2
三、C语言(每题10分,共20分)
1.编写程序:读入一个整数m(4≤m≤10),例如
4,程序将自动在a[0]~a[3]4个数组元素中分别放入14916,且按逆序输出此4个元素:16941。
2.编写程序:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串ss输入:d,则输出结果应为:upper=5,lower=
9。
3.14综合练习
3 一、单选题(每题2分,共60分)
1.以下程序的输出结果是______。
unionmyun{struct {intx,y,z;}u;intk;}a;main(){a.u.x=4;a.u.y=5;a.u.z=6;a.k=0; printf("%d\n",a.u.x);} A.
4 B.
6 C.
5 D.
0 2.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
voidsort(inta[],intn){inti,j,t; for(i=0;iA.1,2,3,8,7,6,5,4,9,10C.1,2,3,4,5,6,7,8,9,10
3.有以下程序: B.10,9,8,7,6,5,4,3,2,1D.1,2,10,9,8,7,6,5,4,
3 #includemain(){inta[]={1,2,3,4},y,*p=&a[3];
--p;y=*p;printf("y=%d\n",y);
}
程序的运行结果是______。
A.y=
1 B.y=
0 C.y=
2 D.y=
3 4.已知ch是字符型变量,下面正确的赋值语句是______。
A.ch='123'; B.ch='\08'; C.ch='\xff'; D.ch='\'
5.C语言运算对象必须是整型的运算符是______。
A.%
B.= C./
D.<=
6.在说明语句:int*f();中,标识符f代表的是______。
A.一个返回值为指针型的函数名
B.一个用于指向一维数组的行指针
C.一个用于指向函数的指针变量
D.一个用于指向整型数据的指针变量
7.有以下程序:
127 main() 第 {inta=5,b=4,c=3,d=2;
3 if(a>b>c) 部 分 典型例题 C程序设计实验指导与题解 printf("%d\n",d); elseif((c-1>=d)==1) printf("%d\n",d+1); 128 else printf("%d\n",d+2); } 执行后输出的结果是______。
A.
3 B.
2 C.
4 D.编译时有错,无结果
8.以下叙述中错误的是______。
A.计算机不能直接执行用
C语言编写的源程序
B.后缀为.obj的文件,经链接程序生成后缀为.exe的文件是一个二进制文件
C.C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
D.后缀为.obj和.exe的二进制文件都可以直接运行
9.以下不正确的说法为______。
A.在不同函数中可以使用相同名字的变量
B.在函数内定义的变量只在本函数范围内有效
C.形式参数是局部变量
D.在函数内的复合语句中定义的变量在本函数范围内有效 10.下列关于单目运算符++、–
–的叙述中正确的是______。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量、int型变量和float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量和int型变量,但不能是float型变量 11.有如下程序: main(){intn[5]={0,0,0},i,k=2;for(i=0;i
A.
2 B.不确定的值 12.有以下程序: C.
1 D.
0 main(){chars[]={"aeiou"},*ps;ps=s;printf("%c\n",*ps+4); } 程序运行后输出的结果是______。
A.a B.e 13.指针s所指字符串的长度为______。
C.u
D.元素s[4]的地址 char*s="\t1Name\\Address\n";
A.说明不合法14.有以下程序: B.19 C.15 D.18 main(){intk=4,n=0; for(;n=0)continue;k--;}printf("%d,%d\n",k,n);}
程序运行后的输出结果是______。
A.4,
4 B.2,
2 C.3,
3 D.1,
1 15.若变量已正确定义并赋值,下面符合C语言语法的表达式是______。
A.a=b=c+
2 B.a:=b+
1 C.int18.5%3D.a=a+7=c+b 16.有以下程序: #include
#defineN
5 #defineM N+
1 #definef(x)(x*M) main() {inti1,i2; i1=f
(2); i2=f(1+1); printf("%d%d\n",i1,i2); } 程序的运行结果是______。
A.127 B.117 C.1111 17.执行以下程序段后,w的值为______。
D.1212 intw='A',x=14,y=15;w=((x||y)&&(w<'a'));
A.–118.请读以下程序: #include#include
B.
1 C.NULL D.
0 129第3部分 典型例题 C程序设计实验指导与题解 main() { char*s1="AbCdEf",*s2="aB"; 130 s1++;s2++; printf("%d\n",strcmp(s1,s2)); } 上面程序的输出结果是______。
A.正数
B.负数
C.零 19.以下不能对二维数组a进行正确初始化的语句是 A.inta[2][3]={0}; B.inta[][3]={{1,2},{0}}; C.inta[][3]={1,2,3,4,5,6}; D.inta[2][3]={{1,2},{3,4},{5,6}}; 20.下面程序的输出是______。
D.不确定的值。
chars[]="ABCD"; main() {char*p; for(p=s;pA
BCD
B CD
C D
D ③DCBA ④ABCDABCABA
A.②
B.①
C.③
D.④ 21.已知:chara[3][10]={"BeiJing","ShangHai","TianJin"};,不能正确显示字符串 "ShangHai"的语句是 。
A.printf("%s",a+1); B.printf("%s",*(a+1)); C.printf("%s",*a+1); D.printf("%s",&a[1][0]); 22.以下叙述中正确的是______。
A.C
语言中的文件是流式文件,因此只能顺序存取数据
B.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才 能读到第一个数据
D.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖 23.有以下程序: main()
{inti; for(i=0;i<3;i++) switch(i){ case0:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}} 程序运行后的输出结果是______。
A.022111 B.021021 C.012 D.000122 24.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'–'3'; 后,c2中的值为 。
A.D B.68
C.C
D.不确定的值 25.有以下程序: main(){intk=5,n=0; do{switch(k) {case1:case3:n+=1;default:n=0;k--;case2:case4:n+=2;}printf("%d",n);}while(k>0&&n<5);} k--;break;k--;break; 程序运行后的输出结果是______。
A.2356 B.0235 C.02356 26.以下叙述中不正确的是______。
A.C语言中的文本文件以ASCII码形式存储数据
B.C语言中对二进制位的访问速度比文本文件快
C.C语言中,顺序读写方式不适用于二进制文件
D.C语言中,随机读写方式不适用于文本文件 27.有以下程序: D.235 main(){intk=4,n=0; for(;n=0)continue;k--;}printf("%d,%d\n",k,n);}
131第3部分
典型例题
C程序设计实验指导与题解
程序运行后的输出结果是______。
A.4,
4 B.2,
2 C.3,
3 D.1,
1 132 28.下面各语句行中,能正确给字符串进行赋值操作的语句行是______。
A.char
*s;scanf("%s",*s); B.chars[5]={'A','B','C','D','E'}; C.char*s="ABCDE"; D.charst[4][5]={"ABCDE"}; 29.若以下选项中的变量已正确定义,则正确的赋值语句是______。
A.xl=26.8%3; B.1+2=x2; C.x3=0x12; D.x4=1+2=3; 30.下面程序段的运行结果是______。
char
c[]="\t\v\\\Owill\n";printf("%d",strlen(c));
A.字符串中有非法字符,输出值不确定B.14 C.
3 D.
9 二、填空题(每题4分,共20分)
1.已有定义“intd=18;”,执行以下语句后的输出结果是______。
printf("*d
(1)=%d*d
(2)=%3d*d
(3)=%-3d*\n",d,d,d);
2.设已有说明:static
charc1[10],c2[10];,下面程序片段是否合法? c1={"book"};c2=c1;
3.若有定义“charc='\010';”,则变量c中包含的字符个数为______。
4.假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换,请填空。
a+=___________;b=a–___________;a–=___________;
5.若a=11,b=4,c=
3,则表达式!
(ac&1的值是______。
三、编程题(每题10分,共20分)
1.函数fun的功能是:把主函数中输入的三个数,最大的放在a中,最小的放在c中。
例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。
2.程序的功能是从字符串s尾部开始,按逆序把相邻的两个字符交换位置,并依次把每个字符紧随其后重复出现一次,放在一个新串t中。
例如,当s中的字符串为"12345"时,则t中的字符串应为"4455223311"。
3.15综合练习
4 一、单选题(每题2分,共60分)
1.以下程序的输出结果是______。
main(){inta=5,b=4,c=6,d; printf("%d\n",d=a>c?
(a>c?
a:c):(b));} A.
5 B.
4 C.
6 D.不确定
2.设变量已正确定义,则以下能正确计算f=n!
的程序段是______。
A.f=1;for(i=n;i>1;i++)f*=i; B.f=1;for(i=1;i=2;i––)f*=i;
3.以下函数返回a所指数组中最小值所在的下标值。
fun(int*a,intn){ inti,j=0,p;p=j;for(i=j;i
A.i=p
B.p=j
C.a[p]=a[i]
D.p=i
4.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是______。
A.*pb=&x; B.pb=x; C.pb=&x;
D.*pb=*x
5.以下4个选项中,不能看作一条语句的是______。
A.{;} B.a=0,b=0,c=0; C.if(b==0)m=1;n=2; D.if(a>0);
6.下列定义变量的语句中错误的是______。
A.double
int_; B.charffor; C.floatUS$;D.int_int;
7.设变量x和y均已正确定义并赋值。
以下if语句中,在编译时将产生错误信息的 是______。
A.if(x>y&&y!
=0); B.if(x++); C.if(x>0)x––; D.if(y<0){;} elsey++;elsex++;
8.设有以下定义: inta=1; doubleb=3.5; charc='B'; #defined
3 则以下语句中错误的是 。
A.a++; B.b++; C.c++;
9.以下所列的各函数声明中,正确的是______。
A.voidplay(vara:Integer,varb:Integer) D.d++; 133第3部分 典型例题 C程序设计实验指导与题解
B.Subplay(aasinteger,basinteger) C.voidplay(inta,intb) D.voidplay(inta,b) 134 10.下列运算符中优先级最高的是_______。
A.<
B.!
=
C.&& 11.有如下程序:
D.+ main(){inti,sum; for(i=1;i<=3;sum++)printf("%d\n",sum);} sum+=i; 该程序的执行结果是______。
A.
3 B.
6 C.死循环 D.
0 12.若有说明语句:double*p,a;,则能通过scanf语句正确给输入项读入数据的程序 段是______。
A.p=&a;scanf("%lf",p);
B.*p=&a;scanf("%f",p); C.p=&a;scanf("%lf",*p);
D.*p=&a;scanf("%lf",p); 13.以下正确的字符串常量是______。
A.OlympicGames
B.'abc'
C."\\\"
D."" 14.有以下程序: main(){inta=1,b; for(b=1;b<=10;b++){if(a>=8)break;if(a%2==1){a+=5;continue;}a-=3;}printf("%d\n",b);} 程序运行后的输出结果是______。
A.
6 B.
4 C.
5 D.
3 15.假定X和Y为double型,则表达式X=
2,Y=X+3/2的值是______。
A.
3 B.3.500000 C.2.000000 D.3.000000 16.有如下程序: #define#define#define main(){ N2MN+1NUM2*M+
1 inti;for(i=1;i<=NUM; printf("%d\n",i);} i++) 该程序中的for循环执行的次数是______。
A.
8 B.
6 17.以下程序的输出结果是______。
C.
7 D.
5 #defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m); printf("%d\n",a);} A.16 B.
1 18.以下程序的输出结果是______。
C.
9 D.
2 #include#includemain(){
inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf("%f\n",z);}
A.15.400000
B.14.000000
C.13.700000
19.若有说明“inta[3][4];”,则对a数组元素的正确引用是
A.a[1+1][0]
B.a
(2)(1) C.a[1,3] 20.有以下程序: D.14.900000。
D.a[2][4] main(){charch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5)); } 程序运行后的输出结果是______。
A.字符y的地址 B.
0 C.元素ch[5]的地址 D.z 21.已知“chars[6],*ps=s;”,则正确的赋值语句是______。
A.s="12345";
B.*s="12345"; C.ps="12345";
D.*ps="12345"; 135
第3部分 典型例题 C程序设计实验指导与题解 22.有以下程序段: FILE*fp; 136 fp=fopen("al","r"); 其表示为 。
A.定义了一个普通指针,函数值给指针赋值
B.定义了一个文件
al
C.打开一个文件,该文件可读可写
D.打开一个文件,该文件只能读不能写 23.有以下程序: main(){intc; while((c=getchar())!
='\n'){switch(c-'2'){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;} }} 从第一列开始输入以下数据,↙代表一个回车符。
2473↙ 程序的输出结果是______。
A.6688766 B.668966 C.66778777 24.设有说明语句“char
a='\72';”,则变量a______。
A.包含三个字符
B.包含两个字符
C.包含一个字符
D.说明不合法 25.有以下程序: D.668977 main(){intx=100,a=10,b=20, if(a=15)if(!
ok1)x=1;elseif(ok2)x=10; x=-1;printf("%d\n",x);} ok1=
5, ok2=0; 程序的输出是______。
A.–1 B.
0 C.
1 D.不确定的值 26.以下4组用户定义的标识符中,全部合法的一组是______。
① _mainencludesin ② If–maxturbo ③ txtREAL3COM ④ intk_2_001
A.②
B.④
C.① 27.若i为整型变量,则以下循环执行次数是
D.③。
for(i=2;i==0;)printf("%d",i--);
A.无限次
B.一次 C.0次
D.两次 28.下列选项中正确的语句组是______。
A.chars[8];s={"Beijing"} B.chars[8];s="Beijing" C.char*s;s={"Beijing"} D.char*s;s="Beijing" 29.设变量已正确定义并赋值,以下正确的表达式是______。
A.int(15.8%5)B.x=y*5=x+zC.x=y+z+
5,++yD.x=25%5.0 30.有以下程序: #includemain(){inta[]={1,2,3,4},y,*p=&a[3];
--p;y=*p;printf("y=%d\n",y);
}
程序的运行结果是______。
A.y=
2 B.y=
3 C.y=
1 二、填空题(每题4分,共20分)
1.以下程序运行后的输出结果是______。
D.y=
0 main(){charc;intn=100; floatf=10;doublex;x=f*=n/=(c=50);printf("%d%f\n",n,x);}
2.下列程序段的输出结果是______。
main(){charb[]="Hello,you"; b[5]=0;printf("%s\n",b);}
3.若s是int型变量,且s=
6,则下面表达式的值为______。
s%2+(s+1)%
2 137第3部分 典型例题 C程序设计实验指导与题解
4.以下程序的输出结果是______。
#include
138
main()
{inta=111;
printf("a=%oa=%#o\n",a,a);
printf("a=%xa=%#x\n",a,a);
}
5.若a=l,b=2,c=3,d=
4,则表达式a>b?
a:c>d?
c:d的值是______。
三、编程题(每题10分,共20分)
1.程序中函数f的功能是:计算函数F(x,y,z)=(x+y)/(x–y)+(z+y)/(z–y)的值。
其中x和y的值不等,z和y的值不等。
例如,当x的值为9、y的值为11、z的值为15时,函数值为–3.50。
2.统计指定字符在字符串a中出现的次数,统计的数据存到b数组中。
其中:字符'z'出现的次数存放到b[0]中,字符'y'出现的次数存放到b[1]中,字符'x'出现的次数存放到b[2]中,字符'w'出现的次数存放到b[3]中,字符'v'出现的次数存放到b[4]中,其他字符出现的次数存到b[5]中。
例如,当a中的字符串为"yyzxxwly+wvp"时,调用该函数后,b中存放的数据应是:1、3、2、2、1、
3。
1.应用程序ONEFUNC.C中只有一个函数,这个函数的名称是_____________。
【分析】任何一个C程序总是由若干个函数构成的。
其中有且仅有的是main函数。
若应用程序中只有一个函数,它一定是main函数。
【解答】main
2.一个函数由__________和_________两部分组成。
【解答】函数首部,函数体
3.C语言源程序文件的扩展名是________;编译后生成目标程序文件,扩展名是________;连接后生成可执行程序文件,扩展名是_________;运行得到结果。
【解答】.c,.obj,.exe4.编写一个C程序,上机运行要经过的4个步骤是:______________________。
【解答】编写,编译,连接,运行
5.C语言中的标识符只能由三种字符组成,它们是_____________、__________和 ____________。
且第一个字符必须为____________。
【解答】字母,数字,下划线,字母或数字
6.C语言中的标识符可分为关键字、__________和_________三类。
【解答】用户定义标识符,标准标识符
7.一个C程序的执行是从____________。
A.本程序的main函数开始,到main函数结束
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C.本程序的main函数开始,到本程序文件的最后一个函数结束
D.本程序文件的第一个函数开始,到本程序main函数结束【分析】C程序的执行过程总是从main函数开始,当main函数执行结束,整个程序的 运行就结束了。
程序中的其他函数,只有当被调用时才会被执行。
【解答】A8.以下叙述不正确的是____________。
A.一个C源程序可由一个或多个函数组成
B.一个C源程序必须包含一个main函数
C.在C程序中,注释说明只能位于一条语句的后面
D.C程序的基本组成单位是函数 【分析】程序的注释可以出现在程序中的任何地方。
【解答】
C 9.C语言规定:在一个源程序中,main函数的位置____________。
A.必须在程序的开头
B.必须在系统调用的库函数的后面
C.可以在程序的任意位置
D.必须在程序的最后 【解答】
C 10.C编译程序是____________。
A.将C源程序编译成目标程序的程序
B.一组机器语言指令
C.将C源程序编译成应用软件
D.C程序的机器语言版本 【解答】
A 11.要把高级语言编写的源程序转换为目标程序,需要使用____________。
A.编辑程序
B.驱动程序
C.诊断程序
D.编译程序 【分析】编译程序又称为编译器,它可以将高级语言的源程序翻译为机器语言程序。
【解答】
D 12.以下叙述中正确的是____________。
A.在C语言中,main函数必须位于程序的最前面
B.C语言的每行中只能写一条语句
C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可以发现注释中的拼写错误 【分析】C程序中,main函数可以出现在程序中的任何位置;可以将多个语句书写在 同一行上;源程序中的注释是不进行编译的,因此编译时不会检查注释中的拼写错误;
C 语言本身并没有输入输出语句,输入输出是通过调用标准函数来实现的,如用
scanf函数 实现输入,用printf函数进行输出。
【解答】
C 3.2基本数据类型、运算符与表达式
1.C语言规定在程序中对用到的所有数据都必须指定其_________类型,对变量必须 做到先_________,后___________。
【分析】程序中所有数据都应该指定其数据类型,以明确数据所占内存空间的大小, 以及在数据上能进行什么样的操作。
对程序中所有的变量,必须先通过定义,为其申请内 存空间,然后才能对变量进行操作。
没有定义的变量无法在内存中得到其所需要的内存空 间,也就无法存储其数据,更加无法进行其他运算。
【解答】数据,定义,使用 81
2.设
C语言中的一个基本整型数据在内存中占两个字节,若需将整数135791存放到第 变量a中,应采用的类型说明语句是_______________。
3 部 分 典型例题 C程序设计实验指导与题解 【分析】如果基本整型占两个字节,则其取值范围为–32768~+32767;整数135791 已超出了其取值范围,如果用基本整型来存储该数,将发生溢出。
因此定义长整型的变量 a来存储该数。
82 【解答】longinta=135791;
3.C语言中,转义字符'\n'的功能是______________;转义符'\r'的功能是________。
【分析】注意,“回车”令光标回到当前行的行头;“回车换行”令光标去到下一行的 行头。
【解答】回车换行,回车
4.C
语言中,&作为双目运算符时表示的是______________,而作为单目运算符时表 示的是_______________。
【解答】按位与,取内存地址
5.在C语言的赋值表达式中,赋值号左边必须是_______________。
【分析】赋值号的左边只能是变量,如下写法是错误的: a+b=
5 因为赋值运算符是将右边表达式的值写入到左边的变量所处的内存单元中去。
只有变 量的内存空间才允许写入数据,而表达式
a+b是没有自己的内存空间的,因此不能写入 数据。
【解答】变量
6.自增运算符++、自减运算符––,只能用于___________,不能用于常量或表达式。
++和––的结合方向是“自_________至_____________”。
【分析】++,––运算符只能用于变量,如5++,(a+b)––这样的操作是非法的。
C语言 的单目运算符的结合方向是右结合的。
【解答】变量,右,左
7.若有定义:intx=3,y=2;floata=2.5,b=3.5;,则下面表达式的值为______________。
(x+y)%2+(int)a/(int)b 【分析】注意,两个整数相除,其结果是取整。
【解答】
1 8.下列
4组选项中,均是C语言关键字的选项是____________。
A.auto B.switch C.signed D.if enum typedef union struct include continue scanf type 【解答】
B 9.sizeof(float)是____________。
A.一个双精度型表达式
B.一个整型表达式
C.一种函数调用
D.一个不合法的表达式 【分析】sizeof()用于计算某种数据类型在内存中所占的字节数,其结果是一个整数。
【解答】
B 10.在
C语言中,要求运算数必须是整型的运算符是_____________。
A.% B./
C.<
D.!
【分析】%运算符要求参与运算的两个数均是整型数据,/、<和!既适用于整型数据, 也适用于浮点型或字符型数据。
【解答】
A 11.下面正确的字符常量是____________。
A."C"
B."\\"
C.'W'
D.'' 【分析】字符常量是用单引号引起来的单个字符。
因此选项
A和B都是错误的。
选项 D仅仅是一对单引号,不是合法的字符常量。
【解答】
C 12.以下正确的叙述是____________。
A.在C语言中,每行中只能写一条语句
B.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C.在C程序中,无论是整数还是实数,都能被准确无误地表示
D.在C程序中,%是只能用于整数运算的运算符 【分析】C程序可以将多条语句写在同一行上;对于实型变量a来说,只能存储实型的 数据。
虽然可以进行赋值a=10,但在赋值时由于两边数据类型不一样,系统会进行隐式类 型转换,最终仍然是将一个实型数赋值给a。
在计算机中,由于浮点数受其存储精度的限 制,因此是不可能被完全准确无误地表示出来的。
%是只能用于整数运算的操作符,故本 题正确答案选择
D。
【解答】
D 13.表示条件:10
【解答】x>10&&x<100||x<
0 14.逻辑运算符两侧运算对象的数据类型____________。
A.只能是0或
1 B.只能是0或非0正数
C.只能是整型或字符型数据
D.可以是任何类型的数据 【分析】逻辑运算符是根据操作数为0或非0来判定真假值的,因此,任何类型的数 据都可以进行逻辑运算,如!
5,'a'||'b',都是正确的表达式。
【解答】
D 15.运行下面的程序,如果从键盘上输入
6,输出的结果是_________________。
voidmain(){ intx;scanf("%d",&x);if(x++>5) printf("%d",x);else printf("%d\n",x--);} 【解答】
7 83第3部分 典型例题 C程序设计实验指导与题解 3.3顺序结构程序设计 84
1.结构化程序设计的三种基本结构是 、 、 。
【分析】结构化程序设计中包含三种基本结构,就是顺序、选择和循环。
结构化程序 设计方法认为,无论程序的结构有多复杂,总是能分解成这三种基本结构的组合。
【解答】顺序,选择,循环
2.下面语句中正确的是_____________。
A.scanf
("a=b=%d",&a,&b); B.scanf("a=%d,b=%f",&m,&f); C.scanf("%c","c"); D.scanf("%7.2f",&f); 【分析】在使用scanf函数时,应注意格式符与被输入的数据在三个方面要完全对应: 个数、顺序和数据类型。
输入float型数据时,不能指定精度,因此不能选
D。
【解答】
B 3.执行scanf("%c%c",&a,&b)语句,若要使变量a和b的值分别为'a'和'b',则正确的 输入方法为_________________。
A.ab
B.'a''b' C.ab D.a,b 【分析】scanf函数中的格式为“%c%c”,表示输入两个字符。
在两个字符输入时,中 间不能用空白符号分开,也不需要输入单引号,因此正确答案选择
A。
如果要采用D的输 入方式,其格式符应写为“%c,%c”。
【解答】
A 4.下面程序运行后,从键盘输入31,则程序的输出结果是__________________。
voidmain() { inta; scanf("%d",&a); printf("a=%d,Ha=%x,Oa=%o",a,a,a); } 【分析】注意格式符所代表的含义:%d为十进制整数;%f为float型数据;%o为八进 制数;%x为十六进制数。
此外,还应注意其他常用格式符的用法,包括%f,%s等。
【解答】a=31,Ha=1f,Oa=37
5.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=
2,则 逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值是_______________。
【分析】C语言的逻辑表达式在计算时,只有在必须执行下一表达式才能求解时,才执 行下一表达式。
在本题中,首先执行逻辑与(&&)左边的表达式(m=a>b),其结果为
0, 同时m的值也变为
0,此时整个逻辑表达式的结果已经可以确定为0了,因此&&运算符 右边的表达式(n=c>d)就不再执行了,所以变量n保持其原来的值不变,仍然是
2。
【解答】
2 6.编写程序:输入华氏温度
F,要求输出摄氏温度
C。
要求计算结果后保留两位小数。
计算公式为:c95F32。
【分析】本题中,不能将表达式写成c=5/9×(f–32)。
因为5/9的结果是取其整数商,即为
0。
因此,将表达式写成5.0/9×(f–32),可以保留运算结果的小数部分。
【参考程序】 #include
7.编写程序:已知圆半径和圆柱高,求圆柱的体积。
要求计算结果后保留两位小数。
【分析】可以将圆周率定义为符号常量PI,为使运算结果保留两位小数,输出时采用的格式符为%.2f。
【参考程序】 #include
8.编写程序:将任意一个两位正整数平方后,取其百位数和十位数,构成一个新的两位整数。
【分析】对任意一个整数取其个、
十、百位,或其他位,均可采用算术运算符/和%的组合来进行。
注意本题的输出是b*10+a,如果写成: printf("所构成的两位正整数为:%d%d\n",b,a); 是不满足题目要求的。
【参考程序】 #include
选择结构程序设计
1.编写一个C程序,要求从键盘输入三个整数x、y、z,请把这三个数由小到大输出。
【分析】排序问题。
想办法把三个数进行调换,使得最小的数放到x变量里,最大的数放在z变量里。
具体方法如下:先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小;然后将y与z比较,并将较小的值保存在y里而较大的值放在z里。
最后,依次输出x、y、z。
【参考程序】 #include
2.编写一个C程序,要求从键盘输入一个不多于5位的正整数x,在屏幕上输出: ①它是几位数;②逆序打印出各位数字。
例如:原数为789,应输出987。
【分析】该问题的核心是分解出每一位上的数字: a=x/10000;b=x%10000/1000;c=x%1000/100;d=x%100/10;e=x%10; /*分解出万位上的数字*//*分解出千位上的数字*//*分解出百位上的数字*//*分解出十位上的数字*//*分解出个位上的数字*/ 通过检测各数字是否为零,便可知道x是几位数。
例如,if(a>0)则x是5位数。
【参考程序】 #include
\n");else{ if(a>0)printf("5位数,反序数字是:%d%d%d%d%d\n",e,d,c,b,a); elseif(b>0)printf("4位数,反序数字是:%d%d%d%d\n",e,d,c,b); elseif(c>0)printf("3位数,反序数字是:%d%d%d\n",e,d,c); elseif(d>0)printf("2位数,反序数字是:%d%d\n",e,d); elseprintf("1位数,数字是:%d\n",e); }}
3.编写程序:要求从键盘输入两个数,并依据提示输入的数字,选择对这两个数的 运算,并输出相应运算结果。
提示为:1:作加法;2:作乘法;3:作除法。
【分析】可使用switch语句,以提示输入的数字为依据,作分支结构设计,使得提示 输入1时,将两数之和输出;提示输入2时,将两数之积输出;提示输入3时,将两数之 商输出。
注意,除数不可为零的检测与提示。
【参考程序】 87 第 #include
3 voidmain() 部 分 典型例题 C程序设计实验指导与题解 { floatop1,op2;intsign; printf("请输入两个操作数:ab\n"); 88 scanf("%f%f",&op1,&op2); printf("请选择进行的运算(1,2,3,4):\n"); printf("1:+\n"); printf("2:-\n"); printf("3:*\n"); printf("4:/\n"); printf("您选择:"); scanf("%d",&sign); switch(sign) { case1:printf("\n%f+%f=%f\n",op1,op2,op1+op2);break; case2:printf("\n%f-%f=%f\n",op1,op2,op1-op2);break; case3:printf("\n%f*%f=%f\n",op1,op2,op1*op2);break; case4:if(op2) { printf("\n%f/%f=%f\n",op1,op2,op1/op2);break; } else { printf("\n除数不能为0\n");break; } default:printf("\n您选择的运算不对\n"); } }
4.输入某年某月某日,判断这一天是这一年的第几天。
【分析】以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
【参考程序】 #include
=0)) /*判断是不是闰年*/ leap=1; else leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于
2,总天数应该加一天*/ sum++; printf("Itisthe%dthday.\n",sum); } 3.5循环结构程序设计
1.输入一行字符,分别统计出其中字母、数字和其他字符的个数。
【参考程序】 #include
='\n') {if(ch>'a'&&ch<'z'||ch>'A'&&ch<'Z') i++; /*统计字母*/ elseif(ch>'0'&&ch<'9') j++; /*统计数字*/ elsek++; /*统计其他*/ } printf("字母个数:%d,数字个数:%d,其他字符:%d\n",i,j,k); } 89
2.求解爱因斯坦数学题。
有一条长度不多于1000步的阶梯,若每步跨2阶,则最后第3剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,部 分 典型例题 C程序设计实验指导与题解 则最后剩5阶,若每步跨7阶,最后一阶都不剩,问总共有多少级阶梯?【分析】若每步跨m阶,则最后剩n阶,其实就是取m的余数值为n。
【参考程序】 90 #include
【分析】百马百担货问题是循环结构的一个经典习题。
解决该问题的办法是采用穷举的方法。
穷举法也称为蛮力法,它的基本思想是:列举出大、中、小马所有可能的组合,然后根据条件,挑选出其中满足条件的组合。
【参考程序】 #include
4.编写程序,求1~9999之间的全部同构数。
同构数是这样一组数;它出现在平方数的右边。
例如:5是25的右边的数,25是625的右边的数,5和25都是同构数。
【分析】本题不需要任何输入数据,因为已知待处理的数据是1~9999之间的数。
因此,采用循环结构,将1~9999之间的数逐个取出,通过设定条件来判断其是不是同构数即可。
【参考程序】 #include
5.编写程序,对数据进行加密。
从键盘输入一个数,对每一位数字均加
2,若加2后大于
9,则取其除10的余数。
例如,2863加密后得到4085。
【分析】解此题有多种方法,这里列出了4种。
前三种解法是把数据作整数处理,都是由低位向高位取数字;也可由高位向低位取数字,但处理起来要麻烦些,请读者思考。
第4种方法是把数据作为字符串,处理起来更为简单,最高位可为
0,也不限数据长度,更符合加密的应用。
如应用字符数组,处理起来更加简单,这个问题留给读者。
【参考程序】 /*方法1:将数据当作整数处理*/ #include
3 for(i=0,pass=0;x>0;i++) /*此处i表示的是数位*/ 部 分 典型例题 C程序设计实验指导与题解 {mod=x%10; /*求最低位的数字*/ mod=(mod+2)%10; /*求加密后的数字*/ 92 pass=pass+mod*pow(10,i);/*将此位加密后的数字放入加密数据中*/ x=x/10; /*计算舍弃最低位的新数据*/ } printf("\n加密后:%d\n",pass); } /*方法3:将数据当作整数处理,采用了数组存储每位密码数字*/ #include
6.打印如下的九九乘法表。
1 2
3 4
5 6
7 8
9 -------------------------------------------------------------------------------------------------
1 2
4 3
6 9
4 8 12 16
5 10 15 20 25 …
9 18 27 36 45 54 63 72 81 【分析】本题是循环结构的经典习题。
和本题相似的还有:打印矩形、打印菱形、打
印三角形等。
类似的图案具有一个共同点,就是具有多行和多列。
一般采用两重循环结构,用外循环控制行,用内循环控制一行内的若干列的方法。
【参考程序】 #include
7.古典问题:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 【分析】兔子的规律为数列1,1,2,3,5,8,13,21,…,这就是斐波那契数列。
该数列除前两项为1外,从第三项开始,每一项都等于前两项之和。
【参考程序】 #include
8.从
3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。
【参考程序】 #include
9.将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*
5。
【分析】对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成。
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
【参考程序】 #include
=i){ if(n%i==0) {printf("%d*",i);n=n/i; }else break;}}printf("%d",n);} 10.判断一个整数是不是回文数。
回文数是这样一种数字,它正读倒读是一样的。
如98789,正读是98789,倒读也是98789,所以这个数字就是回文数。
【分析】根据题意,不妨将待判断的数定义为标准整型int。
因此在程序运行时,待判断的数的范围应在int之内。
回文数可以考虑为:如某数逆序后和原数相等,则它是回文数。
【参考程序】 #include
=0){ y=y*10+t%10;t=t/10;}if(x==y)printf("%d是回文数!\n",x);elseprintf("%d不是回文数!\n",x);} 3.6数组
1.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺 序每5个数求出一个平均值,放在另一个数组中并输出。
请编程。
95 【分析】本例是一维数组的基础操作题。
在对一维数组元素进行访问时,一般采用循第 环结构,通过数组元素的下标,对数组元素进行逐个访问。
程序中应注意防止数组的下标
3 越界。
部 分 典型例题 C程序设计实验指导与题解 【参考程序】 #include
试编程打印出此形式的n×n(n<10)阶的方阵(顺时针方向旋进)。
12345161718196152425207142322218131211109 【分析】从4个方向考虑下标的变化。
【参考程序】 #include
若该字符不在a中,则打印出提示信息:Thecharisnotinthestring。
试编程。
【分析】折半查找的算法思想是:将数列按有序化(递增或递减)排列,查找过程中 采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。
通过一次比较,将查找区间97缩小一半。
折半查找是一种高效的查找方法。
它可以明显减少比较次数,提高查找效率。
第但是,折半查找的先决条件是查找表中的数据元素必须有序。
部
3 分典型例题 C程序设计实验指导与题解 【参考程序】 #include
positionis%d\n",mid+1); break; } elseif(c>a[mid]) top=mid+1; else bot=mid-1; } >bot) printf("Thecharisnotinthestring.\n"); }
4.编写程序:从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前5个字符连接到串a中;如果b的长度小于
5,则把b的所有元素都连接到a中。
【参考程序】 #include
='\0'); for(j=0,i--;j<5&&b[j]!
='\0';j++)a[i++]=b[j]; a[i]='\0';puts(a);}
5.输入10个0~100的随机整数到指定的数组中。
【参考程序】 #include
6.编写程序:找出一个二维数组的“鞍点”。
【分析】“鞍点”是指某位置上的元素在该行上最大,在该列上最小。
当然,二维数组 可能有几个鞍点,也可能没有鞍点。
程序中如找到“鞍点”,则打印其位置(行,列)和其 值;如没有找到“鞍点”,则提示没有“鞍点”存在。
【参考程序】 #include
1,该数是鞍点*/ { printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max); flag2=1; } } if(!
flag2) printf("\n矩阵中无鞍点!\n"); } 3.7函数
1.编写一个函数,其功能是计算二维数组每行之和以及每列之和。
【参考程序】 voidfun(inta[][4],intn,introw[],intcol[]){ inti,j;for(i=0;i
编写一个函数,将每个单词的第一个字母转换为大写字母。
在主函数中实现单词的输入。
【参考程序】 voidfun(charstr[]){ inti=0,j=0;while(str[i]!
='#'){ if(str[i++]==''){ if(str[j]>='a'&&str[j]<='z')str[j]-=32; j=i;}}}
3.编写函数fun(charstr[20],intnum[10])。
它的功能是:分别找出字符串中每个数字字符(0,1,2,3,4,5,6,7,8,9)的个数,用num[0]来统计字符0的个数,用num[1]来统计字符1的个数,用num[9]来统计字符9的个数。
字符串在主函数中输入。
【参考程序】 fun(charstr[],intnum[10]){ inti;for(i=0;i<10;i++) num[i]=0;for(i=0;str[i]!
='\0';i++) num[str[i]-'0']++;}
4.有5个人坐在一起,问第五个人多少岁?他说比第四个人大两岁。
问第四个人的 岁数,他说比第三个人大两岁。
问第三个人,又说比第二人大两岁。
问第二个人,说比第 一个人大两岁。
最后问第一个人,他说是
10岁。
请问第五个人多大? 【分析】本题可利用递归的方法来解决。
递归分为递推和回溯两个阶段。
递推的过程如下。
(1)要想知道第五个人的年龄,首先要知道第四个人的年龄。
(2)要想知道第四个人的年龄,首先要知道第三个人的年龄。
(3)要想知道第三个人的年龄,首先要知道第二个人的年龄。
(4)要想知道第二个人的年龄,首先要知道第一个人的年龄。
(5)第一个人的年龄为
10岁;此时即可向上回溯。
【参考程序】 101 intage(intn) 第 {
3 部 分 典型例题 C程序设计实验指导与题解 intc; if(n==1)c=10; 102 else c=age(n-1)+2; return(c); } voidmain() { printf("%d\n",age
(5)); } /*第1个人的年龄是10岁*//*第n个人比第n–1个人大两岁*/ 3.8指针
1.编写程序:输入10个整数到一维数组中,把该数组中所有为偶数的数,放到另一个数组中去。
用指针法对数组进行访问。
【分析】利用指向数组的指针对数组元素进行访问。
初始时,令指针指向数组的第一个元素,通过指针的++运算即可逐个访问数组元素。
【参考程序】 #include
用指针对数组进行访问。
【分析】将第三个元素向前移动,是指将第三个元素的值赋给数组的第二个元素。
这样,数组的第二个元素的值将被覆盖。
可见,当数组的元素依次向前移动时,其前面的元素逐个被覆盖。
这种操作常用于删除数组中某一元素的值。
【参考程序】 #include
要求用指针对字符串进行访问。
【参考程序】 #include
='\0';p++){ if(*p>='a'&&*p<='z')*p=*p-32; elseif(*p>='A'&&*p<='Z')*p=*p+32; }printf("theresultis:");puts(a);}
4.输入5个字符串,比较它们的大小,输出5个字符串中最大的字符串。
要求用指针实现对字符串的访问。
【分析】在字符串之间比较大小时,不能使用C语言的关系运算符,如>,<等进行比较,而需调用标准字符串函数strcmp,用于比较两个字符串的大小关系。
在使用该函数时,应包含“string.h”这个头文件。
【参考程序】 #include
5.编写程序:在主函数中输入20个数到一个数组中,通过其他函数找出数组中最大值的下标并返回给主函数,在主函数中输出数组的最大值(设最大值是唯一的)。
【分析】本题需要用数组作为函数的参数。
主函数将数组的首地址传递给其他函数,其他函数在访问了数组元素后,将最大值的下标作为返回值,返回给主函数。
【参考程序】 #include
6.在主函数中有30个学生,三门课程的成绩,用二维数组存放该信息;用子函数分别进行如下的操作:①输出每门课程的平均分;②输出每门课程的最高分、最低分;③统 计每门课程不及格人数。
【参考程序】 #include
【参考程序】 #include
(x):(y))voidmain(){ intx,y;printf("Pleaseinputxandy:\n");scanf("%d%d",&x,&y);printf("maxd=%d\n",maxd(x,y));}
2.编程,定义一个带参数的宏,用来判断整数n是否能被5和7同时整除,其中n是由键盘任意输入的整型数据。
【参考程序】 #include
voidmain(){ intn,t;printf("pleaseinputn:\n");scanf("%d",&n);t=cube(n);if(t==1) 1:0) printf("%d能被5和7同时整除!\n",n);else printf("%d不能被5和7同时整除!\n",n);}
3.编程,用条件编译方法实现:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如'a'变成'b',…,'z'变成'a'),其他非字母字符不变。
用#define命令来控制是否要译成密码。
例如: #defineCHANGE
1 则输出密码。
若 #defineCHANGE
0 则不译成密码,按原码输出。
【参考程序】 #include"stdio.h" #defineCHANGE1 voidmain(){ charstr[81],c;inti=0;gets(str);while(str[i]!
='\0'){ #ifCHANGEif(str[i]=='Z'||str[i]=='z')str[i]=str[i]-25;elseif(str[i]>='A'&&str[i]<'Z'||str[i]>='a'&&str[i]<'z')str[i]=str[i]+1; #endifi++; } puts(str); } 3.10复杂数据类型
1.编写一个函数output,打印一个学生的成绩数组,该数组中有5个学生的数据记录, 每个记录包括学号、姓名和三门课程成绩。
在主函数中输入这些记录,用output函数输出 这些记录。
【参考程序】 107 第 #include
3 #defineN5 部 分 典型例题 C程序设计实验指导与题解 structstu { intnum; 108 charname[20]; floatscore[3]; }stus[N]; voidmain() { voidoutput(structstustudents[]); inti,j; printf("pleaseinputarraydata:\n"); for(i=0;i
【参考程序】 #include
【参考程序】 #include
4.试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期110末成绩,然后计算其平均成绩并输出成绩表。
【参考程序】 #include
5.输入10个同学的姓名、数学成绩、英语成绩和物理成绩,确定总分最高的同学,并打印其姓名及其三门课程的成绩。
【参考程序】 #include"stdio.h" #include"string.h"structStudent /*定义结构体structStudent*/ {charName[20]; /*姓名*/ floatMath; /*数学*/ floatEnglish; /*英语*/ floatPhysical; /*物理*/ }; voidmain() {/*定义structStudent类型结构体数组存储所有同学的相关信息*/ structStudentoStudents[10]={{"",0,0,0}};/*定义structStudent类型指针存储总分最高的同学的地址信息*/ structStudent*pMaxStu; structStudent*pStudent;floatfMaxScore,fTotal;floatfMath,fEnglish,fPhysical;charszName[20];printf("\nPleaseinput10studentsandtherescore\n");/*提示信息*/printf("----------------------------------------\n");printf("NameMathEnglishPhysical\n");printf("----------------------------------------\n");fMaxScore=0;pMaxStu=oStudents;for(pStudent=oStudents;pStudent
1.将文件file1.c的内容输出到屏幕,并复制到file2.c中。
【参考程序】 #include
feof(fp1)) putchar(getc(fp1));rewind(fp1); 111第3部分 典型例题 C程序设计实验指导与题解 while(!
feof(fp1)) putc(getc(fp1),fp2); fclose(fp1); 112 fclose(fp2); }
2.统计文件letter.txt中小写字母c的个数。
【参考程序】 #include
(0);}while(!
feof(fp)){ch=fgetc(fp);if(ch=='c') n++;}printf("count=%ld\n",n);fclose(fp);}
3.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test.dat中保存。
输入的字符串以回车结束。
【参考程序】 #include
(0);}printf("输入一个字符串:\n");gets(str); while(str[i]!
='\0'){ if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-32; fputc(str[i],fp);i++;}fclose(fp);fp=fopen("test.dat","r");fgets(str,strlen(str)+1,fp);printf("%s\n",str);fclose(fp);}
4.有5个学生,每个学生有三门课的成绩,从键盘输入数据(包括学号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud.dat中。
【参考程序】 #defineN2#include"stdio.h"structstudent{ charnum[6];charname[8];intscore[3];floatavr;}stu[N];voidmain(){inti,j,sum;FILE*fp;for(i=0;i
1 一、单选题(每题2分,共60分)
1.以下能正确定义整型变量a、b和c并为其赋初值5的语句是______。
A.inta=b=c=5; B.inta=5,b=5,c=5; C.inta,b,c=5; D.a=b=c=5;
2.有以下程序: main(){inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;pa=a;for(i=0;i<3;i++)if(i<2) pa[1][i]=pa[1][i]-1;else pa[1][i]=1;printf("%d\n",a[0][1]+a[1][1]+a[1][2]);} 执行后输出结果是______。
A.无确定值 B.
7 C.
6 D.
8 3.若已定义:inta[9],*p=a;,并在以后的语句中未改变p的值,不能表示a[1]地址的 表达式是______。
A.a++ B.a+
1 C.p+
1 D.++p
4.与数学式子3乘以x的n次方/(2x–1)对应的C语言表达式是______。
A.3*x^n/(2*x–1) B.3*x**n/(2*x–1) C.3*pow(n,x)/(2*x–1) D.3*pow(x,n)*(1/(2*x–1))
5.在
C语言中,不正确的int类型的常数是______。
A.32768 B.
0 C.0xAF D.037
6.以下选项中,非法的字符常量是______。
A.'\17'
B.'\t'
C."\n"
D.'\xaa'
7.若执行以下程序时从键盘上输入
9,则输出结果是______。
main(){intn; scanf("%d:",&n);if(n++<10) printf("%d\n",n);else printf("%d\n",n--);} A.10 B.11 C.
9 D.
8 8.以下叙述中正确的是______。
A.花括号“{”和“}”只能作为函数体的定界符
B.构成C程序的基本单位是函数,所有函数名都可以由用户命名
C.分号是C语句之间的分隔符,不是语句的一部分
D.C程序中注释部分可以出现在程序中任意合适的地方
9.下面的函数调用语句中func函数的实参个数是______。
func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8))); A.
3 B.
4 C.
8 D.
5 10.下面4个选项中,均是合法转义字符的选项是_______________。
A.'\'''\\''\n'
B.'\018''\f''xab'
C.'\''\017''\'''
D.'\\0''\101''x1f' 11.下面程序段 x=3;do{y=x--; if(!
y){printf("x");break;}printf("#");}while(1<=x<=2);
A.是死循环
B.将输出###x
C.将输出##
D.含有不合法的控制表达式 12.若有说明:inti,j=
7,*p=&i;,则与i=j;等价的语句是______。
A.i=*p;
B.*p=*&j; C.i=**p; D.i=&j; 13.以下程序的输出结果是______。
#include
A.
6 B.
4 15.有以下程序: C.
5 main(){intm=3,n=4,x; x=-m++;x=x+8/++n;printf("%d\n",x);} 程序运行后的输出结果是______。
A.–1 B.
5 C.
3 16.下列函数定义中,会出现编译错误的是______。
A.max(intx,inty,int*z) {*z=x>y?
x:y;} B.intmax(intx,inty) {return(x>y?
x:y);} C.max(intx,inty) {intz;z=x>y?
x:y;return(z);} D.ihgfedcba D.3D.–
2 D.intmax(intx,y) {intz;z=x>y?
x:y;returnz;} 17.执行以下程序段后,w的值为______。
intw='A',x=14,y=15;w=((x||y)&&(w<'a'));
A.–1 B.
1 C.NULL D.
0 18.若要求从键盘读入含有空格字符的字符串,应该使用函数______。
A.getchar() B.gets() C.getc() D.scanf() 19.若有以下说明和语句 int
c[4][5],(*p)[5];p=c; 能够正确引用c数组元素的是______。
A.*(p+3) B.p+
1 20.有以下程序:
C.*(p+1)+
3 D.*(p[0]+2) voidswap(char*x,char*y){chart; t=*x;*x=*y;*y=t;}main(){char*s1="abc",*s2="123"; swap(s1,s2);printf("%s,%s\n",s1,s2);} 程序执行后的输出结果是______。
A.321,cba B.abc,123 C.1bc,a23 D.123,abc 21.在一个C源程序文件中,若要定义一个只允许本源程序文件中所有函数使用的全 局变量,则该变量需要使用的存储类别是______。
A.auto B.static C.extern D.register 22.下列叙述中正确的是______。
A.C
语言编译时不检查语法
B.C语言的函数可以嵌套定义
C.C语言的子程序有过程和函数两种
D.C语言的函数可以嵌套调用 23.有以下程序: 117 main() 第 {chark;inti;
3 for(i=1;i<3;i++) 部 分 典型例题 C程序设计实验指导与题解 {scanf("%c",&k);switch(k){ aassee''01''::pprriinnttff((""annuomtbheerr\\nn""));; }} } 程序运行时,从键盘输入:01↙,程序执行后的输出结果是______。
A.another number C.number numbernumbernumber 24.有如下程序段: B.another another D.another numbernumber inta=14,b=15,x;charc='A';x=(a&&b)&&(c<'B'); 执行该程序段后,x的值为______。
A.true B.
0 C.false 25.下面程序的功能是输出以下形式的金字塔图案: D.
1 ****************main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf("");for(j=1;j<=______;j++)printf("*");printf("\n");}} 在下划线处应填入的是______。
A.2*i+
1 B.2*i–
1 C.i D.i+
2 26.可在C程序中用作用户标识符的一组标识符是______。
A.Hi
B.Date C.and D.case Dr.Tom y-m-d __2007 Bigl 27.下面函数 int
fun1(char*x){char*y=x; while(*y++);return(y-x-1);} 的功能是______。
A.求字符串的长度
B.将字符串x连接到字符串y后面
C.将字符串x复制到字符串y
D.比较两个字符串的大小 28.不能把字符串:Hello!
赋给数组b的语句是______。
A.charb[10]="Hello!
"; B.charb[10]={'H','e','l','l','o','!
','\0'}; C.charb[10]={'h','e','l','l','o','!
'}; D.charb[10];strcpy(b,"Hello!
"); 29.设变量已正确定义并赋值,以下正确的表达式是______。
A.int(15.8%5)B.x=y+z+
5,++y C.x=25%5.0D.x=y*5=x+z 30.下述对C语言字符数组的描述中错误的是______。
A.字符数组可以存放字符串
B.不可以用关系运算符对字符数组中的字符串进行比较
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.字符数组的字符串可以整体输入、输出
二、填空题(每题
4分,共20分)
1.以下程序的输出结果是______。
#include
2.以下程序运行后的输出结果是______。
main() {inti,n[]={0,0,0,0,0}; for(i=1;i<=4;i++){n[i]=n[i-1]*2+1; printf("%d",n[i]); } 119 } 第
3.若已经定义inta=25,b=14,c=19;,以下三目运算符(?
:)所构成的语句的执行结果部
3 分 典型例题 C程序设计实验指导与题解 是______。
a++<=2&&b--<=2&&c++?
printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("a=%d, 120 b=%d,c=%d\n",a,b,c);
4.设有以下程序: main()
{inta,b,k=4,m=
6,*p1=&k,*p2=&m; a=p1==&m;b=(*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);} 执行该程序后,a的值为_________,b的值为________。
5.有intx,y,z;且x=3,y=–4,z=
5,则以下表达式的值为______。
!
(x>y)+(y!
=z)||(x+y)&&(y-z)
三、编程题(每题10分,共20分)
1.编写程序:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。
例如,若输入整数:2310,则应输出:2,3,5,7,11。
2.编写程序:将仅在字符串s中出现而不在字符串t中出现的字符,及仅在字符串t中出现而不在字符串s中出现的字符,构成一个新字符串放在u中,u中的字符按原字符串中字符顺序排列,不去掉重复字符。
例如,当s="112345",t="24677"时,u中的字符串为"1135677"。
3.13综合练习
2 一、单选题(每题2分,共60分)
1.若有以下程序: main(){intk=2,i=2,m;m=(k+=i*=k);printf("%d,%d\n",m,i);} 执行后的输出结果是______。
A.8,
3 B.8,
6 C.6,
4 D.7,
4 2.以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。
#include
5 B.
3 C.
4 D.
6 3.若有说明“inta[3][4];”,则对a数组元素的正确引用是______。
A.a[1,3] B.a[2][4] C.a[1+1][0] D.a
(2)(1)
4.以下不能正确表示代数式2ab的C语言表达式是______。
cd A.a*b/c/d*
2 B.2*a*b/c/d C.a/c/d*b*
2 D.2*a*b/c*d
5.在C语言中,合法的长整型常数是______。
A.4962710
B.OL C.324562& D.216D
6.以下关于long、int和short类型数据占用内存大小的叙述中正确的是______。
A.根据数据的大小来决定所占内存的字节数
B.均占4个字节
C.由用户自己定义
D.由C语言编译系统决定
7.若执行下面程序时从键盘上输入
5,则输出是______。
main(){ intx;scanf("%d",&x);if(x++>5)printf("%d\n",x);elseprintf("%d\n",x--);} A.
6 B.
7 C.
5 D.
4 8.以下叙述中正确的是______。
A.C语言的源程序不必通过编译就可以直接运行
B.C语言程序经编译形成的二进制代码可以直接运行
C.C语言中的每条可执行语句最终都将被转换成二进制的机器指令
D.C语言中的函数不可以单独进行编译
9.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为______。
121第3部分 典型例题 C程序设计实验指导与题解
A.自动(auto)
B.外部(extern)
C.静态(static)
D.寄存器(register) 10.判断char型变量ch是否为大写字母的正确表达式是_______。
122
A.'A'<=ch<='Z'
B.('A'<=ch)AND('Z'>=ch)
C.(ch>='A')&&(ch<='Z')
D.(ch>='A')&(ch<='Z') 11.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
voidsort(inta[],intn){inti,j,t; for(i=0;i
3 B.10,9,8,7,6,5,4,3,2,
1 C.1,2,3,8,7,6,5,4,9,10 D.1,2,3,4,5,6,7,8,9,10 12.若指针
p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句 是______。
A.p=2*(int*)malloc(sizeof(int)); B.p=(int*)calloc(2,sizeof(int)) C.p=(int*)malloc(2*2) D.p=(int*)malloc(2*sizeof(int)) 13.设有定义“char
p[]={'1','2','3'},*q=p;”,以下不能计算出一个char型数据所占字节 数的表达式是______。
A.sizeof(char)B.sizeof(p) C.sizeof(*q)D.sizeof(p[0]) 14.有以下程序: main(){intk=4,n=0; for(;n
A.4,
4 B.2,
2 C.3,
3 D.1,
1 15.设有语句inta=3;,则执行了语句a+=a–=a*a;后,变量a的值是______。
A.
0 B.
3 C.
9 D.–12 16.以下程序运行后的输出结果是______。
#definef(x)(x*x)main(){inti1,i2;i1=f
(8)/f
(4);i2=f(4+4)/f(2+2);printf("%d,%d\n",i1,i2);} A.64,28 B.4,
4 17.以下程序的输出结果是______。
C.64,64 D.4,
3 #defineSQR(X)X*Xmain(){inta=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);} A.16 B.
1 18.以下程序的输出结果是______。
C.
9 D.
2 #include
A.i*m+j–
1 B.i*m+j C.j*m+i D.i*m+j+
1 20.有以下程序: main(){charch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5));} 程序运行后的输出结果是______。
A.z
B.元素ch[5]的地址 123第3部分 典型例题 C程序设计实验指导与题解 C.
0 D.字符y的地址 21.假定以下程序经编译和链接后生成可执行文件PROG.EXE,如果在此可执行文件 所在目录的DOS提示符下输入:PROGABCDEFGHIJKL↙,则输出结果为______。
124 main(intargc,char*argv[]) {while(--argc>0)printf("%s",argv[argc]); printf("\n"); }
A.ABCDEFGC.ABCDEFGHIJKL22.在一个C语言程序中______。
A.main函数必须出现在所有函数之前C.main函数必须出现在所有函数之后23.有以下程序:
B.IJKLABCDEFGHD.IJHL B.main函数必须出现在固定位置D.main函数可以在任何地方出现 main(){inta=15,b=21,m=0; switch(a%3){ case0:m++;break;case1:m++;switch(b%2) {default:m++;case0:m++;break; }}printf("%d\n",m);} 程序运行后的输出结果是______。
A.
1 B.
3 C.
2 24.C源程序中不能表示的数制是______。
A.二进制
B.十六进制
C.十进制 25.以下程序的输出结果是______。
D.4D.八进制 main(){inti,k,a[10],p[3]; k=5;for(i=0;i<10;i++) a[i]=i;for(i=0;i<3;i++) p[i]=a[i*(i+1)];for(i=0;i<3;i++) k+=p[i]*2;printf("%d\n",k);} A.23 B.21 C.22 D.20 26.以下4组用户定义标识符中,全部合法的一组是______。
① _mainencludesin ② If-maxturbo ③ txtREAL3COM ④ intk_2_001
A.②
B.①
C.③ 27.以下程序的输出结果是______。
D.④ intx=3; main() {inti; for(i=1;i
7 C.12 D.
5 29.若以下选项中的变量已正确定义,则正确的赋值语句是______。
A.x1=26.8%3; B.1+2=x2; C.x3=0x12; D.x4=1+2=3; 30.有如下程序: main()
{ inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; 125第3部分 典型例题 C程序设计实验指导与题解 printf("%d\n",s);} 126 该程序的输出结果是______。
A.18 B.19 C.21
二、填空题(每题4分,共20分)
1.若有以下程序: D.20 intf(intx,inty){return(y-x)*x;} main(){inta=3,b=4,c=5,d; d=f(f(3,4),f(3,5));printf("%d\n",d);} 执行后输出结果是______。
2.在C语言中,二维数组的定义方式为:intn=10,a[n][n];,这个定义是否正确。
_____
3.假设所有变量均为整型,表达式(a=2,b=5,a>b?
a++:b++,a+b)的值是:_______。
4.以下程序的输出结果是______。
main(){inta=177; printf("%o\n",a);}
5.条件“2
三、C语言(每题10分,共20分)
1.编写程序:读入一个整数m(4≤m≤10),例如
4,程序将自动在a[0]~a[3]4个数组元素中分别放入14916,且按逆序输出此4个元素:16941。
2.编写程序:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串ss输入:d,则输出结果应为:upper=5,lower=
9。
3.14综合练习
3 一、单选题(每题2分,共60分)
1.以下程序的输出结果是______。
unionmyun{struct {intx,y,z;}u;intk;}a;main(){a.u.x=4;a.u.y=5;a.u.z=6;a.k=0; printf("%d\n",a.u.x);} A.
4 B.
6 C.
5 D.
0 2.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
voidsort(inta[],intn){inti,j,t; for(i=0;i
3.有以下程序: B.10,9,8,7,6,5,4,3,2,1D.1,2,10,9,8,7,6,5,4,
3 #include
A.y=
1 B.y=
0 C.y=
2 D.y=
3 4.已知ch是字符型变量,下面正确的赋值语句是______。
A.ch='123'; B.ch='\08'; C.ch='\xff'; D.ch='\'
5.C语言运算对象必须是整型的运算符是______。
A.%
B.= C./
D.<=
6.在说明语句:int*f();中,标识符f代表的是______。
A.一个返回值为指针型的函数名
B.一个用于指向一维数组的行指针
C.一个用于指向函数的指针变量
D.一个用于指向整型数据的指针变量
7.有以下程序:
127 main() 第 {inta=5,b=4,c=3,d=2;
3 if(a>b>c) 部 分 典型例题 C程序设计实验指导与题解 printf("%d\n",d); elseif((c-1>=d)==1) printf("%d\n",d+1); 128 else printf("%d\n",d+2); } 执行后输出的结果是______。
A.
3 B.
2 C.
4 D.编译时有错,无结果
8.以下叙述中错误的是______。
A.计算机不能直接执行用
C语言编写的源程序
B.后缀为.obj的文件,经链接程序生成后缀为.exe的文件是一个二进制文件
C.C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
D.后缀为.obj和.exe的二进制文件都可以直接运行
9.以下不正确的说法为______。
A.在不同函数中可以使用相同名字的变量
B.在函数内定义的变量只在本函数范围内有效
C.形式参数是局部变量
D.在函数内的复合语句中定义的变量在本函数范围内有效 10.下列关于单目运算符++、–
–的叙述中正确的是______。
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型变量、int型变量和float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量和int型变量,但不能是float型变量 11.有如下程序: main(){intn[5]={0,0,0},i,k=2;for(i=0;i
2 B.不确定的值 12.有以下程序: C.
1 D.
0 main(){chars[]={"aeiou"},*ps;ps=s;printf("%c\n",*ps+4); } 程序运行后输出的结果是______。
A.a B.e 13.指针s所指字符串的长度为______。
C.u
D.元素s[4]的地址 char*s="\t1Name\\Address\n";
A.说明不合法14.有以下程序: B.19 C.15 D.18 main(){intk=4,n=0; for(;n
A.4,
4 B.2,
2 C.3,
3 D.1,
1 15.若变量已正确定义并赋值,下面符合C语言语法的表达式是______。
A.a=b=c+
2 B.a:=b+
1 C.int18.5%3D.a=a+7=c+b 16.有以下程序: #include
5 #defineM N+
1 #definef(x)(x*M) main() {inti1,i2; i1=f
(2); i2=f(1+1); printf("%d%d\n",i1,i2); } 程序的运行结果是______。
A.127 B.117 C.1111 17.执行以下程序段后,w的值为______。
D.1212 intw='A',x=14,y=15;w=((x||y)&&(w<'a'));
A.–118.请读以下程序: #include
1 C.NULL D.
0 129第3部分 典型例题 C程序设计实验指导与题解 main() { char*s1="AbCdEf",*s2="aB"; 130 s1++;s2++; printf("%d\n",strcmp(s1,s2)); } 上面程序的输出结果是______。
A.正数
B.负数
C.零 19.以下不能对二维数组a进行正确初始化的语句是 A.inta[2][3]={0}; B.inta[][3]={{1,2},{0}}; C.inta[][3]={1,2,3,4,5,6}; D.inta[2][3]={{1,2},{3,4},{5,6}}; 20.下面程序的输出是______。
D.不确定的值。
chars[]="ABCD"; main() {char*p; for(p=s;p
B CD
C D
D ③DCBA ④ABCDABCABA
A.②
B.①
C.③
D.④ 21.已知:chara[3][10]={"BeiJing","ShangHai","TianJin"};,不能正确显示字符串 "ShangHai"的语句是 。
A.printf("%s",a+1); B.printf("%s",*(a+1)); C.printf("%s",*a+1); D.printf("%s",&a[1][0]); 22.以下叙述中正确的是______。
A.C
语言中的文件是流式文件,因此只能顺序存取数据
B.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才 能读到第一个数据
D.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖 23.有以下程序: main()
{inti; for(i=0;i<3;i++) switch(i){ case0:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}} 程序运行后的输出结果是______。
A.022111 B.021021 C.012 D.000122 24.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'–'3'; 后,c2中的值为 。
A.D B.68
C.C
D.不确定的值 25.有以下程序: main(){intk=5,n=0; do{switch(k) {case1:case3:n+=1;default:n=0;k--;case2:case4:n+=2;}printf("%d",n);}while(k>0&&n<5);} k--;break;k--;break; 程序运行后的输出结果是______。
A.2356 B.0235 C.02356 26.以下叙述中不正确的是______。
A.C语言中的文本文件以ASCII码形式存储数据
B.C语言中对二进制位的访问速度比文本文件快
C.C语言中,顺序读写方式不适用于二进制文件
D.C语言中,随机读写方式不适用于文本文件 27.有以下程序: D.235 main(){intk=4,n=0; for(;n
A.4,
4 B.2,
2 C.3,
3 D.1,
1 132 28.下面各语句行中,能正确给字符串进行赋值操作的语句行是______。
A.char
*s;scanf("%s",*s); B.chars[5]={'A','B','C','D','E'}; C.char*s="ABCDE"; D.charst[4][5]={"ABCDE"}; 29.若以下选项中的变量已正确定义,则正确的赋值语句是______。
A.xl=26.8%3; B.1+2=x2; C.x3=0x12; D.x4=1+2=3; 30.下面程序段的运行结果是______。
char
c[]="\t\v\\\Owill\n";printf("%d",strlen(c));
A.字符串中有非法字符,输出值不确定B.14 C.
3 D.
9 二、填空题(每题4分,共20分)
1.已有定义“intd=18;”,执行以下语句后的输出结果是______。
printf("*d
(1)=%d*d
(2)=%3d*d
(3)=%-3d*\n",d,d,d);
2.设已有说明:static
charc1[10],c2[10];,下面程序片段是否合法? c1={"book"};c2=c1;
3.若有定义“charc='\010';”,则变量c中包含的字符个数为______。
4.假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换,请填空。
a+=___________;b=a–___________;a–=___________;
5.若a=11,b=4,c=
3,则表达式!
(ac&1的值是______。
三、编程题(每题10分,共20分)
1.函数fun的功能是:把主函数中输入的三个数,最大的放在a中,最小的放在c中。
例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。
2.程序的功能是从字符串s尾部开始,按逆序把相邻的两个字符交换位置,并依次把每个字符紧随其后重复出现一次,放在一个新串t中。
例如,当s中的字符串为"12345"时,则t中的字符串应为"4455223311"。
3.15综合练习
4 一、单选题(每题2分,共60分)
1.以下程序的输出结果是______。
main(){inta=5,b=4,c=6,d; printf("%d\n",d=a>c?
(a>c?
a:c):(b));} A.
5 B.
4 C.
6 D.不确定
2.设变量已正确定义,则以下能正确计算f=n!
的程序段是______。
A.f=1;for(i=n;i>1;i++)f*=i; B.f=1;for(i=1;i
3.以下函数返回a所指数组中最小值所在的下标值。
fun(int*a,intn){ inti,j=0,p;p=j;for(i=j;i
4.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是______。
A.*pb=&x; B.pb=x; C.pb=&x;
D.*pb=*x
5.以下4个选项中,不能看作一条语句的是______。
A.{;} B.a=0,b=0,c=0; C.if(b==0)m=1;n=2; D.if(a>0);
6.下列定义变量的语句中错误的是______。
A.double
int_; B.charffor; C.floatUS$;D.int_int;
7.设变量x和y均已正确定义并赋值。
以下if语句中,在编译时将产生错误信息的 是______。
A.if(x>y&&y!
=0); B.if(x++); C.if(x>0)x––; D.if(y<0){;} elsey++;elsex++;
8.设有以下定义: inta=1; doubleb=3.5; charc='B'; #defined
3 则以下语句中错误的是 。
A.a++; B.b++; C.c++;
9.以下所列的各函数声明中,正确的是______。
A.voidplay(vara:Integer,varb:Integer) D.d++; 133第3部分 典型例题 C程序设计实验指导与题解
B.Subplay(aasinteger,basinteger) C.voidplay(inta,intb) D.voidplay(inta,b) 134 10.下列运算符中优先级最高的是_______。
A.<
B.!
=
C.&& 11.有如下程序:
D.+ main(){inti,sum; for(i=1;i<=3;sum++)printf("%d\n",sum);} sum+=i; 该程序的执行结果是______。
A.
3 B.
6 C.死循环 D.
0 12.若有说明语句:double*p,a;,则能通过scanf语句正确给输入项读入数据的程序 段是______。
A.p=&a;scanf("%lf",p);
B.*p=&a;scanf("%f",p); C.p=&a;scanf("%lf",*p);
D.*p=&a;scanf("%lf",p); 13.以下正确的字符串常量是______。
A.OlympicGames
B.'abc'
C."\\\"
D."" 14.有以下程序: main(){inta=1,b; for(b=1;b<=10;b++){if(a>=8)break;if(a%2==1){a+=5;continue;}a-=3;}printf("%d\n",b);} 程序运行后的输出结果是______。
A.
6 B.
4 C.
5 D.
3 15.假定X和Y为double型,则表达式X=
2,Y=X+3/2的值是______。
A.
3 B.3.500000 C.2.000000 D.3.000000 16.有如下程序: #define#define#define main(){ N2MN+1NUM2*M+
1 inti;for(i=1;i<=NUM; printf("%d\n",i);} i++) 该程序中的for循环执行的次数是______。
A.
8 B.
6 17.以下程序的输出结果是______。
C.
7 D.
5 #defineSQR(X)X*Xmain(){inta=16,k=2,m=1;a/=SQR(k+m)/SQR(k+m); printf("%d\n",a);} A.16 B.
1 18.以下程序的输出结果是______。
C.
9 D.
2 #include
(2)(1) C.a[1,3] 20.有以下程序: D.14.900000。
D.a[2][4] main(){charch[]="uvwxyz",*pc; pc=ch;printf("%c\n",*(pc+5)); } 程序运行后的输出结果是______。
A.字符y的地址 B.
0 C.元素ch[5]的地址 D.z 21.已知“chars[6],*ps=s;”,则正确的赋值语句是______。
A.s="12345";
B.*s="12345"; C.ps="12345";
D.*ps="12345"; 135
第3部分 典型例题 C程序设计实验指导与题解 22.有以下程序段: FILE*fp; 136 fp=fopen("al","r"); 其表示为 。
A.定义了一个普通指针,函数值给指针赋值
B.定义了一个文件
al
C.打开一个文件,该文件可读可写
D.打开一个文件,该文件只能读不能写 23.有以下程序: main(){intc; while((c=getchar())!
='\n'){switch(c-'2'){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;} }} 从第一列开始输入以下数据,↙代表一个回车符。
2473↙ 程序的输出结果是______。
A.6688766 B.668966 C.66778777 24.设有说明语句“char
a='\72';”,则变量a______。
A.包含三个字符
B.包含两个字符
C.包含一个字符
D.说明不合法 25.有以下程序: D.668977 main(){intx=100,a=10,b=20, if(a=15)if(!
ok1)x=1;elseif(ok2)x=10; x=-1;printf("%d\n",x);} ok1=
5, ok2=0; 程序的输出是______。
A.–1 B.
0 C.
1 D.不确定的值 26.以下4组用户定义的标识符中,全部合法的一组是______。
① _mainencludesin ② If–maxturbo ③ txtREAL3COM ④ intk_2_001
A.②
B.④
C.① 27.若i为整型变量,则以下循环执行次数是
D.③。
for(i=2;i==0;)printf("%d",i--);
A.无限次
B.一次 C.0次
D.两次 28.下列选项中正确的语句组是______。
A.chars[8];s={"Beijing"} B.chars[8];s="Beijing" C.char*s;s={"Beijing"} D.char*s;s="Beijing" 29.设变量已正确定义并赋值,以下正确的表达式是______。
A.int(15.8%5)B.x=y*5=x+zC.x=y+z+
5,++yD.x=25%5.0 30.有以下程序: #include
A.y=
2 B.y=
3 C.y=
1 二、填空题(每题4分,共20分)
1.以下程序运行后的输出结果是______。
D.y=
0 main(){charc;intn=100; floatf=10;doublex;x=f*=n/=(c=50);printf("%d%f\n",n,x);}
2.下列程序段的输出结果是______。
main(){charb[]="Hello,you"; b[5]=0;printf("%s\n",b);}
3.若s是int型变量,且s=
6,则下面表达式的值为______。
s%2+(s+1)%
2 137第3部分 典型例题 C程序设计实验指导与题解
4.以下程序的输出结果是______。
#include
5.若a=l,b=2,c=3,d=
4,则表达式a>b?
a:c>d?
c:d的值是______。
三、编程题(每题10分,共20分)
1.程序中函数f的功能是:计算函数F(x,y,z)=(x+y)/(x–y)+(z+y)/(z–y)的值。
其中x和y的值不等,z和y的值不等。
例如,当x的值为9、y的值为11、z的值为15时,函数值为–3.50。
2.统计指定字符在字符串a中出现的次数,统计的数据存到b数组中。
其中:字符'z'出现的次数存放到b[0]中,字符'y'出现的次数存放到b[1]中,字符'x'出现的次数存放到b[2]中,字符'w'出现的次数存放到b[3]中,字符'v'出现的次数存放到b[4]中,其他字符出现的次数存到b[5]中。
例如,当a中的字符串为"yyzxxwly+wvp"时,调用该函数后,b中存放的数据应是:1、3、2、2、1、
3。
声明:
该资讯来自于互联网网友发布,如有侵犯您的权益请联系我们。