安师大898 C语言真题参考答案
个人整理非官方答案。仅供参考!!!
一、程序填空题
-
以下程序计算Fibonacci数列:1, 1, 2, 3, 5, 8, 13……的前20项。请将程序补充完整,使程序得出正确的结果。 #include <stdio.h>
int main()
{
int i;
long f1,f2;
f1=1;f2=1;
for(i=0;i<10;i++){
printf("%ld\n%ld\n",f1,f2);
f1=f1+f2;
f2=f1+f2;
}
return 0;
}
-
以下swap函数将一个数组中的元素按逆序重新存放。例如原来的顺序为:8,5,7,4,1,要求改为: 1,4,7,5,8请将程序补充完整,使程序得出正确的结果。 #include<stdio.h>
#define N 100
void swap(int a[],int n)
{
int i,s;
for (i=0;i<n/2;i++)
{
s=a[i];
a[i]=a[n-i-1];
a[n-i-1]=s;
}
}
int main()
{ int a[N],k,n;
printf("请输入数组元素的个数(小于100):");
scanf("%d",&n);
for(k=0;k<n;k++)
scanf("%d",&a[k]);
swap(a,n);
printf("交换后的数组:\n");
for(k=0;k<n;k++)
printf("%d ",a[k]);
}
-
以下程序中.函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCH码大小递增排序,并将排序后下标为奇数的字符取出.存入形参p所指字符数组中.形成一个新串 例如.形参s所指的字符申为:wijkwasgweqaasdgbcwegdefage,执行后p所指字符数组中的字符串应为aacdeefgggiks 将程序补充完整,使程序得出正确的结果。 #include <stdio.h>
void fun(char *s,char *p)
{
int i,j,n,x,t;
n=0;
for(i=0;s[i]!='\0';i++) n++;
for(i=1;i<n-2;i=i+2)
{
t=i;
for(j=i+2;j<n;j=j+2)
{
if(s[t]>s[j]) t=j;
if(t!=i)
{
x=s[i]; s[i]=s[t]; s[t]=x;
}
}
}
for(i=1,j=0;i<n;i=i+2,j++) p[j]=s[i];
p[j]='\0';
}
int main()
{
char s[100]="wijkwasgweqaasdgbcwegdefage",p[50];
fun(s,p);
printf("The result is:%s\n",p);
return 0;
}
-
己定义学生结构体変量.存储了学生的学号,姓名和三门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。请将程序补充完整,使程序的输出结果为:
NO:101 Name:LiSi
Scores:2.00 90.00 100.00
#include<stdio.h>
#include<string.h>
struct student{
int sno;
char name[10];
float score[3];
};
void fun(struct student *b)
{
b->sno=101;
strcpy(b->name,"LiSi");
}
int main()
{
struct student t={102,"ZhangSan",80,90,100};
int i;
fun(&t);
printf("No: %d Name: %s\nScores: ",t.sno,t.name);
for(i=0;i<3;i++)
printf("%.2f ",t.score[i]);
printf("\n");
return 0;
}
二、程序分析题
-
分析以下程序,回答相关问题。 # include <stdio.h>
int main()
{
int a,b,num1,num2,temp;
scanf("%d%d",&num1,&num2);
if(num1<num2)
{
temp=num1 ;
num1 =num2;
num2=temp;
}
a=num1;b=num2;
while(b>0)
{
temp=a%b; a=b; b=temp;
}
printf("%d,%d",a,num1*num2/a);
}
(1)该程序的功能是什么? (2)请列举两个有代表性的测试用例,描述该程序的执行过程。
(1)求最大公约数和最小公倍数 (2)主观题就不赘述了
-
分析以下程序,回答相关问题 #include <stdio.h>
int main()
{
int p[7]={3,5,6,7,8,9,11},i=0,k=0;
while(i<7 && p[i]%2==1)
{
k=k+p[i];
i++;
}
printf("k=%d\n",k);
return 0;
}
(1)该程序的运行结果是什么? (2)请简述该程序的功能。
(1)
(2)程序是求p数组前n个连续数值为奇数的和
3.分析以下程序,回答相关问题
#include<stdio.h>
char fun(char ch)
{
if(ch>='A'&&ch<='Z')
ch=ch-'A'+'a';
return ch;
}
int main()
{
char s[]="ABC+abc=defDEF",*p=s;
while (*p)
{
*p=fun(*p);
p++;
}
printf("%s\n",s);
}
(1) 该程序的运行结果是什么? (2) 请简述该程序的功能?
(1)
(2)将数组中大写转小写
4.分析以下程序,回答相关问题
#include <stdio.h>
#define P 3+5
#define F(x) (P*x*x)
int main()
{
printf("%d,\n",P);
printf("%d\n",F(3+5));
return 0;
}
(1) 该程序的运行结果是什么? (2) 请简述该程序的执行过程?
(1)
(2)
printf("%d,\n",P); = printf("%d,\n",3+5);
printf("%d\n",F(3+5)); = printf("%d\n",3+5**3+5*3+5);
5.分析以下程序,回答相关问题
#include<stdio.h>
void fun(int *s,int n1,int n2) {
int i,j,t;
i=n1;j=n2;
while(i<j) {
t=*(s+i); i++;
*(s+i)=*(s+j);
*(s+j)=t;j--;
}
}
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9},i,*p=a;
fun(p,0,9);
fun(p,0,3);
fun(p,4,9);
for(i=0;i<10;i++)
printf("%d",*(a+i));
return 0;
}
(1) 该程序的运行结果是什么? (2) 请简述该程序的执行过程?
(1)运行结果:
(2) 第一次调用fun函数数组变为 0 9 8 7 6 6 7 8 9 0
? 第二次调用fun函数数组变为 0 7 7 0 6 6 7 8 9 0
? 第三次调用fun函数数组变为 0 7 7 0 6 0 9 9 0 6
三、程序设计题
-
请编写程序,计算1-1/2-1/3-…-1/50会的和。 #include<stdio.h>
int main()
{
double temp,m=1.0;
int i;
for ( i = 2; i <=50; i++)
{
temp=1.0/i;
m-=temp;
}
printf("%lf",m);
}
-
输入n和m,并给n、m矩阵赋值,输出矩阵中最大元素值及其所在的行号和列号。 #include<stdio.h>
#define M 100
int main()
{
int n,m,i,j,H,L;
int a[M][M],max=0;
printf("请输入矩阵的行数与列数(<100)\n");
scanf("%d%d",&n,&m);
printf("请输入矩阵中的每一个数 按行输入:\n");
for ( i = 0; i < n; i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]>max)
{
H=i;L=j;max=a[i][j];
}
}
}
printf("矩阵中最大的元素值为:%d\n行号为:%d\n列号为:%d\n",max,H+1,L+1);
}
-
输入一个四位整数,将其加密后输出。加密方法:对该整数的每一位上数字,将其加5然后除以10取余数,作为该位上的新数字,最后将该整数的个位数字与千位数字交换,十位数字与百位数字交换,得到新整数。 #include<stdio.h>
int main()
{
int temp;
int i1,i2,i3,i4;
printf("请输入一个四位整数:\n");
scanf("%d",&temp);
i1=temp/1000%10;
i2=temp/100%10;
i3=temp/10%10;
i4=temp%10;
i1=(i1+5)%10;
i2=(i2+5)%10;
i3=(i3+5)%10;
i4=(i4+5)%10;
temp=i4*1000+i3*100+i2*10+i1;
printf("新整数为:%d\n",temp);
}
-
写一个判断素数的函数,并通过调用该函数输出100-200内的所有素数。 #include<stdio.h>
int fun(int n)
{
int i;
for(i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int i;
printf("100~200内的所有素数为:\n");
for(i=100;i<=200;i++)
{
if(fun(i)==1)
printf("%d ",i);
}
return 0;
}
-
编写函数,求一个整型数组中出现x值的次数并返回。 #include<stdio.h>
#define M 100
int fun(int a[],int len,int x)
{
int i,count=0;
for(i=0;i<len;i++)
{
if(a[i]==x) count++;
}
return count;
}
int main()
{
int a[M];
int len,x,count,i;
printf("请输入数组中有几个数:");
scanf("%d",&len);
printf("请输入数组中这%d个数:\n",len);
for ( i = 0; i < len; i++)
{
scanf("%d",&a[i]);
}
printf("请再输入需要查找的数:");
scanf("%d",&x);
count=fun(a,len,x);
printf("在数组中%d出现的次数为:%d\n",x,count);
return 0;
}
-
输入m (2<=m<=8)和一个整数n,将整数n转换成m进制数并输出。
#include<stdio.h>
void system(int n,int m)
{
if(n>0)
{
system(n/m,m);
if(m!=8)
printf("%d",n%m);
else
printf("%o",n%m);
}
}
int main()
{
int n,m;
printf("请输入要转换的数值n与转换的进制数m(2<=m<=8):\n");
scanf("%d%d",&n,&m);
printf("%d转换为%d进制为:",n,m);
system(n,m);
}
-
输入一个字符串(长度不超过1000),保留字符串中最前端"#“号和最后端”#“号,其余“#”号删除。如输入:“####Ab#c12##W2###”,则输出:财”###Abc12W2###"。要求:只允许定义一个数组。
#include<stdio.h>
#include<string.h>
int main()
{
int low=0,high=0;
int i,n,k=0;
char a[1000];
printf("请输入需要处理的字符串:\n");
scanf("%s",a);
n=strlen(a);
for(i=0;a[i]=='#';i++) low++;
for(i=n-1;a[i]=='#';i--) high++;
for(i=low;i<n;i++)
{
if(i<n-high)
{
if(a[i]!='#')
a[i-k]=a[i];
else
k++;
}
else
a[i-k]=a[i];
}
a[n-k]='\0';
printf("处理后的字符串为:\n%s\n",a);
}
若有错误麻烦在评论区留言呀!
|