2013高级语言程序设计期中考试答案

更新时间:2023-06-02 03:16:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

所在年级、班级 注意

试卷

印刷

不清

楚。

可举

向监

考教

师询

问。三、考生在答题前应先将姓名、学号、年级和班

级填

在指

定的

方框

内。二、姓名、准考证号不许涂改,否则试卷无效。一、密封 线内不准答题。 #include<stdio.h>

int main( )

{ int x=1,y=2,z=3;

printf(“x+y+z=%d”,x+y+z);

return 0;}

A、1+2+3=6 B、6 C、x+y+z=6 D、x+y+z=123

6. 以下选项中不是C语句的是(D )。

A、{i=1; printf(“%d\n”,i);} B、max=m>n?m:n;

C、 ; D、a=9,c=5

7.若变量已正确定义并赋值,下面符合C语言语法的表达式是( B)。

A、a%=3.5 B、a=7+b+c,a++ C、int(12.5)/4 D、a=a+7=c+b

8. 若有下列定义:

char a; int b;

float c; double d;

则表达式a*b+d-c的值的类型为( D)。

A、float B、int C、char D、double

9.下列程序输出结果是( A )(小数点后只写一位)。

#include<stdio.h>

int main( )

{ double d; float f; long int l; int i;

i=f=l=d=20/3;

printf(“%d %ld %f %f”,i,l,f,d);

return 0;}

A、 6 6 6.0 6.0 B、6 6 6.7 6.7

C、 6 6 6.0 6.7 D、6 6 6.7 6.0

10. 下面有关算法的特性错误的是( C )。

A、 有穷性 B、有零个或多个输入

C、 不确定性 D、有一个或多个输出

二、填空题(每题5分,共30分)

1.分析下面的C语言程序: void main()

{

char ch='a';

int x=10,y=5;

switch (ch+1)

{ case 'a':

printf("x+y=%d",x+y);

break;

case 'b':

printf("x-y=%d",x-y);

break;

default:

printf("nothing!");break;

}

}

程序执行后的输出结果是__x-y=5________。(5分)

2.求一元二次方程ax2+bx+c=0的解。

#include <stdio.h>

(1分)

int main()

{

double a,b,c,disc,x1,x2,realpart,imagpart;

scanf("%lf,%lf,%lf", &a,&b,&c);

disc=b*b-4*a*c;

if( ) (2分)

printf("has two equal roots:%8.4f\n",-b/(2*a));

else

if( ) (2分)

{

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart= sqrt(-disc)/(2*a) ;

printf(" has complex roots:\n");

printf("%8.4f+%8.4fi\n",realpart,imagpart);

printf("%8.4f-%8.4fi\n",realpart,imagpart);

}

return 0;

}

3.下面是求一个3*3矩阵对角线元素的和,请在空白处填上适当的内容.

void main()

{

int a[3][3]={{1,2,3},{4,5,6},{6,7,8}}, sum=0;

int i,j;

for(i=0;;i++) (1分)

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

(2分)

; (2分)

printf("sum=%d",sum);

}

4. 下面程序是统计1~100之间能被3整除的所有整数的数量,并输出。

请在空白处填入适当的内容。(每空2.5分)

#include <stdio.h>

void main()

{

int i,n=0;

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

{

(1分)

(2分)

printf("%d ",i);

(2分)

}

printf("1-100之间能被3整除的整数有%d个\n",n);

}

5. 使用冒泡法对10个整数按照从小到大排序。请在下面程序中空格处填

入适当的内容。

#include "stdio.h"

void main()

{

int i,j,temp,a[10];

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

scanf("%d",); (1分)

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

for(i=0;i< ;i++) (2分)

) (2分)

{ temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;}

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

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

}

6. 下面程序实现并调用了对字符串反转的函数,请在空格处填写适当的

语句

#include <stdio.h>

#include <string.h>

main()

{

char str[100];

printf("input string:");

scanf("%s", str);

char t;

int i,j;

;i++,j--) (1分)

{ t=str[i]; ; (2分)

str[j-1]=t;

}

(2分)

return 0;

}

三、改错题。在下面给出的程序中,每小题有2处错误(可以是语法错误或

者逻辑错误),请找出其中的错误,并改正。(每题5分,共30分,每找对1

个错误,加1分,每修改正确1个错误,再加1.5分。)

1.编写函数fun计算下列分段函数的值:

x*x+x x<0且x≠-3

x*x+5x 0≤x<10

x*x+x-1 其它

#include <stdio.h>

int main()

{

float y;

float x;:

printf("input x=");

scanf("%f", &x);

if (x<0 && x!=-3.0)

y=x*x+x;

改为:else if(x>=0 && x<10.0)

y=x*x+5*x;

else

y=x*x+x-1;

printf("x=%f,y=%f\n",x,y);

return 0;

}

答案:

1) if (x<0 ||x!=-3.0) ----改为:if (x<0 && x!=-3.0)

2)else if(0<=x<10.0) ---- 改为:else if(x>=0 && x<10.0)

2.下列程序实现从键盘输入一个大写字母,要求用小写字母输出。找出程序

中错误的地方并改正。

#include <stdio.h>

int main ( )

{ char c1,c2;

改为:c1=getchar( );

c2=c1+32;

%d 改为 %c

return 0;

}

答案:

1) c1=getchar(c1)---- c1=getchar( )

2) printf(“输出的小写字母为n”,c2);-----%d 改为 %c

3.利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数。

该算法的基本思想是:假设有两个整数m和n,通过连续运用求余运算,

直到余数为0为止,最后非0的余数就是最大公约数。

#include <stdio.h>

main()

{

int a, b, r, x;

printf("Input a,b:");

改为:scanf("%d,%d" ,& a, &b);

do{

改为: r = a % b;

a = b;

b = r;

}while (r != 0);

x=a;

printf("最大公约数 = %d\n", x);

}

答案:

1)scanf("%d,%d" , a, b);----- scanf("%d,%d" ,& a, &b);

2)r = a / b;----- r = a % b;

4.有一个2×3的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

#include <stdio.h>

void main( )

{

int i, j, row=0, colum=0, max;

int a[][3]={{8,1,6},{4,9,7}};

改为:max=a[0][0]

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

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

if(max<a[i][j])

改为:{max=a[i][j]; row=i; colum=j;}

printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);

}

答案:

1) max=0------max=a[0][0]

2) max=a[i][j]; row=i; colum=j;------ {max=a[i][j]; row=i; colum=j;}

5. 输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。

#include <stdio.h>

#include <string.h>

改为: define ARR_SIZE 80

main()

{

char str[ARR_SIZE];

int len, i;

int letter,digit,space,other;

letter=digit=space=other=0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

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

{

改为: if ( a =<str[i]&& str[i]<= z || A =<str[i]&&str[i]<= Z )

{

++letter;

}

else if ('0'=<str[i]&& str[i]<='9')

{

++digit;

}

else if (str[i]= =' ' )

{

++space;

}

else

++other;

}

printf("英文字符数:%d\n", letter);

printf("数字字符数:%d\n", digit);

printf("空格数:%d\n", space);

printf("其他字符数:%d\n", other);

}

答案:

1)define ARR_SIZE = 80 改为 define ARR_SIZE 80

2)if (a=<str[i]<=z && A=<str[i]<=Z)

改为if ( a =<str[i]&& str[i]<= z || A =<str[i]&&str[i]<= Z )

6、任意输入一个字符串,在星期表中查找该字符串,若找到,则打印 “已找到”,否则打印 “没找到”。

#include<string.h>

main()

{

int i;

int findFlag;

char x[10];

char weekDay[7][10]= {

"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; findFlag=0;

printf("请输入一个字符串:");

scanf("%s",x);

for (i=0; i < 7 && !findFlag; i++)

{

改为: if (strcmp(x ,weekDay[i])= =0) {

findFlag = 1;

}

}

改为: if (findFlag= =1)

{

printf("找到\n");

}

else

{

printf("没找到!\n");

}

}

答案:

1)if (x = weekDay[i]) ------- if (strcmp(x ,weekDay[i])= =0)

2)if (findFlag=1)----------- if (findFlag= =1)

四、编程题(共30分)请用NS画出每个程序的流程图(每个流程图占4分),并编写相应的程序(每个程序占6分),。

1.闰年问题。从键盘上输入某年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。(10分)

int main()

{

int year,leap;

scanf("%d",&year);

if (year%4==0)

{

if(year%100==0)

{

if(year%400==0)

leap=1;

else

leap=0;

}

else

leap=1;

}

else

leap=0;

if (leap)

printf("%d is ",year);

else

printf("%d is not ",year);

printf("a leap year.\n");

return 0;

}

2. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩

(10分)

#include <stdio.h>

int main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1;

day--;

}

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

return 0;

}

#include <stdio.h>

int main()

{ char s1[80],s2[40];

int i=0,j=0;

printf("input string1:");

scanf("%s",s1);

printf("input string2:");

scanf("%s",s2);

while (s1[i]!='\0')

{

i++;

//printf("i=%d, s1[i]=%c\n",i-1,s1[i-1]);

}

while(s2[j]!='\0')

{

s1[i++]=s2[j++];

//printf("i=%d, s1[i]=%c\n",i-1,s1[i-1]);

}

s1[i]='\0';

printf("\nThe new string is:%s\n",s1);

return 0;

}

本文来源:https://www.bwwdw.com/article/j9z1.html

Top