中山大学《高级语言程序设计一》实践试题.docx
《中山大学《高级语言程序设计一》实践试题.docx》由会员分享,可在线阅读,更多相关《中山大学《高级语言程序设计一》实践试题.docx(12页珍藏版)》请在冰豆网上搜索。
![中山大学《高级语言程序设计一》实践试题.docx](https://file1.bdocx.com/fileroot1/2023-1/22/79ca4d91-5632-4ae8-ba0d-fb471f1e44e9/79ca4d91-5632-4ae8-ba0d-fb471f1e44e91.gif)
中山大学《高级语言程序设计一》实践试题
中大计算机及应用实践考试高级语言程序设计一实践考核试题及答案
试题1.有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
编写程序,在屏幕上打印输出这些三位数.
解答:
main()
{
inta[4]={1,2,3,4};
inti,j,k;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
if((i!
=j)&&(j!
=k)&&(i!
=k))
{
printf("%8d",a*100+a[j]*10+a[k]);
}
}
printf("n");
}
}
}
试题2.有一个整数,加上100后是一个完全平方数,再加上168又是一个完全平方数,编写程序求出该数是多少?
解答:
#include
main()
{
inti=10,j;
longm=268,n=100;
charflag='n';
while(flag=='n')
{
for(j=i+1;j<=sqrt(m);j++)
{
if(m==(long)(j*j))
{
printf("%dn",n-100);
flag='y';
break;
}
}
i++;
n=(long)i*i;
m=n+168;
}
}
试题3.编写C程序,要求能读入一正整数n,(n<10),并输出如下图形:
1
222
33333
.
.
.
nnnnn...nnnnn(共2n-1个n)
.
.
.
33333
222
1
解答:
main()
{
inti,j,n;
printf("Pleaseinputn(1~9):
n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j
printf("");
for(j=0;j<2*i-1;j++)
printf("%d",i);
printf("n");
}
for(i=n-1;i>=1;i--)
{
for(j=0;j
printf("");
for(j=0;j<2*i-1;j++)
printf("%d",i);
printf("n");
}
}
试题4.编写C程序,要求能读入两个整数m与n,计算并读出m与n的绝对值的最大公约数及最小公倍数.
解答:
main()
{
intm,n,a,b,t,div,mul;
printf("Pleaseinputm,n:
n");
scanf("%d,%d",&m,&n);
if(m<0)m=-m;
if(n<0)n=-n;
if((m==0)||(n==0))
{
div=0;
mul=0;
}
else
{
if(m{
a=n;
b=m;
}
else
{
a=m;
b=n;
}
do
{
t=a%b;
a=b;
b=t;
}
while(t!
=0);
div=a;
mul=m*n/a;
}
printf("themaximumcommondivisorof%d,%dis:
%dn",m,n,div);
printf("theminimumcommonmultipleof%d,%dis:
%dn",m,n,mul);
}
试题5.已知e=1+1/1!
+1/2!
+1/3!
+...+1/n!
试用上述公式求e的近似值.要求累加所有不小于10-6的项值,部分程序给出如下,请完成程序,实现以上功能.
#include
main()
{
inti=1;
floate,n;
e=1.0;i=1;
n=1.0;
******在此编写代码******
}
fun(inti)
{
intj,k;
k=1;
for(j=1;j<=i;++j)
k=k*j;
return(k);
}
解答:
#include
main()
{
inti=1;
floate=1.0,n=1.0;
do
{n=fun(i);
e+=1.0/n;
i++;
}
while(1.0/n>=1e-6);
printf("e=%fn",e);
}
fun(inti)
{
intj,k;
k=1;
for(j=1;j<=i;++j)
k=k*j;
return(k);
}
试题6.请编写程序求出100~200之间的所有素数,并将结果在屏幕上显示出来.(素数是只能被1和它本身整除的自然数)
解答:
main()
{
inti,j;
for(i=100;i<=200;i++)
{
for(j=2;j
{
if(i%j==0)break;
}
if(i==j)
printf("%4d",i);
}
}
试题7.编写一个函数fun(str),它的功能是:
统计由实参传来的一个字符中的字母,数字,空格和其它字符的个数.部分源程序给出如下,请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句.
#include
intalph,digit,space,others;
main()
{
chartext[80];
printf("n请输入一个字符串:
n");
gets(text);
printf("字符串是:
n");
puts(text);
alph=digit=space=others=0;
fun(text);
printf("n%d个字母,%d个数字,%d个空格,%d个其它字符.n",
alph,digit,space,others);
}
fun(str)
charstr[];
{............}
解答:
#include
intalph,digit,space,others;
main()
{
chartext[80];
printf("pleaseinputacharacterstring:
n");
gets(text);
printf("thecharacterstringis:
n");
puts(text);
alph=digit=space=others=0;
fun(text);
printf("alphnumber:
%d,digitnumber:
%d,spacenumber:
%d,othersnumber:
%dn",alph,digit,space,others);
}
fun(str)
charstr[];
{
inti=0;
while(str!
='')
{
if((('a'<=str)&&(str<='z'))||
(('A'<=str)&&(str<='Z')))
alph++;
elseif(('0'<=str)&&(str<='9'))
digit++;
elseif(str=='')space++;
elseothers++;
i++;
}
return;
}
试题8.编写一个程序,它的功能是:
将一个3x3的矩阵转置,例如:
运行程序时,按行输入以下3x3的矩阵:
123
456
789
转置后的矩阵为:
147
258
369
解答:
main()
{
inta[3][3],b[3][3],i,j;
printf("Pleaseinputamatrix:
n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",&a[j]);
b[j]=a[j];
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%8d",b[j]);
printf("n");
}
}
试题9.编写程序打印如下的逆蛇形数字方阵.(用循环语句,行数可变,至少8行)
1121110
213169
314158
4567
解答:
main()
{
inti,j,m=1,n,a[80][80];
printf("pleaseinputn:
n");
scanf("%d",&n);
for(i=0;i<(n+1)/2;i++)
{
for(j=i;j
{
a[j]=m++;
}
for(j=i+1;j
{
a[n-i-1][j]=m++;
}
for(j=n-i-2;j>=i;j--)
{
a[j][n-i-1]=m++;
}
for(j=n-i-2;j>i;j--)
{
a[j]=m++;
}
}
for(i=0;i
{
for(j=0;j
{
printf("%4d",a[j]);
}
printf("n");
}
}
试题10.正读和反读都一样的字符串称为回文字符串,在键盘上输入一个字符串,判别它是否回文字符串(字符串中字符的个数不得少于10).
解答:
#include
main()
{
charstr[80],flag='y';
inti=0,j;
printf("pleaseinputastring:
n");
gets(str);
j=strlen(str);
j--;
while(i<=j)
{
if(str!
=str[j])
{
flag='n';
break;
}
else
{
i++;
j--;
}
}
if(flag=='n')
printf("thestringisnotpalindrome!
n");
else
printf("thestringispalindrome!
n");
}
1n<=1
试题11.y(n){,编写程序计算y(n),要求能
y(n-2)+2*y(n-1)n>1
对读入的任意n(n>=0且n<50),能计算并输出y(n)的值.
解答:
inty(intn)
{
if(n<=1)return
(1);
elsereturny(n-2)+2*y(n-1);
}
main()
{
intn,f;
printf("pleaseinputn:
n");
scanf("%d",&n);
f=y(n);
printf("y(n)=%dn",f);
}
试题12.编写C程序,要求能读入一个字符串(100以内个字符,其中有空格),计算并输出该字符串中所有大写英文字母的个数.
解答:
#include
main()
{
inti=0,n=0;
charstr[100];
printf("pleaseinputastring:
n");
gets(str);
while(str!
='')
{
if(('A'<=str)&&(str<='Z'))n++;
i++;
}
printf("thenumberis:
%dn",n);
}
试题13.一个整数,加上100后是一个完全平方数,再加上168又是一个完全平方数,编写程序,要求在100000以内的整数中找出所有满足上述性质的整数.
解答:
#include
main()
{
inti=10,j;
longm=268,n=100;
while(n<100000)
{
for(j=i+1;j<=sqrt(m);j++)
{
if(m==(long)(j*j))
{
printf("%8d",n-100);
break;
}
}
i++;
n=(long)i*i;
m=n+168;
}
printf("n");
}
试题14.编写程序,求1到100之间的奇数之和及偶数之和,并将二者输出.
解答:
main()
{
inti;
intoddSum=0,evenSum=0;
for(i=1;i<=100;i++)
{
if(i%2==1)oddSum+=i;
elseevenSum+=i;
}
printf("theoddnumbersumis:
%dn",oddSum);
printf("theevenunmbersumis:
%dn",evenSum);
}
试题15.编写程序,计算PI的近似值,公式如下:
PI/4=(1-1/3+1/5-1/7+...),直到累加项的绝对值小于0.0001为止.(即公式右边的各项的绝对值均大于0.0001).
解答:
#include"math.h"
main()
{
floatpi=0.0,n=1.0,s=1.0,t;
do
{
t=s/n;
pi+=t;
s*=-1.0;
n+=2;
}
while(fabs(t)>=1e-4);
printf("PI=%fn",4*pi);
}
试题17.编写程序,生成Fibonacci数列f(i)的前20项(即i=20)并输出,其中:
0i=1
f(i){1i=2
f(i-2)+f(i-1)i>2
解答:
main()
{
intn;
staticintf[20]={0,1};
for(n=2;n<20;n++)
f[n]=f[n-1]+f[n-2];
for(n=0;n<20;n++)
{
if(n%5==0)printf("n");
printf("%8d",f[n]);
}
}