1.c++入门
2.初始值设定项
3..c++数组资料
// C++控制台.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
int 最大数(int x = 0, int y = 0, int z = 0);/*为什么这样写?什么道理,又不像公共变量或委托声明!*/
/*原来如此,这种形式在C++中叫做原型函数,必须和真正的函数体对应名称、返回类型和形式参数;它必须写在主函数之前,虽说多写这行代码,但有利于把多个函数集中在一起便于查看.如果在原型函数中赋值实参而真正函数体是形参是可以的*/
int _tmain(int argc, _TCHAR* argv[])
{
起始:
printf("初次接触C++,对它没什么概念,只知道是编程工具名称而已!\n"
"中文命名不仅仅是为了省去注释这么简单理由,更有利于用中国人熟悉的语言,流畅地构思程序设计思路、逻辑、算法,调试时分析时较顺畅发现问题。\n"
"更能消除障碍,较容易地理解编程、学习编程变得容易,就像在读文章,写文章一样;为什么要给零英文、零基础的学生或有兴趣学习的人人为设置障碍非得要英文不可?"
"当我为解答问题复制别人代码是第一要做的事就是用中文命名,才清楚作者设计思路和逻辑,更快速发现问题所在,从而顺畅设计和解决问题,常常得益于中文命名;因此,建议中国人学编程用中文命名有百利而无一害。\n\n");
int 小明 = 5, 小明爸 = 37, 小明妈 = 30, 年 = 0;
do
{
年++;
小明 ++;
小明爸++;
小明妈++;
}
while ((小明爸 + 小明妈) - (5 * 小明) > 0);
printf("5倍是小明%d岁,5倍是他爸爸%d岁,5倍是他妈妈%d岁,过%d年爸爸妈妈年龄之和是小明的5倍\n\n", 小明, 小明爸, 小明妈, 年);
int 输入数, 位 = 0, 数位, 基 = 1;
printf("输入任意整数不超过指定 int 范围位数: ");
scanf_s("%d", &输入数);
数位 = 输入数;
do
{
位++;
数位 /= 10;
} while (数位 > 0);
printf("输入数为: %d位\n", 位);
int* 位组 = new int[位 - 1];
int* 位数 = new int[位];
if (位 == 1)位数[位 -1] = 输入数;
else
{
for (int 序 = 0; 位 - 1 != 序; 序++)
{
基 *= 10;
位组[位 - 2 - 序] = 基;
}
for (int 序 = 0; 序 != 位 - 1; 序++)
printf("10的%d幕%d\n", 位 - 1 - 序, 位组[序]);
基 = 输入数;
for (int 序 = 0; 序 != 位 - 1; 序++)
{
位数[序] = 基 / 位组[序];
基 %= 位组[序];
if (基 < 10) 位数[序 + 1] = 基;
}
}
for (int 序 = 0; 序 != 位; 序++)
printf("%d ", 位数[序]);
int 数1, 数2, 数3;
scanf_s("%d%d%d", &数1, &数2, &数3);
最大数(数1, 数2, 数3);
scanf_s("%d", &数1);
goto 起始;
//return 0;
}
int 最大数(int x, int y, int z)/*还不了解这种是什么写法,类似C#自定义函数?*/
{
int 大数 = x, 小数 = x, 逆序 = x;
if (y > 大数) 大数 = y;
if (z > 大数) 大数 = z;
printf("最大值为: %d ", 大数);
if (y < 小数) 小数 = y;
if (z < 小数) 小数 = z;
printf("最小值为: %d ", 小数);
if (y > 逆序) 逆序 = y;
if (z > 逆序) 逆序 = z;
大数 = x;
if (逆序 > y) if (y > 大数) 大数 = y;
if (逆序 > z) if (z > 大数) 大数 = z;
printf("逆序: %d ", 逆序 * 100 + 大数 * 10 + 小数);
printf("正序: %d ", 小数 * 100 + 大数 * 10 + 逆序);
return 大数;
}
上班前突然冒出一个念,那个推算各位数如果遇到0会出错?上班一路上脑中推导运算逻辑,分析主推导循环算法决定没错,只是遇到0时这句将会不断运行到 if (基 < 10) 位数[序 + 1] = 基; 虽说不是原设计意图,原意在循环最后取个位数,因在最后幕=10时动作,分析之上语句执行当遇到0时这句将提前动作,再进一步分析我放心了,虽说如此,程序运行依然正确,虽说提前动作修改后一个数组单元值,但这一修改将在下一循环中被修改而正确,直到循环结束都按照设计思路正确推导运行,结果依然是正确的,如果,不让这句提前动作,只要加个判断就可以了 ,就变成这样 if (位组[序] == 10) 位数[序 + 1] = 基; 现在把以上算法移植到C#中
Int64 输入数, 位 = 0, 数位, 基 = 1;
Console.WriteLine("输入任意整数不超过指定 Int64 范围位数: ");
输入数 = Int64.Parse(Console.ReadLine());
数位 = 输入数;
do
{
位++;
数位 /= 10;
} while (数位 > 0);
Console.WriteLine("输入数为: {0}位\n", 位);
Int64[] 位组 = new Int64[位 - 1];
Int64[] 位数 = new Int64[位];
if (位 == 1) 位数[位 - 1] = 输入数;
else
{
for (int 序 = 0; 位 - 1 != 序; 序++)
{
基 *= 10;
位组[位 - 2 - 序] = 基;
}
for (int 序 = 0; 序 != 位 - 1; 序++)
Console.WriteLine("10的{0}幕{1}\n", 位 - 1 - 序, 位组[序]);
基 = 输入数;
for (int 序 = 0; 序 != 位 - 1; 序++)
{
位数[序] = 基 / 位组[序];
基 %= 位组[序];
if (位组[序] == 10) 位数[序 + 1] = 基;
}
}
Console.WriteLine(string .Join (" ", 位数));
运行结果修改前后结果一样
Int64 位 = 0, 基;
List<Int64> 动态位数 = new List<Int64>();
Console.WriteLine("输入任意整数不超过指定 Int64 范围位数: ");
基 = Int64.Parse(Console.ReadLine());
do
{
动态位数.Add(基 % 10);
基 /= 10;
位++;
} while (基 > 0);
Console.WriteLine("输入数为: {0}位\n", 位);
动态位数.Reverse();/*输出反转即可。*/
Console.WriteLine(string.Join(" ", 动态位数));
C++动态:
int 输入数, 位 = 0;
cout << "输入任意整数不超过指定 Int 范围位数:" << endl;
cin >> 输入数; int *动态 = new int[输入数];
do
{
动态[位] = 输入数 % 10;
输入数 /= 10;
位++;
} while (输入数 > 0);
printf("输入数为: %d位\n", 位);
for (int 序 = 0; 序 != 位; 序++)
printf("%d ", 动态[序]);
printf("\n");
/*功能完成后觉得还可以优化代码,把幕循环进行优化,分到2个循环中去完成,这样可以省去一个数组和一个循环,这些话对新手初学说,老者德者捻花微笑就好了.*/
int 输入数, 位 = 0, 数位, 基 = 1;
printf("输入任意整数不超过指定 int 范围位数: ");
scanf_s("%d", &输入数);
数位 = 输入数;
do
{
基 *= 10;/*替换幕运算循环直接计算最大幕*/
位++;/*为了创建数组及计算位数*/
数位 /= 10;
} while (数位 > 0);
printf("输入数为: %d位\n", 位);
int* 位数 = new int[位];
if (位 == 1) 位数[位 - 1] = 输入数;
数位 = 输入数;
for (int 序 = 0; 序 != 位 - 1; 序++)
{
基 /= 10;
位数[序] = 数位 / 基;
数位 %= 基;
if (基 == 10) 位数[序 + 1] = 数位;
}
另假定在无法用动态数组情况下,可以建立一个固定数组,位数等于类型最大位,这样就可以在一个循环完成所有动作,用如上动态的DO循环就可以了,这样,数据已经存储在数组中,又有位值可用,那么,无论顺取,逆取都可以得到正确的数据了,虽然说不能用尽数组,但可以进一步减少一个变量和减少一个循环.
就是这样从易到难一步一步完成到完美。
struct 菜单数据{ string 菜名; int 价格; };
array<菜单数据, 3> snack =
{
{ { "清 蒸 鱼 - 10元", 10 }, { "剁椒鱼头 - 10元", 10 }, { "红烧带鱼 - 10元", 10 } }
};
cout << snack[0].菜名 << snack[0].价格 << endl << snack[1].菜名 << snack[1].价格 << endl << snack[2].菜名 << snack[2].价格;