C语言上机考试题.docx

上传人:b****4 文档编号:26979518 上传时间:2023-06-24 格式:DOCX 页数:21 大小:21.49KB
下载 相关 举报
C语言上机考试题.docx_第1页
第1页 / 共21页
C语言上机考试题.docx_第2页
第2页 / 共21页
C语言上机考试题.docx_第3页
第3页 / 共21页
C语言上机考试题.docx_第4页
第4页 / 共21页
C语言上机考试题.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言上机考试题.docx

《C语言上机考试题.docx》由会员分享,可在线阅读,更多相关《C语言上机考试题.docx(21页珍藏版)》请在冰豆网上搜索。

C语言上机考试题.docx

C语言上机考试题

1、从键盘输入10个整数,用冒泡法对这10个数排序(由小到大)后输出.p172

2、从键盘输入10个整数,用选择法对这10个数排序(由大到小)后输出.p155

3、对于一个自然数,如果该数的所有因子之和正好等于该数,则该数称为完数。

统计1000以内的完数个数。

#include

{intm,s,i;

for(m=2;m<1000;m++)

{s=0;

for(i=1;i

if((m%i)==0)s=s+i;/*计算所有因子之和*/

if(s==m)/*所有因子之和正好等于该数,则为完数*/

{printf("%d,factorsare",m);

for(i=1;i

if(m%i==0)printf("%d",i);

printf("\n");

}

}

}

4、编写主函数和一个函数intdiff(intyear,intm1,intd1,intm2,intd2)。

(1)函数diff计算year年的m1月d1日至m2月d2日之间相隔的天数(假设m1<=m2);

(2)主函数中输入某年的两个日期,调用diff函数计算它们之间相隔的天数,并输出。

#include

intdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

intdiff(intyear,intm1,intd1,intm2,intd2){

inti,d=0;

if(year%4==0&&year%100!

=0||year%400==0)days[2]=29;

elsedays[2]=28;

if(m1==m2)d=d2-d1;

else{

for(i=m1+1;i

d+=days[i]+days[m1]-d1+d2;

}

return(d);

}

voidmain(){

intyear,m1,d1,m2,d2,ds;

printf("pleaseinputtwodate:

\n");

scanf("%d%d%d%d%d",&year,&m1,&d1,&m2,&d2);

ds=diff(year,m1,d1,m2,d2);

printf("Thedaysoftheyearis%d!

\n",ds);

}

5、编写主函数和一个函数voidmerge(int*a,int*b,intc[])。

要求是:

(1)函数merge对两个已是升序的数组a、b进行归并,归并后的结果仍然是升序的,并通过形参c返回;

(2)主函数:

定义长度为5的数组a,并升序初始化;定义长度为8的数组b,并升序初始化;调用merge函数对数组a、b进行归并,输出归并结果。

#include

#defineM5

#defineN8

voidmergesort(intx[],int*y,int*z){

inti=0,j=0,k=0;

while(i

if(x[i]

elsez[k++]=y[j++];

}

while(i

z[k++]=x[i++];

while(j

z[k++]=y[j++];

}

voidmain(){

inta[M]={0,1,3,6,8},b[N]={2,9,7,12,15,21,22,25};

inti,c[M+N],*p=a;

printf("Theoriginalarraya:

\n\t");

for(i=0;i

printf("%d",a[i]);

printf("\n");

printf("Theoriginalarrayb:

\n\t");

for(i=0;i

printf("%d",b[i]);

printf("\n");

mergesort(p,&b[0],c);

printf("Thesortedarrayc:

\n\t");

for(i=0;i

printf("%d",c[i]);

printf("\n");

}

6、从键盘输入一个0~99999之间的整数。

①判断它是一个几位数;

②将该数的各位数字按逆序输出。

#include

voidmain(){

intcount=0;

longnum;

printf("pleaseinputaintegerbetween0and99999:

\n");

scanf("%ld",&num);

do{

printf("%d,",num%10);

num=num/10;

count++;

}while(num%10!

=0);

printf("\n%d\n",count);

}

 

7、输入一行字符,统计其中有多少个单词并输出,单词之间用空格符分隔开。

#include

voidmain(){

inti=0,count=0;

charstring[80];

printf("pleaseinputastring:

\n");

gets(string);

while(string[i++]!

='\0'){

if(string[i++]=='')

for(i++;string[i]='';i++);

else{

count++;

for(i++;string[i]!

='\0'&&string[i]!

='';i++);

}

}

printf("thereare%dwords!

\n",count);

}

8、输入10个整数,判断它们是否为素数。

要求:

编写一个函数intprime(intm)来判断形参变量m是否为素数,如果是素数则返回1,否则返回0。

#include

#include

intprime(intm){

inti,t,p;

t=sqrt(m);

for(i=2;i<=t;i++){

if(m%i==0){

p=0;

break;

}

}

if(i>t)p=1;

return(p);

}

voidmain(){

inta[10],i,p;

printf("pleaseinput10integers:

\n");

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

scanf("%d",&a[i]);

for(i=0;i<10;i++){

p=prime(a[i]);

printf("%d",p);

}

}

9、输入10个学生的成绩,求平均成绩。

要求控制成绩输入的正确性,即控制输入的成绩必须为0~100分。

#include

voidmain(){

intscore,i,sum=0,loop;

for(i=1;i<=10;i++){

loop=1;

while(loop){

scanf("%d",&score);

if(score>=0&&score<=100)

loop=0;

else

printf("scoreerror,pleasereinput");

}

sum+=score;

}

printf("Theaveragescoreis%.2f.\n",(float)sum/10);

}

10、编写主函数和一个函数intmonthDay(intyear,intmonth)。

(1)函数monthDay计算year年month月的天数,并返回;

(2)在主函数中输入一个日期(年、月、日),计算该日是当年的第几天(说明:

需要调用monthDay函数)。

#include

intdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

intmonthDay(intyear,intmonth){

inti,d=0;

if(year%4==0&&year%100!

=0||year%400==0)days[2]=29;

elsedays[2]=28;

for(i=1;i

d+=days[i];

return(d);

}

voidmain(){

intyear,month,day,ds;

printf("pleaseinputadate:

\n");

scanf("%d%d%d",&year,&month,&day);

ds=monthDay(year,month);

ds+=day;

printf("Thedaysoftheyearis%d!

\n",ds);

}

11、写两个函数intgcd(intm,intn)和intlcm(intm,intn),分别求两个正整数m和n的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个正整数的值在主函数中从键盘输入。

#include

intmaxfun(intm,intn){//求m和n的最大公约数的函数

intt;

do{

t=m%n;

m=n;

n=t;

}while(t!

=0);

returnm;

}

intminfun(intm,intn){//求m和n的最小公倍数的函数

intt;

t=maxfun(m,n);

returnm*n/t;

}

voidmain(){

intm,n;

printf("pleaseinputtwopositiveintegerstomandn:

\n");

scanf("%d%d",&m,&n);

printf("%d和%d的最大公约数是%d,最小公倍数是%d\n",

m,n,maxfun(m,n),minfun(m,n));

}

12、有0、1、2、3、4五个数字,能组成多少个互不相同且无重复数字的三位数?

并计算这些三位数之和。

#include

voidmain(){

inti,j,k,count=0;

for(i=1;i<=4;i++){

for(j=0;j<5;j++){

for(k=0;k<5;k++){

if(i!

=j&&i!

=k&&j!

=k){

printf("%d\n",i*100+j*10+k);

count++;

if(count%5==0)printf("\n");

}

}

}

}

printf("\nCount=%d\n",count);

}

13、输出2至1000之间的所有同构数,所谓同构数是指它出现在它的平方数的右端。

例如,5、6、25的平方分别等于25、36、625,所以5、6和25都是同构数。

#include

voidmain(){

longi,j,k;

k=10;

for(i=2;i<=1000;i++){

if(i==k)k*=10;

j=i*i;

if(j%k==i)

printf("%ld\t%ld\n",i,j);

}

}

14、编写一个函数,将一个数插入到已是升序的数组中,且插入后该数组仍是升序数组。

已是升序数组的内容由主函数给出,待插入的数在主函数中输入。

#include

#defineN10

voidinsert(floata[],floatm)

{inti,j;

for(i=0;i

if(m<=a[i])/*把比m大的数据都往后移动一位*/

{for(j=N-1;j>i;j--)a[j]=a[j-1];

a[i]=m;break;

}

if(m>a[i-1])a[i]=m;/*m比数组中所有数据都大的话,插入到数据尾部*/

for(i=0;i

printf("%f",a[i]);

}

voidmain()

{

floatk,a[N];inti;

printf("请输入9个升序排好的数据:

");

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

scanf("%f",&a[i]);

printf("请输入插入数据:

");

scanf("%f",&k);

insert(a,k);

}

15、编写一个程序,用折半法查找某数是否在给定的升序数组中,如果在则输出“Findsuccess!

”并输出它是第几个数,否则输出“Nofind!

”。

#include

#defineLEN15

intbinarysearch(floata[],floatnumber)

{

intmid,start=0,end=LEN-1;

while(start<=end){

mid=(start+end)/2;

if(a[mid]

start=mid+1;

elseif(a[mid]>number)/*往左继续折半查找*/

end=mid-1;

else/*找到了要查找的数,则返回其位置*/

returnmid;

}

return-1;/*查找失败,返回-1*/

}

voidmain(void)

{inti;floatk;

floata[LEN];

printf("请输入15个以升序排好的数据:

");

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

scanf("%f",&a[i]);

printf("请输入要查找的数:

");

scanf("%f",&k);

if(binarysearch(a,k)>=0)

printf("Findsuccess!

位置为:

%d\n",binarysearch(a,k)+1);

else

printf("Nofind!

");

}

16、编写一函数intsubstr(char*str,intbegin,intlen,char*p),将字符串str的第begin个字符开始的len个字符复制到另一个字符串p中,并返回成功复制字符的个数。

要求在主函数中输入原始字符串及截取字符串的起始位置和长度,并输出被截取的字符串及其长度。

(这只是被调函数)

intfun3(charsubstr[],charstr[],intloc,intlen){

intk,n;

if(loc<1||loc>strlen(str)||len<=0){

substr[0]=\0;

return0;

}

for(k=0,n=loc-1;k

=\0;)

substr[k++]=str[n++];

substr[k]=\0;

return1;

}

17、有4个学生,每个学生有5门课程的成绩,编写一个程序计算每一个学生5门课程的平均成绩。

#include

voidmain(){

inta[4][5],i,j;

floataver,sum=0;

printf("请输入四个学生五门课的成绩:

\n");

for(i=0;i<4;i++){

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

}

for(i=0;i<4;i++){

for(j=0;j<5;j++){

sum+=a[i][j];

aver=sum/5;

}

printf("\t%.2f\n",aver);

}

}

18、有4个学生,每个学生有5门课程的成绩,编写一个程序统计每一个学生有几门不及格的课程。

#include

voidmain(){

inta[4][5],i,j,count;

printf("请输入四个学生五门课的成绩:

\n");

for(i=0;i<4;i++){

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

}

for(i=0;i<4;i++){

count=0;

for(j=0;j<5;j++){

if(a[i][j]<60)count++;

}

printf("第%d个学生的不及格数是%d\n",i+1,count);

}

}

19、有4个学生,每个学生有5门课程的成绩,编写一个程序计算每一门课程4个学生的平均成绩。

#include

voidmain(){

inta[4][5],i,j;

floatsum,aver;

printf("请输入四个学生五门课的成绩:

\n");

for(i=0;i<4;i++){

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

}

for(j=0;j<5;j++){

aver=0;

sum=0;

for(i=0;i<4;i++){

sum+=a[i][j];

}

aver=sum/4;

printf("第%d门课的平均成绩是%.2f\n",j+1,aver);

}

}

20、有4个学生,每个学生有5门课程的成绩,编写一个程序统计每一门课程有几个不及格的学生。

#include

voidmain(){

inta[4][5],i,j;

intcount;

printf("请输入四个学生五门课的成绩:

\n");

for(i=0;i<4;i++){

for(j=0;j<5;j++)

scanf("%d",&a[i][j]);

}

for(j=0;j<5;j++){

count=0;

for(i=0;i<4;i++){

if(a[i][j]<60)count++;

}

printf("第%d门课的不及格人数是%d\n",j+1,count);

}

}

21、编写主函数和一个递归函数intsum(inta[],intn)。

要求是:

(1)函数sum求数组a中前n个元素之和,并返回该和值。

(2)主函数中输入10个正整数给数组,调用sum函数求数组中的10个元素之和,并输出该和值。

#include

intsum(inta[],intn){

ints;

if(n==0)s=a[0];

else

{

s=a[n]+sum(a,n-1);

}

returns;

}

voidmain(){

inta[10]={3,1,2,4,5,7,6,8,12,24};

ints=0;

inti;

//for(i=0;i<10;i++)

s=sum(a,9);

printf("sum=%d\n",s);

}

22、编写主函数和一个递归函数intmax(inta[],intn)。

要求是:

(1)函数max求数组a中前n个元素中的最大值,并返回该最大值;

(2)主函数中输入10个正整数给数组,调用max函数求数组中10个元素的最大值,并输出该最大值。

#include

intmax(inta[],intn){

intp;

if(n==1)returna[0];

else{

p=max(a,n-1);

if(a[n-1]>=p)returna[n-1];

elsereturnp;

}

}

voidmain(){

inta[10],m,i;

printf("pleaseinput10integers:

\n");

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

scanf("%d",&a[i]);

m=max(a,10);

printf("Themaxnumberis%d.\n",m);

}

23、编写主函数和一个递归函数intdecomp(intn)。

要求是:

(1)函数decomp顺序输出n的各位数,并返回它是一个几位数;

(2)主函数中输入一个不超过8位的正整数,调用decomp函数,并输出函数返回结果。

如输入:

851439;则输出:

8,5,1,4,3,9

6

#include

intcount=1;

intdecomp(intn){

if(n>=10){

decomp(n/10);

count++;

}

printf("%d,",n%10);

return(count);

}

voidmain(){

longnum;

intt;

printf("请输入不超过八位的正整数:

\n");

scanf("%ld",&num);

t=decomp(num);

printf("\n这是一个%d位数.\n",t);

}

24、搬砖问题:

36块砖,36人搬,男人每人搬4块,女人每人搬3块,小孩两人抬一块,要求一次搬完,问男、女、小孩各需多少人。

#include

voidmain(){

intchild,girl;

for(child=0;child<=36;child=child+2)//child表示小孩的数量

for(girl=0;girl<=12;girl++)//girl表示女人的数量

if(child/2+3*girl+(36-child-girl)*4==36)//36人共搬36块

printf("boy:

%d,girl:

%d,child:

%d\n",36-child-girl,girl,child);

}

 

某班有6名学生,期末考试有4门课程。

请编写程序,对这6名学生的学号、姓名、4门课程的考试成绩和平均成绩进行管理。

具体要求有:

(1)编写一个程序,输入这6名学生的学号(长度为5位字符)、姓名(长度不超过15位字符)及4门课程的考试成绩(整数),并计算该学生的平均成绩(实数),最后将这6名学生的成绩记录存入文件stud?

?

?

?

.rec中,其中“?

?

?

?

”为你的学号最后4位,例如,如果你的学号为0102586,则你建立的文件名为stud2586.rec。

——要求按下表中给定的数据输入!

(2)编写一个程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1