浙江理工大学
C程序设计 试题(四)
C程序设计考试试卷
试题一、判断题(每题1分,共10分)
说明:在以下提供的若干陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。
1) 在C语言中,常量和变量都有数据类型。
2) C语言的运算符只有单目运算符和双目运算符两种。 3) 若变量已正确定义,表达式 x + y = z 符合C语言语法。 4) C编辑器可以找出C源程序中所有的语法错误和逻辑错误。 5) 表达式 3 * 5 / 2 和表达式 3 / 2 * 5 等价。
6) 表达式 m = n ++ 的求解顺序是先计算机 m = n, 再计算机 n
= n +1。
7) 变量名 fahr 和 Fahr 代表两个不同的变量。
8) 若表达式 sizeof(unsigned)的值为2,则 unsigned 类型数据能
表示的最大整数为216-1。
9) break 语句只能用于循环结构中。
10) while 语句先判断循环条件,所以循环体有可能一次也不执行。
试题二、单选题(每题2分,共20分)
11) 执行scanf(\,输入______后,money = 1000,year = 3,rate = 0.025。 A、1000 3 0.025 B、1000 0.025 3 C、1000, 3, 0.025 D、1000, 0.025, 3 12) 判断变量 ch 是英文字母的表达式为________。 A、('a'<=ch<='z')||('A'<=ch<='Z') B、(ch>='a' && ch<='z') && (ch>='A' && ch<='Z') C、(ch>='a' && ch<='z') || (ch>='A' && ch<='Z') D、('A'<=ch<='z') && ('A'<=ch<='z') 13) while(_____) 等价于 while(!x)。 A、x == 1 B、x == 0 C、x!= 0 D、x != 1
14) 以下程序段输出字符串str,其中循环条件str[i]!=?\\0?还可以写成_____。 char str[80];
for(i=0;str[i]!='\\0';i++)
putchar(str[i]); A、str[i]!=NULL B、i<80 C、!(str[i]!='\\0') D、i<=80
15) 设变量定义为:int n,*p; chr ch, *q, *g;,则语句______是不正确的。 A、p = &n; g = q = &ch; B、p = &n;q = &ch; C、p = &n;g = &ch; D、p = &n;q =&ch;g = p;
16) 设变量定义如下,则对其中的结构分量 num 正确的引用是______。 struct student{ int num;
char name[20]; float score; }stud[10]; A、stud[1].num = 10; B、student.stud.num = 10; C、struct.stud.num= 10; D、struct student.num = 10; 17) 对于以下递归函数f,调用函数f(2,'1','3')的输出结果是______。 void f(int n, char a,char b, char c) { if (n==1)
printf(\ else{
f(n-1,a,c,b);
printf(\ f(n-1,c,b,a); } } A、1->2#1->3#3->2# B、3->2#1->2#1->3# C、?1?->?3?#?3?->?2?#?1?->?2?# D、1->3#1->2#3->2# 18) 下列程序段的输出结果是_______。 for(p = a;p < a+3;p++) t = t + *p; printf(\ A、15 B、16 C、10 D、不确定
19) 设变量定义为:int *p[3], a[3];,______是正确的赋值。 A、p = &a[0] B、*p = **a C、p[0] = a D、**p = a
20) 对于以下的变量定义,语句______在语法和语义上都是正确
的。
struct node{ float x,y; char s[10];
}point = {1,2,\ A、*p =point; B、p = &point; C、point = p; D、p->x = point.y; 试题三、程序填空(每空2分,共20分)
说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。 程序1、
【程序说明】 根据下式计算s 的值,要求精确到最后一项的绝对值小于10-6。
111s?1?????
357【程序】
#include
{ int flag = 1, t = 1; (21) ;
while( (22) ){ item = flag * 1.0/t; s =s +item; (23) ; t = t+2; }
printf(\}
21) A、double item = 2,s = 0; C、double item = 1,s = 1 22) A、item < 1E-6; C、fabs(item ) < 1E-6; 23) A、flag = -1; C、flag = -flag 程序2、
B、double item = 0,s = 0; D、double item = 3,s = 1; B、item >= 1E-6;
D、fabs(item ) >= 1E-6; B、s = -s D、t = -t
【程序说明】 验证歌德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。列如6=3+3,8=3+5,…,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m 是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 【程序】
#include
int prime(int m);
for (i=6;i<= 100; i= i+2) for(k =3;k <=50; k++) if( 24 ){ printf(\ break; } }
int prime(int m) { int k,n;
if(m = = 1)return 0; n=(int)sqrt(m); for(k =2;k<=n;k++) (25) (26) }
24) A、prime(i) B、prime(i)&&prime(k) C、prime(i)&&prime(i-k) D、prime(k) 25) A、if(m%k ! = 0) return 0; B、if(m%k = = 0) return 0; C、if(m%k = = 0) return 1; D、if(m%k ! = 0) return 1; 26) A、return 0; B、return 1; C、else return 0; D、else return 1; 程序3、
【程序说明】 输入一个字符串(少于80个字符),滤去所有的非八进制字符后,组成一个新字符串(八进制形式),然后将其转换为十进制整数后输出。函数 stoi(str) 将八进制形式的字符串 str 转换为十进制整数,例如,stoi(“12”)的值为10(八进制 12 对应十进制 10)。
#include
int stoi(char *str); gets(s);
for(i=k=0;s[i]!='\\0';i++)
if(s[i] <= '7' && s[i] >='0') (27) ; (28) printf(\ (29) ); }
int stoi(char *str) { int i,n=0;
for(i = 0;str[i]!='\\0';i++) (30) ; return n; }
27) A、s[i] = s[k];i ++ B、s[k] = s[i] C、s[k] = s[i]; k ++ D、s[i] = s[k] 28) A、s[i] ! = ?\\0? B、s[k] ! = ?\\0? C、s[i] = ?\\0? D、s[k] = ?\\0? 29) A、stoi(s) B、s C、stoi(s[i]) D、n 30) A、n = n*8+(str[i] – ?0?) B、n = n*10+(str[i] – ?0?) C、n = n*8+str[i] D、n = n+str[i] 试题四、程序阅读题(每题5分,共20分) 说明:阅读下列程序,将运行时的输出结果写在答卷纸的相应提号下。 1、 程序1
#include
{ int x = 10023; do{
printf(\ x = x/10; }while (x!= 0); }
2、 程序2