当前位置:文档之家› 哈尔滨工业大学C语言期末试卷(2007秋季笔试B卷)

哈尔滨工业大学C语言期末试卷(2007秋季笔试B卷)

哈尔滨工业大学C语言期末试卷(2007秋季笔试B卷)一、单项选择题:(10分,每题2分)1.在下面的语句中:只有一个在功能上与其他三个语句不等价(其中s1和s2表示某个C语句),这个不等价的语句是。

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;2.以下正确的描述是。

A) 对共用体初始化时,只能对第一个成员进行初始化,每一瞬时起作用的成员是最后一次为其赋值的成员B) 结构体可以比较,但不能将结构体类型作为函数返回值类型C) 函数定义可以嵌套D) 关键字typedef用于定义一种新的数据类型3.下列的定义中,正确使用字符串初始化的是。

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'};4.要使下面程序的输出语句在屏幕上显示1,2,34则从键盘上输入的正确数据格式为:。

main(){char a,b;int c;scanf("%c%c%d", &a,&b,&c);printf("%c,%c,%d\n",a,b,c);}A)1 2 34 B)1,2,34 C)'1''2'34 D)12 345.若有二维数组定义语句:int a[3][4]; 则下面对元素a[i][j]不正确的引用方式是:。

A) *(&a[i][j]) B) *(a+4*i+j)C) *(a[i]+j) D) *(*(a+i)+j)二、写出下列程序的运行结果。

(10分,每题2分)1.#include <stdio.h>main(){int k=4, n=0;for (;n<k;){n++;if (n%2 == 0) break;k--;}printf("k=%d, n=%d\n",k,n);}程序运行结果为2.#include <stdio.h>main(){int n;static char *mName[]={"Illegal month", "January","February","March","April","May", "June", "July","August", "September","October", "November","December"};printf("\nPlease enter a integer:");scanf("%d",&n);printf("%s\n",(n<1||n>12)? mName[0] : mName[n]);}当程序输入9时,完整的(包括输入)程序运行结果是:当程序输入13时,完整的(包括输入)程序运行结果是:3.#include <stdio.h>typedef struct date{int year;int month;int day;}DATE;void func(DATE *p){p->year = 2000;p->month = 5;p->day = 22;}main(){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);}运行结果是:4.#include <stdio.h>main(){int m = 7;printf("%d\n",m/2+1);printf("%d\n",m/2.0+1);printf("%f\n",(float)(m/2+1));printf("%f\n",(float)m/2+1);printf("m=%d\n",m);}运行结果是:5.#include<stdio.h>int Fun(int x){static int y = 1;y += x;return y;}main(){int k;for (k=0; k<3; k++){printf("%d\n", Fun(k));}}运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。

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

Grade Histogram1 *****2 **********3 *******...#include <stdio.h>main(){int i, j, grade;int score[40], count[11] = {0};printf("Please enter the response score:\n"); for (i=0; i<40; i++){scanf( );}for (i=0; i<40; i++){;}printf("Grade\tCount\tHistogram\n");for (grade=1; ; grade++){printf("%5d\t", grade);for (j=0; ; j++){printf("%c",'*');}printf("\n");}}2. 不用函数strcat(),编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstStr的尾部。

#include <stdio.h>#include <string.h>void MyStrcat(char dstStr[], char srcStr[]);main(){char s[80], t[80];printf("Please enter source string: ");gets(s);printf("Please enter destination string: ");gets(t);MyStrcat(s,t);printf("The concatenate string is: "); puts(s);}void MyStrcat(char dstStr[], char srcStr[]) {int i = 0, j;while (dstStr[i] != '\0'){;}for (j=0; ; j++, i++){;}= '\0';}四、在下面4个程序中,共有16处错误(包括语法错误和逻辑错误),只要找出其中的15处错误并改正之即可,多找不多加分。

(30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。

)1.下面程序用于打印所有的水仙花数。

所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。

例如,153是“水仙花数”,因为153=13+33+53。

#include <stdio.h>main(){int i, j, k, n;printf("result is:");for (n=100; n<1000; n++);{i = n % 100;j = (n - i * 100) % 10;k = n % 10;if (n=i*i*i+j*j*j+k*k*k){printf("%d\t ",n);}}printf("\n");}2.利用泰勒级数sin(x)≈计算sin(x) 的值。

要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。

#include <math.h>#include <stdio.h>main(){int n = 1,count = 1;float x;double sum , term;printf("Input x: ");scanf("%d", &x);sum = x;term = x;do{term = -term*x*x/(n+1)*(n+2);sum = sum + term;n++;count++;}while (fabs(term) <= 1e-5);printf("sin(x) = %f, count = %d\n", sum, count);}3.下面程序的功能是从键盘输入一行字符,统计其中有多少单词。

假设单词之间以空格分开。

已知:判断是否有新单词出现的方法——当前被检验字符不是空格,而前一被检验字符是空格,则表示有新单词出现。

#include <stdio.h>main(){char str[20];int i, num;scanf("%s", str);if (str[0] != ' '){num = 1;else{num = 0;}for (i=1; i<20; i++){if (str[i]!=' '|| str[i-1]==' '){num++;}}printf("num=%d\n", num);}4.下面程序用于计算两个正整数的最小公倍数。

相关主题