C++基础编程DAY18

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++二维数组指针

发布了27 篇原创文章 · 获赞 3 · 访问量 842
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章