C++历险奇遇记

  1. 1.打印九九乘法表
#include<iostream>
#include<time.h>
//打印九九乘法表
using namespace std;
int main(){
	for (int i = 1; i <= 9; i++){
		for (int j = 1; j <= i; j++){
			cout << j << "*" << i << "=" << j*i << "   ";
			if (j % i == 0){
				cout << endl;
			}
		}
	}
}

2.猜数游戏(等等 一会我一定带着我的代码凯旋而归)

#include<iostream>
#include<time.h>
using namespace std;
//猜数游戏
int main(){
	int a,b;
	srand(time(NULL));
	a = rand() % 100 + 1;
	cout << a << endl;
	
	int tag=true;
	while (tag){
		cin >> b;
		if (b == a){
			cout << "刚刚好,你真聪明!" << endl;
			tag = false;
		}
		else {
			if (b > a){
				cout << "太大了!" << endl;
			}
			else if (b < a){
				cout << "太小了!" << endl;
			}
			tag = true;
		}
	}
	
}

2.goto语句

#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
	for (int i = 0; i < 5; i++){
		
			if (i  == 2){
				goto smart;

			}
		}
	smart:
		cout << "宝贝!" << endl;

}

有两点需要注意:

1.不能向上跳转

2.不能跨越函数

3.

#include "stdafx.h"
#include<iostream>
using namespace std;
//a  共经历多少米   b  第n此反弹的高度
int main(){
	double sum=0, height=0;
	int n;
	cin >> n;
	double h = 100;
	if (n == 1)
	{
		sum = 100;
		h = h / 2;
		cout << "第" << n << "次落地" << "共经历" << sum << "米" <<","<<"反弹的高度为"<<h<<"米"<< endl;

	}
	else{
		for (int i = 1; i < n; i++){
			h = h / 2;
			sum = sum + 2 * h + 100;
		}
		cout << "第" << n << "次落地" << "共经历" << sum << "米" << "," << "反弹的高度为" << h/2<< "米" << endl;

	}

	return 0;

}

 兔子问题是斐波那契数列

#include "stdafx.h"
#include<iostream>
using namespace std;
int Fib(int n){
	if (n == 1 || n == 2){
		return 1;
	}
	else{
		return Fib(n - 1) + Fib(n - 2);
	}
}
int main(){
	int n;
	cin >> n;
	int c = Fib(n);
	cout << c << endl;
	return 0;
}

3

 2.编写程序,找出用户输入的一串数中的最大数。输入小于等于0的数停止比较。

#include "stdafx.h"
#include<iostream>
using namespace std;
//编写程序,找出用户输入的一串数中的最大数。输入小于等于0的数停止比较。
int main(){
	int max = 0,tag= 1;
	while (tag){
		int n;
		cin >> n;
		if (n > 0){
			if (n > max){
				max = n;
			}
		}
		else {
			tag = n;
		}
	}
	cout << max << endl;
	return 0;
}

1.打印日历

#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
	int sum, n;
	cout << "请输入起始天数和一个月总天数!" << endl;
	cin >> n >> sum;
	cout << "星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天" << endl;
	for (int i = 1; i <= sum + n - 1; i++){
		if (i < n){
			cout << "\t";
		}
		else{
			cout << i - n + 1 << "\t";
			if (i % 7 == 0){
				puts("");
			}
		}
	}
	return 0;
}

 哇塞塞 布丁真棒!

2.这是我第无数次打印九九乘法表了

#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
	int i, j;
	for (i = 1; i <= 9; i++){
		for (j= 1; j <= i; j++){
			cout << j << "*" << i << "=" << j*i<<"\t";
			if (i==j){
				cout << endl;
			}
		}
		
	}
}

3.求1000以内的所有完数

#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
	int i, j;
	cout << "1000以内所有的完数为:" << endl;
	for (i = 1; i <= 1000; i++){
		int sum = 0;
		for (j = 1; j < i; j++){
			if (i%j == 0){
				sum = sum + j;
			}
			
		}
		
		if (sum == i){
			
			cout << i << "   ";
		}
	}
	return 0;
	
}

double型输入输出时都采用lf

如:scanf("%lf",&x);

3.编程判断哪一年的年份小

#include "stdafx.h"
#include<iostream>
using namespace std;
void Min_Year(int year, int month, int day){
	int my = year, mm = month, md = day;
	while (year != 0 && month != 0 && day != 0)
{
		if (year < my){
			my = year;
			mm = month;
			md = day;
		}
		else if (year == my){
			if (month <mm){
				mm = month;
				md = day;
			}
			else if (month == md){
				if (day < md){
					md = day;
				}
			}
		}
		
		cin >> year >> month >> day;

	}
	cout << my << "/" << mm << "/" << md;

}
int main(){
	int year, month, day;
	cout << "Enter(yyyy/mm/dd)   ";
	cin >> year>> month>> day;
	Min_Year(year, month, day);
}

1.打印全年日历

呜呜呜也算个大工程啦 弄了好久

#include "stdafx.h"
#include<iostream>
using namespace std;
int  Weekday(int year, int month){
	if (month == 1 || month == 2){
		month =month+ 12;
		year--;
	}
	int dayweek = (2+ 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
	switch (dayweek){
	case 0:
		return 7;
		break;
	case 1:
		return 1;
			break;
	case 2:
		return 2;
		break;
	case 3:
		return 3;
		break;
	case 4:
		return 4;
		break;
	case 5:
		return 5;
		break;
	case 6:
		return 6;
		break;
	default:
		return NULL;
	}
	
} 

bool isleap(int year){
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
		return true;
	}
	else return false;
}
int day_sum(int year, int month)
{
	int day;
	switch (month){
	case 1:case 3: case 5: case 7: case 8: case 10: case 12:
		day = 31;
		break;
	case 4:case 6:case 9:case 11:
		day = 30;
		break;
	case 2:
		day = isleap(year) ? 29 : 28;
		break;
	}
	return day;
}
void print_calendar(int year){

	for (int i = 1; i <= 12; i++){
		int w = Weekday(year, i);
		cout << endl << year << "年" << i << "月的日历为:" << endl;
		cout << "星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\t" << endl;

		for (int j = 1; j <= day_sum(year, i)+w-1; j++){
			if (j < w){
				cout << "\t";  
			}
			else{
				cout << j - w + 1 << "\t";
				if (j % 7 == 0){
					puts("");
				}
			}
		}
	}

}
int main(){
	int year, month, w;
	cout << "请输入你要打印的年份月份 " << endl;
	cin >> year ;
	print_calendar(year);
	return 0;
}

2.

#include "stdafx.h"
#include<iostream>
using namespace std;
int main(){
	char arr[] = { "xiaobuding"};//10
	int brr[] = { 5, 32, 2 };
	int a = sizeof(arr) / sizeof(arr[0]);
	cout << a << endl;
	int b = sizeof(brr) / sizeof(brr[0]);
	cout << b << endl;
	int c = strlen(arr);
	cout << c << endl;
}

int a这个需要给后面加"\0",所以又11个,但是strlen不加"\0",后面只有十个。

1.输入整数1到7,输出所对应的星期,使用查表法。

#include "stdafx.h"
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;

//定义大小为100的整型数组,使用随机函数给数组元素赋值.
//数值的范围是1-100,并且不容许重复。
int main(){
	char *a = "星期一" ;
	char *b = "星期二" ;
	char *c =  "星期三" ;
	char *d =  "星期四" ;
	char *e =  "星期五" ;
	char *f =  "星期六";
	char *g =  "星期日" ;
	char* arr[7] = { a,b,c,d,e,f,g };
	int i;
	cin >> i;
	cout << arr[i-1] << endl;
		return 0;
}

 指针数组给老子整出来啦  呜呜呜浪费了我好长时间 也算是对指针有一个更深切的认知

1.判断字符串中英文字符的个数

#include "stdafx.h"
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
//统计字符串中每个英文字符出现的次数
//不区分大小写,只统计英文字符isalpha()
int main(){
	int sum = 0;
	char str[] = { "wangbuDing123!" };
	for (int i = 0; str[i] != '\0'; i++){
		if (isalpha(str[i])){
			sum++;
		}
	}
	cout << sum;
	return 0;
}

4.统计字符串中每个英文字符出现的次数,区分大小写,只统计英文字符。

#include "stdafx.h"
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
int main(){
	int sum = 0, total = 0;
	char str[] = { "wangbuDing123!" };
	for (int i = 0; str[i] != '\0'; i++){
		if (islower(str[i])){
			sum++;
		}
		else if (isupper(str[i])){
			total++;
		}
	}
	cout << "小写字母个数:" << sum << endl << "大写字母个数:" << total << endl;
	return 0;
}


1.冒泡排序、

0---》n-1

0—>n-i-1

5.题目:定义大小为100的整型数组,使用随机函数给数组元素赋值。数值的范围是1100,并且不容许重复。

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
		const int n = 100;
		int arr[n];
		cout << "乱序数组:" << endl;
		for (int i = 0; i < n; i++){
			arr[i] = 1 + rand() % 100;
		}
		for (int i = 0; i < n; i++){
			cout << arr[i] << "\t";
			if ((i + 1) % 10 == 0)
			{
				puts("");
			}
		}

		for (int i = 0; i < 100; i++){
			int t = 1 + rand() % 100;
			for (int j = 0; j <= n; j++)
			{
				if (t != arr[j]){
					continue;
				}
				else{
					t = 1 + rand() % 100;
					j = 0;
				}
			}
			arr[i] = t;
		}

		for (int i = 0; i < n - 1; i++){
			for (int j = i + 1; j < n; j++){
				if (arr[i]>arr[j]){
					int t = arr[i];
					arr[i] = arr[j];
					arr[j] = t;
				}
			}
		}
		
		cout << "排序后的数组为:" << endl;
		for (int i = 0; i < n; i++){
			cout << arr[i] << "\t";
			if ((i + 1) % 10 == 0)
			{
				puts("");
			}
		}
		return 0;

	}

 嘤嘤嘤  这个zh

 有一个整型数组int ar[101]存储的数值的范围是0到99  其中有两个数值重复。
1)请查找重复的数值    2)重数值的下标输出。

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
//有一个整型数组int ar[101]存储的数值的范围是0到99  其中有两个数值重复。
//1)请查找重复的数值    2)重数值的下标输出。
int main(){
	int arr[101 ];
	int temp;
	for (int n = 0; n < 101; n++) {
	int tmp = rand() % 100;
		for (int i = 0; i <= n; i++) {
			if (tmp != arr[i]) continue;
			else {  
				tmp = rand() % 100;
				i = 0;
			}
		}
		arr[n] = tmp;
	}
	//
	

	for (int n = 0; n < 101; n++){
		cout << arr[n] << "\t";
		if ((n + 1) % 10 == 0)
			puts("");
	}
	//
	int i, j;
	for ( i = 0; i < 101-1; i++){
		for ( j = i+1; j < 101; j++)
		{
			if (arr[i] == arr[j]){
				goto el;
			}
			
		}
	}
el:{
	cout << endl<<"相等的元素为:" << arr[i] << endl;
	cout << "相等的元素的下标为:" << i << "  和  " << j << endl;
}
	return 0;










    }

耶耶耶  弄出来啦!

 

 冒泡排序终于明白啦!

很光荣了啦  小布丁也可以打印出杨辉三角啦!

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
	int n = 20;
	int a[20][20];
	for (int i = 1; i <= 20; i++)
	{
		for (int j = 1; j <= 20; j++){
			if (j > i) a[i][j] = 0;
			else if (j == 1)
				{
					a[i][j] = 1;
				}
				else{
					a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
				
			}
		}
	}




	for (int i = 1; i <=20; i++)
	{
		for (int j = 1; j <=20; j++){
			if (a[i][j] != 0)
			{
				cout << a[i][j] << "  ";
			}
			else {
				cout << " ";
			}
			if (j % 20 == 0)
			{
				cout << endl;
			}
		}
	}
	return 0;

}

 2.冒泡排序的优化

优化没写出来 改日再写

#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
//冒泡排序优化
int main(){
	int sum = 0;
	int arr[] = { 4, 2, 7, 5, 3, 9, 3, 0 };
	int len = sizeof(arr) / sizeof(arr[0]);
	for (int i = 1; i < len; i++){
		int tag = true;
		for (int j = 0; j < len - i; j++){
			if (arr[j]>arr[j + 1]){
				int t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
				
			}
		
		}
	}
	for (int i = 0; i < len; i++){
		cout << arr[i] << "   ";
	}
	return 0;
}

3.野指针:没有进行初始化的指针

如:int * p;

*p=100;

如何杜绝空指针:int *p=NULL;

在使用时应该对其进行判空。

1.staic int a;

静态数据在数据区存放  即使不是主函数中的数据也会存储在.data区中。因此在返回地址时生存期不会受到影响。

2.指针+1或者加n

例如:arr[6]={23,5,3,1,67,7};

int *p=arr[0];

p=p+n;

p=p+sizeof(int)*n;

+:从低地址向高地址

-:从高地址向低地址

 3.这个题真的坑中有坑

(1)int  *p=ar;//p=&ar[0]

(2)x=*p++  运算符结合方向是从右至左,*(p++)后置++先把p的值取出来  与*结合,赋值给x,然后p=p+4*1;p=&ar[1]。

y=*p;*p=ar[1]。

x=++*p;*p=23,23先+1赋值给x,x=24。

y=24;

x=*++p;  *(++p) p=&ar[2]赋值给p,再把p与*结合赋值给x,x=34。

y=34。

富贵险中求!

5.a=20;

const int *p=a;

const 修饰*p,即*p=200会出现错误  但是p=&b不会出现错误

指针有两个值 一个是指向的值  一个是自身的值  const使得指向的值不发生改变  只可读不可写  但是自身的值可读可写。

 6.在sizeof(arr)数组名代表的是(类型字节*数组元素个数)如int arr[5]--->4*5

除此之外,都代表首元素的地址!!!地址地址

7.arr代表首元素的地址,即&arr[0]=arr

arr[0]=*arr

arr[1]=*(arr+1)   ---->地址++代表下一个元素arr[n]=*(arr+n)

好啦 2022年2、06号的努力就到此为止啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值