C語(yǔ)言程序設(shè)計(jì)2007年試卷
一、單項(xiàng)選擇題:(10分,每題2分)
1.char (*p)[5];該語(yǔ)句聲明p是一個(gè) 。
A) 指向含有5個(gè)元素的一維字符型數(shù)組的指針變量p
B) 指向長(zhǎng)度不超過(guò)5的字符串的指針變量p
C) 有5個(gè)元素的指針數(shù)組p,每個(gè)元素可以指向一個(gè)字符串
D) 有5個(gè)元素的指針數(shù)組p,每個(gè)元素存放一個(gè)字符串
2.C語(yǔ)言源程序的某文件中定義的全局變量的作用域?yàn)椋篲______。
A) 本文件的全部范圍
B) 本函數(shù)的全部范圍
C) 從定義該變量的位置開(kāi)始到本文件結(jié)束
D) 本程序的所有文件的范圍
3.以下程序的正確輸出結(jié)果為:_______。
main()
{ ?int ?a = 2, c = 5;
printf("a = %%d, b = %%d\n", a, c);
}
A)a = %2, b = %5 ? B)a = 2, b = 5
C)a = %%d, b = %%d ? D)a = %d, b = %d
4.已知學(xué)生記錄描述為:
struct student
{
?int ? no;
?char name[20];
?char sex;
?struct
?{
? int ?year;
? char ?month[20];
? int ?day;
?}birth;
};
struct student s;
設(shè)變量s中的“生日”應(yīng)是“1984年11月11日”,下列對(duì)“生日”的正確賦值方式是_____ 。
A) s.birth.year = 1984;
s.birth.month = "11"; ?
s.birth.day = 11;
B) s.birth.year = 1984;
s.birth.month = 11; ?
s.birth.day = 11;
C) s.birth.year = 1984;
strcpy(s.birth.month,"11");
s.birth.day = 11;
D) s.birth.year = 1984;
s.birth.month[] = {"11"};
s.birth.day = 11;
5.若有二維數(shù)組定義語(yǔ)句:int a[3][4]; 則下面能正確引用元素a[i][j]的為: 。
A) *(a+j*4+i) ? ? B) *(a+i*4+j)
C) *(a[i]+j) ? D) *((*a+i)+j)
二、寫(xiě)出下列程序的運(yùn)行結(jié)果。(10分,每題2分)
1.
#include <stdio.h>
main()
{
int ?x = 12, y = 8;
printf("%d\t%d\t%d\n", !x, x&y, x|y);
}
程序運(yùn)行結(jié)果是:
0 ? ? ?1 ? ? ? ? 1
2.
#include <stdio.h>
main()
{
?int v1 = 10 ;
?float v2 = 2.5 ;
?float v3 ;
?int v4 ;
?float v5 ;
?v3 = v1 / v2 ; ?
?v4 = v1 / v2 ; ?
?v5 = v1 / 4 ; ? ?
?printf("v3=%f\tv4=%d\tv5=%f\n",v3,v4,v5) ;
}
程序運(yùn)行結(jié)果是:
3.
#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);
}
程序運(yùn)行結(jié)果是:
4.
#include <stdio.h>
main()
{
int ?k=4, n=0;
for (;n<k;)
{
?n++;
?if (n%2 == 0) ?continue;
?k--;
}
printf("k=%d, n=%d\n",k,n);
}
?程序運(yùn)行結(jié)果是:
5.
#include <stdio.h>
int Func(int i);
main()
{
int i;
for (i=3; i<5; i++)
{
?printf(" %d", Func(i));
}
printf("\n");
}
int Func(int i)
{
static int k = 10; ?
for (; i>0; i--)
{
?k++;
}
return (k);
}
程序運(yùn)行結(jié)果是:
三、閱讀程序,在標(biāo)有下劃線的空白處填入適當(dāng)?shù)谋磉_(dá)式或語(yǔ)句,使程序完整并符合題目要求。(8分,每空1分)
1. 從鍵盤(pán)任意輸入一個(gè)年號(hào),判斷它是否是閏年。若是閏年,輸出“Yes”,否則輸出“No”。已知符合下列條件之一者是閏年:
? 能被4整除,但不能被100整除。
? 能被400整除。
#include <stdio.h>
main()
{
int ?year, flag;
printf("Enter year:");
scanf("%d",&year );
if ( ? )
{
?flag = 1; ? ? ? ? ? ? ? ?
}
else ?
{
?flag = 0; ? ? ? ? ? ? ? ?
}
if ( ? ) ?
{
?printf("Yes!\n"); ? ? ?
}
else
{
?printf("No!\n");
}
}
2.下面函數(shù)Fail用于計(jì)算不及格成績(jī)的學(xué)生人數(shù),函數(shù)Sort采用選擇法對(duì)n個(gè)學(xué)生成績(jī)由高到低排序。
int Fail(float score[], int n) ?
{
int ?i, j, sum = ;
?
?for (i=0; i<n; i++)
? ?{
if (score[i] < 60) ? sum ?; ?
} ?
?; ?
}
void ?Sort(float score[], int n)
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?int ? ?i, j, k;
?float ?temp1; ?
?for (i=0; i<n-1; i++) ? ? ? ? ?
?{
?k = i; ? ? ? ? ? ? ? ? ? ?
?for (j= ; j<n; j++) ? ? ? ?
?{
?if (score[j] > score[k]) ?k = ?; ?
?} ?
?if ( )
?{ ? ? ? ?
?temp1 = score[k]; ?
?score[k] = score[i]; ?
? ?score[i] = temp1; ?
?}
?} ?
} ? ? ? ? ? ? ?
四、在下面的4個(gè)程序中,共有16處錯(cuò)誤(包括語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤),只要找出其中的15處錯(cuò)誤并改正之即可,多找不多加分,重新編寫(xiě)程序不加分。(30分)
1.編程判斷m是否為素?cái)?shù)。
#include <stdio.h>
#include <math.h>
int IsPrime(int m)
main()
{
int n, flag;
?printf("Input n:");
?scanf("%d", n);
?flag = IsPrime(n);
if (!flag) ?
{
?printf("Yes!\n");
}
?else
{
?printf("No!\n");
}
}
int IsPrime(int m); ?
{
int i, k; ?
?if (m <= 1)
{
?return 0;
}
for (i=2; i<=sqrt(m); i++)
{
?k = m % i;
?if (k = 0) ?
?{
? return 0;
?}
}
return 1; ?
}
2.利用

編輯
前200項(xiàng)之積,編程計(jì)算p的值。
#include ?<stdio.h>
main()
{
?double term, result = 0; ?
?int n;
?for (n=2; n<=100; n+2)
?{
? term = double(n*n)/(n-1)*(n+1); ?
? result = result * term;
?}
?printf("result = %f\n", 2 * result);
}
3.編寫(xiě)一個(gè)函數(shù)Inverse(),實(shí)現(xiàn)將字符數(shù)組中的字符串逆序存放的功能。
#include<string.h>
#include<stdio.h>
#define ARR_SIZE = 80; ? ? ? ?
void Inverse(char str[]);
main()
{
char a[ARR_SIZE] ;
printf("Please enter a string: ");
gets(a);
Inverse(char a[]);
printf("The inversed string is: ");
puts(a);
}
void Inverse(char str[])
{
int ?len, i, j;
char ?*temp;
len = strlen(str);
? ?for (i=0; j=len-1; i<j; i++; j--)
{
?temp = str[i];
? ? ? ?str[i] = str[j];
? ? ? ?str[j] = temp;
}
}
4.下面程序的功能是求解愛(ài)因斯坦數(shù)學(xué)題。愛(ài)因斯坦曾出過(guò)這樣一道數(shù)學(xué)題:有一條長(zhǎng)階梯,若每步跨2階,最后剩下1階;若每步跨3階,最后剩下2階;若每步跨5階,最后剩下4階;若每步跨6階,最后剩下5階;只有每步跨7階,最后才正好1階不剩。編程打印這條階梯共有多少階。
#include <stdio.h>
main()
{
int ?x,find;
x=0;
do{
?++x;
?find=x%2=1&&x%3=2&&x%5=4&&x%6=5&&x%7=0;
}while (find); ?
printf("x=%d\n",x);
}
五、編程(42分)
1.編程計(jì)算1×2 + 3×4 + 5×6 + ……+ 99×100的值,其中,n值由鍵盤(pán)輸入。(14分)
2. 不用標(biāo)準(zhǔn)庫(kù)函數(shù)strcat,自己編寫(xiě)一個(gè)函數(shù)MyStrcat,實(shí)現(xiàn)字符串鏈接功能,在主函數(shù)中輸入兩個(gè)字符串,然后調(diào)用函數(shù)MyStrcat將這兩個(gè)字符串鏈接起來(lái),并將結(jié)果顯示到屏幕上。(14分)
已知函數(shù)MyStrcat的函數(shù)原型如下:
void MyStrcat(char dstStr[], char srcStr[]);
其中,dstStr為目的字符串?dāng)?shù)組,srcStr為源字符串?dāng)?shù)組。
3.從鍵盤(pán)任意輸入某班20個(gè)學(xué)生的成績(jī)(int型)和學(xué)號(hào)(long型),編程打印最高分及其相應(yīng)的學(xué)號(hào)。然后,在主函數(shù)中打印這些結(jié)果。(14分)
要求必須按照如下函數(shù)原型編程求解最高分和學(xué)號(hào):
int FindMax(int score[], long num[], int n, long *pMaxNum); ?
其中,函數(shù)的返回值為求得的最高分,pMaxNum代表求得的最高分學(xué)生的學(xué)號(hào),score數(shù)組用于存儲(chǔ)學(xué)生的成績(jī),num數(shù)組用于存儲(chǔ)學(xué)生的學(xué)號(hào),n表示學(xué)生人數(shù)。