45、写一函数,在一数组里查找某个值
//写一函数,在一数组里查找某个值
#include<iostream>
#include<stdlib.h>
using namespace std;
int Search(int a[], int n, int key)
{
int i;
for(i=0; i<n; i++)
{
if(a[i]==key)
{
//cout << "a[" << i << "]=" << a[i] << endl;
return i;
}
//else return -1;
}
return -1;//key不在a[]中,返回-1,表示该函数失败
}
int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int key;
cin >> key;
cout << Search(a,10,key);
system("pause");
return 0;
}
46、编一程序,求两个矩阵的乘积
#include <iostream>
#include <stdlib.h>
using namespace std;
int main ()
{
int m,n,a,b,i,j,k;
int **a1;
int **b1;
int **c1;
cout<<"输入第一个矩阵的行数与列数:";
cin>>m>>n;
cout <<"输入第二个矩阵的行数与列数:";
cin>>a>>b;
if(n != a)
{
cout<<"维数不同无法相乘"<<endl;
exit(-1);
}
//动态内存分配
a1 = new int *[m];
for (i=0; i<m; i++)
if ((a1[i] = new int [n])==NULL)
exit (0);
b1 = new int * [a];
for (i = 0;i<a;i++)
if ((b1[i] = new int [b])==NULL)
exit (0);
c1 = new int * [m];
for (i=0; i<m; i++)
if ((c1[i] = new int [b])==NULL)
exit (0);
//创建矩阵a1
cout<<"输入第一个矩阵的元素:";
for (i=0; i<m; i++)
{
for(j=0; j<n; j++)
cin>>a1[i][j];
}
//创建矩阵b1
cout<<"输入第二个矩阵的元素:";
for (i=0; i<a; i++)
{
for (j=0; j<b; j++)
cin>>b1[i][j];
}
//将c1矩阵所有元素赋值为0
for (i=0; i<m; i++)
for (j=0; j<b; j++)
c1[i][j] = 0;
//计算c1
for (i=0; i<m; i++)
for(j=0; j<b; j++)
for (k=0; k<n; k++)
c1[i][j] += a1[i][k]*b1[k][j];
//输出c1
cout<<"输出结果为"<<endl;
for (i=0; i<m; i++)
{
k = 0;
for (j=0; j<b; j++)
{
cout<<c1[i][j];
k = k+1;
if (k==b)
cout<<endl;
else cout<<"\t";
}
}
//释放内存空间
for (i=0; i<m; i++)
delete[]a1[i];
delete []a1;
for (i=0; i<a; i++)
delete[]b1[i];
delete []b1;
for (i = 0;i<m;i++)
delete[]c1[i];
delete []c1;
system("pause");
return 0;
}
参考代码:C++编程求两个矩阵的乘积
47、计算某日是某年的第几天
//计算某日是某年的第几天
#include<iostream>
#include<stdlib.h>
using namespace std;
/*判断是否为闰年*/
bool isLeapYear(int n)
{
if(n%4 == 0) return true;
return false;
}
/*计算天数*/
int count_days(int year, int mon, int date)
{
int s=0;
switch(mon-1)
{
//case 12: s+=31;
case 11: s+= 30;
case 10: s+= 31;
case 9: s += 30;
case 8: s += 31;
case 7: s += 31;
case 6: s += 30;
case 5: s += 31;
case 4: s += 30;
case 3: s += 31;
case 2: s += 28;
case 1: s += 31;
//case 0: s += 0;
default:;
}
if(isLeapYear(year)) s++;
return s = s + date;
}
int main()
{
int year, mon, date;
cout << "请输入年月日:";
cin >> year >> mon >> date;
cout << year << "年" << mon << "月" << date << "日是" << year << "的第";
cout <<count_days(year, mon, date) << "天" << endl;
system("pause");
return 0;
}
48、编写一个帮助小学生学习加法的程序,随机产生2个数,让学生输入答案
//编写一个帮助小学生学习加法的程序,随机产生2个数,让学生输入答案。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
/* 获得随机数1-100 */
int get_randomNO()
{
//int a;
//a = rand()%6 + 1;
//cout << rand() << endl;
return rand()%100 + 1;
}
int main()
{
int a, b, c;
//unsigned seed;
//seed = time(0);
//srand(seed);
srand(time(0));
for(int i=0; i<5; i++)//练习次数
{
a = get_randomNO();
b = get_randomNO();
cout << a << " + " << b << " = ";
cin >> c;
if(c == a+b)
cout << "回答正确" << endl;
else
cout << "回答错误,正确答案是" << a+b << endl;
}
system("pause");
return 0;
}
49、从52个数里选13个数
//从52个数里选13个数
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
int a[53]={0}, b[13]={0}, t, i, j;
for(int i=1; i<=52; i++)
a[i] = i;
srand(time(0));
/*获得13个1-52之间不重复的数*/
for(int j=1; j<=13; j++)
{
a[j] = rand()%52 + 1;
for(int k=0; k<j; k++)
if(a[j] == a[k])//如果与前面的数重复,执行j-1,重摇
{
j--;
break;
}
}
/*排序*/
for(i=1; i<=13; i++)
for(j=1; j<=13-i; j++)
{
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
for(i=1; i<=13; i++)
cout << a[i] << " ";
system("pause");
return 0;
}
题目来源:50道C/C++编程练习题及答案
总结
1、题45中return -1;作为key不在数组中的返回标志;参考:C++函数返回值介绍(含return 0 与 return 1 与 return -1介绍
2、C++二维数组指针