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++ ] ] ++; /* 将字符作为下标*/ }