c语言学习日记第一天(环境配置也能出问题?)
不知道算不算新手学了,但我学了大概两个月的c语言之后,就休学了,然后复学的时候告诉我c语言不学了,要学cpp,我学c语言也学得很烂,现在只会写个hello world就不错了,因为两个月我基本没练过,因为环境配置遇到了问题。但希望这些会对你们有帮助(如果我哪里写错了,请大佬指出来)一、环境配置(你个fw,环境配置也能出问题)
没错我就是那个fw
问题:为啥我写的程序一运行devcpp就闪退,(众所周知学校教学都是用这个软件)
解决方案:据我实践,你去把win10的开发者选项打开就行。
二、hello world程序(我不打算说很细,就说一下我第三次看的还没记住的)
我们的第一个程序都是这个,c语言的我还记得,但记得不牢靠我复习一下吧(偷偷打开视频看一眼)
cpp的代码
#include <iostream>//头文件,iostream在书里有解释我不多bb了using namespace std;//std是名字
int main()//main函数是cpp的起点,main函数只能有一个,执行程序的时候先找到main,然后执行main里面的程序,int是return如果要返回值的值的那个类型
{
cout<<"hello world"<<endl;//cout标准输出
return 0;
}
c语言的代码
#include <stdio.h>
int main()
{
printf ("hello world");
return 0;
}
三、犯得错误,和需要注意的
1、std,return0后面的分号容易忘,头文件不用分号他不是语句(这个是C语言的一个老师枪带哦过的,我记不大清了)
2、头文件的#记得加
我犯的错误
1、endl的l写成了数字一
2.cout打错了count了
3.printf后面的括号忘了。
四。课后总结
我发现我找的课讲得不太好,不如书里讲的清楚,明天找个好的课跟。 加油!相信你很快就能跟上大部队
{:301_997:} 你说的devcpp我没用过,但是配置环境是非常简单,这个给你写个教程吧。
现在最好用的开源编辑器当然是vscode了,下载后装个插件就可以打造成IDE。
第一步,安装gcc、g++、make等这些,其实就是下一个“mingw64”的文件,官网是:https://www.mingw-w64.org进去里面有个下载,找到满足你需求的。
但是最普遍好用的是这个,直接给你最终到达的页面:https://github.com/niXman/mingw-builds-binaries/releases在这个里面 86_64 的是64位的,i686是32位的,直接找个64的下载就好,毕竟现在都是64位系统。
下载好之后,解压到c盘,然后把bin的路径配置到系统path环境变量,比如我的:C:\mingw64\bin
把bin里面mingw32-make.exe那个,复制一个副本出来,改成 make.exe。把gcc.exe复制一个副本,改成cc.exe
现在你的环境就全部配置好了。
接下来就是找个好的编辑器写代码,因为记事本写不方便,没有高亮显示等等
第二步下载vscode并安装,打开后点击 左边【田】插件管理,搜索 Chinese ,安装中文然后重启,然后同样搜索 C ,然后点击安装微软的那个。现在你的编辑器配置好了。
第三部开始你的撸码之旅吧,右上角还有运行的三角形,运行的时候,或者第一个创建文件后会上面会弹出让你选择编译器,你就选你安装路径那个就行 markhoo911 发表于 2022-9-14 13:15
你说的devcpp我没用过,但是配置环境是非常简单,这个给你写个教程吧。
现在最好用的开源编辑器当然是vsco ...
为什么不推荐集成的ide呢? 本帖最后由 markhoo911 于 2022-9-16 14:06 编辑
vtor 发表于 2022-9-15 15:30
为什么不推荐集成的ide呢?
你是指VS或者是JB家那些??那些是付费软件。一开始不应该让新手把时间花在破解,以及学习IDE上。
我推荐的开源的,以现在学习来说绰绰有余,完全熟练后开发项目可以用,只不过项目用起来没那么顺手。
对于完全新手来说,过早使用IDE并不好,什么都是补全或者提示。但是这些语法基础是需要牢记并熟练敲打出来。等熟练语法等基础知识后,上IDE才是最好的。少走弯路。
直接IDE,什么都是点击运行,很多新手都不知道或者不熟练怎么命令行运行。等以后要是项目上线或者其他特殊情况需要命令行编译运行,是不是还要回头查找。创建项目也是,涉及的还是很多,作为老手用习惯了,当然觉得没啥。也就是为啥老鸟觉得简单说简单的,新手觉得难的原因。简单的例子:拿筷子吃饭,你学的时候也难,只不过年纪小忘了,现在用了几十年成了顺手的事。对于新手来说就是一件难事。
欲速则不达
不积跬步无以至千里,不积小流无以成江海
本帖最后由 anr000 于 2022-9-16 22:03 编辑
学习cpp第四天
主题目练习
题目 1002: [编程入门]三个数最大值
我用的是if-else语句,实际上有很多解法用max函数更简单
主要是逻辑问题
其他解法:1、双重max函数 max((a,b),c)
if (a > b)
{
if (a > c)
max = a;
else
max = c;
}
else
{
if (b > c)
max = b;
else
max = c;
}
2、三目运算符(x?y:z;)
max = a > b ? a : b;
max = max > c ? max : c;
3、妙用中间变量
定义一个中间变量 m,假设它是最大值,并和a,b,c比较。、
if (a > b)
m = a;
else
m = b;
if (c > m)
m = c;
四、巧用赋值
假定其中一个值为最大值,将实际最大值赋值于它,最后输出
if (a < b)
a = b;
if (a < c)
a = c;
补充)任意个数求最大值(假设10个数)
运用for循环,遍历对比数组,假定中间量为最大值。(for循环经常拿来做遍历)其实就是把数组里的数都与max比较,大的赋给max就行。第二题要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.
例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。其实我第一想到的是用数组,之后想到是用ascll码#include<iostream>
using namespace std;
int main()
{
char c1, c2, c3, c4, c5;
cin >> c1 >> c2 >> c3 >> c4 >> c5;
c1 += 4;
c2 += 4;
c3 += 4;
c4 += 4;
c5 += 4;
cout << c1 << c2 << c3 << c4 << c5 << endl;
return 0;
}C语言还要注意类型,但cpp是自动判别的所以不用管改良版可以写成for循环。第三题输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9,取位2小数。本题的C语言printf函数的格式输出方式,很多人都写了,我就来普及一下利用C++语言cout方式输出格式的方式主要是通过iomanip库的fixed函数和setprecision函数
注意事项:本题出现的两个变量都注明是浮点数,所以要定义为float类或double类\
#include<iostream>
#include<iomanip>
using namespace std ;
int main()
{
float f ;
cin>>f ;
float c = 5 * (f - 32) / 9 ;
cout<<fixed<<setprecision(2)<<"c="<<c<<endl ;//fixed是小数点的意思,表示下面要对小数点后进行设置,setprecision是设置精度,括号中的数表示保留几位精度输出
//如果不用fixed,直接使用setprecision(int)则表示保留几位有效数字
return 0 ;
}
下一题有一个函数
y={x x<1
|2x-1 1<=x<10
{ 3x-11x>=10写一段程序,输入x,输出y
我写的代码(错的,不知道为啥错了)#include<iostream>
using namespace std;
int main()
{
double x,y;
cin>>x;
if(x<1)
{
y=x;
}
else if(1<=x<10)
{
y=2*x-1;
}
else
{
y=3*x-11;
}
cout<<y<<endl;
return 0;
}
输出的y要在if语句内下面看正确的#include<iostream>
using namespace std;
int main()
{
int x;
cin >> x;
if(x<1)
{
cout << x;
}
else if(1<=x && x<10)
{
cout << 2*x-1;
}
else
{
cout << 3*x-11;
}
return 0;
}
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123(明天继续)
昨天写了一个非常蠢得代码
就是倒数第二个哪个x大于等于一小于十不能那么写要这么写 1<=x&&x<10
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
解题思路:
先定义一个数组用来存放每一位数字,再定义一个 n 作为输入的数,接着定义一个 number 来记录是几位数。
定义一个 for 循环,n % 10 的值赋给 num[],这样就可以获取得最后一个数;n = n / 10 向前进位,n 是没有小数位的。此时 num[] 这个数组里面的数字和输入的顺序是相反的。再定义一个 for 循环,倒过来输出 num[],记住用空格分开的每个数字,注意最后一个数字后没有空格。最后按照 num[]的顺序输出,也就是逆序输出。z
这和栈很像。#include<iostream>
using namespace std;
int main()
{
int num;//定义一个有 5 个元素的数组
int n;
int number = 0; //记录数位
cin >> n;//获取输入的数
for (int i = 0; i < 5; i++) {//
if (n == 0) break;//如果输入的数为 0 则退出这个循环
else {
num = n % 10;//获取最后一位数,num 为最后一个数,num 是倒数第二个数
n = n / 10;//n 向前进 1 位,无小数点
number++;
}
}
cout << number << endl;//输出数位
for (int i = number - 1; i >= 0; i--) //因为位数是五,而数组从0开始所以要减一。
{
if (i != 0) {//如果 num 不是最后一个数,则加一个空格
cout << num << " ";
}
else cout << num;//输出最后一个数
}
cout << endl;//换行
for (int i = 0; i < number; i++) {
cout << num;//按照 num 顺序输出
}
return 0;
}
详解见 https://blog.dotcpp.com/a/9128
企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;
600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
可以用switch语句也可以用if语句但是比较麻烦
#include<stdio.h>
int main()
{
int m,g,b;
scanf("%d",&g);
m=g/100000;
switch(m)
{
case 0:printf("%d",b=g*0.1); break;
case 1:printf("%d",b=10000+(g-100000)*0.075); break;
case 2:
case 3:printf("%d",b=17500+(g-200000)*0.05); break;
case 4:
case 5:printf("%d",b=27500+(g-400000)*0.03); break;
case 6:
case 7:
case 8:
case 9:printf("%d",b=33500+(g-600000)*0.015); break;
case 10:
default:printf("%d",b=39500+(g-1000000)*0.01); break;
}
return 0;
}
输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<iostream>
using namespace std;
int main()
{
int m,n,gy=1,gb=1;
cin>>m>>n;
for (int i=2;i<=m&&i<=n;i++)
{
if(m%i==0&&n%i==0)
{
m/=i;
n/=i;
gy*=i;
}
gb=gy*m*n;
}
cout<<gy<<gb<<endl;
return 0;}
辗转相除法,一直不会这个方法
详解见https://blog.dotcpp.com/a/7222
#include <iostream>
using namespace std;
int main()
{
int a,b,a1,b1;
int rs=1;
cin>>a>>b;
a1=a;
b1=b;
while(rs!=0)
{
rs=a%b;
a=b;
b=rs;
}
cout<<a;
rs=a1*b1/a;
cout<<" "<<rs;
}
(补充)
如果一开始是小数对大数取余,在经过一次循环后自动会变成大数对小数取余 本帖最后由 anr000 于 2022-9-18 20:46 编辑
第5天大概
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
#include<iostream>
using namespace std;
int main()
{
int Sn=0,a=2,n,number=0;
cin>>n;
for(int number=0;number<n;number++){
Sn+=a;
a=a*10+2;
}
cout<<Sn<<endl;
return 0;
}
没啥好说的,把a=a*10+2写对就没啥问题
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
#include<iostream>
using namespace std;
int main()
{
int n,Sn=0,an=1,i;
cin>>n;
for(int i=1;i<=n;i++){
an=an*i;
Sn+=an;
}
cout<<Sn<<endl;
return 0;
}
编程思路:要点在an与an-1上,每次都是用的数学里的an=an-1*n,(数学要学好啊)
我看有人把它写成这样
for (int i = 1; i <= n; i++)
{
j = 1; //要在外面for循环执行完一次就初始化一次,要不就带入了内层for循环的值
for(int m = 0; m < i; m++)
j *= (m + 1); //求出第n个数的n的阶乘
Sn = Sn + j;//依次加上阶乘数
}
嵌套的我好晕,而且每次都得再求一次an,太麻烦了,我都替机子累
注意事项:
本题输入变量的数据范围是20以内,大家可以试验实验输入19,会发现输出了一个负数,说明结果的大小超出了int类的储存范围,故需要用long long类的变量来储存部分结果和总结果。我就没注意,记得补上 求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和
由于我第一想法是三个for循环,看了答案就不再打一遍了,注意标准流,include后面的写全了就行,还有小数点的设置。
#include<iostream>
#include<cstdio>
using namespace std ;
int main()
{
int a,b,c ;
cin>>a>>b>>c ;
int nSuma = 0,nSumb = 0 ;//a,b部分和
float fSum = 0,fSumc = 0 ;//总和,c部分和
for(int i = 1;i <= a;i++)
{
nSuma += i ;//直接累加
}
for(int i = 1;i <= b;i++)
{
nSumb += i * i ;//平方累加
}
for(float i = 1;i <= c;i++)
{
fSumc += 1 / i ;//倒数累加
}
fSum = nSuma + nSumb + fSumc ;
printf("%.2f\n",fSum) ;//printf更方便格式输出
//cout的输出方法:cout<<fixed<<setprecision(2)<<nSum<<endl ;
//fixed表示小数点,setprecision()为设置精度
return 0 ;
} 第六天,我今天发现软工cpp考试居然用英语考,简直要了我的命,当然我不能慌,其实我更害怕英语听说课。
今天开会加做作业,快给我累疯了,还来个酒鬼骑自行车摔了我还得找他去
但每天的博客不能断
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子
(想了半天没想出来,没时间了,明天想)