当前位置:文档之家› c语言程序设计基础上机考试一题目及参考答案 (1)

c语言程序设计基础上机考试一题目及参考答案 (1)

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"

void main()

{

char a[100];int count;

int test1(char a[]);

printf("输入字符串:\n");

gets(a);

count=test1(a);

printf("整数个数为:%d\n",count);

}

int test1(char a[])

{ int i,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"

#define N 100

void test2(char ss1[N])

{int i,j,k;

for(i=0;ss1[i]!='\0';i++)

for(j=i+1;ss1[j]!='\0';j++)

if(ss1[j]==ss1[i])

{for(k=j;ss1[k]!='\0';k++)

ss1[k]=ss1[k+1];

j--;

}

}

void main()

{void test2(char ss1[N]);

char ss[N];

printf("input a string\n");

gets(ss);

test2(ss);

printf("output the string\n");

printf("%s\n",ss);}

3.找出一个大于给定整数m且紧随m的素数。

素数:只能被1或自身整除的整数。

判断整数n是否为素数——采用穷举法求解。

基本算法:若 m%i==0 则说明m 不是素数。其中 i的取值范围为:2~m-1。#include"stdio.h"

void main()

{ int m,n;

int test3(int m);

printf("input a number:m\n");

scanf("%d",&m);

n=test3(m);

printf("the following number is %d\n",n);

}

int test3(int m)

{int t=0,i;

while (t!=1)

{ m=m+1;

i=m-1;

while(i>1)

{ if(m%i !=0) i--;

else break;

}

if (i==1) t=1; /*说明m已除遍m-1至2,都除不尽,所以m是素数)*/

}

return(m);

}

4.统计老年人各年龄段(每10岁为一个年龄段)的人数并存到b数组中,n个人员的年龄放在a数组中。

#include"stdio.h"

# define N 10

# define M 10

void test4(int a[N],int b[M])

{int i,k;

for(i=0;i

{ k=a[i]/10;

b[k-6]++;

}

}

void main()

{int a[N],i;

int b[N]={0};

printf("input age:>60and <160");

for(i=0;i

{scanf("%d",&a[i]);

if (a[i]<60||a[i]>160){ printf("input error");i--;}

}

test4(a,b);

printf("\n");

for(i=0;i

printf("%d<=age<%d:%d\n ",(i+6)*10,(i+6+1)*10,b[i]);

}

5.计算并输出k以内最大的10个能被13或17整除的自然数之和。

#include"stdio.h"

int test5(int k)

{int count=0,sum=0;

while(count<10)

{if(k%13==0||k%17==0)

{count++;

sum=sum+k;

}

k--;

}

return(sum);

}

void main()

{

int k,x;

printf("输入数字k\n");

scanf("%d",&k);

x=test(k);

printf("%d以内的最大个能被或整除的自然数之和为%d\n",k,x);

}

6.读入一行英文文本, 将其中每个单词的最后一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。

例如, 若输入I am a student to take the examination.,则应输出"I aM A studenT tO takE thE examination."。

#include"stdio.h"

#include"string.h"

#define M 100

void test6(char a[])

{int i;

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;

}

void main()

{char a[M];

printf("please input the text\n");

gets(a);

test6(a);

printf("%s",a);

}

7.求A、B两个整数数组数据的交集,并输出交集的数据。

/*交集就是二个数组中相同的元素。算法是数组A每取一个元素,与数组B的所有元素相比,若相等,则将该元素存入第三个数组……*/

#include"stdio.h"

void main()

{ int a[100],b[100],c[100];

int text(int a[],int b[],int c[],int n1,int n2);/*函数声明*/

int n1,n2,n3,i;

printf("输入A组的个数:");

scanf("%d",&n1);

printf("输入A组的元素:");

for (i=0;i

printf("输入B组的个数:");

scanf("%d",&n2);

printf("输入B组的元素:");

for (i=0;i

n3=text(a,b,c,n1,n2); /*调用函数*/

printf("交集:");

for (i=0;i

printf("%d ",c[i]);

putchar('\n');

}

int text(int a[],int b[],int c[],int n1,int n2)

{ int i,j,n=0;

for (i=0;i

for (j=0;j

if (a[i]==b[j]) c[n++]=a[i];

return(n);

}

8.输入若干个整数,且每个数均在1000至9999之间,按照每个数的后三位进行升序排序,若后三位相等,则按照原数据升序排序。

#include"stdio.h"

void main()

{ int a[80],i,j,k,n;

void sort(int a[],int n);

printf("请输入数字的个数\n");

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

test8(a,n);

for (i=0;i

printf("%d ",a[i]);

}

void test8(int a[],int n)

{ int i,j,t;

for (i=0;i

for (j=i+1;j

if (a[i]%1000>a[j]%1000) {t=a[i];a[i]=a[j];a[j]=t;}

else if (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

#define M 100

#define N 50

int SubString(char sub[],char S[], int pos, int len )

{ int i;

if(pos<1||pos>strlen(S)|| len<0 || len>strlen(S)-pos+1)

return -1;

for(i=0;i

sub[i]=S[i+pos-1];

sub[i]='\0';

return 1;

}

int Index (char S[], char T[], int pos)

{int m,n,i;char sub[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 ;

else return i ;

}

}

return 0;

}

char *test9(char s1[], char s2[], char t[])

{int i,pos; char temp[M];int m,n;char s[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);

return s;

}

void main()

{char str1[M],str2[N],t[N]="copy",*str="";

printf("please input string1\n");

gets(str1);

printf("please input string2\n");

gets(str2);

str=test9(str1,str2,t);

printf("%s",str);

}

10.判断一个整数是否是回文数。所谓的回文数是指高位到地位与从低位到高位读取该数,得到的数是相同的数据。例如:1221,121是回文数。

#include"stdio.h"

int test1(int x)

{int c,t=0;

c=x;

while(c>0)

{ t=t*10+c%10;

c=c/10;

}

if(t==x)

return 1;

else

return 0;

}

void main()

{int a,b=0;

printf("please input a long int\n");

scanf("%d",&a);

b=test1(a);

if (b==1) printf("%8d is huiwenshu",a);

else printf("%8d is not a huiwenshu",a);

}

C程序设计基础上机考试二

基本要求:

1)所有程序不准使用外部变量

2)子函数中不能出现数据的输入输出语句

3)每个程序至少包含两个函数模块

1.输入一串可能包含空格的字符串,计算该字符串中数字(整数)的个数。

#include "stdio.h"

#include "string.h"

void main()

{ char a[100];int count;

int test1(char a[]);

printf("输入字符串:\n");

gets(a);

count=test1(a);

printf("整数个数为:%d\n",count);

}

int test1(char a[])

{ int i,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"

void fun(ch)

char ch[30];

{

int i,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';

}

}

}

void main()

{ char ch[30]; int i;

printf("输入字符串:");

gets(ch);

fun(ch);

printf("删除后的数据:\n");

printf("%s",ch);

getch();

}

3.计算并输出high以内最大的10个素数之和。#include

#include

#include

int fun( int h )

{ int sum = 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 ( )

{ int high;

printf("input high",high) ;

scanf("%d",&high) ;

printf("%d\n", fun (high));

getch();}

4.已知A,B是两个整数集合,将A中和B相同的数据删除,并输出删除后的集合。

#include"stdio.h"

void main()

{ int a[100],b[100],c[100];

int text (int a[],int b[],int c[],int n1,int n2);

int n1,n2,n3,i;

printf("输入A组的个数:");

scanf("%d",&n1);

printf("输入A组的元素:");

for (i=0;i

printf("输入B组的个数:");

scanf("%d",&n2);

printf("输入B组的元素:");

for (i=0;i

n3=text (a,b,c,n1,n2);

printf("交集:");

for (i=0;i

printf("%d ",c[i]);

putchar('\n');

}

int text (int a[],int b[],int c[],int n1,int n2)

{ int i,j,n=0;

for (i=0;i

for (j=0;j

if (a[i]==b[j]) break;

c[n++]=a[i];

return(n);

}

5.计算字符串s中含有字符串t的数目, 并输出。

#include "stdio.h"

int count(char str[],char substr[])

{int I,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);

}

void main()

{ char s[80],t[80];

int n;

gets(s); gets(t);

printf("%d\n",count(s,t));

getch();}

6.编程实现:在已排好序的字符串中插入一个新的字符串,使插入后仍然有序,输出插入后的字符串。

程序1:

sort(string2 )

char string2[80];

{char t;

int i, j, n;

n = strlen ( string2);

for ( i=0; i

if ( string2[j] > string2[j+1] )

{ t = string2[j];

string2[j] = string2[j+1];

string2[j+1] = t;

}

}

main ( )

{ char str1[80], str2[80], str[80];

int i, j, n;

printf ("Enter string1:"); gets ( str1 );

printf ("Enter string2:"); gets ( str2);

sort(str2);

n = 0;

for ( i=0,j=0; str1[i]!='\0' && str2[j]!='\0'; )

if ( str1[i] < str2[j] ) str[n++] = str1[i++];

else str[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()

{char ch[20],ch1[20];

printf("input string 1:") ; gets(ch);

printf("input string 2:"); gets(ch1);

sort(ch,ch1);

puts(ch);

getch();

}

sort( a,s)

char a[20],s[20];

{

int i, 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.在三位整数中寻找符合条件的整数,并依次有大到小存入数组,并输出,它既是完全平方数,又是两位数字相同。

int ch(int);

int main(void)

{

int i;

for (i=10;i*i<1000;i++)

if (ch(i*i)) printf("%d\n",i*i); getch();

return 0;

}

int ch(int n)

{

char a[4];

sprintf(a,"%d",n);

if (a[0]==a[1]||a[1]==a[2]||a[2]==a[0]) return ;

else

return 0;

}

8.判断一个整数是否是回文数。所谓的回文数是指高位到地位与从低位到高位读取该数,得到的数是相同的数据。例如:1221,121是回文数。

#include"stdio.h"

int test1(int x)

{int c,t=0;

c=x;

while(c>0)

{ t=t*10+c%10;

c=c/10;

}

if(t==x)

return 1;

else

return 0;

}

void main()

{int a,b=0;

printf("please input a long int\n");

scanf("%d",&a);

b=test1(a);

if (b==1) printf("%8d is huiwenshu",a);

else printf("%8d is not a huiwenshu",a);

}

9.找出200以内所有的完数,并输出其因子。一个数若恰好等于它的各因子之和,称其为完数。例如:6=1+2+3,其中1、2、3为因子,6是因子和。

#include "stdio.h"

main()

{ int m,i,s;

for(m=1;m<=200;m++)

{

if(m==inzi(m))

printf("%d ",m);

}

getch();

}

inzi(m)

int m;

{int i ,s=0 ;

for(i=1;i

if(m%i==0)

s=s+i;

return (s) ;}

10.统计在字符串str中26个小写英文字母各自出现的次数。#include

/* 统计数组,初始化时全为 0 */

main ( )

{ int k;

char line[200]; int count[128]={0};

printf ("\nEnter String:");

gets (line);

tj(line,count);

for (k=0;k<=127;k++)/*输出统计结果不为0的字符 */

if ( count[k]>0 ) printf ("%c=%d\t", k,count[k]); getch();}

tj(line,count)

char line[200];

int count[128];

{int k=0;

while ( line[k] != '\0' )/* 对字符进行统计 */

count [ line[ k++ ] ] ++; /* 将字符作为下标*/

}

相关主题
文本预览
相关文档 最新文档