求C语言的笔试题和编程题!!~~~谢谢~~!!

我大一,是C语言的科代表,刚学没多久。想每天早读的时候在黑板上抄一道笔试题和编程题给班里的同学做,可是找了挺久,找不到合适的。

一份曾经的考卷+答案~~//后面的编程题是以前做过的实验~~

《程序设计基础-C》试卷
一、单项选择题
1. C 语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。
A、‘{‘ 和’}’ B、‘[‘和’]’ C、“/*”和”*/” D、“*/”和”/*”
2. 下列运算符中,优先级最低的是_____。
A、* B、!= C、+ D、=
3. 若变量已正确定义,表达式 (j=3, j++) 的值是_____ 。
A、3 B、 4 C、5 D、0
4. 已知字符 ‘a’ 的ASCII码为 97 ,执行下列语句的输出是_____。
printf ("%d, %c", ’b’, ’b’+1 ) ;
A、98, b B、语句不合法 C、98, 99 D、 98, c
5. 表达式strcmp(“box”, “boss”) 的值是一个_______。
A、 正数 B、 负数 C、 0 D、 不确定的数
6. 数组定义为 int a[3][2]={1, 2, 3, 4, 5, 6},数组元素_____的值为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&&j
9. 若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[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);
A、 3 B、 5 C、 4 D、6
13. 不正确的赋值或赋初值的方式是______。
A、char str[]="string";
B、char str[7]={'s', 't', 'r', 'i', 'n', 'g'};
C、char str[10];str="string";
D、char str[7]={'s', 't', 'r', 'i', 'n', 'g', ’\0’};
14. 对于以下结构定义,++p->str中的++加在_____。
struct {
int len;
char *str;
} *p;
A、指针str上 B、指针p上 C、str指的内容上 D、以上均不是
15. 对于如下说明,语法和语义都正确的赋值是_____。
int c, *s, a[]={1, 3, 5};
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)
{ return ((n>0) ? 2*f(n-1)+f(n-2) : -1); }
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 1
3 -3
4 c>=’a’&&c<=’z’|| c>=’A’&&c<=’Z’
5 5, 10
6 0, -1
7 -17
8 13, d
9 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.25
128.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);
}
}

……编程题还有好多~~需要的话可以发给你~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-07-13
一份曾经的考卷+答案~~//后面的编程题是以前做过的实验~~
《程序设计基础-C》试卷
一、单项选择题
1.
C
语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。
A、‘{‘
和’}’
B、‘[‘和’]’
C、“/*”和”*/”
D、“*/”和”/*”
2.
下列运算符中,优先级最低的是_____。
A、*
B、!=
C、+
D、=
3.
若变量已正确定义,表达式
(j=3,
j++)
的值是_____

A、3
B、
4
C、5
D、0
4.
已知字符
‘a’
的ASCII码为
97
,执行下列语句的输出是_____。
printf
("%d,
%c",
’b’,
’b’+1
)
;
A、98,
b
B、语句不合法
C、98,
99
D、
98,
c
5.
表达式strcmp(“box”,
“boss”)
的值是一个_______。
A、
正数
B、
负数
C、
0
D、
不确定的数
6.
数组定义为
int
a[3][2]={1,
2,
3,
4,
5,
6},数组元素_____的值为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&&j
9.
若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[]={1,
3,
5};
int
*k=c+1;
printf("%d",
*++k);
A、
3
B、
5
C、
4
D、6
13.
不正确的赋值或赋初值的方式是______。
A、char
str[]="string";
B、char
str[7]={'s',
't',
'r',
'i',
'n',
'g'};
C、char
str[10];str="string";
D、char
str[7]={'s',
't',
'r',
'i',
'n',
'g',
’\0’};
14.
对于以下结构定义,++p->str中的++加在_____。
struct
{
int
len;
char
*str;
}
*p;
A、指针str上
B、指针p上
C、str指的内容上
D、以上均不是
15.
对于如下说明,语法和语义都正确的赋值是_____。
int
c,
*s,
a[]={1,
3,
5};
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)
{
return
((n>0)
?
2*f(n-1)+f(n-2)
:
-1);
}
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
1
3
-3
4
c>=’a’&&c<=’z’||
c>=’A’&&c<=’Z’
5
5,
10
6
0,
-1
7
-17
8
13,
d
9
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.25
128.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);
}
}
……编程题还有好多~~需要的话可以发给你~
第2个回答  2010-04-02
要简单的还是复杂的?
简单的:
输出一个 △
用*如下图
*
**
***
难一点的
编写一个五子棋游戏。
以后我上的比较多。我这里问题多这呢。
你也可以到专业的编程网站去看看
第3个回答  2010-04-05
我这也有,要要的话发给你哈。。。。
第4个回答  2010-04-02
99乘法表
输入十个从大到小数排序
输入日期YYYYMMDD判断是不是闰年,这个月有多少天,这个日期的前一天和后一天。
相似回答