吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 847|回复: 23
收起左侧

[学习记录] c语言学习日记第一天(环境配置也能出问题?)

[复制链接]
anr000 发表于 2022-9-13 23:10
不知道算不算新手学了,但我学了大概两个月的c语言之后,就休学了,然后复学的时候告诉我c语言不学了,要学cpp,我学c语言也学得很烂,现在只会写个hello world就不错了,因为两个月我基本没练过,因为环境配置遇到了问题。但希望这些会对你们有帮助(如果我哪里写错了,请大佬指出来)
一、环境配置(你个fw,环境配置也能出问题)
没错我就是那个fw
问题:为啥我写的程序一运行devcpp就闪退,(众所周知学校教学都是用这个软件)
解决方案:据我实践,你去把win10的开发者选项打开就行。
二、hello world程序(我不打算说很细,就说一下我第三次看的还没记住的)
我们的第一个程序都是这个,c语言的我还记得,但记得不牢靠我复习一下吧(偷偷打开视频看一眼)
cpp的代码
[C++] 纯文本查看 复制代码
#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语言的代码
[C] 纯文本查看 复制代码
#include <stdio.h>
int main()
{
	printf ("hello world");
	return 0;
}

三、犯得错误,和需要注意的
1、std,return0后面的分号容易忘,头文件不用分号他不是语句(这个是C语言的一个老师枪带哦过的,我记不大清了)
2、头文件的#记得加
我犯的错误
1、endl的l写成了数字一
2.cout打错了count了
3.printf后面的括号忘了。
四。课后总结
我发现我找的课讲得不太好,不如书里讲的清楚,明天找个好的课跟。

免费评分

参与人数 1热心值 +1 收起 理由
fengge9527 + 1 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zy2389 发表于 2022-9-14 12:36
加油!相信你很快就能跟上大部队
markhoo911 发表于 2022-9-14 13:15
你说的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 ,然后点击安装微软的那个。现在你的编辑器配置好了。

第三部开始你的撸码之旅吧,右上角还有运行的三角形,运行的时候,或者第一个创建文件后会上面会弹出让你选择编译器,你就选你安装路径那个就行
vtor 发表于 2022-9-15 15:30
markhoo911 发表于 2022-9-14 13:15
你说的devcpp我没用过,但是配置环境是非常简单,这个给你写个教程吧。
现在最好用的开源编辑器当然是vsco ...

为什么不推荐集成的ide呢?
markhoo911 发表于 2022-9-16 14:00
本帖最后由 markhoo911 于 2022-9-16 14:06 编辑
vtor 发表于 2022-9-15 15:30
为什么不推荐集成的ide呢?

你是指VS或者是JB家那些??那些是付费软件。一开始不应该让新手把时间花在破解,以及学习IDE上。
我推荐的开源的,以现在学习来说绰绰有余,完全熟练后开发项目可以用,只不过项目用起来没那么顺手。

对于完全新手来说,过早使用IDE并不好,什么都是补全或者提示。但是这些语法基础是需要牢记并熟练敲打出来。等熟练语法等基础知识后,上IDE才是最好的。少走弯路。
直接IDE,什么都是点击运行,很多新手都不知道或者不熟练怎么命令行运行。等以后要是项目上线或者其他特殊情况需要命令行编译运行,是不是还要回头查找。创建项目也是,涉及的还是很多,作为老手用习惯了,当然觉得没啥。也就是为啥老鸟觉得简单说简单的,新手觉得难的原因。简单的例子:拿筷子吃饭,你学的时候也难,只不过年纪小忘了,现在用了几十年成了顺手的事。对于新手来说就是一件难事。

欲速则不达
不积跬步无以至千里,不积小流无以成江海
 楼主| anr000 发表于 2022-9-16 20:58
本帖最后由 anr000 于 2022-9-16 22:03 编辑

学习cpp第四天
主题目练习
题目 1002: [编程入门]三个数最大值
我用的是if-else语句,实际上有很多解法用max函数更简单
主要是逻辑问题
其他解法:1、双重max函数 max((a,b),c)
[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码
[C++] 纯文本查看 复制代码
#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-11  x>=10写一段程序,输入x,输出y
我写的代码(错的,不知道为啥错了)
[C++] 纯文本查看 复制代码
#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语句内下面看正确的
[Asm] 纯文本查看 复制代码
#include<iostream>[/size][/font][/backcolor][/color]
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(明天继续)

 楼主| anr000 发表于 2022-9-17 20:36
昨天写了一个非常蠢得代码
就是倒数第二个哪个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
这和栈很像。
[C++] 纯文本查看 复制代码
#include<iostream>
using namespace std;
int main()
{
    int num[5];  //定义一个有 5 个元素的数组
    int n;
    int number = 0; //记录数位
    cin >> n;  //获取输入的数
    for (int i = 0; i < 5; i++) {  //
        if (n == 0) break;  //如果输入的数为 0 则退出这个循环
        else {
            num[i] = n % 10;  //获取最后一位数,num[0] 为最后一个数,num[1] 是倒数第二个数
            n = n / 10;  //n 向前进 1 位,无小数点
            number++;
        }
    }
    cout << number << endl;  //输出数位
    for (int i = number - 1; i >= 0; i--) //因为位数是五,而数组从0开始所以要减一。
{
        if (i != 0) {  //如果 num[i] 不是最后一个数,则加一个空格
            cout << num[i] << " ";
        }
        else cout << num[i];  //输出最后一个数
    }
    cout << endl;  //换行
    for (int i = 0; i < number; i++) {
        cout << num[i];  //按照 num[i] 顺序输出
    }
    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语句但是比较麻烦
[C++] 纯文本查看 复制代码
#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,求其最大公约数和最小公倍数。

[C++] 纯文本查看 复制代码
#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
[C++] 纯文本查看 复制代码
#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:35
本帖最后由 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由键盘输入。
[C++] 纯文本查看 复制代码
#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)。
[C++] 纯文本查看 复制代码
#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,(数学要学好啊)
我看有人把它写成这样
[C++] 纯文本查看 复制代码
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类的变量来储存部分结果和总结果。我就没注意,记得补上
 楼主| anr000 发表于 2022-9-18 20:53
求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和
由于我第一想法是三个for循环,看了答案就不再打一遍了,注意标准流,include后面的写全了就行,还有小数点的设置。
[C++] 纯文本查看 复制代码
#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 ;
}
 楼主| anr000 发表于 2022-9-19 21:47
第六天,我今天发现软工cpp考试居然用英语考,简直要了我的命,当然我不能慌,其实我更害怕英语听说课。
今天开会加做作业,快给我累疯了,还来个酒鬼骑自行车摔了我还得找他去
但每天的博客不能断
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子
(想了半天没想出来,没时间了,明天想)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 15:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表