c语言04-05冬试卷及答案

更新时间:2024-03-12 19:29:01 阅读量: 综合文库 文档下载

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

(042)上海大学2004-2005年冬季学期试卷 2005.3 课程名: 程序设计基础(C) 学分: 5

学号: 姓名: 学院/教师:

题号 题分 得分 一 23 二 30 三 8 四 14 卷面 75 上机 25 总分 100 考生须知:

1. 试卷和答题纸上的“学号、姓名、学院、教师”都要填上;

2. 所有答题内容都写在答卷纸上,交卷时将试卷和答卷纸一起交上; 3. 不遵守上述要求者考试成绩将为零分。

4. 本场考试的得分为卷面分,电脑上机考试(另行安排)的得分为上

机分,考试成绩为卷面分与上机分的总和。

一、基础题(23分,第1小题3分,其它小题2分)

1.定义int x=13,y=16,z=10;写出z+=(x++)+(--y);执行后各变量的值。 2.计算表达式:(float)15/(int)2.5与(int)(2.11*10+0.5)/(float)10*2。 3.分别判断表达式的真假:10>9>8与10>9&&9>8。

4.分别计算八进制165的十进制值和十进制165的十六进制值。 5.分别计算字符串的长度:“Shanghai”与“C:\\\\test.txt”。

6.设n为正整数,试写出逻辑表达式:n的个位数比十位数大。 7.定义char ch; 设ch为小写字母,试写表达式将ch转换为大写 字母。

8.定义int a[3]; 试写出语句:输入a数组中的三个整数。

9.写出语句for (i=10;i<=20;i+=3) printf(\ \的运行结果。 10.定义char *pc[]={ \计算表

达式strlen(pc[1])*strlen(pc[2])与pc[0][4] – *(*(pc+2)+2)的值。 11.定义int n;FILE *fp; fp已以文本方式打开文件写,试写出语句:

将变量n的值写到文件fp中。

二、阅读程序(30分,每小题3分)

1 / 10

仔细阅读下列程序,将各程序的运行结果写在答卷纸上。 (1)程序

#include main() {

int a, b, c, n, i, sum;

scanf( \ n = (a>b) ? b : a; n = (n>c) ? c : n; printf( \

for ( sum = i = 0; i <= n; i++ ) sum += i;

printf( \}

输入:15 6 13 输出:?

(2)程序

#include void sumx( int n ) {

int sum = 0; switch ( n ) {

case 3: sum += 1234; case 2: sum += 123; case 1: sum += 12; }

printf( \}

main() {

int i;

for ( i = 1; i <= 3; i++ ) sumx( i ); }

输出:?

2 / 10

(3)程序(注:符号?表示空格) #include main() {

int i, j, n;

scanf( \

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

for ( j = 1; j <= n-i; j++ ) printf( \?\

for ( j = 1; j <= i; j++ ) printf( \?\ printf( \ } }

输入:5 输出:?

(4)程序

#include main() {

int a,i=2,j;

scanf( \ printf( \ while ( i <= a ) {

if ( a % i == 0 ) {

printf( \ a /= i; } else i++; } }

3 / 10

输入:12 输出:?

(5)程序

#include long func(int n) {

static int lastn = 1; static long lastrst = 1; long rst; int i;

if ( n < lastn )

lastrst = lastn = 1;

for ( rst=lastrst, i = lastn+1; i<=n; i++ ) rst *= i; lastn = n; lastrst = rst; return rst; }

main() {

printf( \ printf( \ printf( \}

输出:?

(6)程序

#include int sdata( int n ) {

int d;

if ( n <= 2 ) d = 1; else

d = sdata(n-1) + sdata(n-2); return d;

4 / 10

}

main() {

int i;

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

printf( \}

输出:?

(7)程序

#include main() {

int a[8] = { 0, 8, 16, 30, 40, 50, 60, 70 }; int n = 2, *p = &a[1]; n += *(p++);

printf( \ n *= ++(*p);

printf( \ n -= (*(++p))--; printf( \}

输出:?

(8)程序

#include #define N 20 main ( ) {

int a[N] = { 10,25,20,15,30,35,50,45,90,60, 10,25,25,25,35,90,35,90,35,35 }; int i, j, ind=0, c1, c2;

for ( c2 = i = 0; i < N; i++ ) {

for ( c1=j=0; j < N; j++ ) if ( a[i] == a[j] ) c1++;

5 / 10

if ( c2a[ind] ) {

c2 = c1; ind = i; } }

printf( \ printf( \}

输出:?

(9)程序

#include

char * rev( char *src, char *dst ) {

int i, j, n;

for ( n = 0; *(src+n) != '\\0'; n++ ) ; for ( i = 0, j = n-1; i < n; i++, j-- ) *(dst+i) = *(src+j); *(dst+i) = '\\0'; return dst; }

main() {

char a[81];

puts( rev(\

puts( rev(\}

输出:?

(10)程序

#include #include struct strline {

char str[100];

struct strline *next;

6 / 10

};

struct strline *create(void) {

struct strline *head = NULL, *p; char a[81]; while ( 1 ) {

gets( a );

if ( a[0] == 'Z' ) break; p = (struct strline *)malloc(sizeof(struct strline)); strcpy( p->str, a ); p -> next = head; head = p; }

return head; }

void list2(struct strline *head) {

struct strline *p; int n = 0;

for ( p = head; p != NULL; p=p->next, n++ ) if ( n % 2 == 0 ) puts( p->str ); }

main() {

struct strline *head; head = create(); list2( head ); }

运行时输入以下6行: Line First, Line Second, Line Third, Line 4th, Line 5th.

7 / 10

Z

输出:?

三、改错程序(8分,每错误点2分)

下列程序与函数中都各有两个错误(两个错误分别是在不同的行上),按原来程序的要求,纠正错误,并将错误所在行号以及错误行完整的正确内容写在答卷纸的对应栏内。

(1)以下程序输入10个数,从大到小排序后输出。

#include main() {

/*1*/ int a[10],i,j,t; /*2*/ for ( i = 0; i < 10; i++ ) /*3*/ scanf( \/*4*/ for ( i = 0; i < 9; i++ ) /*5*/ for ( j = 0; j <= 10-i; j++ ) /*6*/ if ( a[j] < a[j+1] )

/*7*/ { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } /*8*/ for ( i = 0; i < 10; i++ ) /*9*/ printf( \

}

(2)以下函数统计字符串中数字字符的个数并返回。 /*1*/ int countdigit( char *str ) /*2*/ {

/*3*/ int n, i; /*4*/ n = 0;

/*5*/ for ( i = 0; *(str+i)!='\\0'; i++ )

/*6*/ if ( *(str+i)>='0' || *(str+i)<='9' ) /*7*/ n ++; /*8*/ return i; /*9*/ }

四、程序填空(14分,每填空2分)

阅读下列问题描述和相应的C程序,把应填入其中 (n) 处的

8 / 10

内容写在答卷纸的对应栏内。

(1)以下程序输入10个整数,输出其中不重复出现的数字。 #include main() {

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

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

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

k = 0;

for ( j = 0; j < 10; j++ ) if ( (2) ) k ++; if ( k == 1 )

printf( \ } }

如输入:11 13 14 15 14 13 11 14 14 12 则输出:15 12 (在10个数中15和12只出现一次) (2)以下程序从文本文件worker.txt中输入10个职工的信息(包括工号和工资),然后计算并输出平均工资,再从键盘上输入一个职工号,查找并输出该职工的信息,如果没有找到,则输出Not Found。假设文件操作总是成功的。 #include struct worker

{ /* 职工结构体 */

int num; /* 工号 */ float pay; /* 工资 */ struct worker *next; };

float averpay( struct worker per[], int n ) {

float sum = 0; int i;

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

9 / 10

sum += (4) ; return sum/n; }

struct worker *find( struct worker per[], int n, int num ) {

int i;

for ( i = 0; i < n; i++ ) if ( per[i].num == num )

return (5) ; return NULL; }

main() {

struct worker per[10], *p; float x, ave; int num, i; FILE *fp;

/* 从文件中输入10个职工的信息 */ fp = (6) ; for ( i = 0; i < 10; i++ ) {

fscanf( fp, \ per[i].num = num; per[i].pay = x; }

fclose( fp );

/* 计算并输出平均工资 */ ave = averpay( per, 10 );

printf( \ /* 查找某个职工 */ scanf( \ p = (7) ; if ( p != NULL )

printf( \ else

printf( \}

10 / 10

(042)上海大学2004-2005年冬季学期答卷 2005.3 课程名: 程序设计基础(C) 学分: 5

学号: 姓名: 学院/教师:

题号 题分 得分 一 23 二 30 三 8 四 14 卷面 75 上机 25 总分 100 考生须知: 5. 试卷和答题纸上的“学号、姓名、学院、教师”都要填上; 6. 所有答题内容都写在答卷纸上,交卷时将试卷和答卷纸一起交上; 7. 不遵守上述要求者考试成绩将为零分。

8. 本场考试的得分为卷面分,电脑上机考试(另行安排)的得分为上

机分,考试成绩为卷面分与上机分的总和。

小题 第 一 题 答 栏 (基础题) 23% 1 x =14 y =15 z =38 2 7.5 4.2 3 假 或 0 真 或 1 A5或 0xA5 4 117 a5 或 0xa5 5 8 11 n>n/10 6 或 n>n0/10 ch-32 或 ch-?a?+?A? 或 ch&0xDF 7 或 ch&~0x20 或 ch-=32 scanf(“%d%d%d”,&a[0],&a[1],&a[2]); 或for(i=o;i<3;i++) scanf(“%d”,&a[i]); 8 或for(i=o;i<3;i++) scanf(“%d”,&a[i]); 9 10 13 16 19 10 63 6 11 fprint ( fp, “%d”, n ); (以上第1小题3分,其余每小题2分) 小计: 11 / 10

得分 小题 1 2 第 二 题 答 栏 (阅读程序) 30% n=6 Sum=21 sum=12 sum=135 sum=1369 * * * * * * * * * * * * * * * 12=1*2*2*3 func(1) = 1 func(3) = 6 func(5) = 120 1 1 2 3 5 8 10, 170, 140 count = 5 data = 35 A iahgnahS Line 5th. Line Third, Line First 小计: 3分/格 3 4 5 6 7 8 9 10

12 / 10

第 三 题 答 栏 (改错程序) 8% 改错点 行号 修 改 后 程 序 行 scanf( \1. (1) /*3*/ 或 scanf( \ for(j=0;j<9-i;j++) 1. (2) /*5*/ 或 for(j=0;j<9;j++) 2. (3) if(*(str+i)>='0'&&*(str+i)<='9') /*6*/ 或 if(!(*(str+i) <='0'||*(str+i) >'9')) 2分/格 2. (4) /*8*/ return n; 小计: 填空号 1. (1) 1. (2) 1. (3) 2. (4) 2. (5) 2. (6) 2. (7)

第 四 题 答 栏 (程序填空) 14% 2分/格 i<10 a[i]==a[j] 或 a[i]==a[9-j] a[i] 或 *(a+i) per[i].pay 或 (per+i)->pay &per[i] 或 per+i fopen(\.txt\ find(per,10,num) 小计:

13 / 10

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

Top