一份曾经的考卷+答案~~//后面的编程题是以前做过的实验~~《程序设计基础-C》试卷一、单项选择题1. C 语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。 A、‘’ B、‘[‘和’]’ C、“/*”和”*/” D、“*/”和”/*”2. 下列运算符中,优先级最低的是_____。 A、* B、!= C、+ D、=3. 若变量已正确定义,表达式 (j=3, j++) 的值是_____ 。A、3 B、 4 C、5 D、04. 已知字符 ‘a’ 的ASCII码为 97 ,执行下列语句的输出是_____。 printf ("%d, %c", ’b’, ’b’+1 ) ; A、98, b B、语句不合法 C、98, 99 D、 98, c5. 表达式strcmp(“box”, “boss”) 的值是一个_______。 A、 正数 B、 负数 C、 0 D、 不确定的数6. 数组定义为 int a[3][2]=,数组元素_____的值为6。 A、a[3][2] B、a[2][1] C、a[1][2] D、a[2][3]7. 要调用数学函数时,在#include命令行中应包含_____。 A、 ”stdio.h” B、 ”string.h” C、 ”math.h” D、 ”ctype.h”8. 判断i和j至少有一个值为非0的表达式是_____。 A、 i!=0 && j!=0 B、i*j!=0 C、!(i==0 || j==0) D、i&&j9. 若a是基本整型变量,c是单精度实型变量,输入语句______是错误的。 A、scanf(”%d,%f”, &a, &c); B、scanf(”d=%d, c=%f”, &a, &c); C、scanf(”%d%f”, &a, &c); D、scanf(”%d%f”, a, c);10. 若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于_____。 A、p++ B、x++ C、*(p++) D、&x++11. 若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, _____是正确的。 A、p2=p1; B、p2=**p1; C、p2=&p1; D、p2=*p1;12. 下列程序段的输出是_____。 int c[]=; int *k=c+1; printf("%d", *++k); A、 3 B、 5 C、 4 D、613. 不正确的赋值或赋初值的方式是______。 A、char str[]="string"; B、char str[7]=;C、char str[10];str="string";D、char str[7]=;14. 对于以下结构定义,++p->str中的++加在_____。 struct { int len; char *str; } *p; A、指针str上 B、指针p上 C、str指的内容上 D、以上均不是15. 对于如下说明,语法和语义都正确的赋值是_____。 int c, *s, a[]=; A、c=*s; B、 s[0]=a[0]; C、s=&a[1]; D、 c=a;二、填空题1. 写出下列程序段的输出结果。 float x1, x2; x1=3/2; x2=x1/2; printf("%d, %.1f", (int)x1, x2) ;2. 表达式 (7<<1>>2^2 ) 的值是_______。 3. 写出下列程序段的输出结果。 #define A 10 #define B (A<A+2)-2 printf("%d", B*2);4. 写出判断字符变量c是英文字母的表达式 。5. 写出下列程序段的输出结果。 int k, x;for (k=0, x=0; k<=9&&x!=10; k++) x+=2; printf ("%d, %d", k, x) ;6. 写出下列程序段的输出结果。printf(“%d, %d”, NULL, EOF);7. 对于以下递归函数f,调用 f (3) 的返回值是_____。 f (int n) 8. 写出下列程序段的输出结果。 char str[]="hello\tworld\n"; printf("%d, %c\n", sizeof(str), *(str+10));9. 输入12345#后,写出下列程序的输出结果。 void main() { char c; for(c=getchar(); getchar()!=’#’; c=getchar()) putchar(c); }10. 执行程序find –nx ould text.txt时,*++argv[1]的值是_______。三、程序阅读题1. 若输入 3 1 2 3 <回车> , 则以下程序的输出结果是_______。 #include "stdio.h" void main() { int i, j, n, a[10]; scanf("%d", &n); for (i=0; i<n; i++) scanf("%d",&a[i]); for (i=0; i<n; i++) for (j=0; j<n; j++) printf("%d, ", a[(i+j)%n]); }2. 若输入89 76 24 25 9 8 11 16 35 4 <回车> , 则以下程序的输出结果是_______。 #include "stdio.h" #define N 10 main() { int x[N], y1[N], y2[N]; int i, j, n1, n2, t, p; n1=n2=0; for(i=0;i<N;i++){ scanf(“%d”, &x[i]); if(x[i] % 2==0) y1[n1++]=x[i]; else y2[n2++]=x[i]; } for(i=1; i<n1; i++) for(j=0; j<n1-1; j++) if(y1[j]>y1[j+1]){ t=y1[j]; y1[j]=y1[j+1]; y1[j+1]=t; } for(i=0; i<n2-1; i++){ p=i; for(j=i+1; j<n2; j++) if(y2[p]<y2[j]) p=j; if(p!=i){ t=y2[i]; y2[i]=y2[p]; y2[p]=t; } } for(i=0; i<n1; i++) printf("%d, ", y1[i]); for(i=0; i<n2; i++) printf("%d, ", y2[i]); }3. 以下程序的输出结果是_______。 #include <stdio.h> int z; void p(int *x, int y){ ++*x; y--; z=*x+y+z; printf("%d, %d, %d#", *x, y, z);}void main(){ int x=1, y=5, z=9; p(&x, y); printf("%d, %d, %d#", x, y, z); }4. 若输入 -6+15*3/5=<回车> , 则以下程序的输出结果是_______。 #include <stdio.h> void main() { int m=0, sum=0; char c, oldc='+'; do { c=getchar(); if(c<='9'&&c>='0') m=10*m+c - '0'; else { if(oldc=='+') sum += m; else sum -= m; m=0; oldc=c; printf("%d, ", sum); } } while(c!='='); }四、程序填空题下列程序的功能是创建单向链表。 #include <stdio.h> #include <alloc.h> struct link { char name[10]; int mark; struct link * next; }; void insert(char *, int); struct link * head = NULL; main() { char name[10]; int mark; struct link * t; while ( 1 ) { scanf("%s %d", name, &mark); if ( strcmp(name, "#") == 0 ) break; ______(1)_______; } for (t=head; ______(2)_______) printf("<%s>: %d\n", t->name, t->mark); } void insert(char * name, int mark) { struct link * p; p = ______(3)_______ ; strcpy(p->name, name); p->mark = mark; ______(4)_______; if ( head != NULL ) ______(5)_______; head = p; }答案2000~2001学年《程序设计基础C》参考答案一、单项选择题C D A D A B C B D B A B C A C二、填空题1 1, 0.5 2 13 -3 4 c>=’a’&&c<=’z’|| c>=’A’&&c<=’Z’5 5, 10 6 0, -17 -17 8 13, d9 13 10 ‘n’三、程序阅读题1 1, 2, 3, 2, 3, 1, 3, 1, 2, 2 4, 8, 16, 24, 76, 89, 35, 25, 11, 9,3 2, 4, 6#2, 5, 9# 4 0, -6, 9, 6, 1,四、程序填空题(1) insert(name, mark)(2) t!=NULL; t=t->next(3) (struct link *)malloc(sizeof(struct link))(4) p->next = NULL(5) p->next = head编程程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:给定平面任意两点坐标 (x1, y1) 和 (x2, y2),求这两点之间的距离(保留2位小数)。要求定义和调用函数 dist(x1, y1, x2, y2)计算两点间的距离,函数形参x1、y1、x2和y2的类型都是double,函数类型是double。输入输出示例:括号内是说明输入1 (repeat=1)10 10 (x1=10, y1=10)200 100 (x2=200, y2=100)输出Distance = 210.24#include <stdio.h>#include <math.h>double dist(double x1, double y1, double x2, double y2);int main(void){ int repeat, ri; double distance, x1, y1, x2, y2; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2); /*---------*/ printf("Distance = %.2f\n", distance); }}/*---------*/程序填空。求1~100中能被6整除的所有整数的和#include <stdio.h>int main(void){ int i, sum = 0;/*---------*/ printf("%d", sum);}程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:读入1 个实数x和正整数 n(n<=50),计算并输出 x 的 n 次幂(保留2位小数),不允许调用pow函数求幂。输入输出示例:括号内是说明输入2 (repeat=2)1.5 2 (x=1.5,n=2)2 7 (x=2,n=7)输出2.25128.00#include <stdio.h>int main(void){ int i, n; int repeat, ri; double mypow, x; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%d", &x, &n);/*---------*/ printf("%.2f\n", mypow); }}……编程题还有好多~~需要的话可以发给你~