《高级语言程序设计》北大上机试题汇总

作者名: 不详 出自:网友提供 05年7月20日

 

C语言上机试题:1
1. 题目:编一C程序,它能读入一个正整数n(n < 20),再逐行读入一个n*n的矩阵的元素(矩阵元素为整数,输入时相邻的整数用空格隔开),找出这个矩阵的最大的元素,再输出该元素的行号和列号(行号和列号均从1开始)。(注:程序命名为e1_1.exe)

程序设计:
main()
{int n,i,j,a[20][20],max,max_i,max_j;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
printf("Please inter a[][]:\n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=a[0][0],max_i=0,max_j=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (max<a[i][j])
{max=a[i][j];
max_i=i;
max_j=j;
}
printf("max_i=%d,max_j=%d\n",max_i+1,max_j+1);
}

2. 题目:设 y(n) = 1 n<= 1时
y(n) = -y(n-2)+2*y(n-1) n>1时
编一C程序,它能对读入的任意n(n>=0且n<50),能计算并输出y(n)的值。(注:程序命名为e1_2.exe)

程序设计:
int y(n)
int n;
{if (n<=1) return (1);
else return (-y(n-2)+2*y(n-1));
}
main()
{int n;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
printf("y(%d)=%d\n",n,y(n));
}

3. 题目:编一C程序,它能读入一个字符串(串长<100,串中可能有空格符),计算并输出该字符串中十进制数字的个数。(注:程序命名为e1_3.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{char a[100];
int i,l,num=0;
printf("Please inter a string:\n");
gets(a);
l=strlen(a);
for (i=0;i<l;i++)
if (a[i]>='0'&&a[i]<='9')
num++;
printf("Number is %d\n",num);
}


C语言上机试题:2
1. 题目:编一C程序,它能读入一正整数n,(n<10),并输出如下图形:



(可执行文件名为e2_1.exe)

程序设计:
main()
{static int a[20][20];
int n,i,j,k;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{k=1;
for (j=0;j<2*n-1;j++)
{if (j>n-i-2) a[i][j]=i+1;
if (k<=2*i+1+n-i-2) k++;
else break;
}
}
for (i=0;i<n;i++)
for (j=0;j<2*n-1;j++)
{if (a[i][j]==0) a[i][j]=' ';
else a[i][j]+=48;
}
for (i=0;i<n;i++)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
for (i=n-2;i>=0;i--)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
printf("\n");
}

2.题目:编一C程序,它能读入矩阵A的行数L,列数M,矩阵B的列数N,矩阵B的行数是M。L,M,N值都小于20), 以及按行读入矩阵A的L*M个元素(整数)及矩阵B的M*N个元素(整数),计算并输出A与B的矩阵乘积(按行,列输出)。(输入时,相邻的两个整数用空格隔开)。(可执行文件名为e2_2.exe)

程序设计:
main()
{int a[20][20],b[20][20],c[20][20],l,m,n,i,j,k;
printf("Please inter a[l][m] and b[m][n] of l,m,n:");
scanf("%d,%d,%d",&l,&m,&n);
printf("\n");
printf("Please inter a[l][m]:\n");
for (i=0;i<l;i++)
for (j=0;j<m;j++)
scanf("%d",&a[i][j]);
printf("Please inter b[m][n]:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
scanf("%d",&b[i][j]);
for (i=0;i<l;i++)
for (j=0;j<n;j++)
{c[i][j]=0;
for (k=0;k<m;k++)
c[i][j]+=a[i][k]*b[k][j];
}
printf("c[l][n]=a[l][m]*b[m][n]:");
for (i=0;i<l;i++)
{printf("\n");
for (j=0;j<n;j++)
printf("%-5d",c[i][j]);
}
printf("\n");
}

3.题目:编一C程序,它能读入n(n<200)个整数(以-9999为结束标记,-9999不算在内,相邻的两个整数用空格隔开),找出第1到第n-1个数中第一个与第n个数相等的那个数,并输出该数读入时的序号(序号从1开始记)。(可执行文件名为e2_3.exe)

程序设计:
main()
{int a[200],n,i;
scanf("%d",&a[0]);
if (a[0]!=-9999)
{for (i=1,n=0;a[i-1]!=-9999;i++,n++)
scanf("%d",&a[i]);
}
printf("%d,%d\n",n,a[n-1]);
for (i=0;i<n;i++)
if (a[i]==a[n-1])
{printf("%d\n",i+1);
break;
}
}

C语言上机试题:3
1. 题目:编一C程序,它能读入一正整数n(n<40),并输出如下图形:



共n行,每行n个A,下一行比上一行右移一列.(注:可执行文件名为e3_1.exe)

程序设计:
main()
{int n,i,j,k;
char ch='A',space=' ';
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{for (j=0;j<i;j++) printf("%c",space);
for (k=0;k<n;k++) printf("%c",ch);
printf("\n");
}
}

2. 题目:编一C程序,它能读入一个正整数,并输出该正整数的17进制形式,依次用A、B、C、D、E、F、G表示10、11、12、13、14、15、16。(注:可执行文件名为e3_2.exe)

程序设计:
main()
{char b[18]={"0123456789ABCDEFG"};
int c[64],d,i=0,base=17;
long n;
printf("Please enter n=");
scanf("%ld",&n);
printf("\n");
do
{c[i]=n%base;
i++;
n=n/base;
}
while (n!=0);
printf("Transmite new base=17:\n");
for (--i;i>=0;--i)
{d=c[i];
printf("%c",b[d]);
}
printf("%c",'\n');
}

3. 题目:编一C程序,它能读入两个整数m与n,计算并输出m与n的绝对值的最大公约数及最小公倍数。(注:可执行文件名为e3_3.exe)

程序设计:
main()
{int m,n,d,r;
printf("Please enter m and n:\n");
scanf("%d %d",&m,&n);
if (m<0) m=-m;
if (n<0) n=-n;
if (m<n)
{r=m;m=n;n=r;}
d=m;
while (d%n!=0)
d+=m;
printf("%d\n",d);
do {r=m%n;
if (r!=0)
{m=n;n=r;}
}
while (r!=0);
printf("%d\n",n);
}

C语言上机试题:4
1. 题目:编一C程序,它能读入一个13进制数(用字符串表示,用A、B、C分别表示10、11和12),输出该数的值(按十进制数输出)。如输入为3B时,输出为50。(注:可执行文件名为e4_1.exe)

程序设计:
main()
{char a[40];
int n=0,i=0,j,k,s=0;
printf("Please enter a 13 base number:\n");
scanf("%s",a);
while (a[i++]!='\0') n++;
for (i=n-1;i>=0;i--)
{if ((a[i]>='0')&&(a[i]<='9')) k=a[i]-'0';
else if ((a[i]>='A')&&(a[i]<='C')) k=a[i]-55;
else printf("error!\n");
for (j=1;j<n-i;j++) k*=13;
s+=k;
}
printf("To 10 base number is:\n");
printf("%d\n",s);
}

2. 题目:编一C程序,它能依次读入三组d1、r1、d2、r2、d3、r3共18个非负整数(其中0<=r1<d1,0<=r2<d2,0<=r3<d3),对每组6个非负整数依次判断是否有正整数n,满足n%d1=r1且n%d2=r2且n%d3=r3,若有,则输出其中最小者;否则,输出No。(输入整数时,相邻的两个用空格隔开)。(注:可执行文件名为e4_2.exe)

程序设计:
main()
{int l,i,n,d1,r1,d2,r2,d3,r3;
for (i=0;i<=2;i++)
{l=1;
n=1;
printf("Please enter d1>=r1>=0,d2>=r2>=0,d3>=r3>=0:\n");
scanf("%d %d %d %d %d %d",&d1,&r1,&d2,&r2,&d3,&r3);
while ((l!=0)&&(n<=d1*d2*d3))
{if ((n%d1==r1)&&(n%d2==r2)&&(n%d3==r3))
{printf("%d\n",n);l=0;}
else n++;
}
if (l!=0) printf("no!\n");
}
}

3. 题目:编一C程序,它能读如若干浮点数f1、f2、...fn(以-9999.0为结束标记,-9999.0不算在内)并输出在f2、f3、...fn这n-1个数中大于f1的数的个数、等于f1的数的个数和小于f1的数的个数。(注:可执行文件名为e4_3.exe)

程序设计:
#include "math.h"
main()
{float f[100],f1;
int n=0,i,i1=0,i2=0,i3=0;
printf("Please enter float:\n");
scanf("%f",&f1);
f[0]=f1;
while (abs(f[n]+9999.0)>=1e-4)
scanf("%f",&f[++n]);
for (i=1;i<=n-1;i++)
if (f[i]>f1) i1++;
else if (abs(f[i]-f1)<1e-4) i2++;
else i3++;
printf(">f1:%d\n",i1);
printf("=f1:%d\n",i2);
printf("<f1:%d\n",i3);
}


C语言上机试题:5
1.题目:编一C程序,它能读入若干个非零浮点数(相邻的两个数用空格隔开,以0.0为输入结束标记,0.0不算在内),计算并输出这些数的平均值。(注:可执行文件名为e5_1.exe)

程序设计:
#include "math.h"
main()
{float f,s=0.0;
int n=0;
printf("Please enter float number:\n");
scanf("%f",&f);
if (fabs(f-0.0)<1e-4)
printf("No number!\n");
else while (fabs(f-0.0)>1e-4)
{n++;
s+=f;
scanf("%f",&f);
}
if (n!=0)
printf("%d number of average is:%f\n",n,s/n);
}

2.题目:编一C程序,它能反复读入正整数(相邻的用空格隔开),并判断它是否为素数(质数),若是,则输出"yes",否则,输出"no",直到读入1时,程序终止执行。(注:可执行文件名为e5_2.exe)

程序设计:
main()
{int n,m,f;
printf("Please enter a number:\n");
scanf("%d",&n);
while (n!=1)
{f=1;
if (n==2)
printf("%d yes\n",n);
else for (m=2;m<n;m++)
if (n%m==0)
{printf("%d no\n",n);
f=0;
break;
}
if (n!=2&&f==1)
printf("%d yes\n",n);
scanf("%d",&n);
}
}

3.题目:编一C程序,它能读入21个整数(相邻的两个数用空格隔开),并输出值为中间的整数的值(即恰有10个值小于它,恰有10个值大于它)。(注:可执行文件名为e5_3.exe)

程序设计:
main()
{int a[21],i,j,k,t;
printf("Please enter 21 numbers:\n");
for (i=0;i<21;i++)
scanf("%d",&a[i]);
for (k=1;k<21;k++)
for (j=20,i=0;i<21-k;i++,j--)
if (a[j]<a[j-1])
{t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
printf("The center number is %d\n",a[10]);
}

C语言上机试题:6
1.题目:编一C程序,它能读入一串整数(用空格隔开相邻的两个整数,以-9999为输入结束标记,-9999不算在内),并以与读入次序相反的次序输出。(注:可执行文件名为e6_1.exe)

程序设计:
main()
{int a[100],i=-1,n;
printf("Please enter numbers:\n");
do {i++;
scanf("%d",&a[i]);
}
while (a[i]!=-9999);
n=i-1;
for (i=n;i>=0;i--)
printf("%d ",a[i]);
printf("\n");
}

2.题目:编一C程序,它能以字符串形式读入两个无符号正整数m和n(两个串各占一行),计算并输出这两个整数的和,其中m和n的值最大可为1000亿。(注:可执行文件名为e6_2.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{char m[20],n[20],mn[20];
int ml,nl,ms,ns,mns,k,i,j,f;
printf("Please enter 2 number string:\n");
scanf("%s",m);
scanf("%s",n);
ml=strlen(m);
nl=strlen(n);
if (ml<nl) {strcpy(mn,m);k=ml;strcpy(m,n);ml=nl;strcpy(n,mn);nl=k;}
for (i=ml-1,j=nl-1;i>=ml-nl-1;i--,j--) n[i]=n[j];
for (i=0;i<ml-nl;i++) n[i]='0';
for (i=ml-1;i>=0;i--)
{ms=m[i]-48;
ns=n[i]-48;
mns=ms+ns;
if (mns<10) f=0;
else f=1;
if (mns<10) m[i]+=ns;
else {m[i]+=ns-10;
m[i-1]+=f;
}
}
if (f==0) printf("%s\n",m);
else {for (i=ml;i>0;i--) m[i]=m[i-1];m[0]='1';printf("%s\n",m);}
}

3.题目:编一C程序,它能读入10个浮点数(相邻的两个数用空格隔开),计算并输出其中最大数和最小数之差。(注:可执行文件名为e6_3.exe)

程序设计:
main()
{float f[9],max,min;
int i;
printf("Please enter 10 float:\n");
for (i=0;i<10;i++)
scanf("%f",&f[i]);
max=min=f[0];
for (i=0;i<10;i++)
{if (max<f[i])
max=f[i];
if (min>f[i])
min=f[i];
}
printf("max=%f,min=%f,max-min=%f\n",max,min,max-min);
}


C语言上机试题:7
1.题目:编一C程序,它能读入10个用空格隔开的整数n1,n2,…,n10,对于i=1,2,…10,执行:若ni是某个整数的平方,则输出yes,否则输出no。(注:可执行文件名为e7_1.exe)

程序设计:
#include "math.h"
main()
{int a[9],i,j,n;
printf("Please enter 10 number:\n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
if (a[i]==1) printf("%d yes\n",a[i]);
else {n=(int)(floor(sqrt(a[i])));
if (a[i]==n*n) printf("%d yes\n",a[i]);
else printf("%d no\n",a[i]);
}
}

2.题目:编一C程序,它能读入由空格隔开的5个正整数,对每个正整数n,判断,若n是完全数(即n=d1+d2+..+dk,其中d1,d2,..dk是n的所有小于它的因子,如6的所有小于它的因子是1,2,3,6=1+2+3,即6是完全数),则输出yes,否则输出no。(注:可执行文件名为e7_2.exe)

程序设计:
main()
{int a[5],i,j,n;
printf("Please enter 5 number:\n");
for (i=0;i<5;i++)
scanf("%d",&a[i]);
for (i=0;i<5;i++)
{n=0;
for (j=1;j<a[i];j++)
if (a[i]%j==0) n+=j;
if (n==a[i]) printf("%d yes\n",a[i]);
else printf("%d no\n",a[i]);
}
}

3.题目:编一C程序,它能读入一个正整数n(n<10),然后输出如下图形:


程序设计:
main()
{static int a[20][20];
int n,i,j,k;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{k=1;
for (j=0;j<2*n-1;j++)
{if (j>n-i-2) a[i][j]=i+1;
if (k<=2*i+1+n-i-2) k++;
else break;
}
}
for (i=0;i<n;i++)
for (j=0;j<2*n-1;j++)
{if (a[i][j]==0) a[i][j]=' ';
else a[i][j]+=48;
}
for (i=0;i<n;i++)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
for (i=n-2;i>=0;i--)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
printf("\n");
}

C语言上机试题:8
1. 题目:编一C程序,它能读入一个正整数n,然后输出如下图形:



(注:可执行文件名为e8_1.exe)

程序设计:
main()
{static char a[80][80];
int n,i,j,k;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{k=1;
for (j=0;j<2*n-1;j++)
{if (j>n-i-2) a[i][j]=i+1;
if (k<=2*i+1+n-i-2) k++;
else break;
}
}
for (i=0;i<n;i++)
for (j=0;j<2*n-1;j++)
{if (a[i][j]==0) a[i][j]=' ';
else a[i][j]='*';
}
for (i=0;i<n;i++)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
for (i=n-2;i>=0;i--)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
printf("\n");
}

2.题目:编一个C程序,它能读入一个学生登记表(学生数<100=,并把它按学号从小到大排序后输出,每个学生登记项包含学号(int型),姓名(字符串),3门课程成绩(均为浮点型),当读到学号值为-1时,表示输入结束,-1不算在内。输入时,相邻两数据间用空各隔开。(注:可执行文件名为e8_2.exe)

程序设计:
#include "string.h"
struct student
{long num;
char name[10];
float score[3];
};
main()
{struct student s[100],x;
int i=0,j,k,n,m;
printf("Please enter student data:\n");
for (i=0;i<10;i++)
{scanf("%ld",&s[i].num);
if (s[i].num==-1) break;
scanf("%s",s[i].name);
for (m=0;m<3;m++) scanf("%f",&s[i].score[m]);
}
n=i;
for (k=1;k<n;k++)
for (j=n-1,i=0;i<n-k;i++,j--)
if (s[j].num<s[j-1].num)
{x.num=s[j].num;
strcpy(x.name,s[j].name);
for (m=0;m<3;m++) x.score[m]=s[j].score[m];
s[j].num=s[j-1].num;
strcpy(s[j].name,s[j-1].name);
for (m=0;m<3;m++) s[j].score[m]=s[j-1].score[m];
s[j-1].num=x.num;
strcpy(s[j-1].name,x.name);
for (m=0;m<3;m++) s[j-1].score[m]=x.score[m];
}
printf("Number Name Score1 Score2 Score3\n");
for (i=0;i<n;i++)
printf("%-8ld%-10s%-8.0f%-8.0f%-8.0f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);
}

3.题目:编一个C程序,它能读入一串浮点数(输入时,相邻的两个数用空格隔开,以0为结束标记,0不算在内),计算出其中绝对值最大者和最小者,并输出它们的原值。(注:可执行文件名为e8_3.exe)

程序设计:
#include "math.h"
main()
{float f,max,min;
int f1,f2;
printf("Please enter float number:\n");
scanf("%f",&f);
if (fabs(f-0.0)>1e-4)
{max=fabs(f);if (f>0.0) f1=0;else f1=1;
min=fabs(f);if (f>0.0) f2=0;else f2=1;
do {scanf("%f",&f);
if (fabs(f-0.0)<1e-4) break;
else {if (max<fabs(f)) {max=fabs(f);if (f>0.0) f1=0;else f1=1;}
if (min>fabs(f)) {min=fabs(f);if (f>0.0) f2=0;else f2=1;}
}
}
while (1);
}
if (f1==0) printf("abs max: %g\n",max);
else printf("abs max: %g\n",-max);
if (f2==0) printf("abs min: %g\n",min);
else printf("abs min: %g\n",-min);
}


C语言上机试题:9

1.题目:编一个C程序,它能读入一串浮点数(以-9999.0为结束标记,-9999.0不算在内,相邻的两个数用空格隔开),计算并输出这些数的平均值以及这些数中大于、小于平均值的数的个数。(注:可执行文件名为e9_1.exe)

程序设计:
#include "math.h"
main()
{float a[100],ave=0.0;
int ma=0,mi=0,qe=0,i=-1,n;
printf("Please enter float number:\n");
do {i++;
scanf("%f",&a[i]);
}
while (fabs(a[i]+9999.0)>1e-4);
n=i;
for (i=0;i<n;i++)
ave+=a[i];
ave/=n;
for (i=0;i<n;i++)
if (a[i]<ave) mi++;
else if (a[i]>ave) ma++;
else qe++;
printf("< %d,= %d,> %d\n",mi,qe,ma);
}

2.题目:编一个C程序,它能读入文件f1.c和f2.c中的所有整数,并把这些数按从小到大的次序写到文件f3.c中,文件中的相邻两个整数都用空格或换行符隔开。(注:可执行文件名为e9_2.exe)

程序设计:
#include "stdio.h"
main()
{FILE *fp1,*fp2,*fp3;
int a[100],n,i,j,k,x;
if ((fp1=fopen("f1.c","wb"))==NULL)
{printf("f1.c can not open!\n");
exit(0);
}
x=9999;
while (x!=-9999)
{scanf("%d",&x);
if (x!=-9999) fwrite(&x,sizeof(int),1,fp1);
}
fclose(fp1);
if ((fp2=fopen("f2.c","wb"))==NULL)
{printf("f2.c can not open!\n");
exit(0);
}
x=9999;
while (x!=-9999)
{scanf("%d",&x);
if (x!=-9999) fwrite(&x,sizeof(int),1,fp2);
}
fclose(fp2);
if ((fp1=fopen("f1.c","rb"))==NULL)
{printf("f1.c can not open!\n");
exit(0);
}
if ((fp2=fopen("f2.c","rb"))==NULL)
{printf("f2.c can not open!\n");
exit(0);
}
if ((fp3=fopen("f3.c","wb"))==NULL)
{printf("f3.c can not open!\n");
exit(0);
}
i=-1;
while (!feof(fp1))
fread(&a[++i],sizeof(int),1,fp1);
fclose(fp1);
i--;
rewind(fp2);
while (!feof(fp2))
fread(&a[++i],sizeof(int),1,fp2);
fclose(fp2);
n=i;
for (k=1;k<n;k++)
for (j=n-1,i=0;i<n-k;i++,j--)
if (a[j]<a[j-1])
{x=a[j];a[j]=a[j-1];a[j-1]=x;}
fwrite(a,sizeof(int),n,fp3);
fclose(fp3);
if ((fp3=fopen("f3.c","rb"))==NULL)
{printf("f3.c can not open!\n");
exit(0);
}
while (!feof(fp3))
{fread(&x,sizeof(int),1,fp3);
printf("%d ",x);
}
printf("\n");
}

3.题目:编一C程序,它能读入一正整数n(n<10),再输出如下图形:



共 n 行.。(注:可执行文件名为e9_3.exe)

程序设计:
main()
{int n,i,k,j;
printf("Please enter n(<10)=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{printf("\n");
for (k=0;k<i;k++)
printf("%c",' ');
for (j=1;j<n+1;j++)
printf("%d",j);
}
printf("\n");
}

C语言上机试题:10
1.题目:编一C程序,它能读入一个正整数n(n < 20),再读入二个n*n的矩阵(矩阵元素为整数,输入时相邻的整数用空格隔开),分别判断每个矩阵是否为对称矩阵,若是,相应输出为Yes,否则为No。(注:程序命名为e10_1.exe)

程序设计:
main()
{int n,a[20][20],b[20][20],i,j;
char fa='y',fb='y';
printf("Please enter n(<20)=");
scanf("%d",&n);
printf("\n");
printf("Please enter a[%d][%d]:\n",n,n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("Please enter b[%d][%d]:\n",n,n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&b[i][j]);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (a[i][j]!=a[j][i])
{fa='n';
break;
}
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (b[i][j]!=b[j][i])
{fb='n';
break;
}
if (fa=='y') printf("a[%d][%d] yes\n",n,n);
else printf("a[%d][%d] no\n",n,n);
if (fb=='y') printf("b[%d][%d] yes\n",n,n);
else printf("b[%d][%d] no\n",n,n);
}

2.题目:设 y(n) = 1 n<= 1时
y(n) = y(n-1)*2+y(n-2) n>1时
编一C程序,它能对读入的任意n(n>=0且n<50),能计算并输出y(n)的值。(注:程序命名为e10_2.exe)

程序设计:
int y(n1)
int n1;
{if (n1<=1) return (1);
else return (y(n1-1)*2+y(n1-2));
}
main()
{int n;
printf("Please enter n(>=0 and <50)=");
scanf("%d",&n);
printf("\n");
printf("y(%d)=%d\n",n,y(n));
}

3.题目:编一C程序,它能读入一个字符串,计算并输出该字符串中英文字母的个数。(注:程序命名为e10_3.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{char a[100];
int i=0,n=0;
printf("Please enter a string:\n");
gets(a);
while (a[i]!='\0')
{if ((a[i]>='a')&&(a[i]<='z')||(a[i]>='A')&&(a[i]<='Z')) n++;
i++;
}
printf("n=%d\n",n);
}


C语言上机试题:11
1.题目:编一C程序,它能读入浮点数x和正整数n,(输入时,x和n之间用空格隔开)计算并输出xn的值。(注:可执行程序命名为e11_1.exe)

程序设计:
main()
{float x;
double y=1.0;
int n,i;
printf("Please enter x(float) ang n(int):\n");
scanf("%f %d",&x,&n);
printf("x=%f,n=%d\n",x,n);
for (i=0;i<n;i++)
y*=x;
printf("y=%f\n",y);
}

2.题目:编一C程序,它能读入三组a、b、c,a、b、c分别是三个一元二次方程ax2+bx+c=0的系数(float型)。求解这三个方程,若某方程无实根,则输出"No solution",否则输出方程的两个实根。 (注:可执行程序命名为e11_2.exe)

程序设计:
#include "math.h"
main()
{float a,b,c,q,x1,x2;
int i;
for (i=0;i<3;i++)
{printf("Plesae enter a,b,c:\n");
scanf("%f %f %f",&a,&b,&c);
q=b*b-4*a*c;
if (q<0) printf("No solution\n");
else if (q==0) printf("x1=x2=%f\n",(-b+sqrt(q))/(4*a));
else printf("x1=%f,x2=%f\n",(-b+sqrt(q))/(4*a),(-b-sqrt(q))/(4*a));
}
}

3.题目:编一C程序,它能读入一个字符串(可能包含空格字符),计算该字符串中十进制数字的个数并输出。(注:可执行程序命名为e11_3.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{char a[100];
int i,n,k=0;
printf("Please enter a string:\n");
gets(a);
n=strlen(a);
for (i=0;i<n;i++)
if (a[i]>='0'&&a[i]<='9') k++;
printf("k=%d\n",k);
}


C语言上机试题:12
1.题目:编一C程序,它能读入一个正整数n(0<n<26),并能打印如下图形,其中最下层为字母'A',最上层为2n-1个n对应的字母。如n=3时,可打印的图形为:



(注:可执行程序命名为e12_1.exe)

程序设计:
main()
{static char a[80][80];
int n,i,j,k;
printf("Please inter n=");
scanf("%d",&n);
printf("\n");
for (i=0;i<n;i++)
{k=1;
for (j=0;j<2*n-1;j++)
{if (j>n-i-2) a[i][j]=i+65;
if (k<=2*i+1+n-i-2) k++;
else break;
}
}
for (i=n-2;i>=0;i--)
{printf("\n");
for (j=0;j<2*n-1;j++)
printf("%c",a[i][j]);
}
printf("\n");
}

2.题目:编一C程序,在DOS下输入程序名,在紧跟程序名后读入两个无符号短整型整数,该程序能计算出这两个数之和。如输入"e12_2.exe 12 88",则输出"100"。 (注:可执行程序命名为e12_2.exe)

程序设计:
#include "stdlib.h"
main(argc,argv)
int argc;
char *argv[];
{int x,y,sum;
x=atoi(argv[1]);
y=atoi(argv[2]);
sum=x+y;
printf("%d+%d=%d\n",x,y,sum);
}


3.题目:编一C程序,它能读入一个字符串(可能包含空格字符),计算该字符串中十进制数字的个数并输出。(注:可执行程序命名为e12_3.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{char a[100];
int i,n,k=0;
printf("Please enter a string:\n");
gets(a);
n=strlen(a);
for (i=0;i<n;i++)
if (a[i]>='0'&&a[i]<='9') k++;
printf("k=%d\n",k);
}


C语言上机试题:13
1.题目:编一C程序,其功能是能把读入一串英文单词(以单词end做为结束标记,单个单词字母数≤20),并按字典顺序输出。(注:可执行程序命名为e13_1.exe)

程序设计:
#include "string.h"
main()
{char a[80][20],c[20];
int i=-1,j,k,n=-1;
printf("Please enter a word string:\n");
do {i++;
n++;
scanf("%s",a[i]);
}
while (strcmp(a[i],"end")!=0);
for (k=1;k<n;k++)
for (j=n-1,i=0;i<n-k;i++,j--)
if (strcmp(a[j],a[j-1])<0)
{strcpy(c,a[j]);
strcpy(a[j],a[j-1]);
strcpy(a[j-1],c);
}
for (i=0;i<n;i++)
printf("%s ",a[i]);
printf("\n");
}

2.题目:编一C程序,它能计算并输出读入的两个无符号整数m与n(m≥n,0<m<1050,0<n<1050)的差m-n。 (注:可执行程序命名为e13_2.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{static char m[20],n[20],mn[20];
int ml,nl,ms,ns,mns,k,i,j,f;
printf("Please enter 2 number string:\n");
scanf("%s",m);
scanf("%s",n);
ml=strlen(m);
nl=strlen(n);
if ((ml<nl)||((ml=nl)&&(strcmp(m,n),0)))
{strcpy(mn,m);k=ml;strcpy(m,n);ml=nl;strcpy(n,mn);nl=k;}
printf("%s-%s=",m,n);
for (i=ml-1,j=nl-1;i>=ml-nl-1;i--,j--) n[i]=n[j];
for (i=0;i<ml-nl;i++) n[i]='0';
for (i=ml-1;i>=0;i--)
{ms=m[i]-48;
ns=n[i]-48;
if (ms>=ns) {mns=ms-ns;f=0;}
else {mns=ms+10-ns;f=-1;}
if (ms>=ns) m[i]=mns+48;
else {m[i]=mns+48;
m[i-1]+=f;
}
}
k=0;
while (m[k]=='0') k++;
for (i=k,j=0;i<ml;i++,j++) mn[j]=m[i];
printf("%s\n",mn);
}


3.题目:编一C程序验证下列结论:任何一个自然数n的立方都等于n个连续奇数之和。例如13=1;23=3+5;33=7+9+11。要求程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0时止。(注:可执行程序命名为e13_3.exe)

程序设计:
#include "math.h"
main()
{int n,k,k1,m,i;
printf("Please enter n=");
scanf("%d",&n);
printf("\n");
while (n!=0)
{k1=1;
do {k=k1;
m=0;
for (i=1;i<=n;i++)
{m+=k;
k+=2;
}
if (m==n*n*n) break;
else k1+=2;
}
while (1);
for (i=1;i<=n;i++)
{if (i!=n) printf("%d+",k1);
else printf("%d",k1);
k1+=2;
}
printf("\nPlease enter n=");
scanf("%d",&n);
}
}

C语言上机试题:14
1题目:编一C程序,它能计算并输出读入的两个无符号整数m与n(0<m<1050,0<n<1050)的和m+n。(注:可执行程序命名为e14_1.exe)

程序设计:
#include "stdio.h"
#include "string.h"
main()
{static char m[20],n[20],mn[20];
int ml,nl,ms,ns,mns,k,i,j,f;
printf("Please enter 2 number string:\n");
scanf("%s",m);
scanf("%s",n);
printf("%s+%s=",m,n);
ml=strlen(m);
nl=strlen(n);
if (ml<nl) {strcpy(mn,m);k=ml;strcpy(m,n);ml=nl;strcpy(n,mn);nl=k;}
for (i=ml-1,j=nl-1;i>=ml-nl-1;i--,j--) n[i]=n[j];
for (i=0;i<ml-nl;i++) n[i]='0';
for (i=ml-1;i>=0;i--)
{ms=m[i]-48;
ns=n[i]-48;
mns=ms+ns;
if (mns<10) f=0;
else f=1;
if (mns<10) m[i]+=ns;
else {m[i]+=ns-10;
m[i-1]+=f;
}
}
if (f==0) printf("%s\n",m);
else {for (i=ml;i>0;i--) m[i]=m[i-1];m[0]='1';printf("%s\n",m);}
}

2.题目:编一C程序,它能读入构成集合A,B的两串非零整数x1,x2,……,xm,0,y1,y2,……,yn,0 。计算A与B的交集A∩B,再以由小到大的顺序输出A∩B中的元素,A∩B为空时无输出。 (注:可执行程序命名为e14_2.exe)

程序设计:
main()
{int a[80],b[80],ab[80],x,al,bl,abl,i,j,n,k;
printf("Please enter int numbers:\n");
i=-1;
do {i++;
scanf("%d",&a[i]);
}
while (a[i]!=0);
al=i;printf("%d\n",al);
i=-1;
do {i++;
scanf("%d",&b[i]);
}
while (b[i]!=0);
bl=i;printf("%d\n",bl);
abl=-1;
for (i=0;i<al;i++)
for (j=0;j<bl;j++)
if (a[i]==b[j])
{abl++;
ab[abl]=a[i];
break;
}
if (abl!=-1)
for (k=1;k<abl;k++)
for (j=abl-1,i=0;i<abl-k;i++,j--)
if (ab[j]<ab[j-1])
{x=ab[j];ab[j]=ab[j-1];ab[j-1]=x;}
if (abl!=-1)
for (i=0;i<abl;i++)
printf("%d ",ab[i]);
printf("\n");
}

3.题目:编一C程序,它能从当前目录下名为"string.txt"的文本文件中读取一个字符串或前20个字符组成的字符串,并显示在屏幕上。(注:可执行程序命名为e14_3.exe)

程序设计:
#include "stdio.h"
main()
{FILE *fp;
char s[21];
if ((fp=fopen("string.txt","r"))==NULL)
{printf("string.txt can not open!\n");
exit(0);
}
fgets(s,21,fp);
fputs(s,stdout);
fclose(fp);
}


C语言上机试题:15
1.题目:编一C程序,能实现如下功能:从键盘输入一整数序列,直到不能从键盘输入整数为止。并按输入顺序输出到指定的文件中。(注:可执行程序命名为e15_1.exe)

程序设计:
#include "stdio.h"
main()
{FILE *fp;
char fname[40];
int x;
printf("Please enter a filename:\n");
scanf("%s%*c",fname);
if ((fp=fopen(fname,"w"))==NULL)
{printf("%s can not open!\n",fname);
exit(0);
}
while (scanf("%d",&x)==1)
fprintf(fp,"%d\t",x);
fclose(fp);
}

2.题目:编一C程序,能实现如下功能:输入n个实数,求出这n个实数中第二大的实数,并输出。(注:可执行程序命名为e15_2.exe)

程序设计:
main()
{float a[80],max1,max2;
int n,i;
printf("Please enter a int number n=");
scanf("%d",&n);
printf("\nPlease enter %d float numbers:\n",n);
for (i=0;i<n;i++)
scanf("%f",&a[i]);
if (a[0]>a[1])
{max1=a[0];max2=a[1];}
else {max1=a[1];max2=a[0];}
for (i=2;i<n;i++)
{if (a[i]>max1)
{max2=max1;max1=a[i];}
else if (a[i]>max2) max2=a[i];
}
printf("The two max is %f!\n",max2);
}

3.题目:编一C程序,实现下列求π算式的计算,并输出结果:(注:可执行程序命名为e15_3.exe)累加项数n由输入确定。

程序设计:
main()
{int n,c=0;
float d=1.0,s=0.0;
printf("Please enter n=");
scanf("%d",&n);
printf("\n");
do {if (c%2==0) s+=4.0/d;
else s-=4.0/d;
d+=2;
c++;
}
while (c<=n);
printf("s=%f\n",s);
}