1.编写函数,完成下面的程序,将一个字符串中的字母排序后输出。输出要求:字母从小到大排序(包括大小写)后的字符串。例如:
输入:Hello World!
输出:!HWdellloor
程序中的必要代码为:
main()
{
char s[80];
gets(s);
sortchar(s);
puts(s);
}
#include<stdio.h>
#include<string.h>
void sortchar(char s[])
{int n;
n=strlen(s);
int min,t,i,j;
for(i=0;i<n-1;i++) 【选择排序】
{ min=i;
for(j=i+1;j<n;j++)
{if(s[min]>s[j])
min=j;
}
t=s[i]; 【符号记清楚啊】
s[i]=s[min];
s[min]=t;}
}
int main()
{char s[80];gets(s);sortchar(s);puts(s);}
2.请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。
程序的必要代码为:
int main()
{ int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;
scanf("%d",&y);n = fun(aa, n, y);for(k=0; k<n; k++ )printf("%d ",aa[k]);printf("\n");
return(0);
}
#include<stdio.h>
#define M 15
int fun(int aa[],int n,int y)
{ int j,i,k;
for(i=0;i<n;i++)if(aa[i]==y){ for(k=i+1;k<n;k++) 【删除y】{aa[k-1]=aa[k];}n--;i--;
}
return n;
}int main(){ int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;scanf("%d",&y);n=fun(aa, n, y);for(k=0; k<n; k++ ) printf("%d ",aa[k]);printf("\n");return(0);
}
- 编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果。
输入要求:任意一个字符串。
程序的必要代码为:
main()
{ char str[255];
int count[26]={0};int i;gets(str);counta_z(str,count);for(i=0;i<26;i++)if(count[i])printf("%c出现的次数为:%d\n",i+'a',count[i]);
}
#include<stdio.h>
void counta_z(char str[],int count[]) 加一下[]
{ int i;for(i=0;str[i]!='\0';i++) 这个里面不用输入str,也不用设count{if(str[i]>='a'&&str[i]<='z')count[str[i]-'a']++;if(str[i]>='A'&&str[i]<='Z')count[str[i]-'A']++; }
}int main()
{char str[255];int count[26]={0};int i;gets(str);counta_z(str,count);for(i=0;i<26;i++)if(count[i])printf("%c出现的次数为:%d\n",i+'a',count[i]);
}
4.编写一个函数char my_toupper(char ch),其功能是判断输入字符是否为小写字母,若是,返回其对应的大写字母,否则返回原字符。然后在main函数中输入一个字符,调用该函数得到其大写字母或原字符并输出。
程序的必要代码为:
void main()
{ char ch;
ch=getchar();putchar(my_toupper(ch));
}
#include<stdio.h>
char my_toupper(char ch)
{
if(ch>='a'&&ch<='z')
return ch-32;else
return ch;}
void main()
{ char ch;ch=getchar();putchar(my_toupper(ch));}
5.写两个函数,分别求两个整数的最大公约数和最小公倍数
,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
程序的必要代码为:
main( )
{ int u,v,h,x;
scanf("%d%d",&u,&v);
h=hcf(u,v);
printf(“H.C.F=%d\n”,h);
x=lcd(u,v,h);
printf(“L.C.D=%d\n”,x);
}
#include<stdio.h>
int hcf(int u,int v);
int lcd(int u,int v,int h);
int main( ){ int u,v,h,x;scanf("%d%d",&u,&v);h=hcf(u,v);printf("H.C.F=%d\n",h); x=lcd(u,v,h);printf("L.C.D=%d\n",x);}int hcf(int u,int v){ int i,h;h=u<v?u:v; 先取小的那个,一直往下除直到除尽为止while(u%h!=0||v%h!=0)h--;return h;}int lcd(int u,int v,int h){ int x;x=u*v/h; 乘积除以最大公约数就是最小公倍数return x;}
6.编写函数int reverse(int number),它的功能是将number逆序,在main函数中输入一个整数,调用该函数得到逆序的数并输出。例如reverse(11233)的返回值为33211。
#include <stdio.h>
int reverse(int number);
void main()
{ int number;
scanf("%d",&number);
printf("%d", reverse(number) );
}
int reverse(int number){int sum=0;while(number>0){sum=sum*10+number%10;number=number/10;}
return sum;
}
7.编写函数 int substring(char s[], char sub[]),查找sub串在字符串s中第一次出现的位置,若找到,函数返回对应位置,否则返回-1。注意主串第1个字符的位置为1。例如s串为“abcdefg”,sub串为“def”,则返回值为4。在main函数中输入主串和子串,调用该函数并输出结果。
输入要求:需要2行。第1行输入主串s,第2行输入子串sub。
示例如下:
abcdefgdefg
def
输出要求:根据实际情况输出子串的位置或提示“***子串没有找到!”(其中***要用实际的子串替代)
示例如下:
子串def在主串abcdefgdefg中第一次出现的位置是4
程序的必要代码为:
void main(void)
{
char s[99],sub[99];gets(s);gets(sub);if(substring(s,sub)==-1)printf("%s子串没有找到!",sub);elseprintf("子串%s在主串%s中第一次出现的位置是%d",sub,s,substring(s,sub));
}
8.编写函数void find_max( int a[][4], int n, int b[2]) 求出二维整型数组中元素的最大值及其下标号。在main函数中输入一个二维数组,调用函数find_max()求出最大值及其下标号,在主函数中输出。其中:二维数组行数由用户确定(不超过10),列数固定为4列。
输入要求:第1行输入二维数组的行数,然后分m行输入二维数组,元素之间用空格分隔。示例如下:
3
18 2 3 4
8 7 6 18
9 10 11 12
输出要求:第一个最大值及下标。示例如下:
最大值array[0][0]=18
提示:这里至少需要返回二维数组元素的行,列两个值,而函数只能返回1个值(无法返回2个值),所以只能通过数组作为参数的方法将值带回来。在main函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号。
程序的必要代码为:
main()
{
int array[10][4],m[2],n,i,j;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<4;j++)scanf("%d",&array[i][j]);find_max(array,n,m);printf("最大值array[%d][%d]=%d",m[0],m[1],array[m[0]][m[1]]);
}
#include<stdio.h>
int find_max( int a[][4], int n, int b[2]);
int main()
{int array[10][4],m[2],n,i,j;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<4;j++)scanf("%d",&array[i][j]);find_max(array,n,m);printf("最大值array[%d][%d]=%d",m[0],m[1],array[m[0]][m[1]]);}int find_max( int a[][4], int n, int b[2])
{ int i,j,k,t;int max=0;for(i=0;i<n;i++){for(j=0;j<4;j++){ if(a[i][j]>max)max=a[i][j]; }
}for(i=n-1;i>=0;i--) 【既然只要前面的,那就从后往前找最后一个】for(j=3;j>=0;j--)if(max==a[i][j]) 【俩等号,你是瞎子吗】{ k=i;t=j;} b[0]=k;b[1]=t;}
9.编写一个函数void sort(int a[],int n),实现整型数组元素的升序排列。在main函数中输入数组元素个数和各个元素(不超过10个整数),之后调用sort函数进行排序,在主函数中输出排序后的结果。
输入要求:需要输入2行。第1行输入数组元素的个数n;第2行输入n个数组元素。
输入示例:
5
1 9 4 5 7
输出要求:输出2行。第1行为未排序的数组,每个数值之后都用1个空格分隔;第2行为升序排序后的数组,每个数值之后都用1个空格分隔。
输出示例:
排序之前的数组:1 9 4 5 7
排序之后的数组:1 4 5 7 9
程序的必要代码为:
main()
{
int a[10],i,n;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);printf("排序之前的数组:");for(i=0;i<n;i++)printf("%d ",a[i]);sort(a,n);printf("\n排序之后的数组:");for(i=0;i<n;i++)printf("%d ",a[i]);
}
#include<stdio.h>
int sort(int a[],int n);
int main()
{int a[10],i,n;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);printf("排序之前的数组:");for(i=0;i<n;i++)printf("%d ",a[i]);sort(a,n);printf("\n排序之后的数组:");for(i=0;i<n;i++)printf("%d ",a[i]);
}int sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++) 【冒泡排序】if(a[j+1]<=a[j]) 【比的是j】{t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
10.编写函数long compose(long number)完成如下功能:将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,假设长整型数为:87653142时,则返回的数为:8642。
然后在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果。
程序的必要代码为:
int main()
{
long int n ;
scanf("%ld",&n);
printf("%ld\n",compose(n));
return 0;
}
#include<stdio.h>
long compose(long number);
int main()
{long int n ;scanf("%ld",&n);printf("%ld\n",compose(n));return 0;}
long compose(long number)
{ int h=1,i,t;long int s=0; while(number!=0){ t=number%10;number=number/10;i=t%2;if(i==0){s=s+t*h;h=h*10;}}return s;
}
11.输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a的每一行的最大元素值都相等, 输出"YES", 否则, 输出"NO"。
例:输入:
3
-1 -2 -3
-10 -2 -1
-8 -1 -2
输出:
YES
#include<stdio.h>
int max(int a[6][6],int n);
int main()
{ int a[6][6];
int n,m;
scanf("%d\n",&n);
int i,j;
for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);m=max(a,n);if(m==1)printf("YES");elseprintf("NO"); } int max(int a[6][6],int n){int i,j,k=0,t;int max[6];for(i=0;i<n;i++){ max[i]=a[i][0]; for(j=0;j<n;j++){if(a[i][j]>max[i]){max[i]=a[i][j];}} } for(i=0;i<n-1;i++){if(max[i]==max[i+1])k++;}t=k+1;if(t==n)return 1;else return 0;}
11.输入一个大于等于6的偶数,将它表示为两个素数之和(输出所有的组合)。
要求:用自定义函数int prime(int n)来判断n是否为素数。
例如:输入10
输出:10=3+7
10=5+5
#include<stdio.h>
#include<math.h>
int prime(int n);
int main()
{ int i,k,t;int num;scanf("%d",&num);for(i=3;i<=num/2;i++){ k=prime(i);t=prime(num-i);if(k+t==2)printf("%d=%d+%d",num,i,num-i);}
}
int prime(int n)
{ int m;m=sqrt(n);int i;for(i=2;i<=m;i++) 【判断素数 i从2开始 小于等于号】{if(n%i==0)break;}if(i>m)return 1;else return 0;}
12.编写1个函数判断一个整数是否左右对称数。 要求函数为: fun(long n)
要求在主程序中输入一个整数,如果该数对称,输出"YES";否则,输出"NO"。
例如 输入:1235321 输出:YES
输入: 1210 输出:NO
程序的必要代码为:
main( )
{ long in;
scanf("%ld",&in);if(fun(in)) printf("YES\n");elseprintf("NO\n");
}
#include<stdio.h>
long fun(long n);
int main()
{ long in; scanf("%ld",&in);if(fun(in)) printf("YES\n");elseprintf("NO\n");}long fun(long n){ int i=0,t;long m=0;long j=n;while(n!=0){m=m*10+n%10;n=n/10;}if(m==j)return 1;else return 0;
}
13对每个字符串做如下处理:删除字符串所有连续相同的字符,然后输出该字符串。
要求:使用函数void del_samechar(char str[])实现对字符串str中所有连续相同的字符的删除。
例:输入:room 输出:rm
输入:aabaaama 输出:bma
程序的必要代码为:
main()
{ char str[100];
gets(str);del_samechar(str);puts(str);
}
、程序题章节:第八章 指针知识点:无所属语言:C试题难度:一般
输入多行字符串(有可能有空格),最后一行为#号作为结束,按照由小到大的顺序将字符串分行输出(不输出"#")。
例如输入:
I study very hard.
C language is very interesting
He is a professfor.
输出:
C language is very interesting
He is a professfor.
I study very hard.