南京晓庄学院—C语言期末考试复习提纲
-
习题一
1.
以下常量中正确的是
。
A.
’
abc
’
B.
’
x123
’
C. 3.145E-1.2 D.
”
a
”
2.
设有“
int a;
”
,
以下不能正确表达数学关系
,
”
you
”
,
”
very
”
,
”
much!
”
};
”
,
p>
则
str
数组中存储
’
0
’
的数组元素有
个。
- 6 -
10.
以下程序输出结果是
。
main()
{ enum color{RED=5,BLUE,WHITE=0,BLACK};
char *colorname[]={
”
< br>red
”
,
”
< br>blue
”
,
”
white
”
,
”
black
”
};
pr
intf(
”
%s
”
< br>,colorname[BLACK]);
}
习题五
1.
函数
delstr
功能是:在字符串
str
中删除所有出现的子串
str1
。
[
程序
]
char
*delstr(char *str,char *str1)
{ char
*p,*p1,*q1;
int i;
if(*str==
’
0
’
||*
str1==
’
0
’
< br>) return str;
p=str;
whil
e(*p!=
’
0
’
< br>)
{ p1=p,q1=str1;
while(*p1==*q1 && *q1!=
’
0
’
)
;
if(p!=p1 &&
*q1==
’
0
’
)
{ for(i=0; *p1!=
’
0
’
; i++,p1++)
=*p1;
=
’
p>
0
’
;
}
p++;
}
;
}
2.
设结点的数据结构定义如下:
typedef struct p{
int
x,y;
struct p *next;
}PNODE;
函数
padd
功能是:由
pa
、
pb
分别指向的两个已经存在的链表,生成一个
pc
指向的新链表并返回
该新链表第一个结点的地
址。
两个已存在的链表均是按结点的
y
值升序排列的有序表,
新生成链表
的结点仍按
< br>y
的值升序排列。
新链表生成规则是:
< br>当在
pa
和
pb
链表中发现
y
值相同的结点时,
则
在
pc
链表中增加一个新结点,<
/p>
新结点的
x
取值为
pa
、
pb
指向的链表中对应的两个
结点的
x
值之和,
新结点的
y
取值为
pa
或
pb
链表中对应结点的
y
值。
- 7 -
[
程序
]
PNODE *padd(PNODE *pa,PNODE *pb)
{ PNODE *pcr,*pt,*pc;
pc=NULL;
while(
)
{
if(pa->y==pb->y)
{ pt=(
)malloc(sizeof(PNODE));
pt->x=pa->x+pb->x; pt->y=pa->y; pt->next=NULL;
if(pc==NULL) pc=pcr=pt;
else
{ pcr->next=pt;
;}
pa=pa->next; pb=pb->next;
}
else if(
) pb=pb->next;
else pa=pa->next;
}
return
pc;
}
3.
以下程序打
印所有符合下列条件的
3
位正整数:是某一个数的平方数,其中
有两位数字相同。如
100
、
121<
/p>
等。
main()
{ int a,b,c,n,k;
for(k=10;;k++)
{ n=
;
if(n>999)
;
a=n/100;
b=
;
c=n%10;
if(!((a-b)*(b-c)*(c-a))) printf(
”
n%d,%d
”
,n,k);
}
}
4.
以下程序实现将
a
数组中后
8
个元素从大到小排序的功能。
void sort(int *x,int n);
main()
{ int
a[12]={5,3,7,4,2,9,8,32,54,21,6,43},k;
sort(
,
8);
for(k=0;k<12;k++) printf(
”
%d
”
,a[k]);
}
void sort(int *x,int n)
{ int j,t;
if(n==1) return;
<
br>如有多个相同的 <
br>36
for(j=1;j
- 8 -
if(
)
{ t=x[0]; x[0]=x[j]; x[j]=t; }
sort(x+1,
);
}
5.
已知某链表中结点的数据结构定义如下:
struct node
{ int x;
struct node *next;
};
函数
find_del
功能是:
在参数
head
指向的链表中查找并删除
x
值最大的结点,
x
值最大的结点,删除第一个结点,保存
该结点的地址到
pm
指向的指针变量中,函数返回链表首结
p>
点的指针。
struct
node *find_del(struct node *head,struct node **pm)
{ struct node *p1,*p2,*pmax,*pre;
if(head==NULL) return NULL;
pmax=
; p2=p1=pmax;
while(p1)
{ if(p1->x>
)
{
pre=p2; pmax=p1; }
p2=p1;
p1=p1->next;
}
if(pmax==head) head=pmax->next;
else
=pmax->next;
=pmax;
return head;
}
编程题
1.
熟悉
Visual C++
p>
编程环境,编写第一个
C
语言程序,输出以
下信息:
* * * * * * * * * *
* * * * *
Very good!
* * * * * * * * * * * * * * *
- 9 -
2.
三数中取大数
3.
搬砖问题。
块砖,
36
人搬;男搬
p>
4
,女搬
3
,两个
小孩抬一砖。要求一次全搬完,问男、女、小
孩各若干?
4.
打印九九表。
1
2
3
4
5
6
7
8
9
----------------------------------
1
2
3
4
…
9
2
4
6
8
3
6
9
12
.
.
9
18
27
36
81
- 10 -
5.
验证素数。
6.
打印
Fibonacci
数列。
(
1 1 2 3 5 8 13
…)
1.
有一分数序列
2/1,3/2,
5/3,8/5,13/8,21/13,
…
,
求出这个数列的前
20
项之和。
-
11 -
2.
输出以下图案:
*
* * *
* * * *
*
* * * * * * *
* *
* * *
* * *
*
3.
有一个
3
×
4
的矩阵,要求编程序求出其中值最大的那个元素的值,以
及其所在的行号和列号。
4.
求一个
3
×
3
的整型矩阵对角线元素之和。
-
12 -
5.
已
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
6.
输出以下的杨辉三角形(要求输出
10
行)
。
1
1
1
1
2
1
1
3
3
1
1
4
6
4
1
1
5
10
10
5
1
.
.
.
.
.
.
.
1.
有
15
个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中
第几个元素的值。如果该数不在数组中,则输出“无此数”
。
- 13 - -