当前位置:编程学习 > C/C++ >>

关于自学C语言,有经验的请进

本人买了一本《从零开始学C语言》,2个暑假认真看了,复习了一半、还没看到指针,断断续续的学、本人9月份高二,如果我想自学C,只看这一本书够了吗?听说以后要学离散数学、数据结构与算法分析 、汇编、这些有多少我要学的?顺序是怎么样?请指教了!
补充:我还想学php和C++,哪一个更适合我现在去了解呢?
答案:c就是c,语言就是语言,指针的话等循环递归,数组字串,函数调用,编译什么的都掌握了再看看吧,那时指针会容易看进去


往后跟着可以选择性的学点c++,c#,java,dalphi,都是一类的


php,asp,asp.net,就是一种网页服务器的编写语言,需要结合 上面提到的编程语言和数据库,html,计算机网络,linux服务器 等知识来综合学习


汇编是一种机器语言,便于机器执行,编写十分费解,学习和练习可以帮助你理解语言的真谛和计算机的原理


离散数学 数据结构 算法 这些 都算是一种精神或者思想
上面所有提到的网页语言,编程语言,网络机制等都可以最终抽象为这些原理来创造或者优化
没有代码量的积累是很难理解为什么要学这些的,当你觉得学这些有用的时候可能已经到了一个新的层次


慢慢来,真的这方便有天赋的话就能学好
其他:先给C吃透,php和C++,暂时不要看。。指针还没学到说明C你还没入门。。。好好学习。。如果你有电脑,强烈建议你下载全集整套C语言视频教程,老师讲的会比书籍更好理解。。网上很多 搜搜 开始的时候先学一门语言即可,对编程有个基本的了解,你说的那些会对你的编程技能有很大帮助,也是大学里计算机专业都要学的,但凡事还是需慢慢来,先学会走,再学会跑。 你就学C吧,其他语言什么的多了也学不过来,而且也没必要学。学好C学好数据结构和算法,这是最基础的也是最重要的,学好这几样你到大学里就已经是非常牛逼的人了,其他东西要用的时候再学也会比别人更容易学。C++之类的思想不同,这个也以后再学吧,数据结构和算法本身就不是那么好学的 给你个初学的题库和答案
clude <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "math.h"



void project1()
{
 printf("Hello C-world!\n");
 printf(" ****\n");
 printf(" *\n");
 printf(" * \n");
 printf(" ****\n");
}


/*题目:用*号输出字母C的图案。
程序分析:可先用'*'号在纸上写出字母C,再分行输出。
*/
/*求1+2+3+4…+100的和。*/
void project2()
{
 int num;//一个数
 int sum = 0;//总和


 printf("\nproject2\n");
 for(num=1;num<=100;num++)
 {
  sum += num;
 }


 printf("The sum is %d\n", sum);
}


/*
题目:输出9*9口诀。
*/
void project3()
{
 int i,j;//被乘数和乘数
 int result;//积
 printf("\nproject3\n");
 for (i=1;i<10;i++)
 { 
  for(j=1;j<=i;j++)
  {
   result=i*j;
   printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
  }
  printf("\n");/*每一行后换行*/
 }
}
//题目:有1、2、3、4个数字,能组成多少个互不相同
//                且无重复数字的三位数?都是多少?
void project4()
{
 int i,j,k;//百位,十位,个位数
 int num = 0;//计数器


 printf("\nproject4\n");
 for(i=1;i<5;i++)
 {
  for(j=1;j<5;j++)
  {
   for (k=1;k<5;k++)
   {
    if(i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
    {
     printf("%d,%d,%d\t",i,j,k);
     num++;
    }
   }
  }
  printf("\n");
 }


 printf("The total num is %d\n", num);
}


/*
打印楼梯,同时在楼梯上方打印两个笑脸。
*/
void project5()
{
 int i,j;//行数和列数


 printf("\nproject5\n");
 printf("\1\1\n");/*输出两个笑脸*/
 for(i=1;i<11;i++)
 {
  for(j=1;j<=i;j++)
  {
   printf("%c%c", 219, 219);
  }
  printf("\n");
 }
}


/*
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
*/
void project6()
{
 long f1,f2;//前两个月的数值
 int i;//个数


 printf("\nproject6\n");
 f1=f2=1;
 for(i=1;i<=20;i++)
 {
  printf("%12ld %12ld",f1,f2);
  if(i%3==0) 
  {
   printf("\n");/*控制输出,每行四个*/
  }
  f1=f1+f2; /*前两个月加起来赋值给第三个月*/
  f2=f1+f2; /*前两个月加起来赋值给第三个月*/
 }
}
/*
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
   第10次落地时,共经过多少米?第10次反弹多高?
*/
void project7()
{
 float sum=100.0;//行驶路程
 float next=50;//下一次的反弹高度
 int n;//反弹的次数


 printf("\nproject7\n");
 for(n=2;n<=10;n++)
 {
  sum=sum+2*next;/*第n次落地时共经过的米数*/
  next=next/2; /*第n次反跳高度*/
 }
 printf("the total of road is %f\n",sum);
 printf("the tenth is %f meter\n",next);
}
/*
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
*/
void project8()
{
 int n,temp,number=20;
 int a=2,b=1;
 float s=0;


 printf("\nproject8\n");
 for(n=1;n<=number;n++)
 {
  s=s+a/b;
  temp=a;a=a+b;b=temp;
 }
 printf("sum is %9.6f\n",s);
}
/*
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
*/
void project9()
{
 char c;
 int letters=0,space=0,digit=0,others=0;


 printf("\nproject9\n");
 printf("please input some characters\n");
 while((c=getchar())!='\n')
 {
  if(c>='a'&&c<='z'||c>='A'&&c<='Z')
  {
   letters++;
  }
  else if(c==' ')
  {
   space++;
  }
  else if(c>='0'&&c<='9')
  {
   digit++;
  }
  else
  {
   others++;
  }
 }
 printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}



/*题目5:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
      情况,闰年且输入月份大于3时需考虑多加一天。
*/
void project10()
{
 int day,month,year,sum,leap;


 printf("\n\nproject10\n");
 printf("please input year,month,day: ");
 scanf("%d,%d,%d",&year,&month,&day);


 switch(month)/*先计算某月以前月份的总天数*/
 {
  case 1:
  {
   sum=0;
   break;
  }
  case 2:
  {
   sum=31;
   break;
  }
  case 3:
  {
   sum=59;
   break;
  }
  case 4:
  {
   sum=90;
   break;
  }
  case 5:
  {
   sum=120;
   break;
  }
  case 6:
  {
   sum=151;
   break;
  }
  case 7:
  {
   sum=181;
   break;
  }
  case 8:
  {
   sum=212;
   break;
  }
  case 9:
  {
   sum=243;
   break;
  }
  case 10:
  {
   sum=273;
   break;
  }
  case 11:
  {
   sum=304;
   break;
  }
  case 12:
  {
   sum=334;
   break;
  }
  default:
  {
   printf("\ndata error");
   break;
  }
 }


 sum=sum+day; /*再加上某天的天数*/
 if(year%4==0) /*判断是不是闰年*/
 {
  leap=1;
 }
 else
 {
  leap=0;
 }


 if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
 {
  sum++;
 }
 printf("It is the %dth day.",sum);
}
/*
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。 
*/
void project11()
{
 int m,i,k,h=0,leap=1;
 printf("\n\nproject11\n");


 for(m=101;m<=200;m++)
 { 
  k=(int)sqrt(m+1);
  for(i=2;i<=k;i++)
  {
   if(m%i==0)
   {
    leap=0;
    break;
   }
  }
  if(leap) 
  {
   printf("%-4d",m);
   h++;
  }
  leap=1;
 }
 printf("\nThe total is %d",h);
}


/*
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
void project12()
{
 int n,i;


 printf("\nproject12\n");
 printf("\nplease input a number:\n");
 scanf("%d",&n);
 printf("%d=",n);
 for(i=2;i<=n;i++)
 {
  while(n!=i)
  {
   if(n%i==0)
   { 
    printf("%d*",i);
    n=n/i;
   }
   else
   {
    break;
   }
  }
 }
 printf("%d",n);
}
/*
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。


*/
void project13()
{
 int a,b,num1,num2,temp;


 printf("\nproject13\n");
 printf("please input two numbers:\n");
 scanf("%d,%d",&num1,&num2);
 if(num1<num2)/*交换两个数,使大数放在num1上*/
 {
  temp=num1;
  num1=num2;
  num2=temp;
 }
 a=num1;b=num2;
 while(b!=0)/*利用辗除法,直到b为0为止*/
 {
  temp=a%b;
  a=b;
  b=temp;
 }
 printf("gongyueshu:%d\n",a);
 printf("gongbeishu:%d\n",num1*num2/a);
}
/*题目: 企业发放的奖金根据利润提成。
                   利润(I)低于或等于10万元时,奖金可提10%;
                   利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
                              高于10万元的部分,可可提成7.5%;
                   20万到40万之间时,高于20万元的部分,可提成5%;
                   40万到60万之间时高于40万元的部分,可提成3%;
                   60万到100万之间时,高于60万元的部分,可提成1.5%,
                   高于100万元时,超过100万元的部分按1%提成,
                   从键盘输入当月利润I,求应发放奖金总数?
*/
void project14()
{
 long int num;
 int level;
 int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;


 bonus1 = (int)(100000*0.1);
 bonus2 = bonus1+(int)(100000*0.075);
 bonus4 = bonus2+(int)(200000*0.05);
 bonus6=bonus4+(int)(200000*0.03);
 bonus10=bonus6+(int)(400000*0.015);


 printf("\nproject14");
 while(1)
 {
  printf("\nplease input a num: ");
  scanf("%ld", &num);


  if(0 < num)
  {
   level = num / 100000;
   switch(level)
   {
    case 0:
    {
     bonus=(int)(num * 0.1);
     break;
    }
    case 1:
    {
     bonus=bonus1 + (int)((num - 100000) * 0.075);
     break;
    }
    case 2:
    case 3:
    {
     bonus = bonus2 + (int)((num-200000) * 0.05);
     break;
    }
    case 4:
    case 5:
    {
     bonus = bonus4 + (int)((num - 400000) * 0.03);
     break;
    }
    case 6:
    case 7:
    case 8:
    case 9:
    {
     bonus = bonus6 + (int)((num - 600000) * 0.015);
     break;
    }
    default:
    {
     bonus = bonus10 + (int)((num - 1000000) * 0.01);
     break;
    }
   }


   printf("bonus = %d",bonus);
  }
  else
  {
   printf("wrong num\n");
   break;
  }
 }
}


/*题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
      的结果满足如下条件,即是结果。请看具体分析:
*/


void project15()
{
 long int i,x,y;


 printf("\nproject15\n");


 for (i=1;i<100000;i++)
 { 
  x=(long)sqrt(i+100); /*x为加上100后开方后的结果*/
  y=(long)sqrt(i+268); /*y为再加上168后开方后的结果*/


  if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
  {
   printf("%ld\t",i);
  }
 }
}
void main()
{


 project1();
 project2();


 project3();
 project4();
 project5();
 project6();
 project7();
 #if 0
 project8();
 project9();
 project10();


 project11();
 project12();
 project13();
 project14(); 我可以来教你,看我的资料里有我的QQ 

上一个:结构体可以使用偏移赋值吗??
下一个:看完了c语言的书,最后一章是文件,是不c语言就算学完了,可是还有很多东西,比如说流,线程都没接触到啊

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,