编程题
1、部分字符串复制
【问题描述】
有一个字符串,包含n个字符,写一个函数,将此字符串中从第m个字符开始的全部字符复制为另一个字符串。并编写主函数,输入字符串和一个整数,调用copystr()完成部分复制,在主函数中输出复制结果。
函数原型为void copystr(char *,char *,int );
【输入形式】键盘输入分两行,第一行输入一个字符串,第二行输入一个整型数
【输出形式】输出复制结果
【样例输入】
qwertyuiop
3
【样例输出】
result:ertyuiop
【样例说明】
//第二组数据
qwert
6
第二组数据输出
input error!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void copystr(char *a,char *b,int n)
{a=a+(n-1);while(*a!='\0'){*b=*a;a++;b++;}
}
int main()
{unsigned int n;char a[100]={'\0'},b[100]={'\0'};fgets(a,100,stdin);scanf("%d",&n);if(n>=strlen(a)){printf("input error!\n");}else{copystr(a,b,n);printf("result:%s\n",b);}return 0;
}
2、指针的运用:定义函数,实现冒泡法排序
【问题描述】编写函数,使用指针实现冒泡法排序。数据输入输出在主函数中完成
【输入形式】一维数组,6个int型数
【输出形式】输出按由小到大的排序结果
【样例输入】34 78 -123 41 90 19
【样例输出】-123 19 34 41 78 90
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void px(int *p)
{int i,j,t;for(i=5;i>0;i--){for(j=0;j<5;j++){if(*(p+j)>*(p+1+j)){t=*(p+j);*(p+j)=*(p+1+j);*(p+1+j)=t;}}}
}
int main()
{int a[6],i;for(i=0;i<6;i++){scanf("%d",&a[i]);}px(a);for(i=0;i<6;i++){printf("%d ",a[i]);}printf("\n");return 0;
}
3、矩阵转置
【问题描述】
编写函数,实现将一个3×3的矩阵转置。
矩阵输入及输出都在主函数中完成。
【输入形式】输入一个3×3的矩阵
【输出形式】输出转置矩阵,数据间空格间隔,每行最后一个数据后无空格
【样例输入】
12 56 84
74 85 92
23 56 94
【样例输出】
12 74 23
56 85 56
84 92 94
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void zz(int (*p)[3])
{int i,j,t;for(i=0;i<3;i++){for(j=0;j<i;j++){t=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=t;}}
}
int main()
{int i,j;int a[3][3];for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&a[i][j]);}}zz(a);for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n\n");}return 0;
}
4、从字符串中删除某个字符
【问题描述】
编写把字符串str中指定字符删除的函数和主函数。
函数原型为:
void DeleteChar(char *str,char c);
【输入形式】
输入分两行,第一行:一个字符串
第二行:要删除的一个字符
【输出形式】已删除指定字符后的字符串
【样例输入】
asddde
d
【样例输出】
ase
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void DeleteChar(char *str,char c)
{unsigned int i,j=0;char a[100];for(i=0;i<strlen(str);i++){if(str[i]!=c){a[j]=str[i];j++;}}a[j]='\0';strcpy(str,a);
}
int main()
{char str[100],c;fgets(str,100,stdin);scanf("%c",&c);DeleteChar(str,c);printf("%s",str);return 0;
}
程序片段编程题
1、程序填空:字符串中找最大字符并按要求处理
【问题描述】在字符串str中找出最大的字符放在第一个位置上,并将该字符前的原字符往后顺序移动,如"fdswab"变成"wfdsab"。
【输入形式】一个字符串
【输出形式】按要求处理后的字符串
【样例输入】fdswab
【样例输出】wfdsab
#include<stdio.h>
#include<string.h>
int main()
{char str[80], *p, max, *q;p = q = str;gets(p);max = *p;while(*p != '\0'){if(max < *p){max = *p;q=p ;}p++;}p = q;while( p>str ){*p = *(p-1);p-- ;}*p = max;puts(p);return 0;
}
2、程序填空:判断回文字符串
【问题描述】
函数int fun(char *s),判断输入的字符串是否是回文字符串。若是回文串,函数返回1;否则函数返回0。
注:字符串顺读和倒读都一样,则是回文。如"asxsa"是回文串,"asxdsa"不是回文串。
【输入形式】一个字符串
【输出形式】是回文串输出yes,否则输出no
【样例输入】asdsa
【样例输出】yes
#include <stdio.h>
#include <string.h>
int fun(char *s)
{char *p, *q;int n;n=strlen(s);q=&s[n-1]; for (p=s; p<=q; q--, p++ ) if (*p!=*q)break;if (p<=q ) return 0;elsereturn 1;
}
int main()
{char a[80] = "\0";scanf("%s", a);if ( fun(a)==1) printf("yes"); else printf("no");return 0;
}
3、程序填空:数组排序
【问题描述】将array数组按从小到大进行排序
【输入形式】一维数组各元素的值
【输出形式】按由小到大排列的一维数组各元素的值
【样例输入】10 9 8 7 6 5 4 3 2 1
【样例输出】1 2 3 4 5 6 7 8 9 10
#include <stdio.h>
int main()
{int a[10];int i,j,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=i+1;j<10;j++)if(a[i]>a[j] ) {temp=a[i];a[i]=a[j] ; a[j]=temp;}for(i=0;i<10;i++)printf("%d ",a[i]);return 0;
}
4、程序填空:求矩阵a,b的乘积
【问题描述】以下程序是求矩阵a,b的乘积,结果存入矩阵c中并按矩阵形式输出。
【输入形式】无
【输出形式】矩阵a,b的乘积,按行输出
【样例输入】无
【样例输出】
22 -28
28 -36
13 -17
#include <stdio.h>
int main()
{int a[3][2] = {{2,-1},{4,0},{3,1}};int b[2][2] = {{7,-9},{-8,10}};int i, j, k, s, c[3][2];for(i=0;i<3;i++)for(j=0;j<2;j++){for( k=s=0;k<2;k++) s += a[i][k]*b[k][j]; c[i][j] = s;}for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%d ",c[i][j]);printf("\n");}return 0;
}
5、程序填空:求一维数组a中偶数的个数和偶数的平均值
【问题描述】设数组a中的元素均为正整数,程序片段是求a中偶数的个数和偶数的平均值。
【输入形式】一个数组的元素值
【输出形式】偶数个数 平均值
【样例输入】1 2 3 4 5 6 7 8 9 10
【样例输出】5 6.0
#include <stdio.h>
int main()
{int k,s,i;float ave;int a[10] ;for (i=0;i<10;i++){scanf("%d", &a[i]); }for(k=s=i=0;i<10;i++){if(a[i]%2!=0){ continue ; }s += a[i];k++;}if(k!=0){ave=(float)s/k;printf("%d %.1f\n",k,ave);}return 0;
}
6、程序填空:求二维数组a中的最大值与b中的最大值之差
【问题描述】求二维数组a中的最大值与b中的最大值之差。
【输入形式】按行输入二维数组a和数组b中各元素的值,第一个数组为5*5,第二个数组为6*4
【输出形式】数组a与数组b中最大值的差
【样例输入】
3 1 9 8 6
1 3 8 11 34
6 23 98 4 2
3 4 0 8 3
4 2 5 2 78
1 3 9 8
4 3 2 97
3 4 56 2
2 54 33 4
5 9 9 8
5 5 53 4
【样例输出】
1.0
#include<stdio.h>
float find_max(float *x[],int m,int n)
{int i,j;float max = **x;for(i=0;i<m;i++)for(j=0;j<n;j++){ if(*(*(x+i)+j)>max){max = x[i][j];}}return max;
}
int main()
{float a[5][5],b[6][4], *pa[5],*pb[6]; //定义相应的两个指针数组int i,j;for(i=0;i<5;i++){ pa[i]=a[i]; }for(i=0;i<6;i++){ pb[i]=b[i]; }for(i=0;i<5;i++)for(j=0;j<5;j++){ scanf("%f",&a[i][j]); }for(i=0;i<6;i++)for(j=0;j<4;j++){ scanf("%f",&b[i][j]); }printf("%.1f\n",find_max(pa,5,5)-find_max(pb,6,4));return 0;
}
7、程序填空:输出两个整数中最大数
【问题描述】功能:输出两个整数中的最大数,两个整数由键盘输入。
【输入形式】两个整数
【输出形式】两个整数中大的那个数
【样例输入】1 2
【样例输出】max=2
#include <stdio.h>
#include <stdlib.h>
int main()
{int *p1,*p2;p1=(int *)malloc(sizeof(int)); //动态存储区分配 p2=(int *)malloc(sizeof(int)); //动态存储区分配 scanf("%d%d", p1 ,p2);if(*p2>*p1) { *p1=*p2; }free(p2);printf("max=%d\n",*p1);free(p1);return 0;
}
8、程序填空:求数组中前n个元素中的最大元素的值及位置
【问题描述】程序中的函数 int find(int a[], int n, int *k)的功能是:求一维数组a的前n个元素中的最大元素的值及其所在的位置,并把它们返回给主调函数。
【输入形式】一维整型数组各元素的值
【输出形式】最大元素的值及其位置
【样例输入】3 9 4 1 7 6 -10 10 -5 2
【样例输出】最大值=10, 最大值是数组a的第8个元素
#include <stdio.h>
int main()
{int i,k,max;int find(int a[], int n, int *k);int a[10];for(i=0; i<10; i++){ scanf("%d", &a[i]); }max=find(a,10,&k);printf("最大值=%d, 最大值是数组a的第%d个元素\n", max, k+1);return 0;
}int find(int a[], int n, int *k)
{int i, max;max=a[0]; *k=0;for(i=1; i<n; i++)if(a[i]>max){max=a[i]; *k=i;}return max;
}