C语言上机实验试题.docx
《C语言上机实验试题.docx》由会员分享,可在线阅读,更多相关《C语言上机实验试题.docx(29页珍藏版)》请在冰豆网上搜索。
C语言上机实验试题
实验一 初识VisualC++6.0环境及运行C实例
作业:
一.选择题
1.若int a,b; scanf("%d%d",&a,&b);不可以用(A)作为输入的分隔符。
A), B)空格 C)回车 D)TAB键
2.阅读以下程序,当输入数据的形式是:
25,13,10,正确的输出结果是( D )。
main(){
intx,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("x+y+z=%d",x+y+z);}
A)x+y+z=48 B)x+y+z=35 C)x+z=35 D)不确定值
3.已知ch是字符型变量,下边正确的赋值语句是( B )
A)ch='123'; B)ch='\xff'; C)ch='\08'; D)ch="\";
二.填空题
1.以下程序的输出结果是(a=+1124,a=1124 ,x=30.141500,x=30.142)
main(){
inta=1124;
doublex=30.1415;
printf("a=%+6d,a=%-6d,x=%f,x=%7.3f",a,a,x,x);}
2.以下程序的输出结果是( 36.750000 )
main(){
intx=10;floaty=26.75;
printf("%f",x+y);}
实验二 C程序的调试及运算符
作业:
1.指出下面的是标识符、关键字还是常量。
abc,2,new,struct,″opiu″,′k′,″k″,false,bnm,true,0xad,045,if,goto
解:
abc是标识符,2是整型常量,new、struct是关键字,″opiu″是字符串常量,′k′是字符常量,″k″是字符串常量,false是布尔常量,bnm是标识符,true是布尔常量,0xad是十六进制的整型常量,045是八进制的整型常量,if、goto都是关键字。
2.指出下面的标识符是否是合法的。
2op,Fm,void,short,Dfe,fr-r,s*u
解:
2op不是合法的标识符因为它是以数字开头的;
Fm是合法的标识符;
void,short不是合法的标识符,因为它们是系统保留的关键字;
Dfe是合法的标识符;
fr-r和s*u不是合法的标识符,因为它们分别包含不允许的字符-和*。
3.判断对错:
①如果a为flase,b为true,则a&&b为true;
②如果a为flase,b为true,则a||b为true。
解:
由表2.3可知,①错。
②对。
4.请指出下面的表达式是否合法,如合法,则指出是哪一种表达式。
%hb*/c3+4o+p3>=(k+p)z&&(k*3)!
mp5%ka==b(d=3)>k
解:
%h和b*/c不是合法的表达式,其余的都是合法的表达式。
3+4,o+p是算术表达式;
3>=(k+p)是关系表达式;
z&&(k*3),!
mp是逻辑表达式;
5%k是算术表达式;
a==b是关系表达式;
(d=3)>k是关系表达式。
5.若x为int型变量,则执行以下语句后x的值是(-14 )
x=7;
x+=x-=x+x;
实验三 顺序结构程序设计
作业:
1.编程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1,c2应定义为字符型或整型?
还是二者皆可?
(2)要求输出c1和c2的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量和字符型变量是否在任何情况下都可以互相代替?
(谭浩强书:
3.10)
2.设圆半径r=2,圆柱高h=3,求圆周长,圆柱底面积,圆柱体积。
用scanf输入数据,用printf输出计算结果,输出时要求有文字说明,取小数点后两位数字。
(谭浩强书:
3.8)
实验四各种分支结构
作业:
一.填空题
1.有intx=3,y=4,z=5;则
A)表达式!
(x>y)+(y!
=z)||(x+y)&&(y-z)的值为【1 】。
B)表达式x+y>z&&y==z的值为【 0 】
C)表达式x||y+z&&y-z的值为【 1 】
D)表达式!
(x>y)&&!
z||1的值为【 1 】
E)表达式!
(x==y)&&!
(y==z)||0的值为【0 】
F)表达式!
(x+y)+z-1&&y+z/2的值为【 1 】
2.如下程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和,请在【 】内填入正确内容。
main()
{inta,b,【x 】,y;
scanf("%d%d",&a,&b);
x=a*a+b*b;
if(【x>100】)
{y=【x/100 】; printf("\na2+b2>100,%d",y);}
elseprintf("\na2+b2<=100%d",a+b);
}
3.如下程序完成判断输入的正整数是否既是5又是7的整数倍。
若是,则输出yes,否则输出no,请在【 】内填入正确内容。
main()
{intx;
printf("\npleaseinputadata:
");
scanf("%d",&x);
if(【x%5==0 】&&【x%7==0 】)
printf("yes");
else【printf("no" 】;
}
4.下面程序的执行结果是(3 )
main()
{
intc,a;
a=(float)(7/2)>3.5?
(c=2,c+2):
3;
printf("%d\n",a);
}
5.下面程序的执行结果是(14,4 )
main()
{
inta=10,b=0;
if(a==12)
{
a=a+1;
b=b+1;
}
else
{
a=a+4;
b=b+4;
}
printf("%d,%d",a,b);
}
二.编程题
1.根据以下函数关系,对输入的每个x值,计算出相应的Y值。
X Y
X<0 0
0<=x<10 X
10<=x<20 10
20<=x<40 30
要求用两种方法实现
1)用if-else实现(自己编程)。
2)用switch语句实现(填空完成程序)
main()
{
intx,i;
floaty;
scanf("%d",&x);
if(x<0)i=-1;
elseif(x>=40)i=4;
elsei=x/10;
switch(i)
{
case-1:
y=0; break;
case 0:
【y=x 】; break;
case 1:
y=10; break;
case 3:
case 2:
y=30; 【break 】;
default:
printf("errorinput\n");
}
printf("y=%f",y);
}
2.编程实现以下的功能:
输入两个运算数(data1和data2)及一个运算符(op),计算表达式data1opdata2的值,其中op可为+,-,*,/。
3.有三个整数a,b,c,由键盘输入,输出其中最大的数。
4.给一个不多于3位的正整数,要求:
(1)求出它是几位数;
(2)分别打印出每一位数字。
实验五循环结构程序设计
作业题:
选择题
1.以下程序输出结果是()。
#include“stdio.h”
main()
{ inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
elsec+=1;
printf("%d\n",c);
}
(A)0 (B)1 (C)2 (D)3
2.以下程序输出结果是()。
#include“stdio.h”
main()
{ intw=4,x=3,y=2,z=1;
printf("%d\n",(ww:
zz:
x));
}
(A)1 (B)2 (C)3 (D)4
3.以下程序输出结果是()。
#inclued“stdio.h”
main()
{ intx=0,y=2,z=3;
switch(x)
{ case0:
switch(y==2)
{ case1:
printf("*");break;
case2:
printf("%");break;
}
case1:
switch(z)
{ case1:
printf("$");
case2:
printf("*");break;
default:
printf("#");
}
}
}
(A)*% (B)*%$ (C)*# (D)*$*#
4.以下程序段输出结果是()。
intk,j,s;
for(k=2;k<6;k++,k++)
{s=1;
for(j=k;j<6;j++)s+=j;
}
printf("%d\n",s);
(A)9 (B)1 (C)11 (D)10
5.以下程序段输出结果是()。
intx=3;
do
{ printf("%3d",x-=2);
}while(!
(--x));
(A)1 (B)3 0 (C)1 -2 (D)死循环
6.以下程序段输出结果是()。
main()
{ inty=10;
for(;y>0;y--)
if(y%3==0)
{printf("%d",--y);continue;}
}
(A)741 (B)852 (C)963 (D)875421
填空题
1.下面程序的运行结果是 。
#include“stdio.h”
main()
{ inti=1;
while(i<=-1)
{printf(“$$$$”);
}
printf(“\n%d”,i);
}
2.下面程序的运行结果是 。
#include“stdio.h”
main()
{ inti=5;
do{
i――;
printf(“$$$$”);
}while(i);
printf(“\n%d”,i)
}
3.下面程序的运行结果是 。
#include“stdio.h”
main()
{ inti=3;
while(i<10)
{ if(i<6)
{ i+=2;
continue;
}
else
printf(“%d”,++i)
}
}
4.下面程序的运行结果是 。
#include“stdio.h”
main()
{ inti,sum=0;
for(i=0;i<3;++i)
printf(“%d%d\n”,i,sum+=i);
}
实验六 数组
作业与练习
一、选择题
1.若有说明:
int a[10];则对数组元素的正确引用是【A 】
A)a[10]; B)a[3.5] C)a(5) D)a[10-10]
2.若有说明语句:
int[3][4];则对a数组元素的正确引用是【C 】
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a
(2)
(1)
二、填空题
1.若有说明:
inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是【3】
2.下面程序的运行结果是【11235813213455】
main()
{inti,f[10];
f[0]=1; f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{if(i%4==0) printf("\n");
printf("%3d",f[i]);
}
}
三、编程题
1.用选择法对10个整数按升序排序
#defineN10
main()
{int i,j,min,temp;
staticinta[N]={5,4,3,2,1,9,8,7,6,0};
printf("\nThearrayis:
\n"); /*输出数组元素*/
for(i=0;i printf("%5d",a[i]);
for(i=0;i { min=【0 】;
for(j=i+1;j if (a[min]>a[j]) min=j;
【{temp=a[min];a[min]=a[j];a[j]=temp}】; /*数据交换*/
}
printf("\nThesortednumbers:
\n"); /*输出排序结果*/
for(i=0;i printf("\n");
}
2.有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则打印出“无此数”。
读懂下面的程序,并填空。
变量说明:
top,bott:
查找区间两端点的下标;loca:
查找成功与否的开关变量。
#include
#defineN15
main()
{inti,j,number,top,bott,min,loca,a[N],flag;
charc;
printf("Input15numbers(a[i]>a[i-1])\n"); /*由大到小*/
scanf("%d",&a[0]); /*输入第1个数据*/
i=1;
while(i { scanf("%d",&a[i]); /*输入下一个数据*/
if(a[i]>=a[i-1]) /*是否大于前一个数*/
i++;
else
{ printf("Repeatinputnumbera[i]");
printf("must>=%d\n",a[i-1]);
}
}
printf("Inputthefindednumber:
"); /*输入需要查找的数*/
scanf("%d",&number);
loca=0;
top=0;
bott=N-1;
if((numbera[N-1]))
loca=-1; /*不在范围内*/
while((loca==0)&&(top<=bott))
{min=【(top+bott)/2】;
if(number==a[min])
{loca=min;
printf("Theserialnumberis %d.\n",loca+1);
}
else if(number bott=min-1;
elsetop=min+1;
}
if(loca==0||loca==-1)
printf("%disn'tintabel\n",number);
}
四、自测题
(一)选择题
1.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为【A】。
(假设a[0][0]位于数组的第一个位置上。
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
2.在C语言中,引用数组元素时,其数组下标的数据类型允许是【A 】
A)整型常量 B)整型表达式
C)整型常量或整型表达式 C)任何类型的表达式
(二)填空题
1.以下是个评分统计程序,共有8个评委打分,统计时,去掉一个最高分和一个最低分,其余6个分数的平均分即是最后得分,程序最后应显示这个得分,显示精度为1位整数,2位小数,程序如下,请将程序补充完整。
(99年北京水平试题)
main()
{floatx[8]={9.2,9.5,9.8,7.4,5.,9.1,9,0,}
float【aver】,max,min;
inti;
for(【i=0】;i<8;i++)
aver+=x[i];
max=x[0];
min=max;
for(i=1;i<8;i++)
{if(max if(【min>x[i]】)min=x[i];
}
aver=【(aver-min-max)/6】;
printf("Average【%f】\n",aver);
}
2.程序读入20个整数,统计并输出非负数个数以及非负数的和。
#include"stdio.h"
main()
{inti,a[20],s,count;
s=count=0;
for(i=0;i<20;i++)
{scanf("%d",&a[i]);
if(a[i]<0)
【continue 】;
s+=a[i];
count++;
}
printf("s=%dcount=%d\n",s,count);
}
实验七 字符数组
作业:
(一)选择题
1.有下面的程序段
char a[3],b[]="china";
a=b;
printf("%s",a);
则【D】
A)运行后将输出china B)运行后将输出ch
C)运行后将输出chi D)编译出错
2.判断字符串s1是否大于字符串s2,应当使用【D 】
A)if(s1>s2) B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
3. 下述对C语言字符数组的描述中错误的是【C】
A)字符数组可以存放字符串
B)字符数组的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比
(二)填空题
1. 编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不用strcpy函数。
拷贝时,‘\0'也要拷贝过去。
‘\0'后面的字符不拷贝。
#include"stdio.h"
main()
{charfrom[80],to[80];
inti,len;
printf("\npleaseinputstring:
");
scanf("%s",from);
【len=strlen(from)】; /*得到字符串长度*/
for(i=0;i<=len;i++)
【to[i++]=from[i++]】; /*逐个字符复制*/
printf("New string is:
%s\n",to);
}
实验八函数
作业题:
一.选择题
1.C语言中,若对函数类型无说明,则函数的默认类型是【A 】
A)整型 B)float C)double D)指针类型
2.C语言规定,在一个源程序中,main函数的位置( C )
A)必须在最开始 B)必须在系统调用的库函数的