C语言上机练习题.docx
《C语言上机练习题.docx》由会员分享,可在线阅读,更多相关《C语言上机练习题.docx(18页珍藏版)》请在冰豆网上搜索。
C语言上机练习题
1。
阅读以下程序,说出其功能和运算结果。
#include〈stdio.h〉
intmain()
{
intn;
intfactorial(intn);
scanf(”%d”,&n);
printf(”%d\n",factorial(n));
return0;
}
intfactorial(intn)
{
inti,fact=1;
for(i=1;i<=n;i++)
fact=fact*i;
returnfact;
}
若输入5↙
2.改正下列程序中的错误,在屏幕上显示“WelcometoYou!
”.
#includeintmian()
{
printf(”WelcometoYou!
\n”)
return0;
}
3.若输入4,程序运行结果为【1】,若输入-4,运行结果为【2】,若输入10,运行结果为【3】.
#include〈stdio.h〉
main()
{intx,y;
scanf(”%d",&x);
if(x〈1)
{y=x;
printf("x=%d,y=x=%d\n”,x,y);
}
elseif(x<10)
{y=2*x-1;
printf(”x=%d,y=2*x—1=%d\n",x,y);
}
else
{y=3*x-11;
printf(”x=%d,y=3*x—11=%d\n”,x,y);
}
}
4.当输入19,2,21时下列程序运行的结果是( )。
#includeh>
main()
{inta,b,c,max;
printf(”pleasescanthreenumbera,b,c:
\n");
scanf(”%d,%d,%d”,&a,&b,&c);
max=a;
if(max
if(max〈c)max=c;
printf("maxis:
%d”,max);
}
5.运行以下程序时,从键盘键入China##includeh>
voidmain()
{
intv1=0,v2=0;charch;
for(;(ch=getchar())!
=‘#';)
switch(ch)
{
case‘a’:
case‘h’:
default:
v1++;
case‘o’:
v2++;
}
printf(“%d,%d\n",v1,v2);
}
6.下面程序的运行结果是 。
#include〈stdio。
h>
voidmain()
{inti,j,k=19;
while(i=k-1)
{k—=3;
if(k%5==0){i++;continue;}
elseif(k〈5)break;
i++;
}
printf(“i=%d,k=%d\n",i,k);
}
7.下列程序的输出为 。
#include〈stdio。
h〉
voidmain()
{inti,j,k=0,m=0;
for(i=0;i<2;i++)
{for(j=0;j<3;j++)k++;k—=j;}
m=i+j;
printf("k=%d,m=%d\n",k,m);
}
8.下面程序的运行结果是 .
#includeh>
voidmain()
{
intn[3],i,j,k;
for(i=0;i〈3;i++)n[i]=0;
k=2;
for(i=0;i〈k;i++)
for(j=0;j〈k;j++)
n[j]=n[i]+1;
printf(“%d\n",n[1]);
}
9.阅读程序,写出程序运行结果.
#include〈stdio.h〉
#define MAX 100
voidmain()
{ int f[MAX],i,j,k=2,m=5;
for(i=0;i〈=m;i++)
f[i]=1;
f[k-1]=2;
for(i=k;i〈=m;i++)
for(j=i—k;j<=i—1;j++)
f[i]+=f[j];
printf("%d%5d%5d\n”,k,m,f[m]);
}
10.下面程序可求出矩阵a的两条对角线上的元素之和。
请填空。
#include〈stdio。
h〉
voidmain()
{
inta[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;i〈3;i++)
for(j=0;j〈3;j++)
if(i==j)sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j——)
if((i+j)==2)sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
11.已知以下矩阵:
=
×
下面程序的功能是求出Y1,Y2,Y3,Y4的值。
请填空。
#includevoidmain()
{
floata[4][4]={{1,—0.2,0,0},{-0.8,1,-0。
2,-0.2},
{0,-0.8,1,-0。
2},{0,-0.8,-0.8,1}};
floatx[4]={1,1,1,1},y[4];
inti,j,k;
for(i=0;i〈4;i++)
{
y[i]=0;
for(j=0;j〈4;j++)
【1】
}
for(k=0;k〈4;k++)
printf(“\nY[%d]=%—6.2f”,k+1,【2】);
}
12.运行以下程序时,如果从键盘上输入:
ab〈回车〉
c〈回车〉
def〈回车〉
则输出结果为().
#include"stdio。
h”
#defineN6
voidmain()
{charc[N];
inti=0;
for(;i〈N;c[i]=getchar(),i++);
for(i=0;iA.aB.aC.abD.abcdef
bbc
ccd
dd
e
f
13.给出下列程序的运行结果:
#include”string。
h"
#include”stdio.h"
voidmain()
{charstr[81],str1[81];
intk=1,i=1,j;
intflag=0;
gets(str);
str1[0]=str[0];
while(str[i]!
='\0’)
{for(j=0;j〈k;j++)
if(str[i]==str1[j])
flag=1;
if(flag!
=1)str1[k++]=str[i];
i++;
}
for(i=0;i〈k;i++)
printf("%3c”,str1[i]);
}
如运行时输入:
abcbaccba
14。
若输入一个整数10,以下程序的运行结果是 .
#includeh>
sub(inta)
{intc;
c=a%2;
returnc;}
voidmain()
{inta,e[10],c,i=0;
printf(“输入一整数\n”);
scanf(“%d”,&a);
while(a!
=0)
{c=sub(a);
a=a/2;
e[i]=c;
i++;}
for(;i>0;i—-)printf(“%d”,e[i—1]);
}
15.以下程序的正确运行结果是 .
#includeh〉
#defineMAX10
inta[MAX],i;
sub2()
{
inta[MAX],i,max;
max=5;
for(i=0;i〈max;i++)a[i]=i;
}
sub1()
{
for(i=0;i〈MAX;i++)a[i]=i+i;
}
sub3(inta[])
{
inti;
for(i=0;i〈MAX;i++)printf(“%d",a[i]);
printf(“\n");
}
voidmain()
{
printf(“\n”);sub1();sub3(a);sub2();sub3(a);
}
16。
以下程序的正确运行结果是 。
#includeh〉
func(inta,intb)
{
staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);}
voidmain()
{
intk=4,m=1,p;
p=func(k,m);printf(“%d,",p);
p=func(k,m);printf(“%d\n”,p);
}
17.阅读程序,说出程序的运行结果()。
#include〈stdio.h〉
#defineADD(x)x+x
voidmain()
{
intm=1,n=2,k=3;
intsum=ADD(m+n)*k;
printf(”sum=%d",sum);
}
18.以下程序的正确运行结果是 。
intfun(intx,inty,int*cp,int*dp)
{*cp=x+y;
*dp=x—y;
}
#include
voidmain()
{inta,b,c,d;
a=4;b=3;
fun(a,b,&c,&d);
printf("%d%d%d%d\n”,a,b,c,d);
}
19.以下程序的正确运行结果是 .
#include
voidmain()
{inta[]={2,3,4,5};
ints,i,*p;
s=1;p=a;
for(i=0;i〈=3;i++)s+=*p++;
printf("s=%d\n",s);
}
20.以下程序的正确运行结果是 .
#includevoidmain()
{
voidmove(int*);
inta[3][3]={1,2,3,4,5,6,7,8,9},(*p)[3],*p1=*a,i,j;
for(;p1<*a+9;p1++)printf(”%3d”,*p1);
printf("\n");
p1=*a;
for(i=0;i〈3;i++)
{
for(j=0;j〈3;j++)printf("%3d",*(p1+i*3+j));
printf("\n");
}
p=a;
move(p);
for(i=0;i〈3;i++)
printf(”%3d%3d%3d\n",a[i][0],a[i][1],a[i][2]);
}
voidmove(int*pointer)
{inti,j,t;
for(i=0;i<2;i++)
for(j=i+1;j〈3;j++)
{t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
21.以下程序的正确运行结果是 。
#include〈stdio。
h>
#include〈string.h〉
voidmain()
{char*p1,str1[20]=”xyz",str2[20];
p1="abcd”;p1++;
strcat(str1+1,p1+1);
strcpy(str2,str1);
printf(”%s”,str2);
}
22.下列程序的输出结果是
#includeh〉
structabc
{inta,b,c;};
main()
{structabcs[2]={{1,2,3},{4,5,6}};
intt;
t=s[0].a+s[1]。
b;
printf(”%d\n”,t);
}
1.摊论个卖西瓜,以西瓜的重量论价。
10斤以上的每斤0.3元,8斤以上的每斤0。
4元,6斤以上的每斤0.5元,4斤以上的每斤0。
7元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。
2.编写程序完成任意两个数的+,—,*,/运算,要求从键盘输入四个运算符之一和任意两个数,输出运算结果。
3.给定一个日期,输出这个日期是该年的第几天(输入的数据格式为YYYYMMDD,确保输入的数据有效).
4.找出1~99之间满足以下条件的数:
该数的平方对于10的余数等于该数本身,或者该数的平方对于100的余数等于该数本身.
5.编写一个程序,输出菱形图案,第一行为一个字母A,第二行为三个字母B,依此类推,第n行为2n-1个相应的字母,以后每行字母个数递减。
n由键盘输入。
6.从键盘输入若干整数(数据个数应少于50),其值在0至4的范围内,用-1作为输入结束的标志。
统计每个整数的个数.试编程。
7。
设计一个程序,将上学期本队学员高数课程的考试成绩排序,并给出每一个学员的名次。
(如果有并列第一,则取消第二名,以此类推)
8。
编程求具有4行4列数据的二维数组每一列元素之和并将其放入该列的第五行上。
输出第五行元素。
9.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。
也可以没有鞍点。
(用常规算法做的时候,要求数据不能相同)
10.从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b中的所有元素都连接到a中。
试编程。
11.通过键盘输入三行英文文字,编写程序将输入的三行文字输出,要求输出结果中不允许包含大写字母(输出时如遇到大写字母则将其转换为小写)。
12。
以下程序的功能是应用下面的近似公式计算e的n次方。
函数f1用来计算每项分子的值,函数f2用来计算每项分母的值。
请编写f1和f2函数。
(前20项的和)
floatf2(intn)
{}
floatf1(intx,intn)
{}
#includeh〉
voidmain()
{
floatexp=1。
0;
intn,x;
printf(“Inputanumber:
");
scanf(“%d”,&x);
printf(“%d\n”,x);
exp=exp+x;
for(n=2;n<=19;n++)
exp=exp+f1(x,n)/f2(n);
printf(“\nTheisexp(%d)=%8。
4f\n”,x,exp);
}
运行结果:
Inputanumber:
3
Theisexp(3)=20。
0855
13。
函数del的作用是删除有序数组a中的指定元素x。
已有调用语句n=del(a,n,x);其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数.请填空.
14。
从键盘输入一个整数(小于等于8位),将其转换成字符串后输出。
如:
输入1991,输出1□9□9□1.要求输入和输出在主函数完成,功能的实现在子函数完成。
15.编写一个函数,对具有10个整数的数组进行如下操作:
从第n个元素开始到最后一个元素,依次向前移动一个位置,空出的最后一个位置放入第n-1个元素,输出移动后数组的全部元素值.(n的取值1~10)
16.编写一程序,完成学生成绩的输入、查询、排序、插入功能,每个功能完成后都要输出结果。
要求:
1)在主函数中定义一个数组a[11],用以存放学生的成绩,分别调用下面的6个子函数,完成各自功能;
2)编写一个函数inputsc(inta[]),从键盘输入10个学生成绩;
3)编写一个函数outputsc(inta[],intn),输出n个学生成绩;
4)编写一个函数query(inta[],intn),查询第n个学生成绩并输出结果;
5)编写一个函数sort(inta[10]),在函数中进行10个学生成绩从高到低排序;
6)编写一个函数insert(inta[]),再输入一个学生的成绩,将此成绩插入到原已排好序的学生成绩数组中;
7)改进上一步的函数为sort1(inta[],intn,charstyle),将n个学生成绩排序,排序方式根据sort()函数的style参数进行,如style为'a'按升序排,style为’d'按降序排。
17.输入若干个整数,编写两个函数分别实现:
A。
对它们按从大到小的顺序排列:
sort(int*x,intn)
B。
对键盘输入的任一整数,能够按已排序好的规律将它插入到合适的位置:
insert(int*x,intn,inty)其中y为欲插入的整数
18.有一个长度为n的字符串,编写一函数strc(char*p1,char*p2,intm,intn),将此字符串中从第m个字符开始的全部字符复制到另外一个字符串.在主函数输入和输出.
19。
用结构体实现输入某年某月某日,计算出这一天是本年度的第几天。
20。
请设计一个程序,完成以下功能:
请输入0—5之间的数字,实现相应的功能:
0:
原始数据的录入1:
查询某学生的信息
2:
插入一个学生3:
删除一个学生
4:
打印全体学生信息5:
退出
学生登记表如下:
学号
姓名
性别
籍贯
入学成绩