1 、编写函数,完成下面的程序,将一个字符串中的字母排序后输出。输出要求:字母从小到大排序(包括大小写)后的字符串。例如:
输入:Hello World!
输出:!HWdellloor
#include <stdio.h>
#include <string.h>
void sortchar(char s[]);
int main()
{
char s[80];
gets(s);
sortchar(s);
puts(s);
}
void sortchar(char s[])
{
int i,j,t;
unsigned long l;
l=strlen(s);
for (i=0; i<l-1; i++) {
for (j=0; j<l-i-1; j++) {
if (s[j]>s[j+1]) {
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
}
2、编写函数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函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号。
#include <stdio.h>
#include <string.h>
void 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]]);
}
void find_max(int a[][4],int n,int b[2])
{
int i,j,max;
max=a[0][0];
for (i=0; i<n; i++) {
for (j=0; j<4; j++) {
if (max<a[i][j]) {
max=a[i][j];
b[0]=i;
b[1]=j;
}
}
}
}
3、编写一个函数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
#include <stdio.h>
#include <string.h>
void 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]);
}
void 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]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
4、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。
#include <stdio.h>
#include <string.h>
#define M 100
int fun(int aa[],int n,int 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);
}
int fun(int aa[],int n,int y)
{
int i,j;
for (i=0; i<n; i++) {
if (y==aa[i]) {
n--;
for (j=i; j<n; j++) {
aa[j]=aa[j+1];
}
i--;
}
}
return n;
}
5、
编写函数 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
#include <stdio.h>
#include "string.h"
int substring(char s[],char sub[]);
int main(void)
{
char s[99],sub[99];
gets(s);
gets(sub);
if(substring(s,sub)==-1)
printf("%s子串没有找到!",sub);
else
printf("子串%s在主串%s中第一次出现的位置是%d",sub,s,substring(s,sub));
}
int substring(char s[],char sub[]){
int i,j,x=0;
unsigned long n=strlen(s),m=strlen(sub);
for (i=0; i<n; i++) {
if (s[i]==sub[0]){
x=1;
for (j=0; j<m; j++){
if (s[i+j]!=sub[j]) {
x=0;
break;
}
if (x==1)
return i+1;
}
}
}
return -1;
}
6、
输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a的每一行的最大元素值都相等, 输出"YES", 否则, 输出"NO"。
#include <stdio.h>
int find_max(int a[],int n);
int main(void)
{
int i,j,x=0,n,a[6][6],b[6];
scanf("%d",&n);
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
scanf("%d",&a[i][j]);}}
for (i=0; i<n; i++)
b[i]=find_max(a[i],n);
for (i=0; i<n-1; i++) {
if (b[i]==b[i+1]) {
x=1;
} else {
x=0;
break;
}}
if (x==1) {
printf("YES");
} else {
printf("NO");
}
}
int find_max(int a[],int n){
int max,i;
max=a[0];
for (i=0; i<n; i++) {
if (max<a[i]) {
max=a[i];
}
}
return max;
}
7、
对每个字符串做如下处理:删除字符串所有连续相同的字符,然后输出该字符串。
要求:使用函数void del_samechar(char str[])实现对字符串str中所有连续相同的字符的删除。
#include <stdio.h>
#include "string.h"
void del_samechar(char string[]);
int main(void)
{
char str[100];
gets(str);
del_samechar(str);
puts(str);
}
void del_samechar(char string[]){
int i = 0, j;
int found = 0;
unsigned long l=strlen(string);
while(i<l)
{
j = i + 1;
while(string[i] == string[j])
{
j++;
found = 1;
}
if(found)
{
strcpy(string + i, string + j);
if (i != 0)
i--;
found = 0;
}
else
i++;
}
}
8、
编写1个函数判断一个整数是否左右对称数。 要求函数为: fun(long n)
要求在主程序中输入一个整数,如果该数对称,输出"YES";否则,输出"NO"。
#include <stdio.h>
#include <string.h>
int fun(long n);
int main()
{ long in;
scanf("%ld",&in);
if(fun(in))
printf("YES\n");
else
printf("NO\n");
}
int fun(long n){
int a[20],i,l;
if(n==8&&n==0) return 1;
for (i=0; n!=0; i++) {
a[i]=n%10;
n=n/10;
}
l=i;
for (i=0; i<l; i++) {
if (a[i]!=a[l-i-1])
return 0;
}
return 1;
}
9、
编写函数long compose(long number)完成如下功能:将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,假设长整型数为:87653142时,则返回的数为:8642。
然后在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果。
#include <stdio.h>
#include <string.h>
#include <math.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 i,a[20],l;
for (i=0; number!=0; ) {
if (number%2==0) {
a[i]=number%10;
i++;
number=number/10;
}else
number=number/10;
}
l=i;
for (i=0; i<l; i++) {
number=number+a[i]*pow(10, i);
}
return number;
}
10、
编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果。
输入要求:任意一个字符串。
#include <stdio.h>
#include <string.h>
#include <math.h>
void counta_z(char str[],int count[]);
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]);
}
void counta_z(char s[],int count[]){
int i;
for (i=0; s[i]!='\0'; i++) {
if(s[i]>='a'&&s[i]<='z')
count[s[i]-'a']++;
if(s[i]>='A'&&s[i]<='Z')
count[s[i]-'A']++;
}
}
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 n, i, j;
scanf("%d", &n);
for (i = 2; i <= n/2; i++) {
if (prime(i) == 1 && prime(n - i) == 1) {
printf("%d =%d+%d\n", n, i, n-i);
}
}
}
int prime(int n) {
int i;
if (n == 2) return 1;
if (n>2)
{
for ( i = 2; i <n-1; i++)
{
if (n%i==0) return 0;
}
return 1;
}
}