C、C++编程题目和代码2 - 图文

更新时间:2024-05-05 05:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

节 1.01 数组应用:矩阵乘法 ................................................................................................ 2 节 1.02 输出指定范围内的同时是素数与回文数的数 ........................................................ 3 节 1.03 求平均值 .................................................................................................................... 4 节 1.04 统计大于等于0的元素 ............................................................................................ 5 节 1.05 斐波那契数列(不用函数) .................................................................................... 5 节 1.06 兑换零钱 .................................................................................................................... 6 节 1.07 输出杨辉三角形 ...................................................................................................... 11 节 1.08 鞍点 .......................................................................................................................... 12 节 1.09 求矩阵每一列的最大值与和 .................................................................................. 15 节 1.10 求矩阵中主对角线与副对角线的和 ...................................................................... 16 节 1.11 字符串大小的比较 .................................................................................................. 17 节 1.12 字符串排序 .............................................................................................................. 18 节 1.13 插入一个数 .............................................................................................................. 20 节 1.14 按绝对值大小顺序输出 .......................................................................................... 21 节 1.15 发工资 ...................................................................................................................... 22 节 1.16 成绩处理 .................................................................................................................. 24 节 1.17 复制字符串(函数) .............................................................................................. 27 节 1.18 矩阵的转置(使用函数) ...................................................................................... 28 节 1.19 复制元音字母,顺序输出 ...................................................................................... 29 节 1.20 判断素数(函数) .................................................................................................. 30 节 1.21 连接字符串 .............................................................................................................. 31 节 1.22 字符统计(函数,由实参传递字符串)(字符串=字符数组) .......................... 32 节 1.23 求最大公约数与最小公倍数 .................................................................................. 32 节 1.24 截取字符串 .............................................................................................................. 34 节 1.25 用函数i将数字转换成字符串,再比较 ............................................................... 35

=======================================================================================================================

=======================================================================================================================

节 1.01 数组应用:矩阵乘法

#include #include using namespace std; int main() {

int i,j,n=0;

int a[3][4]={{5,7,8,2},{-2,4,1,4},{1,2,3,4}};

int b[4][5]={{4,-2,3,3,9},{4,3,8,-1,2},{2,3,5,2,7},{1,0,6,3,4}}; int c[3][5]={0}; for(i=0;i<3;i++) {

for(j=0;j<5;j++) {

}

}

for(n=0;n<4;n++)

c[i][j]=a[i][n]*b[n][j]+c[i][j];

for(i=0;i<3;i++) { } }

=======================================================================================================================

for(j=0;j<5;j++)

cout<

节 1.02 输出指定范围内的同时是素数与回文数的数

Description

输出指定范围内的同时是素数与回文数的数据,如果没有,输出“Not found” Input

测试数据的组数n

第一组指定数据范围的起始值与终止值 第二组指定数据范围的起始值与终止值 ..........

第n组指定数据范围的起始值与终止值

Output

输出该范围内同时是素数与回文数的数据,如果没有,输出\

#include using namespace std; int main() {

int a,b,c,d,i,j,m,n,k,t,flag; cin>>t; while(t--) {flag=0; cin>>m>>n; if(m>n) break; for(i=m;i<=n;i++) {

k=1;

for(j=1;j

}

{ }

if(i%j==0) continue; else k++;

if(i==(k+1)) { }

b=0; c=i; while(c!=0) { }

if(b==i) {cout<

a=c; b=b*10+a; c=c/10;

if(flag==0) cout<<\ } }

=======================================================================================================================

节 1.03 求平均值

题目描述

建立一个10个元素的数组,从键盘输入数据,输出该数组的平均值,结果保留两位小数。 输入

10个测试数据 输出 平均值

#include #include using namespace std; int main() {

double a[10]; int i;

double he=0;

for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<10;i++) he+=a[i];

cout.setf(ios::fixed);

cout<

=======================================================================================================================

节 1.04 统计大于等于0的元素

题目描述

定义一个大小为10的整型数组,从键盘输入10个数据存入数组,统计大于等于0的元素的个数,并输出。 输入

10个测试数据

输出

大于等于0的数组元素的个数

#include #include using namespace std; int main() {

int a[10]; int i,k=0;

for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<10;i++) {

if(a[i]>=0) k++; }

cout<

=======================================================================================================================

节 1.05 斐波那契数列(不用函数)

题目描述

形如1,1,2,3,5,8,13,21,34,55,89......的数列称为斐波那契数列,其特点是,除了第一、第二项值为1外,从第三项开始,每一项都是其前面两项之和。给出n(本题中,n的值小于等于20),输出斐波那契数列第n项的值。 输入 n

输出

斐波那契第n项的值

#include #include using namespace std;

int main() {

int a[20]; int i,n; }

=======================================================================================================================

cin>>n; a[0]=1,a[1]=1; a[i]=a[i-1]+a[i-2];

for(i=2;i<20;i++) cout<

节 1.06 兑换零钱

题目描述

对于给出的一个整数值的金额,可以兑换为由10元、20元、50元组成的零钱,要求每样面值的钱币至少有一张,找出并输出满足这样条件的组合。 输入

一个整数的金额值

输出

10元的张数 20元的张数 50元的张数

#include using namespace std; int main() {

int x,y,z,n; cin>>n;

for(x=1;x<10;x++) }

=======================================================================================================================

for(y=1;y<5;y++)

for(z=1;z<2;z++)

if(10*x+20*y+50*z==n) { }

cout<

题目描述

从键盘输入10个整数(10个整数均不相同), 然后再从键盘中输入一个整数a,如果该整数a为奇数, 且与这10个整数中的任一个数相同,则删掉与a相同的 这个数,并将剩下的9个数按升序排序输出;若a为偶数, 且与这10个数都不同,则加入a,并将这11个数降序排 序输出;否则,则将这10个数奇数在前,偶数在后, 降序排列输出。例如,10个数分别为6,89,34,12, 0,-8,78,15,9,3.若a为9,则输出为:-8,0,3, 6,

12,15,34,78,89.若a为2,则输出为:89,78, 34,15,12,9,6,3,2,0,-8.若a为7或者12,则 输出为:89,15,9,3,78,34,12,6,0,-8.

非函数方法

#include using namespace std; int main() { int i,n,j,t,flag,k,l; int a[11]; cin>>k; while(k--) {flag=0; l=0; for(i=0;i<10;i++) cin>>a[i]; cin>>n; for(i=1;i<10;i++) for(j=0;j<10-i;j++) if(a[j]>a[j+1]) {t=a[j],a[j]=a[j+1],a[j+1]=t;} for(i=0;i<10;i++) { if(n%2!=0 && a[i]==n) { flag=1; for(j=i;j<9;j++) a[j]=a[j+1]; for(i=0;i<8;i++) cout<

{ for(i=0;i<10;i++) if(a[i]%2==0) l++; for(i=9;i>=0;i--) if(a[i]%2!=0)cout<=0;i--) { if(a[i]%2==0 && l>1) {cout<

函数方法

#include using namespace std;

void sort(int a[],int n); int find(int a[],int n); void display(int a[],int n); void reverse(int a[],int n); void clear(int a[],int b); void cha_ru(int a[],int b); int tong_ji(int a[],int m); int main() { int i,b,t; int a[11]; cin>>t; while(t--) { for(i=0;i<10;i++) cin>>a[i]; cin>>b; sort(a,10); if(find(a,b)!=-1 && b%2!=0) {

clear(a,b); display(a,9); } else if(find(a,b)==-1 && b%2==0) { cha_ru(a,b); reverse(a,11); display(a,11); } else { reverse(a,10); int j=1,k=tong_ji(a,10); for(i=0;i<10;i++) if(a[i]%2!=0) cout<

void sort(int a[],int n) { int i,j,b; for(i=1;i=0 && b

}

int find(int a[10],int b) { int i; for(i=0;i<10;i++) if(a[i]==b) return i; return -1; }

void display(int a[],int n) { int i; for(i=0;ivoid reverse(int a[],int n) { int i,t; for(i=0;i

void clear(int a[10],int b) { int i; for(i=0;i<10;i++) if(a[i]==b) while(i+1<10) { a[i]=a[i+1]; i++; } }

void cha_ru(int a[11],int b) { int i,j,flag=0; for(i=0;i<10;i++) if(b

{ for(j=10;j>i;j--) a[j]=a[j-1]; a[i]=b; } else a[10]=b; }

int tong_ji(int a[],int n) { int i,k=0; for(i=0;i

=======================================================================================================================

节 1.07 输出杨辉三角形

#include #include using namespace std; int main() {

int i,j,n; int a[100][100]; cin>>n;

a[0][0]=1,a[1][0]=1,a[1][1]=1; for(i=2;i

for(j=1;j

cout<<\

cout<

a[i][0]=1,a[i][i]=1; for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

}

cout<

=======================================================================================================================

return 1;

=======================================================================================================================

节 1.08 鞍点

题目描述

在一个二维矩阵中,如果某个位置的数值是该行最大值,同时也是该列最小值,我们则称该位置是矩阵的鞍点。鞍点可能有多个,也可能没有。请编写程序找出一个3*3矩阵的鞍点。

输入

第一行:输入T表示有T个测试实例

第二行:输入3*3矩阵数据,假定数据都是正整数 以此类推输入下个实例

输出

输出鞍点所在的行号、列号、鞍点值 如果鞍点不存在则输出-1

设定行号和列号是从0开始编号,无需考虑存在多个鞍点的情况,假设如果有鞍点则只有唯一个

#include using namespace std; int main() {

int i,j,n,max,min,flag,t; int a[3][3],b[3],c[3]; cin>>t; while(t--) { { }

for(j=0;j<3;j++) { }

for(i=0;i<3;i++) {

for(j=0;j<3;j++) {

if(b[i]==c[j]) { min=a[0][j]; for(i=0;i<3;i++)

if(a[i][j]

if(a[i][j]>max) max=a[i][j]; b[i]=max; flag=0;

for(j=0;j<3;j++)

cin>>a[i][j];

for(i=0;i<3;i++)

for(i=0;i<3;i++)

}

}

}

cout<

if(flag==0) cout<<\ } }

函数方法

#include using namespace std;

void input(int a[10][10],int n); void an_dian(int a[10][10],int n); int main() { int t; cin>>t; while(t--) {

int a[10][10]; input(a,3); an_dian(a,3); } }

void input(int a[10][10],int n) { int i,j; for(i=0;i

void an_dian(int a[10][10],int n) {

int i,j,flag=0; for(i=0;i

for(j=0;j

if(a[i][j]>a[i][(j+1)%3] && a[i][j]>a[i][(j+2)%3] && a[i][j]

cin>>a[i][j];

a[i][j]

if(flag==0)

cout<<\

}

=======================================================================================================================

节 1.09 求矩阵每一列的最大值与和

题目描述

定义一个二维数组(不超过10*10),输入方阵的大小n,然后输入数组的数据,求该矩阵每列的最大值与和

输入

测试数据的组数t 第一个矩阵的大小n 第一个矩阵的元素 第二个矩阵的大小n 第二个矩阵的元素 ...........

输出

第一个矩阵的每一列最大值、和 第二个矩阵的每一列最大值、和

#include using namespace std; int main() {

int n,i,j,he,max,t,k; int a[10][10]; cin>>k; while(k--) { cin>>n;

for(i=0;i

he=0; max=a[0][i]; for(j=0;j

cout<

he+=a[j][i];

if(a[j][i]>max){t=a[j][i];a[j][i]=max;max=t;} for(j=0;j

cin>>a[i][j];

for(i=0;i

} } }

=======================================================================================================================

节 1.10 求矩阵中主对角线与副对角线的和

题目描述

求一个矩阵的主对角线与副对角线的和。在本题中假设处理的矩阵都是方阵,就是行数与列数相同的矩阵。

定义一个二维数组(不超过10*10),输入方阵的大小n,然后输入数组的数据,求该数组主对角线与副对角线的数据的和。

输入

测试数据的组数t 第一个矩阵的大小n 第一个矩阵的数据 第‘二个矩阵的大小n 第二个矩阵的数据 ........

输出

第一个矩阵主对角线之和 第一个矩阵副对角线之和 第二个矩阵主对角线之和 第二个矩阵副对角线之和

#include using namespace std; int main() {

int n,i,j,he1,he2,k; int a[10][10]; cin>>k; while(k--) {

he1=0; he2=0;

cin>>n;

for(i=0;i

=======================================================================================================================

for(j=0;j

cin>>a[i][j];

for(i=0;i

he1+=a[i][i]; he2+=a[n-1-i][i]; for(i=0;i

cout<

节 1.11 字符串大小的比较

题目描述

不使用字符串函数strcmp,比较两个字符串 (字符串的长度不超过20,字符串中不包含空格 )的大小,如果第一个字符串大于第二个字符串,输出1;如果两个字符串相同,输出0;如果第一个字符串小于第二个字符串,输出-1。

输入

测试数据的组数t

第一组测试数据的两个字符串 第二组测试数据的两个字符串 .........

输出

第一组比较结果 第二组比较结果

#include #include using namespace std; int main() {

char a[20],b[20]; int i=0,flag,j=0,n; cin>>n; while(n--) {

flag=0; scanf(\ scanf(\

i=0;

while(a[i]!='\\0' && b[i]!='\\0') { }

cout<

=======================================================================================================================

if(a[i]==b[i])i++;

if(a[i]>b[i]){ flag=1;break;} if(a[i]

节 1.12 字符串排序

题目描述

对于给出的若干个(不超过10个)字符串(每个字符串的长度不超过20),按ASCII的顺序降序排序,然后输出。

输入

测试数据的组数t 第一组测试数据的个数

第一组测试数据的若干个字符串 第二组测试数据的个数

第二组测试数据的若干个字符串 ........

输出

第一组数据降序输出 第二组数据降序输出

#include #include using namespace std; int main() {

int i,n,t,j;

char a[20][20],b[20][20]; cin>>t; while(t--) { cin>>n;

for(i=0;i

for(j=0;j

for(i=0;i

cout<

for(i=0;i

if((strcmp(a[i],a[i+1])<0)) {

strcpy(b[i],a[i]); strcpy(a[i],a[i+1]); strcpy(a[i+1],b[i]); } cin>>a[i];

(函数方法)

#include using namespace std; #include

int complain(char a[30],char b[30]); void change(char a[30],char b[30]); int main() { int i,j,n; char a[30][30],b[30][30]; cin>>n; for(i=0;i>a[i]; for(i=0;i

int complain(char a[30],char b[30]) { int i,j; i=0,j=0; while(a[i]!='\\0' || b[i]!='\\0') { if(a[i]>b[i]) return 1; else if(a[i]

void change(char a[30],char b[30]) { char c[30]; int i,j,x,y; for(i=0;a[i]!='\\0';i++) c[i]=a[i]; c[i]='\\0'; for(i=0;b[i]!='\\0';i++) a[i]=b[i]; a[i]='\\0'; for(i=0;c[i]!='\\0';i++) b[i]=c[i]; b[i]='\\0'; }

=======================================================================================================================

节 1.13 插入一个数

Description

有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input

输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

Output

对于每个测试实例,输出插入新的元素后的数列。

#include using namespace std; int main() {

int a[101]; int i,j,m,n; while(1) {

cin>>n; cin>>m;

if(n==0 && m==0) break; for(i=0;i>a[i];

for(i=0;i return 1; }

=======================================================================================================================

节 1.14 按绝对值大小顺序输出

Description

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

Input

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Output

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

#include #include

using namespace std; int main() {

int a[100]; int i,n,d,j,k; while(cin>>n) {

if(n==0) break; for(i=0;i>a[i]; for(i=1;i

k=a[i];

d=abs(a[i]); j=i-1;

while(j>=0 && d>abs(a[j])) {

a[j+1]=a[j]; a[j]=k; j--; } }

for(i=0;i }

=======================================================================================================================

节 1.15 发工资

Description

作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵

但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?

这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。

Input

输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。 n=0表示输入的结束,不做处理。

Output

对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。

Sample Input

3 1 2 3 0

Sample Output

4

#include using namespace std; int main() {

int i,n,zhang,a; int b[100];

}

while(1) {

zhang=0; cin>>n;

if(n==0) break; for(i=0;i>b[i]; for(i=0;i

a=b[i];

zhang=a/100+zhang; a=a0;

zhang=a/50+zhang; a=aP;

zhang=a/10+zhang; a=a;

zhang=a/5+zhang; a=a%5;

zhang=a/2+zhang; a=a%2;

zhang=a/1+zhang; }

cout<

=======================================================================================================================

节 1.16 成绩处理

Description

假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。

Input

输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。

Output

对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。 每个测试实例后面跟一个空行

这题未解决 我的(格式错误)

#include #include using namespace std; int main() {

int i,j,n,m,k; double he1,he2; double **a; double *b;

while( cin>>n>>m) {

if(n==0 || m==0) break; k=0;

a=new double*[n]; for(i=0;i

a[i]=new double[m]; b=new double[m]; for(i=0;i>a[i][j]; for(i=0;i

}

cout.setf(ios::fixed);

cout<

cout<

for(i=0;i

he2=0;

for(j=0;j

cout.setf(ios::fixed);

cout<

cout<

for(i=0;i

for(j=0;j

if(a[i][j]

cout<

大神的(完美通过)

#include #include using namespace std;

int main() {

double cj[50][5],sp[50],kp[5]; int n,m,num,flag; while(cin>>n>>m) {

for(int i=0;i

for(int j=0;j

cin>>cj[i][j]; sp[i]+=cj[i][j];

}

}

return

kp[j]+=cj[i][j]; }

sp[i]/=m; }

for(int i=0;i

for(int i=0;i

flag=1;

for(int j=0;j

if(cj[i][j]

flag=0; break; } }

if(flag==1) num++; }

for(int i=0;i

for(int i=0;i

=======================================================================================================================

节 1.17 复制字符串(函数)

题目描述

编写一个函数int substr(char str1[],char str2[],int index),其作用是,将从字符串str1 (长度超过30) 的第index个字符开始的所有字符复制,生成新的字符串str2,如果成功生成,函数返回1,如果不能成功生成,返回0

输入

测试数据的组数n 第一组数据 第二组数据 ........

输出

成功生成就输出子串,不成功生成,输出\

#include

using namespace std; #include

int substr(char str1[],char str2[],int n); int main() {

int t; cin>>t; while(t--) {

char str1[100],str2[100]; int n;

getchar(); gets(str1); cin>>n;

if((substr(str1,str2,n))==0) cout<<\ else {

int i=0;

while(str2[i]!='\\0') {

cout<

} cout<

int substr(char str1[100],char str2[100],int n) {

int j,i;

int l=strlen(str1);

if(l

for(j=0,i=n;str1[i]!='\\0';j++,i++) str2[j]=str1[i]; str2[j]='\\0'; return 1; }

=======================================================================================================================

节 1.18 矩阵的转置(使用函数)

#include using namespace std;

void input(int a[20][20],int m,int n); void output(int a[20][20],int m,int n); void change(int a[20][20],int m,int n); int main() {

int a[20][20]; int m,n; cin>>m>>n; input(a,m,n); cout<

void input(int a[20][20],int m,int n) {

int i,j;

for(i=0;i>a[i][j]; }

void output(int a[20][20],int m,int n) {

int i,j;

for(i=0;i

for(j=0;j

cout<

void change(int a[20][20],int m,int n) {

int i,j,t;

for(i=0;i

{t=a[i][j],a[i][j]=a[j][i],a[j][i]=t;} }

=======================================================================================================================

节 1.19 复制元音字母,顺序输出

题目描述

写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。

输入

一行字符串

输出

顺序输出其中的元音字母(aeiuo)

#include using namespace std; #include

void connect(char a[100]); int main() {

char a[100]; cin>>a; connect(a); }

void connect(char a[100]) {

char b[30]; int i,j=0;

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

if(a[i]=='a' || a[i]=='e' ||a[i]=='i' || a[i]=='o' || a[i]=='u' ) {

b[j]=a[i]; j++; }

b[j]='\\0';

int t,l=strlen(b); for(i=0;i

for(j=0;jb[j+1])

{t=b[j],b[j]=b[j+1],b[j+1]=t;} for(i=0;b[i]!='\\0';i++) cout<

=======================================================================================================================

节 1.20 判断素数(函数)

#include

第一组数据的字符串 第二组数据的正整数 第二组数据的字符串 ......... Output

比较的结果 Sample Input

3 123 12a

1234567 1234567 123456789 12

Sample Output

smaller equal bigger

本文来源:https://www.bwwdw.com/article/gkfg.html

Top