南昌大学 信工学院 C 语言程序设计 综合练习
发布时间:2024-11-07
发布时间:2024-11-07
南昌大学 信工学院 C 语言程序设计 综合练习
一、 简答题
1. 用N-S图表示判断素数的算法。
2. 阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
char c1,c2;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
printf("%c %c",c1,c2);
}
程序运行结果为__A B__________________
3. 阅读以下程序,写出程序的运行结果:
main()
{
int c=5;
printf("%d,%d,%d\n",c+=c++,c+8,++c);
c=5;
printf("%d\n",(c+=c++,c+8,++c));
c=5;
printf("%d\n",c+=c++,c+8,++c);
}
程序运行结果为_:12,14,6
12
12_
4阅读以下程序,写出程序的运行结果:
main ( )
{
int day,x1,x2;
day=9;
x2=1;
while(day>0){
x1=(x2+1)*2;
x2=x1;
day--;
}
printf(“total=%d\n”,x1);
}
程序运行结果为____________________
4. 阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
int i;
int f[10]={1,1};
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{
if(i%5==0) printf("\n");
printf("%12d",f[i]);
南昌大学 信工学院 C 语言程序设计 综合练习
}
} 程序运行结果为____________________
5. 阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;
case 3: a++; b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
程序的运行结果是
6. 阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{ int a[ ]={1,2,3,4},y,*p=&a[3];
--p; y=*p; printf(“y=%d\n”,y);
}
程序的运行结果是
7. 阅读以下程序并写出其运行结果
#include <stdio.h>
void fun(int *s, int nl, int n2)
{ int i, j, t ;
i=nl; j=n2;
while(i<j) { t=s[i]; s[i]=s[j]; s[j]=t; i++; j--; }
}
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,0},k;
fun(a,0,3); fun(a,4,9); fun(a,0,9);
for(k=0;k<10;k++)printf(“%d”,a[k]); printf(“\n”);
}
程序运行的结果是
8. 阅读以下程序并写出其运行结果
#include <stdio.h>
int f(int x)
{ int y;
if(x==0||x==1) return (3);
y=x*x-f(x-2);
return y;
}
main()
{ int z;
z=f(3);
printf(“%d\n”,z);
}
程序的运行结果是
9. 阅读以下程序并写出其运行结果
#include <stdio.h>
#include <string.h>
typedef struct { char name[9]; char sex; float score[2];
void f( STU a)
} STU;
南昌大学 信工学院 C 语言程序设计 综合练习
{ STU b={“Zhao” , m ,85.0,90.0} ; int i;
strcpy(http://,http://);
a.sex=b.sex;
for(i=0;i<2;i++) a.score[i]=b.score[i];
}
main()
{ STU c={“Qian”, p ,95.0,92.0};
f(c);
printf(“%s,%c,%2.0f,%2.0f\n”,http://,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是
10.阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max)
{max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
程序运行结果为____________________
11.阅读以下程序,写出程序的运行结果:
#include <stdio.h>
#define PI 3.1415926
#define S(r) PI*r*r
void main()
{float a,area;
a=3.6;
area=S(a);
printf("r=%6.2f\narea=%6.2f\n",a,area);
}
程序运行结果为____________________
12.阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
void exchange(int *q1, int *q2, int *q3);
int a,b,c,*p1,*p2,*p3;
a = 22; b = 56; c = 128;
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("\n%d,%d,%d\n",a,b,c);
}
void exchange(int *q1, int *q2, int *q3)
{
void swap(int *pt1, int *pt2);
if(*q1<*q2) swap(q1,q2);
南昌大学 信工学院 C 语言程序设计 综合练习
if(*q1<*q3) swap(q1,q3);
if(*q2<*q3) swap(q2,q3);
}
void swap(int *pt1, int *pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
程序运行结果为____________________
13.阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
int fac(int n);
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
int fac(int n)
{
static int f=1;
f=f*n;
return(f);
}
程序运行结果为____________________
14.阅读以下程序,写出程序的运行结果:
#include <stdio.h>
void main()
{
int n;
for (n=100;n<=120;n++)
{if (n%3==0)
continue;
printf("%d ",n);
}
}
程序运行结果为____________________
15.阅读以下程序并写出其运行结果
#include<stdio.h>
main()
{ int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}, *p[4], i ;
for(i=0;i<4;i++)
{ p[i]=&x[2*i+1] ;
printf(“%d ”,p[i][0]) ;
}
printf(“\n”);
}
程序的运行结果是
16.阅读以下程序并写出其运行结果
#include<stdio.h>
void fun(int x)
{ if(x/2>0) fun(x/2);
南昌大学 信工学院 C 语言程序设计 综合练习
printf(“%d ”,x);
}
main()
{ fun(3);
printf(“\n”);
}
程序的运行结果是
17.阅读以下程序并写出其运行结果
#define MAX(a,b) (a>b)?a:b
main()
{
int x, y;
x=25;
y=56;
printf("the result is: %d\n", MAX(x,y));
}
程序的运行结果是
18.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{
int i, j;
i=1;
while(i<=5){
j=1;
while(j<=i){
printf("%5d", j);
j++;
}
printf("\n");
i++;
}
}
程序的运行结果是
19.阅读以下程序并写出其运行结果
#incude <stdio.h>
main()
{
int i, n3, n2, n1;
i=1;
while(i<=99){
n3=i/100;
n2=(i-n3*100)/10;
n1=i%10;
if((i%3==0)&&(n2==5||n1==5))
printf("%5d", i);
i++;
}
}
程序的运行结果是
20.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{ int x=8;
for( ; x>0 ; x--)
{ if(x%3) { printf(“%d,”,x--); continue; }
printf(“%d,”,--x);
}
南昌大学 信工学院 C 语言程序设计 综合练习
}
程序的运行结果是
21.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(“%d”,c[i]);
printf(“\n”);
}
程序的运行结果是
22.阅读以下程序并写出其运行结果
#include <stdio.h>
#include <string.h>
void fun(char *s[ ],int n)
{ char *t;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;}
}
main()
{ char *ss[]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc” };
fun(ss,5); printf(“%s,%s\n”,ss[0],ss[4]);
}
程序的运行结果是
23.阅读以下程序并写出其运行结果
#include <stdio.h>
void fun(char *a, char *b)
{ while(*a== * ) a++;
while(*b=*a) {b++;a++;}
}
main()
{ char *s=”****a*b****”,t[80];
fun(s,t);
puts(t);
}
程序的运行结果是
24.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{ FILE *fp;
int a[10]={1,2,3},i,n;
fp=fopen(“dl.dat”,”w”);
for(i=0;i<3;i++) fprintf(fp,”%d”,a[i]);
fprintf(fp,”\n”);
fclose(fp);
fp=fopen(“dl.dat”,”r”);
fscanf(fp,”%d”,&n);
fclose(fp);
printf(“%d\n”,n);
}
程序的运行结果是
25.阅读以下程序并写出其运行结果
#include<stdio.h>
南昌大学 信工学院 C 语言程序设计 综合练习
void swap( int *a, int *b )
{ int *t ;
t=a; a=b; b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf(“%d %d\n”,*p,*q);
}
程序的运行结果是
26.阅读以下程序并写出其运行结果
#include<stdio.h>
main()
{ int a[5]={2,4,6,8,10}, *p;
p=a; p++;
printf(“%d”,*p);
}
程序的运行结果是
27.阅读以下程序并写出其运行结果
#define LAB1 1
#define LAB2 2
main()
{
int temp;
#ifdef LAB1
temp=LAB1;
#else
temp=LAB2;
#endif
printf("temp=%d\n", temp);
}
程序的运行结果是
28.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{
int i, j;
char ch;
i=1;
while(i<=5){
j=1;
ch='a';
while(j<=i){
printf("%2c", ch);
ch=ch+1;
j++;
}
printf("\n");
i++;
}
}
程序的运行结果是
29.阅读以下程序并写出其运行结果
#include <stdio.h>
main()
{
南昌大学 信工学院 C 语言程序设计 综合练习
int a[21], i, j;
for(i=0; i<=20; i++)
a[i]=i;
i=1;
while(i<20){
i++;
if(a[i]!=0){
printf('%6d", a[i]);
for(j=1; i*j<=20; j++)
a[i*j]=0;
} }
}程序的运行结果是
二、 阅读以下各段代码,在其中空白处填入合适的语句,使之成为一个正确的程序或函数。
1. 以下程序从名为 filea.dat 的文本文件中逐个读入字符并显示在屏幕上。请填空:
#include<stdio.h>
main()
{ FILE *fp;
char ch ;
fp=fopen( ) ;
ch=fgetc(fp) ;
whlie( !feof(fp) )
{ putchar(ch) ;
ch=fgetc(fp);
}
putchar( \n );
fclose(fp);
}
2. 下述程序用“碾转相除法”计算两个整数m和n的最大公约数。该方法的基本思想是计算m和n相除的
余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填空使程序完整。
main ( ){
int m,n,w;
scanf(“%d,%d”,&m,&n);
while (n) {
w = ;
m = ;
n = ;
}
printf(“%d”,m);
}
3. 下面函数的功能是将一个整数字符串转换为一个整数,例如: "1234" 转换为1234,请填空使程序完整。
int chnum(char *p){
int num=0, k, len, j ;
len = strlen(p) ;
for ( ; ; p++) {
k = ;
j=(--len) ;
while ( ) k = k*10 ;
num = num + k ;
}
return (num);
南昌大学 信工学院 C 语言程序设计 综合练习
}
4. 下面程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元,调用
outone函数输出此动态存储单元中的数据, 填空完成此程序。
#include "stdlib.h"
void getone(int **s);
void assone( int *);
void outone( int *);
void getone(int **s){
s = (__________)malloc(sizeof(int));
}
void assone(int *s){
scanf("%d",__________);
}
void outone (int *b){
printf("%d\n", __________);
}
main(){
int *p;
getone(&p);
assone(p);
outone(p);
}
5. 完成以下字符串拷贝函数(将*from串拷贝到*to串):
void copy_string(char *from, char *to)
{
for(; *from != '\0'; __________________;)
________________________;
to[i]='\0';
}
6. 以下程序从键盘输入10个整数到数组a, 然后依次输出10个数组元素
#include <stdio.h>
void main()
{
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
____________________;
for(__________________________)
printf("%d ",*p);
}
7. 所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,
因为153=13+53+33。完成以下程序使之可打印出100~1000内的全部”水仙花数“。
main ( )
{
int i,j,k,n;
printf(““水仙花数”是:”);
for (n=100; n<1000; n++)
{
i= n/100;; /*取百位数*/
j=___________; /*取十位数*/
k=n%10; /*取个位数*/
if (_________________________)
南昌大学 信工学院 C 语言程序设计 综合练习
printf(“%4d”,n);
}
printf(“\n”);
}
8. 以下程序用来求两整数的绝对值和。请填空。
#include<stdio.h>
void main()
{ int x,y;
printf("Please input x,y:");
scanf("%d%d",&x,&y);
if (x<0) ____________ ;
if (_________) y=-y;
printf("\n|x|+|y|=%d\n",x+y);
}
9. 以下程序可计算1名学生10门课成绩的平均分,将缺省语句填上。
#include<stdio.h>
float average(float array[10])
{ int i;float aver,sum=array[0];
for(i=1;i<10;i++)
sum += ______________;
aver = sum / 10;;
return(aver);
}
void main()
{ float score[10],aver;
int i;
printf("\n input 10 scores:");
for(i=0;i<10;i++) scanf("%f",&score[i]);
aver= ___________ ;
printf("\n average score is %5.2f\n",aver);
}
10.以下程序中函数 fun 的功能是:统计 person 所指结构体数组中所有性别(sex)为 M 的记录的个数,存
入变量 n 中,并做为函数值返回。请填空:
#include<stdio.h>
#define N 3
typedef struct
{ int num ;
char nam[10] ;
char sex ;
} SS ;
int fun(SS person[])
{ int i, n=0 ;
for(i=0;i<N;i++) if(== M ) n++ ;
return n;
}
main()
{ SS W[N]={ {1,”AA”, F }, {2,”BB”, M }, {3,”CC”, M } };
int n;
n=fun(W);
printf(“n=%d\n”,n);
}
x yz yF(x,y,z) x yz y,请填空使程序完整。 11.以下程序的功能是计算函数
南昌大学 信工学院 C 语言程序设计 综合练习
# include <stdio.h>
;
main ( ) {
float x,y,z,f ;
scanf(“%f,%f,%f”,&x,&y,&z);
f = fun ( );
f += fun ( );
printf(“f=%d”,f);
}
float fun(float a,float b){
return (a/b) ;
}
12.下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。
int count(char *str, char *substr){
int i,j,k,num=0;
for ( i=0; ; i++)
for ( , k=0; substr[k] == str[j]; k++; j++)
if (substr [ ] == \0 ) {
num++ ; break ;
}
return (num) ;
}
13.已知如下公式:
1121231234 1 23353573579
下面程序的功能使根据上述公式输出满足精度要求的eps的 值,请填空使程序完整。
main ( ){
double s = 0.0, eps, t=1.0;
int n ;
scanf (“%lf”,&eps);
for (n=1 ; ; n++) {
s+=t ;
t= ;
}
;
}
三、 填空
1. C语言的数据类型有_______________、_________________、______________和_____________。
2. 根据数据组织形式,C语言中将文件分为___________________和_________________。
3. 在函数中未指定存储类别的局部变量,其隐含的存储类别是________。
4. 组成C程序的基本单位是________。
5. 若主调用函数为double型,被调用函数定义中没有函数类型说明,而return语句中的表达式为float型,
则被调用函数返回值的类型是________。
6. 设int a=5,b=2;float c=32.8;,表达式b*(int)c%a的值为______。
四、 编程题
1. 已有a,b 两个链表,每个链表中的结点包括学号、成绩。要求把2个链表合并,按学号升序排列。
2. 编写程序,将一个磁盘文件中的信息复制到另一个磁盘文件中。
3. 设当前路径下有一个名为"chang.txt"文件,编写程序将文件中所有的小写英文字母更改为大写字母。
4. 编写函数原型为:
void sort(int *, int )
的冒泡排序函数,要求将整型数组中的前n个元素按从小到大的次序排序。
5. 已知2001年1月1日是星期一,编程输出2001年1月起的yyyy年mm月的如下形式的月历表
南昌大学 信工学院 C 语言程序设计 综合练习
June 2010
sun mon tue wed thu fri sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
6. 编写程序模拟实现人员登录,即每从键盘接受用户名,就在文件"member.dat"中进行查找,若此用户名存
在则显示相应的信息。若文件中没有该用户名,则将该用户名存入文件"member.dat"中。当输入用户名按<.Enter>键或处理过程中出错时程序结束。
7. 编写函数原型为:
void sort(int *, int )
的选择排序函数,要求将整型数组中的前n个元素按从小到大的次序排序。
8. 编程打印出如下形式的乘法表
* 1 2 3 4 5 6 7 8 9
1 1
2 2 4
3 3 6 9
4 4 8 12 16
5 5 10 15 20 25
6 6 12 18 24 30 36
7 7 14 21 28 35 42 49
8 8 16 24 32 40 48 56 64
9 9 18 27 36 45 54 63 72 81
9. 从键盘输入20个任意整数,找出其中的最大值和最小值,并求出这20个整数的算术平均数。
10.从键盘输入如下矩阵,保存到一个二维数组a, 将其行列互换后保存到数组b中,再求出这2个矩阵的主
对角线上各项的和。
| 2 4 6 8 9 |
| 1 5 8 9 0 |
| 8 5 2 4 1 |
| 0 3 8 7 1 |
| 8 2 2 5 1 |