C语言程序设计基础上机考试一题目及参考答案.docx
《C语言程序设计基础上机考试一题目及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计基础上机考试一题目及参考答案.docx(23页珍藏版)》请在冰豆网上搜索。
C语言程序设计基础上机考试一题目及参考答案
1.输入一串字符(可能包含空格),计算输入的字符串中整数的个数并输出。
2.输入一个字符串,对字符串相同的字符只保留一个(首次出现的字符)。
3.找出一个大于给定整数m且紧随m的素数。
4.统计老年人各年龄段(每10岁为一个年龄段)的人数并存到b数组中,n个人员的年龄放在a数组中。
5.计算并输出k以内最大的10个能被13或17整除的自然数之和。
6.读入一行英文文本,将其中每个单词的最后一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。
7.求A、B两个整数数组数据的交集,并输出交集的数据。
8.输入若干个整数,且每个数均在1000至9999之间,按照每个数的后三位进行升序排序,若后三位相等,则按照原数据升序排序。
9.将字符串s所有的子串t用“copy”替换,并输出替换后的字符串。
10.判断一个整数是否是回文数。
所谓的回文数是指高位到地位与从低位到高位读取该数,得到的数是相同的数据。
例如:
1221,121是回文数。
1.输入一串可能包含空格的字符串,计算该字符串中数字(整数)的个数。
2.删除字符串中的数字字符
3.计算并输出high以内最大的10个素数之和。
4.A,B是两个整数集合,将A中和B相同的数据删除,并输出删除后的集合。
5.计算字符串s中含有字符串t的数目,并输出。
6.编程实现:
在已排好序的字符串中插入一个新的字符串,使插入后仍然有序,输出插入后的字符串。
7.在三位整数中寻找符合条件的整数,并依次有大到小存入数组,并输出,它既是完全平方数,又是两位数字相同。
8.判断一个整数是否是回文数。
所谓的回文数是指高位到地位与从低位到高位读取该数,得到的数是相同的数据。
例如:
1221,121是回文数。
9.找出200以内所有的完数,并输出其因子。
一个数若恰好等于它的各因子之和,称其为完数。
例如:
6=1+2+3,其中1、2、3为因子,6是因子和。
10.统计在字符串str中26个小写英文字母各自出现的次数。
C程序设计基础上机考试一
基本要求:
1)所有程序不能使用外部变量
2)子函数中不能出现数据的输入输出语句
3)每个程序至少包含两个函数定义(包括主函数)
1.输入一串字符(可能包含空格),计算输入的字符串中整数的个数并输出。
#include"stdio.h"
#include"string.h"
voidmain()
{
chara[100];intcount;
inttest1(chara[]);
printf("输入字符串:
\n");
gets(a);
count=test1(a);
printf("整数个数为:
%d\n",count);
}
inttest1(chara[])
{inti,j,n=0;
for(i=0;a[i]!
='\0';i++)
if(a[i]>='0'&&a[i]<='9')
{for(j=i+1;a[j]!
='\0';j++)
if(!
(a[j]>='0'&&a[j]<='9'))break;
n++;
i=j;
}
return(n);
}
2.输入一个字符串,对字符串相同的字符只保留一个(首次出现的字符)。
#include"stdio.h"
#defineN100
voidtest2(charss1[N])
{inti,j,k;
for(i=0;ss1[i]!
='\0';i++)
for(j=i+1;ss1[j]!
='\0';j++)
if(ss1[j]==ss1[i])
voidtest2(charss1[N])
{inti,j,k,n;
n=strlen(ss1);
for(i=0;ifor(j=i+1;jif(ss1[j]==ss1[i])
{for(k=j;kss1[k]=ss1[k+1];
j--;n--;
}
}
{for(k=j;ss1[k]!
='\0';k++)
ss1[k]=ss1[k+1];
j--;
}
}
voidmain()
{voidtest2(charss1[N]);
charss[N];
printf("inputastring\n");
gets(ss);
test2(ss);
printf("outputthestring\n");
printf("%s\n",ss);}
3.找出一个大于给定整数m且紧随m的素数。
素数:
只能被1或自身整除的整数。
判断整数n是否为素数——采用穷举法求解。
基本算法:
若m%i==0则说明m不是素数。
其中i的取值范围为:
2~m-1。
#include"stdio.h"
voidmain()
{intm,n;
inttest3(intm);
printf("inputanumber:
m\n");
scanf("%d",&m);
n=test3(m);
printf("thefollowingnumberis%d\n",n);
}
inttest3(intm)
{intt=0,i;
while(t!
=1)
{m=m+1;
i=m-1;
while(i>1)
{if(m%i!
=0)i--;
elsebreak;
}
if(i==1)t=1;/*说明m已除遍m-1至2,都除不尽,所以m是素数)*/
}
return(m);
}
4.统计老年人各年龄段(每10岁为一个年龄段)的人数并存到b数组中,n个人员的年龄放在a数组中。
#include"stdio.h"
#defineN10
#defineM10
voidtest4(inta[N],intb[M])
{inti,k;
for(i=0;i{k=a[i]/10;
b[k-6]++;
}
}
voidmain()
{inta[N],i;
intb[N]={0};
printf("inputage:
>60and<160");
for(i=0;i{scanf("%d",&a[i]);
if(a[i]<60||a[i]>160){printf("inputerror");i--;}
}
test4(a,b);
printf("\n");
for(i=0;iprintf("%d<=age<%d:
%d\n",(i+6)*10,(i+6+1)*10,b[i]);
}
5.计算并输出k以内最大的10个能被13或17整除的自然数之和。
#include"stdio.h"
inttest5(intk)
{intcount=0,sum=0;
while(count<10)
{if(k%13==0||k%17==0)
{count++;
sum=sum+k;
}
k--;
}
return(sum);
}
voidmain()
{
intk,x;
printf("输入数字k\n");
scanf("%d",&k);
x=test(k);
printf("%d以内的最大个能被或整除的自然数之和为%d\n",k,x);
}
6.读入一行英文文本,将其中每个单词的最后一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。
例如,若输入Iamastudenttotaketheexamination.,则应输出"IaMAstudenTtOtakEthEexamination."。
#include"stdio.h"
#include"string.h"
#defineM100
voidtest6(chara[])
{inti;
for(i=0;a[i]!
='\0';i++)
if(a[i]>='a'&&a[i]<='z'&&(a[i+1]==''||a[i+1]=='\0'))a[i]=a[i]-32;
}
voidmain()
{chara[M];
printf("pleaseinputthetext\n");
gets(a);
test6(a);
printf("%s",a);
}
7.求A、B两个整数数组数据的交集,并输出交集的数据。
/*交集就是二个数组中相同的元素。
算法是数组A每取一个元素,与数组B的所有元素相比,若相等,则将该元素存入第三个数组……*/
#include"stdio.h"
voidmain()
{inta[100],b[100],c[100];
inttext(inta[],intb[],intc[],intn1,intn2);/*函数声明*/
intn1,n2,n3,i;
printf("输入A组的个数:
");
scanf("%d",&n1);
printf("输入A组的元素:
");
for(i=0;iprintf("输入B组的个数:
");
scanf("%d",&n2);
printf("输入B组的元素:
");
for(i=0;in3=text(a,b,c,n1,n2);/*调用函数*/
printf("交集:
");
for(i=0;iprintf("%d",c[i]);
putchar('\n');
}
inttext(inta[],intb[],intc[],intn1,intn2)
{inti,j,n=0;
for(i=0;ifor(j=0;jif(a[i]==b[j])c[n++]=a[i];
return(n);
}
8.输入若干个整数,且每个数均在1000至9999之间,按照每个数的后三位进行升序排序,若后三位相等,则按照原数据升序排序。
#include"stdio.h"
voidmain()
{inta[80],i,j,k,n;
voidsort(inta[],intn);
printf("请输入数字的个数\n");
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
test8(a,n);
for(i=0;iprintf("%d",a[i]);
}
voidtest8(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+1;jif(a[i]%1000>a[j]%1000){t=a[i];a[i]=a[j];a[j]=t;}
elseif(a[i]%1000==a[j]%1000)
if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
9.将字符串s所有的子串t用“copy”替换,并输出替换后的字符串。
#include
#include
#defineM100
#defineN50
intSubString(charsub[],charS[],intpos,intlen)
{inti;
if(pos<1||pos>strlen(S)||len<0||len>strlen(S)-pos+1)
return-1;
for(i=0;isub[i]=S[i+pos-1];
sub[i]='\0';
return1;
}
intIndex(charS[],charT[],intpos)
{intm,n,i;charsub[N];
if(pos>0)
{n=strlen(S);m=strlen(T);i=pos;
while(i<=n-m+1)
{SubString(sub,S,i,m);
if(strcmp(sub,T)!
=0)++i;
elsereturni;
}
}
return0;
}
char*test9(chars1[],chars2[],chart[])
{inti,pos;chartemp[M];intm,n;chars[M]="";
m=strlen(s1);n=strlen(s2);i=1;pos=1;
while(pos<=m-n+1&&i)
{i=Index(s1,s2,pos);
if(i!
=0)
{SubString(temp,s1,pos,i-pos);
strcat(s,temp);
strcat(s,t);
pos=i+n;
}
}
SubString(temp,s1,pos,m-pos+1);//剩余串
strcat(s,temp);
returns;
}
voidmain()
{charstr1[M],str2[N],t[N]="copy",*str="";
printf("pleaseinputstring1\n");
gets(str1);
printf("pleaseinputstring2\n");
gets(str2);
str=test9(str1,str2,t);
printf("%s",str);
}
10.判断一个整数是否是回文数。
所谓的回文数是指高位到地位与从低位到高位读取该数,得到的数是相同的数据。
例如:
1221,121是回文数。
#include"stdio.h"
inttest1(intx)
{intc,t=0;
c=x;
while(c>0)
{t=t*10+c%10;
c=c/10;
}
if(t==x)
return1;
else
return0;
}
voidmain()
{inta,b=0;
printf("pleaseinputalongint\n");
scanf("%d",&a);
b=test1(a);
if(b==1)printf("%8dishuiwenshu",a);
elseprintf("%8disnotahuiwenshu",a);
}
C程序设计基础上机考试二
基本要求:
1)所有程序不准使用外部变量
2)子函数中不能出现数据的输入输出语句
3)每个程序至少包含两个函数模块
1.输入一串可能包含空格的字符串,计算该字符串中数字(整数)的个数。
#include"stdio.h"
#include"string.h"
voidmain()
{chara[100];intcount;
inttest1(chara[]);
printf("输入字符串:
\n");
gets(a);
count=test1(a);
printf("整数个数为:
%d\n",count);
}
inttest1(chara[])
{inti,j,n=0;
for(i=0;a[i]!
='\0';i++)
if(a[i]>='0'&&a[i]<='9')
{for(j=i+1;a[j]!
='\0';j++)
if(!
(a[j]>='0'&&a[j]<='9'))break;
n++;
i=j;
}
return(n);
}
2.删除字符串中的数字字符
/*算法:
对字符串中的每个元素进行判断是否为数字,若是,则将下一个字符移到该字符处,字符串长度-1,……*/
#include"stdio.h"
#include"string.h"
voidfun(ch)
charch[30];
{
inti,j,len=0;
len=strlen(ch);
printf("%d\n",len);
for(i=0;i{if(ch[i]>'0'&&ch[i]<'9')
{for(j=i;j{ch[j]=ch[j+1];
}
len--;
i=i-1;
ch[len]='\0';
}
}
}
voidmain()
{charch[30];inti;
printf("输入字符串:
");
gets(ch);
fun(ch);
printf("删除后的数据:
\n");
printf("%s",ch);
getch();
}
3.计算并输出high以内最大的10个素数之和。
#include
#include
#include
intfun(inth)
{intsum=0,n=0,j,yes;
while(h>=2&&n<10)
{yes=1;
for(j=2;j<=h/2;j++)
if(h%j==0)
{yes=0;continue;}
if(yes)
{sum+=h;n++;}
h--;
}return(sum);
}
main()
{inthigh;
printf("inputhigh",high);
scanf("%d",&high);
printf("%d\n",fun(high));
getch();}
4.已知A,B是两个整数集合,将A中和B相同的数据删除,并输出删除后的集合。
#include"stdio.h"
voidmain()
{inta[100],b[100],c[100];
inttext(inta[],intb[],intc[],intn1,intn2);
intn1,n2,n3,i;
printf("输入A组的个数:
");
scanf("%d",&n1);
printf("输入A组的元素:
");
for(i=0;iprintf("输入B组的个数:
");
scanf("%d",&n2);
printf("输入B组的元素:
");
for(i=0;in3=text(a,b,c,n1,n2);
printf("交集:
");
for(i=0;iprintf("%d",c[i]);
putchar('\n');
}
inttext(inta[],intb[],intc[],intn1,intn2)
{inti,j,n=0;
for(i=0;ifor(j=0;jif(a[i]==b[j])break;
c[n++]=a[i];
return(n);
}
5.计算字符串s中含有字符串t的数目,并输出。
#include"stdio.h"
intcount(charstr[],charsubstr[])
{intI,j,k,num=0;
for(I=0;str[I]!
='\0';I++)
for(j=I,k=0;substr[k]==str[j];k++,j++)
if(substr[k+1]=='\0'\*说明主串字符与子串相同*\
{num++;break;}
return(num);
}
voidmain()
{chars[80],t[80];
intn;
gets(s);gets(t);
printf("%d\n",count(s,t));
getch();}
6.编程实现:
在已排好序的字符串中插入一个新的字符串,使插入后仍然有序,输出插入后的字符串。
程序1:
sort(string2)
charstring2[80];
{chart;
inti,j,n;
n=strlen(string2);
for(i=0;ifor(j=0;jif(string2[j]>string2[j+1])
{t=string2[j];
string2[j]=string2[j+1];
string2[j+1]=t;
}
}
main()
{charstr1[80],str2[80],str[80];
inti,j,n;
printf("Enterstring1:
");gets(str1);
printf("Enterstring2:
");gets(str2);
sort(str2);
n=0;
for(i=0,j=0;str1[i]!
='\0'&&str2[j]!
='\0';)
if(str1[i]elsestr[n++]=str2[j++];
while(str1[i]!
='\0')str[n++]=str1[i++];
while(str2[j]!
='\0')str[n++]=str2[j++];
str[n]='\0';
printf("Result:
");puts(str);
getch();}
程序2:
main()
{charch[20],ch1[20];
printf("inputstring1:
");gets(ch);
printf("inputstring2:
");gets(ch1);
sort(ch,ch1);
puts(ch);
getch();
}
sort(a,s)
chara[20],s[20];
{
inti,j,k;
for(k=0;s[k]!
='\0';k++)
{j=0;
while(s[k]>=a[j]&&a[j]!
='\0')j++;
for(i=strlen(a)+k;i>=j;i--)a[i+1]=a[i];
a[j]=s[k];
}
}
7.在三位整数中寻找符合条件的整数,并依次有大到小存入数组,并输出,它既是完全平方数,又是两位数字相同。
intch(i