班号 | |
姓名 | |
哈工大 2008 年 秋 季学期
C语言 试题
题号 | 一 | 二 | 三 | 四 | 五 | 六 | 卷面总分 |
分数 | |||||||
说明:本试卷卷面满分为100分。总成绩将按平时实验成绩、机考成绩和卷面笔试成绩各自所占比例折合后累加计算。
一、填空题(6分,每题1分)
1.设变量定义为“int x,y[10];”,则“_________”与“*(y+x)请写出至少5个字符串函数”等效。
2.如果在程序中使用了strcmp库函数,则程序前面要写#include "________"。
3.1.37×1042在C语言中写作________
4.把C语言源程序翻译成机器语言目标程序的过程称为“__________”,翻译得到的目标程序扩展名为“__________”。
5.已知x是double型变量,“scanf("________",&x);”用于从键盘读取数据存放到x中。
6. 已知:“#define M(x,y) x*y”,则表达式“M(5+4,3-1)”的值为________。
二、单项选择题:(10分,每题2分)
1.判断字符串s1与字符串s2相等,应当使用: 。
A) if (s1 = s2)
B) if (strcmp(s1, s2))
C) if (!strcmp(s1, s2))
D) if (strcmp(s1, s2) = 0)
2.用“if(0<x<3) x=x+1;”实现“如果x在0到3之间则将其值加1”的操作,________。
(A) 正确 (B) 有语法错误 (C) 有逻辑错误 (D) 有连接错误
3.
#include<stdio.h>
#include<string.h>
main()
{
printf("%d\n", strlen("IBM\n012\t\"\\\0"));
}
则程序运行后的输出结果是 。
A) 10 B) 11 C) 16 D) 12
4.函数定义的首部写作“int func( )”,x、y是int型变量,则__________是正确的调用。
(A) y=func( ); (B) func(x); (C) func( )=x; (D) y=func(x);
5. 下面哪个定义是合法的 。
A) char a[8] = "language";
B) int a[5] = {0,1,2,3,4,5};
C) char *a = "string";
D) int a[2][] = {0,1,2,3,4,5,6};
三、写出下列程序的运行结果。(10分,每题2分)
1.
#include "stdio.h"
void main()
{ int i,j,n=6;
for(i=1;i<n;i++)
{ for(j=1;j<=n-i;j++)
putchar(32);
for(j=1;j<2*i;j++)
putchar(48+i);
printf("\n");
}
}
则程序运行结果是:
2.
#include<stdio.h>
void fun1(int x)
{
x=20;
}
void fun2(int b[4])
{
int j;
for(j=0; j<4; j++)
{
b[j]=j;
}
}
main()
{
int x = 10;
int a[4] = {1,2,3,4}, k;
fun1(x);
printf("x = %d\n", x);
fun2(a);
for(k=0; k<4; k++)
{
printf("%d\n", a[k]);
}
}
运行结果是:
3.
#include <stdio.h>
main()
{
int x, y;
scanf("%2d%*4s%2d", &x, &y);
printf("%d", y-x);
}
程序运行时输入:123456789↙
则程序运行结果是:
4.
#include <stdio.h>
struct date
{
int year;
int month;
int day;
};
void func(struct date p)
{
p.year = 2000;
p.month = 5;
p.day = 22;
}
main()
{
struct date d;
d.year = 1999;
d.month = 4;
d.day = 23;
printf("%d,%d,%d\n", d.year, d.month, d.day);
func(d);
printf("%d,%d,%d\n", d.year, d.month, d.day);
}
程序运行结果为:
5.
#include "stdio.h"
void main()
{ int i,j,k=0;
for(i=2;i<40;i++)
{ for(j=2;j<i;j++)
if(i%j==0)
break;
if(j==i)
{ printf("%3d",i);
k++;
if(k%5==0)
printf("\n");
} }
}
程序运行结果是:
四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,每空1分)
1. 从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“它是闰年”,否则输出“它不是闰年”。已知符合下列条件之一者是闰年:
■ 能被4整除,但不能被100整除。
■ 能被400整除。
#include <stdio.h>
main()
{
int year, flag;
printf("Enter year:");
scanf("%d", );
if ( )
{
flag = 1;
}
else
{
flag = 0;
}
if ( )
{
printf("它是闰年\n");
}
else
{
printf("它不是闰年\n");
}
}
2. 编程判断m是否为素数,已知0和1不是素数。
#include <stdio.h>
#include < >
main()
{
int n, flag;
printf("Input n:");
scanf("%d", &n);
flag = IsPrime(n);
if ( )
{
printf("它是素数\n");
}
else
{
printf("它不是素数\n");
}
}
int IsPrime(int m)
{
int i, k;
if (m <= 1)
{
return 0;
}
for (i=2; ; i++)
{
k = ;
if ( )
{
return 0;
}
}
return ;
}
五、在下面给出的4个程序中,共有18处错误(包括语法错误和逻辑错误),请出其中的错误,并改正之。(34分,每对1个错误,加1分,每修改正确1个错误,再加1分。只要对17个即可,多不加分。)
1.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分开。已知:判断是否有新单词出现的方法——当前被检验字符不是空格,而前一被检验字符是空格,则表示有新单词出现。
#include <stdio.h>
main()
{
int i, num, n=20;
char str[n];
scanf("%s", str);
if (str[0] != ' ')
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论