20学年第二学期c语言期末考题及解答 3.docx

上传人:b****9 文档编号:25488345 上传时间:2023-06-09 格式:DOCX 页数:10 大小:18.85KB
下载 相关 举报
20学年第二学期c语言期末考题及解答 3.docx_第1页
第1页 / 共10页
20学年第二学期c语言期末考题及解答 3.docx_第2页
第2页 / 共10页
20学年第二学期c语言期末考题及解答 3.docx_第3页
第3页 / 共10页
20学年第二学期c语言期末考题及解答 3.docx_第4页
第4页 / 共10页
20学年第二学期c语言期末考题及解答 3.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

20学年第二学期c语言期末考题及解答 3.docx

《20学年第二学期c语言期末考题及解答 3.docx》由会员分享,可在线阅读,更多相关《20学年第二学期c语言期末考题及解答 3.docx(10页珍藏版)》请在冰豆网上搜索。

20学年第二学期c语言期末考题及解答 3.docx

20学年第二学期c语言期末考题及解答3

xxxx大学

xxxx学年第二学期期末

 

《C程序设计》

考试A卷

班级______________学号_________

 

姓名______________成绩_________

 

班号学号姓名成绩

《C程序设计》期末考试卷

注意事项:

1、此卷为闭卷考试,120分钟完成;

2、笔试成绩为卷面成绩×0.6。

题目:

一、选择题(30分,每题3分)

1、下列说法不正确的是A。

A)主函数main中定义的变量在整个文件或程序中有效

B)不同函数中,可以使用相同名字的变量

C)形式参数是局部变量

D)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

2、程序段:

intk=1;for(k;1;k++)if(k)break;

for语句的循环次数是B。

A)0B)1C)2D)死循环

3、以下有关switch语句的正确说法是B。

A)break语句是语句中必须的一部分

B)在switch语句中可以根据需要使用或不使用break语句

C)break语句在switch语句中不可以使用

D)在switch语句中的每一个case都要用break语句

4、在下面的语句中:

只有一个在功能上与其他三个语句不等价(其中s1和s2表示某个C语句),这个不等价的语句是D。

A)if(a) s1;else s2;B)if(!

a)s2;else s1;

C)if(a!

=0) s1;else s2;D)if(a==0) s1;else s2;

5、以下叙述不正确的是D。

A)一个变量的作用域的开始位置完全取决于变量定义语句的位置

B)全局变量可以在函数以外任何位置定义

C)局部变量的生存期只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用

D)一个变量说明为static存储类是为了限制其它编译单位引用

6、若用数组名作为函数调用时的实参,则实际上传递给形参的是A。

A)数组的首地址     B)数组的第一个元素值

C)数组中全部元素的值D)数组元素的个数

7、声明为inta[3][4];下列表达式与a[2][1]等价的有C。

A)*(a[1]+2);B)a[9];C)*(a[2]+1);D)*(*(a+2))+1;

8、下列的定义中,正确使用字符串初始化的是C。

A)char str[7]="FORTRAN";

B)char str[]={F,O,R,T,R,A,N,0};

C)char *str="FORTRAN";

D)char str[]={'F','O','R','T','R','A','N'};

9、设有intx,y; if(x=y)printf("xisequaltoy.");

以下语句判断x和y是否相等,正确的说法是该语句B。

A)语法错                                          B)不能判断x和y是否相等

C)编译出错                                      D)能判断x和y是否相等

10、fread(buf,32,2,fp)的功能D。

A)从fp文件流中读出整数32,存放在buf中

B)从fp文件流中读出32个字节的字符,存放在buf中

C)从fp文件流中读出整数32和2,存放在buf中

D)从fp文件流中读出2块32个字节的字符,存放在buf中

二、填空题(20分,每题4分)

1、下面这个程序功能:

读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。

读入5个数据后,程序结束运行。

#include

voidmain()

{

  int i,n;

 

  for(i=1;i<=5;i++)

  {

     printf("Pleaseentern:

");

     scanf("%d",&n);

     if(n<=0) continue;

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

  }

  printf("Programisover!

\n");

}

 

2、以下程序对输入的1000以下的正整数(不含1000),求出其相应的个位数、十位数和百位数。

#include

voidmain()

{

    intx,a,b,c;

    do{

           printf("输入一个1000以下的整数:

");

           scanf("%d",&x);

           printf("\n");

    }while(       x<0||x>=1000      );

    a=x/100;

    b=(x-a*100)/10;

    c=        x%10       ;

    printf("%d的个位数是%d,十位数是%d,百位数是%d\n",x,c,b,a);

}

 

3、用“起泡法”对输入的小于10个字符排序后按从小到大的次序输出。

#include

#include

#defineN11

voidsort(charstr[N],intn);

voidmain()

{

charstr[N];

inti;

printf(“输入任意长度小于10的字符串:

”);

scanf("%s",str);

printf("\n")

sort(str,strlen(str));

for(i=0;str[i]!

='\0';i++)

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

printf("\n");

}

voidsort(char*str,intn)

{

inti,j;

chart;

for(j=1;j

for(i=0;i

if(str[i]>str[i+1])

{

t=str[i];

str[i]=str[i+1];

str[i+1]=t;

}

}

 

4、以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。

(本程序中二阶矩阵用一维数组来表示。

例如,矩阵为:

3003

2573

1042

则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。

 

add(intm,intn,intarr[])

{

inti,j,sum=0;

for(i=0;i

for(j=0;j

sum=sum+*((arr+i*n)+j);

for(j=0;j

for(i=1;i

sum=sum+arr[i*n+j];

return(sum);

}

 

5、假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的分数统计直方图。

Grade       Histogram

1             *****

2             **********

3             ******* 

...

10**

#include

#defineN40

voidmain()

{

  int i,j,grade;

   int score[N],count[11]={0};

   printf("Pleaseentertheresponsescore:

\n");

   for(i=0;i

       scanf( “%d”,&score[i]           );

    for(i=0;i

                  count[score[i]]++   ;

   

  printf("Grade\tCount\tHistogram\n");

  for(grade=1;      grade<=10     ;grade++)

  { 

     printf("%5d\t",grade);

     for(j=0;     j

           printf("%c",'*');

       printf("\n");

  }

}

 

三、编程题(50分)

编程题缩进、空格、空行、标识符命名等编程规范占2分。

1、下面程序的功能是求解爱因斯坦数学题。

爱因斯坦曾出过这样一道数学题:

有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。

编程打印这条阶梯共有多少阶。

(10分)

#include

voidmain()

{

  int x,find; 

 

  x=0;

  do{

     ++x;

     find=x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0;

  }while(!

find); 

  printf("x=%d\n",x);

}

2、编写程序输出3到10000内的可逆素数。

可逆素数是指:

一个素数将其各位数字的顺序倒过来构成的反序数也是素数。

如157和751均为素数,它们是可逆素数。

(20分)

要求:

使用子函数实现,intprime(inta)函数用于判定素数,1为素数,0为非素数;intinvert(inta)函数用于倒序一个数,如a=123,则invert函数返回值为321。

#include

#include

#include

intinvert(inta)

{

ints=0;

while(a>0)

{

s=10*s+a%10;

a/=10;

}

returns;

}

intprime(inta)

{

inti;

for(i=2;i<=(int)sqrt(a);i++)

if(a%i==0)return0;

return1;

}

intmain()

{

inti;

for(i=3;i<10000;i++)

if(prime(i))

if(prime(invert(i)))printf("%5d",i);

printf("\n");

return0;

}

3、给定程序中,函数fun的功能是:

 将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。

例如:

形参s所指的字符串为:

def35adh3kjsdf7,执行结果为:

defadhkjsdf3537。

(20分)

#include    

void fun(char  *s)

{  

int  i, j=0, k=0;  

char  t1[80], t2[80];

  for(i=0; s[i]!

=’\0’; i++)

       if(s[i]>=’0’ && s[i]<=’9’)t2[j++]=s[i]; 

       else  t1[k++]=s[i];

for(i=0; i

  for(i=0; i

}

voidmain()

{  

char  s[80]="def35adh3kjsdf7";

     printf("\nThe original string is :

  %s\n",s);

     fun(s);

     printf("\nThe result is :

  %s\n",s);

}

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

当前位置:首页 > PPT模板 > 商务科技

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

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