C语言.docx
《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(74页珍藏版)》请在冰豆网上搜索。
C语言
各位同学,这是上机考试的最终题目
上机考试答题要求:
1.数据的输入和输出功能在main()函数中完成;
2.题目的其它功能要求学生编写函数完成,可以编写多个函数;
3.在main()调用编写的函数来完成题目要求的功能;
1
输入一个正整数,把各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数。
例如若输入一个正整数27638496,得到结果为739。
#include
voidfun(unsignedlong*n)
{unsignedlongx=0,i;intt;
i=1;
while(*n)
{t=*n%10;
if(t%2!
=0)
{x=x+t*i;i=i*10;}
*n=*n/10;
}
*n=x;
}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("Pleaseinput(0");scanf("%ld",&n);}
fun(&n);
printf("\nTheresultis:
%ld\n",n);
}
解题思路:
第一处:
t是通过取模的方式来得到*n的个位数字,所以应填:
10。
第二处:
判断是否是奇数,所以应填:
0。
第三处:
最后通形参n来返回新数x,所以应填:
x。
2
输入一个正整数,把各位上为奇数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数。
例如若输入一个正整数27638496,得到结果为26846。
#include
voidfun(unsignedlong*n)
{unsignedlongx=0,i;intt;
i=1;
while(*n)
{t=*n%10;
if(t%2==0)
{x=x+t*i;i=i*10;}
*n=*n/10;
}
*n=x;
}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("Pleaseinput(0");scanf("%ld",&n);}
fun(&n);
printf("\nTheresultis:
%ld\n",n);
}
3
输入由数字字符组成的字符串,将其转换成为一个整数。
例如若输入字符串"3425",得到结果为整数值3425。
#include
#include
longfun(char*p)
{
intlen,t;
longx=0;
len=strlen(p);
if(p[0]=='-')
{t=-1;len--;p++;}
elset=1;
while(*p)x=x*10-48+(*p++);
returnx*t;
}
main()
{chars[6];
longn;
printf("Enterastring:
\n");
gets(s);
n=fun(s);
printf("%d\n",n);
}
4
输入一个正整数,将其转换成字符串。
例如若输入整数值3425,转换后得到字符串"3425"。
#include
voidfunc(intnumber)
{
intdigit,power,i=0;
charstr[20];
if(0>number)
{printf("输入的数字串有误,要输入一个正整数\n");}
else{
power=1;
while(100000{power*=10;}
printf("运算字符串为:
\n");
while(power>=1)
{
digit=number/power;
str[i]=digit+48;
number%=power;
power/=10;
i++;
}
str[i]='\0';
printf("%s\n",str);
}
}
voidmain()
{intnumber;
printf("输入一个正整数:
\n");
scanf("%d",&number);
func(number);
}
5
输入一个字符串,依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。
例如若输入字符串"as3r3fd6gf25",得到结果为字符串"33625"。
#include
voidfun(char*s)
{inti,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
s[j++]=s[i];
s[j]='\0';
}
voidmain()
{charitem[80];
printf("\nEnterastring:
");gets(item);
printf("\nThestringis:
%s\n",item);
fun(item);
printf("\nThestringofchangingis:
%s\n",item);
}
6
输入一行英文表达语句,统计其中单词的个数。
规定所有单词由小写字母组成,单词之间由若干个空格隔开。
例如若输入字符串"itisabook",得到结果为4。
#include
intfun(chara[])
{inti,num=0,word=0;
charc;
for(i=0;(c=a[i])!
='\0';i++)
if(c=='')word=0;
elseif(word==0)
{word=1;
num++;
}
returnnum;
}
main()
{chars[100];
printf("input:
");
gets(s);
printf("%d\n",fun(s));
return0;
}
7
输入若干(不超过100个)学生成绩,规定如果输入的数据为0则表示输入结束,输出其中不及格的成绩和不及格人数所占的百分比。
#include
voidli(int*str)
{inti=1;
floatj=0.0,s;
while(*(str+i)!
=0)
{
if(*(str+i)>=0&&*(str+i)<=60)
{
printf("第%d个同学不及格,成绩:
%\n",i,*(str+i));j++;}
i++;
}
s=j/(i-1);
printf("不及格率为:
%.2f%c\n",100*s,37);
}
voidmain()
{
intstr[100];
inti;
for(i=1;i<=100;i++)
{printf("请输入第%d个同学的成绩\n",i);
scanf("%d",&str[i]);
if(str[i]==0)break;
}
li(&str[i]);
}
8
输入若干(不超过100个)学生成绩,规定如果输入的数据为0则表示输入结束,输出其中成绩最高的前10名学生的成绩。
#include
voidmain()
{
voidfun(intx[],intn);
inta[100],i,n=0;
printf("输入学生成绩:
");
for(i=0;i<100;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)break;
n++;
}
fun(a,n);
printf("成绩最高的10名学生的成绩(以空格隔开):
");
for(i=0;i<10;i++)
printf("%d",a[i]);
putchar('\n');
}
voidfun(intx[],intn)
{
inti,j,k,t;
for(i=0;i{
k=i;
for(j=i+1;j{
if(x[k]{
t=x[k];x[k]=x[j];x[j]=t;
}
}
}
}
9
输入若干(不超过100个)学生成绩,规定如果输入的数据为0则表示输入结束,输出其中成绩最低的后10名学生的成绩。
#include
voidmain()
{
voidfun(intx[],intn);
inta[100],i,n=0;
printf("输入学生成绩:
");
for(i=0;i<100;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)break;
n++;
}
fun(a,n);
printf("成绩最低的10名学生的成绩:
");
for(i=0;i<10;i++)
printf("%d",a[i]);
putchar('\n');
}
voidfun(intx[],intn)
{
inti,j,k,t;
for(i=0;i{
k=i;
for(j=i+1;j{
if(x[k]>x[j])
{
t=x[k];x[k]=x[j];x[j]=t;
}
}
}
}
10
输入若干(不超过50个)有序的正整数,对于相同的数据只保留一个,输出保留的数据。
例如,输入数据是:
2,2,2,3,3,4,5,5,6,6,9,9,9,10,10,10最终的输出结果是:
2,3,4,5,6,9,10
#include
#defineN80
intfun(inta[],intn)
{
inti,j=1,k=a[0];
for(i=1;iif(k!
=a[i]){
a[j++]=a[i];
k=a[i];
}
a[j]=0;
returnj;
}
voidmain()
{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,m,n=0;
printf("Theoriginaldata:
\n");
for(i=0;a[i]!
=0;i++){printf("%3d",a[i]);n++;}
m=fun(a,n);
printf("\n\nThedataafterdeleted:
\n");
for(i=0;iprintf("\nthenumberis%d\n",m);
}
11
输入一个字符串和一个正整数m,移动字符串中的内容,移动的规则如下:
把从左边起第1到第m个字符平移到字符串的右边,把其余的字符统一向左移动。
例如,字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:
DEFGHIJKABC。
#include
#include
#defineN80
voidfun1(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/
{
inti;chart;
t=w[0];
for(i=0;iw[i]=w[i+1];
w[strlen(w)-1]=t;
}
voidfun(char*w,intm)/*可调用fun1函数左移字符*/
{
inti;
for(i=0;i}
voidmain()
{chara[N]="ABCDEFGHIJK";
intm;
printf("Theoriginalstring:
\n");puts(a);
printf("\n\nEnterm:
");scanf("%d",&m);
fun(a,m);
printf("\nThestringaftermoving:
\n");puts(a);
printf("\n\n");
}
12
输入一个字符串和一个正整数m,移动字符串中的内容,移动的规则如下:
把从右边起第1到第m个字符平移到字符串的左边,把其余的字符统一向右移动。
例如,字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:
IJKABCDEFGH。
#include
#include
#defineN80
voidfun1(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/
{
inti;chart;
t=w[strlen(w)-1];
for(i=strlen(w)-1;i>0;i--)
w[i]=w[i-1];
w[0]=t;
}
voidfun(char*w,intm)/*可调用fun1函数左移字符*/
{
inti;
for(i=0;i}
voidmain()
{chara[N]="ABCDEFGHIJK";
intm;
printf("Theoriginalstring:
\n");puts(a);
printf("\n\nEnterm:
");scanf("%d",&m);
fun(a,m);
printf("\nThestringaftermoving:
\n");puts(a);
printf("\n\n");
}
13
输入10个数,找出其中最大数和次最大数,并把最大数和次最大数放在第一和第二的位置上,其余数据依次向后移动,输出调整后的结果。
#include
voidfunc(int*str)
{
inti=0,j=0,m,n=0;
for(n=0;n<2;n++)
{
m=str[n];
for(i=n;i<10;i++)
{
if(m{m=str[i];j=i;}
}
for(i=j;i>0;i--)
str[i]=str[i-1];
str[n]=m;
}
for(i=0;i<10;i++)
printf("%d",str[i]);
}
voidmain()
{
intstr[10],i;
printf("请输入十个整数(以空格隔开):
\n");
for(i=0;i<10;i++)
scanf("%d",&str[i]);
printf("结果为:
\n");
func(str);
}
14
输入10个数,找出其中最小数和次最小数,并把最小数和次最小数放在第一和第二的位置上,其余数据依次向后移动,输出调整后的结果。
#include
voidfunc(int*str)
{
inti=0,j=0,m,n=0;
for(n=0;n<2;n++)
{
m=str[n];
for(i=n;i<10;i++)
{
if(m>str[i])
{m=str[i];j=i;}
}
for(i=j;i>0;i--)
str[i]=str[i-1];
str[n]=m;
}
for(i=0;i<10;i++)
printf("%d",str[i]);
}
voidmain()
{
intstr[10],i;
printf("请输入十个整数(以空格隔开):
\n");
for(i=0;i<10;i++)
scanf("%d",&str[i]);
printf("结果为:
\n");
func(str);
}
15
请使用函数的递归调用编写求阶乘的函数,并计算1!
+2!
+3!
+4!
+5!
#include
intmain()
{
intfac(intn);
inti,sum=0;
for(i=1;i<=5;i++)
printf("%d!
=%d\n",i,fac(i));
for(i=1;i<=5;i++)
sum+=fac(i);
printf("求和结果%d\n",sum);
return0;
}
intfac(intn)
{staticintf=1;
f=f*n;
return(f);
}
16
输入一个4×4的矩阵,把该矩阵转置后输出。
#include
#include
intfun(intarray[3][3])
{inti,j,t;
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}
}
main()
{inti,j;
intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};
viodclrscr();
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Convertedarray:
\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
}
17
输入一个字符串,把其中所有的字母字符转换为按字母序列的后续字母(a转换为b,b转换为c,z转换为a,大写字母规律相同),其它字符不变,输出转换后的结果。
#include
#include
voidfun(char*s)
{
while(*s)
{if(*s>='A'&*s<='Z'||*s>='a'&&*s<='z')
{if(*s=='Z')*s='A';
elseif(*s=='z')*s='a';
else*s+=1;
}
s++;
}
}
main()
{chars[80];
printf("\nEnterastringwithlength<80.:
\n\n");gets(s);
printf("\nThestring:
\n\n");puts(s);
fun(s);
printf("\n\nTheCords:
\n\n");puts(s);
}
18
输入10个数据和一个整数m,把输入的10个数据依次向右移动m次。
例如输入的数据为:
1,2,3,4,5,6,7,8,9,10,m的值为3,则移动后的数据为:
8,9,10,1,2,3,4,5,6,7。
#include
#defineN80
voidfun(int*w,intp,intn)
{
inti,j=0,b[N];
for(i=n-p;i<10;i++)b[j++]=w[i];
for(i=0;ifor(i=0;i}
main()
{inta[N]={1,2,3,4,5,6,7,8,9,10};
inti,p,n=10;
printf("Theoriginaldata:
\n");
for(i=0;iprintf("\n\nEnterp:
");scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:
\n");
for(i=0;iprintf("\n\n");
}
19
输入10个数据和一个整数m,把输入的10个数据依次向左移动m次。
例如输入的数据为:
1,2,3,4,5,6,7,8,9,10,m的值为3,则移动后的数据为:
4,5,6,7,8,9,10,1,2,3
#include
#defineN80
voidfun(int*w,intp,intn)
{
inti,j=0,b[N];
for(i=p;ifor(i=0;i<=p;i++)b[j++]=w[i];
for(i=0;i}
main()
{inta[N]={1,2,3,4,5,6,7,8,9,10};
inti,p,n=10;
printf("Theoriginaldata:
\n");
for(i=0;iprintf("\n\nEnterp:
");scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:
\n");
for(i=0;iprintf("\n\n");
}
20
输入一个字符串,把其中的空格都删除,例如输入"asdafaaz67",则输出为"asdafaaz67"。
#include
#include
intfun(char*str)
{
char*p=str;
inti=0;
while(*p){
if(*p!
='')str[i++]=*p;
p++;