2022年自学考试《C语言程序设计》练习题及答案9
【3.41】下面程序的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。
#include
strmerge(a,b,c)/*将已排好序的字符串a、b合并到c*/
char*a,*b,*c;
{char t,*w;
w=c;
while(*a!=''①*b!='')
{t=②?*a++:*b<*a?*b++:(③);/*将*a、*b的小者存入t*/
if(*w④'')*w=t;
else if(t⑤*w)*++w=t;/*将与*w不相同的t存入w*/
}
while(*a!='')/*以下将a或b中剩下的字符存入w*/
if(*a!=*w)*++w=*a++;
else a++;
while(*b!='')
if(*b!=*w)*++w=*b++;
else b++;
*++w=⑥;
}
strsort(char*s)/*将字符串s中的字符排序*/
{int i,j,n;
char t,*w;
⑦;
for(n=0;*w!='';⑧)
w++;
for(i=0;i
for(j=i+1;j
if(s<i>>s[j])
{⑨}
}
main()
{char s1[100],s2[100],s3[200];
printf('nPlease Input First String:');
scanf('%s',s1);
printf('nPlease Input Second String:');
scanf('%s',s2);
strsort(s1);
strsort(s2);
⑩='';
strmerge(s1,s2,s3);
printf('nResult:%s',s3);
}
【3.42】已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成:
①若乘积为一位数,则该乘积即为数列的后继项;
②若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项。
下面的程序输出该数列的前N项及它们的和,其中,函数sum(n,pa)返回数列的前N项和,并将生成的前N项存入首指针为pa的数组中,程序中规定输入的N值必须大于2,且不超过给定的常数值MAXNUM。
例如:若输入N的值为10,则程序输出如下内容:
sum(10)=44
2 3 6 1 8 8 6 4 2 4
#include'stdio.h'
#define MAXNUM 100
int sum(n,pa)
int n,*pa;
{int count,total,temp;
*pa=2;
①=3;
total=5;
count=2;
while(count++
{temp=*(pa-1)**pa;
if(temp<10)
{total+=temp;
*(++pa)=temp;
}
else
{②=temp/10;
total+=*pa;
if(count
{count++;pa++;
③=temp%10;
total+=*pa;
}
}
}
④;
}
main()
{int n,*p,*q,num[MAXNUM];
do
{printf('Input N=?(2
scanf('%d',&n);
}while(⑤);
printf('nsum(%d)=%dn',n,sum(n,num));
for(p=num,q=⑥;p
printf('%4d',*p);
printf('n');
}
【3.43】下面程序的功能是输入学生的姓名和成绩,然后输出。
#include
struct stuinf
{char name[20];/*学生姓名*/
int score;/*学生成绩*/
}stu,*p;
main()
{p=&stu;
printf('Enter name:');
gets(①);
printf('Enter score:');
scanf('%d',②);
printf('Output:%s,%dn',③,④);
}
【3.44】下面程序的功能是按学生的姓名查询其成绩排名和平均成绩。查询时可连续进行,直到输入0时才结束。
#include
#include
#define NUM 4
struct student
{int rank;
char*name;
float score;
};
①stu[]={3,'liming',89.3,
4,'zhanghua',78.2,
1,'anli',95.1,
2,'wangqi',90.6
};
main()
{char str[10];
int i;
do
{printf('Enter a name');
scanf('%s',str);
for(i=0;i
if(②)
{printf('Name:%8sn',stu<i>.name);
printf('Rank:%3dn',stu<i>.rank);
printf('Average:%5.1fn',stu<i>.score);
③;
}
if(i>=NUM)printf('Not foundn');
}while(strcmp(str,'0')!=0);
}
【3.45】下面程序的功能是从终端上输入5个人的年龄、性别和姓名,然后输出。
#include'stdio.h'
struct man
{char name[20];
unsigned age;
char sex[7];
};
main()
{struct man person[5];
data_in(person,5);
data_out(person,5);
}
data_in(struct man*p,int n)
{struct man*q=①;
for(;p
{printf('age:sex:name');
scanf('%u%s',&p->age,p->sex);
②;
}
}
data_out(struct man*p,int n)
{struct man*q=__③__;
for(;p
printf('%s;%u;%sn',p->name,p->age,p->sex);
}
【程序填空题参考答案】
【3.41】答案:①&&②*a<*b③*a++,*b++④==
⑤!=⑥''⑦w=s⑧n++
⑨t=s<i>;s<i>=s[j];s[j]=t;⑩s3[0]
【3.42】答案:①*++pa②*++pa③*pa
④return(total)⑤n<=2||n>=MAXNUM+1⑥num+n
【3.43】答案:①stu.name②&stu.score③p->name④p->score
注释:这是结构中的最基本概念。
【3.44】答案:①struct student②strcmp(stu<i>.name,str)==0③break
注释:程序的主体是一个二重循环,内层for循环完成查找学生的工作。①处是进行结构数组说明并初始化,按照结构变量说明的格式规定,应该填写:strcut student。②处为if语句的逻辑条件,应当是当查找到指定的学生后输出学生的情况,因此应当填写:strcmp(stu<i>.name,str)==0。③处应当将控制退出内层的for循环,只能选择break语句。
【3.45】答案:①p+n②gets(p->name)③p+n
注释:本程序是通过函数完成对于结构数组的输入和输出操作。函数data_in和data_out十分相似,都是通过结构指针p和结构指针q来操作结构数组的元素。由于指针q在两个函数中的作用相同,所以①和③填写的内容也应该是相同的;由for语句中的循环终止条件'pname)。
热门推荐:
自考有疑问、不知道如何选择主考院校及专业、不清楚自考当地政策,点击立即了解》》
推荐阅读: