c语言05-06秋试卷及答案

更新时间:2024-04-25 19:14:01 阅读量: 综合文库 文档下载

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

(051)上海大学2005-2006年秋季学期试卷 2005.11 课程名: 程序设计基础(C) 学分: 5

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

题号 题分 得分 一 20 二 30 三 8 四 12 卷面 70 上机 20 总分 90

考生须知:

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

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

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

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

一、基础题(20分,每小题2分)

1.定义int x=51,y=8; 写出y*=(x++ % 2==0)?10:20;执行后变量 x与y的值。

2.定义int n=5,a=12;写出a+=(n%=3);执行后变量n与a的值。 3.定义int b=7;float a=2.5,c=4.7;计算表达式b*(int)(a+c)/2 与(float)b/(int)a的值。

4.将二进制10001101分别转化为十六进制和十进制数。

5.分别写出判断表达式:a小于b或小于c,a和b都小于c。 6.分别写出表达式:实数x四舍五入为整数,实数x的小数部分。 7. 定义int a=9,b=14,c=4; 分别计算表达式(a && !b) || (b==a+c) 与(a & b) | c的值。

8.已知某个月的1日为星期六,该月有n天,试写出表达式计算 该月所跨的周数(从星期日至星期六为一周,如n=30时为6周)。 9.定义char *p[10]; 试用puts写出语句:输出数组中下标i对应的 字符串。

10.定义struct student {int num;char name[20];} stu[3]; 试用scanf写出语句:输入下标i对应的num与name信息。

(051试卷) 1 / 9

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

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

#include main() {

int i;

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

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

输出:?

(2)程序

#include main() {

int n, i;

scanf( \ printf( \

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

if ( n % i == 0 ) {

printf( \ n /= i; i--; } } }

输入:60 输出:?

(051试卷) 2 / 9

(3)程序

#include main() {

int i, a[6] = { 85, 63, 47, 99, 76, 54 }; for ( i = 0; i < 6; i++ ) switch( a[i]/10 ) {

case 10: case 9: printf(\ case 8: printf(\ case 7: printf(\ case 6: printf(\ default: printf(\ } }

输出:?

(4)程序

#include #define M 4 main() {

int i, j, k, m, a[M]; for ( i = 0; i < M; i++ ) scanf( \ for ( i = M; i > 0; i-- ) {

for ( m = 0; m < M; m++ ) printf( \ printf( \ k = a[M-1];

for ( j = M-1; j > 0; j-- ) a[j] = a[j-1]; a[0] = k; } }

(051试卷) 3 / 9

输入:5 6 7 8 输出:?

(5)程序

#include int g = 10;

int func( int x ) {

static int z = 8; x += (g++) + (++z); return x; }

main() {

int i, x = 200, y;

for ( i = 0; i < 3; i++ ) {

y = func( x );

printf( \ } }

输出:?

(6)程序

#include

int func( char str[], int n ) {

int d,r;

d = str[n-1] - '0'; if ( n == 1 ) r = d; else

r = 8*func(str,n-1) + d; return r; }

main() {

(051试卷) 4 / 9

printf( \ printf( \ 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 #include

char *toucase( char *str ) {

char *p;

for (p=str; *p!='\\0'; p++ ) if ( *p>='a' && *p<='z' ) *p = *p - 'a' + 'A'; return str; }

main() {

char str[80] = \单词之间为一个空格*/ printf( \ puts( toucase(str) );

(051试卷) 5 / 9

puts( strcat(str,\}

输出:?

(9)程序

#include main() {

int a[3][4]={ {1234,2341,3412,4123}, {4321,3214,2143,1432}, {2413,4132,1324,3241} }; int i, j, k;

for ( i = 0; i < 3; i++ ) {

for ( k = 0, j = 1; j < 4; j++ ) if ( a[i][k] > a[i][j] ) k = j;

printf( \ } }

输出:?

(10)程序

#include main() {

FILE *fp; char ch;

fp = fopen( \ while ((ch=getchar())!=' ') fputc( ch, fp );

fprintf( fp, \ while ((ch=getchar())!='\\n') fputc( ch, fp ); fclose( fp ); }

假设文件操作总是成功的。

(051试卷) 6 / 9

输入:Welcome Freshman

请写出程序运行后文件file1.txt的内容。

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

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

(1)以下程序输入10数,从小到大排序后再输出。 #include main() {

/*1*/ int a[9], i, j, t;

/*2*/ for ( i = 0; i < 10; i++ ) /*3*/ scanf( \/*4*/ for ( i = 0; i < 9; i++ )

/*5*/ for ( j = 0; j < 9-i; j++ ) /*6*/ if ( a[j] > a[j+1] )

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

(2)以下程序输入一行字符,判断其是否对称,是则输出Yes,否则输出No。

#include #include main() {

/*1*/ char a[80]; int n, i; /*2*/ gets( a[80] ); /*3*/ n = strlen( a );

/*4*/ for ( i = 0; i < n/2; i++ ) /*5*/ if ( a[i] != a[n-1-i] ) /*6*/ continue; /*7*/ if ( i < n/2 )

/*8*/ printf( \

(051试卷) 7 / 9

/*9*/ else

/*10*/ printf( \ }

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

阅读下列问题描述和相应的C程序,把应填入其中 (n) 处的内容写在答卷纸的对应栏内。

(1)以下程序输入整数m和n,按每行7个数的格式输出m和n之间的所有素数(包括m和n)。 #include main() {

int m, n, i, j, isyes, ct=0; scanf( \ for ( i = m; i <= n; i++ ) {

(1) ;

for ( j = 2; j <= i-1; j++ ) if ( (2) ) isyes = 0; if ( isyes == 1 ) {

printf( \ ct ++;

if ( (3) ) printf( \ } } }

(2)以下程序中insert1函数将新结点插入到链表的表头处,printlist函数输出链表的内容,主函数main用于测试两个函数。 #include #include #include struct node

(051试卷) 8 / 9

{ /*链表结点定义*/ int num; /*学号*/ char name[20]; /*姓名*/

struct node *next; /*指向下一结点的指针*/ };

struct node *insert1(struct node *head, int num, char *name) { /*将结点插入到链表的表头,并返回新链表的表头*/ struct node *p;

p = (4) ; p->num = num;

strcpy( p->name, name ); p->next = head;

return (5) ; }

void printlist(struct node *head) { /*输出链表的内容*/ struct node *p;

for ( p=head; p!=NULL; p=p->next )

printf( \ }

main()

{ /*先定义一个空链表,接着插入三个结点,然后输出链表*/ struct node *head = NULL;

head = insert1( head, 111, \ head = insert1( head, 222, \ head = insert1( head, 333, \ printlist( head );

/*链表的结点删除部分略*/ }

程序运行结果为: 333 gong 222 chen 111 wang

(051试卷) 9 / 9

(051)上海大学2005-2006年秋季学期答卷 2005.11 课程名: 程序设计基础(C) 学分: 5

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

题号 题分 得分 一 20 二 30 三 8 四 12 卷面 70 上机 20 总分 90 2分/格 小题 1 2 3 4 5 6 7 8 9 10 第 一 题 答 栏 (基础题) 20% 前 式 后 式 x= 52 y= 160 n= 2 24 8D a

3分/格

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

Top