我的C初学经历(一)
1.简述C
C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。
2 第一个C程序
- #include <stdio.h>
- int main(){
- printf("Hello World");
- return 0 ;
- }
解释:
#include <stdio.h>就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。(关于预处理后面的课程会讲)
函数就是实现代码逻辑的一个小的单元。
3.一个C程序有且只有一个主函数,即main函数。C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。
4.注释 C语言编译器在编译时会被自动忽略。
多行注释 /* .............. */
单行注释 //
5.标识符:
C 语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:
(1)标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。
(2)标识符是严格区分大小写的。例如Imooc和imooc 是两个不同的标识符。
(3)标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。
(4)标识符不能是C语言的关键字。想了解更多C语言关键字的知识,请查阅WIKI。
6.注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的7 .如下小例子
- #include<stdio.h>
- int main(){
- int age =19 ;
- printf("我今年%d\n"+age);
- return 0 ;
- }
8.数据类型
基本类型 =======>字符型、整形、浮点类型(单、双)
- #include<stdio.h>
- int main(){
- int age =19 ;
- char a ='e' ;
- float b =12.12 ;
- printf("今年%d岁,\n",+age);
- printf("性别是%c \n",+a);
- printf("%f\n",+b);
- return 0 ;
- }
- #include<stdio.h>
- int main(){
- int age =19 ;
- char a ='e' ;
- float b =12.12 ;
- double c = 13.14567 ;
- printf("今年%d岁,\n",age);
- printf("性别是%c \n",a);
- printf("%f\n",b);
- printf("%f\n",c);
- printf("%s\n","我是一名好孩子");
- return 0 ;
- }
- #include<stdio.h>
- int main(){
- int age = 18;
- float height = 1.85;
- char unit = 'm';
- printf("小明今年%d岁\n", age);
- printf("小明身高%f,%c\n", height, unit);
- printf("%s\n","小明现在在慕课网上学习IT技术");
- return 0;
- }
- #include <stdio.h>
- #define POCKETMONEY 10 //定义常量及常量值
- #define I 'S'
- int main()
- {
- // POCKETMONEY = 12; //小明私自增加零花钱对吗?
- printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
- printf("%c\n",'c');
- printf("%d\n",999);
- printf("%f\n",12.12);
- printf("%c",I);
- return 0;
- }
11 自动类型转换
注:字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换
12强制类型转换
- #include <stdio.h>
- int main()
- {
- double num = 2.5; //定义浮点型变量num并赋值为2.5
- int num2 = (int)num ;
- printf("num的整数部分是%d\n", num2);
- return 0;
- }
※ 算术运算符
※ 赋值运算符
※ 关系运算符
※ 逻辑运算符
※ 三目运算符
14 自增运算符
- #include <stdio.h>
- int main()
- {
- int x = 0;
- printf("x=%d\n",x++);
- printf("x=%d\n",++x);
- return 0;
- }
表达式1 ? 表达式2 : 表达式3
- #include <stdio.h>
- int main()
- {
- int money = 12 ;
- float cost =11.5 ;
- printf("能不能走%c",money>cost?'y':'n');
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int year = 2014; //今年是2014年
- //补全一下代码
- //条件:能被4整除且不能被100整除或者能被400整除的年份为闰年
- if((year%4==0&&year/100!=0)||(year%400==0)){
- printf("%s\n","是闰年");
- }else{
- printf("%s","不是闰年");
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int i,sum=0;
- i=1;
- while(i<=100) //循环条件应该是什么呢?
- {
- sum=sum+i;
- i++ ; //这里是不是应该改变循环变量的值
- }
- printf("100以内所有整数之和为:%d\n", sum);
- return 0;
- }
-
18 do-while
- #include <stdio.h>
- int main()
- {
- int number=200;
- int year=2014;
- do{
- year++ ;
- number=number*1.2 ;
- }while(number<1000);
- printf("到%d年招工规模突破1000人\n", year);
- return 0;
- }
19 for循环- #include <stdio.h>
- int main()
- {
- // 定义变量sum, num
- int sum, num;
- sum = 0;
- for(num = 0; num<=10 ; num++ ) //for循环条件与num的变化值
- {
- sum=sum+num ;
- }
- printf("10以内数的和为:%d", sum);
- return 0;
- }
for循环里面的东西必须先定义好!!!!
21.使用循环计算1-2+3-4+5-6+…-100的值22 输出一个正三角形
23 打印9*9 乘法口诀
24请使用for循环,倒序打印9*9乘法表。打印结果如下图所示
25找出0-50之间的所有素数,所谓素数就是只能被1和它本身整除的数字,比如:7,13,23等
26计算1到20之间不能被3整除的数字之和
27.
小明参加期末考试,分数等级分为A-D,等级划分方式如下:
90<=分数<=100 ,等级为A。
80<=分数<90 ,等级为B。
60<=分数<80 ,等级为C。
分数<60 ,等级为D。
28自定义方法 (最好放在main方法之前)
- #include <stdio.h>
- /* 自定义整型函数 sayLove() */
- int sayLove()
- {
- //在这里输入输出语句printf,输出内容为I Love imooc
- printf("I love Learning");
- return 0;
- }
- /* 自定义整型函数 dividLine() */
- int dividLine()
- {
- printf("%s\n", "*************");
- return 0;
- }
- /* 主函数 */
- int main()
- {
- sayLove();
- dividLine();
- return 0;
- }
- #include <stdio.h>
- /* 考虑一下哪个输出该用无参函数哪个输出该用有参函数呢? */
- int learn(){
- printf("小明在学习\n");
- return 0 ;
- }
- int learnnum(int num){
- printf("小明学习了%d课了",num);
- }
- int main()
- {
- learn();
- learnnum(3);
- return 0;
- }
- #include <stdio.h>
- int getGirth(int a,int b,int c)
- {
- if( (a+b)<=c || (a+c)<=b || (b+c)<=a ) //判断是否为三角形
- {
- printf("不构成三角形\n");
- return 0;
- }
- else
- {
- int cirf = a+b+c ; //计算三角形周长
- return cirf;
- }
- }
- int main()
- {
- /* 定义三角形三边长 */
- int a, b, c;
- a = 3;
- b = 4;
- c = 5;
- printf("三角形的周长是:%d\n",getGirth(a,b,c) ); //调用周长函数
- return 0;
- }
32 递归调用函数计算n的阶乘
小明为了学好英语,需要每天记单词,第一天记1个,第二天记2个依次类推,到第10天的时候小明一共记了多少个单词?
请用代码完成,算出小明第10天开始的时候会了多少个单词?
- #include <stdio.h>
- /* 定义获取单词数量的函数 */
- int getWordNumber(int n)
- {
- if(n == 1)
- {
- return 1; //第一天只会1个单词
- }
- else{
- return getWordNumber(n-1)+n ; //到第天会的单词数量
- }
- }
- int main()
- {
- int num = getWordNumber(10); //获取会了的单词数量
- printf("小明第10天记了:%d个单词。\n", num);
- return 0;
- }
- #include <stdio.h>
- void fn()
- {
- static int x = 1; //定义静态局部变量
- x*=2;
- printf("x=%d\n",x);
- }
- int main()
- {
- int i;
- for(i=0;i<5;i++)
- {
- fn();
- }
- extern int x; //调用外部变量
- printf("x=%d\n",x);
- return 0;
- }
- int x=100;
- #include <stdio.h>
- #include "test.c" //引用test.c文件
- extern void printLine() //这里定义的方法对吗?
- {
- printf("**************\n");
- }
- int main()
- {
- say();
- return 0;
- }
- #include <stdio.h>
- void say(){
- printLine();
- printf("I love imooc\n");
- printf("good good study!\n");
- printf("day day up!\n");
- printLine();
- }
- #include <stdio.h>
- int main()
- {
- //第一种形式
- int arrFirst[3] = {1,2,3};
- //第二种形式
- int arrSecond[] = {1,2,3};
- //第三种形式
- int arrThird[3];
- //给arrThird数组每个元素初始化
- arrThird[0]=1 ;
- arrThird[1]=2 ;
- arrThird[2]=3 ;
- //输出第一个数组中的第二个元素
- printf("%d\n", arrFirst[1]);
- //输出第二个数组中的第二个元素
- printf("%d\n", arrSecond[1]);
- //输出第三个数组中的第二个元素
- printf("%d\n", arrThird[1]);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int i ; //必须先声明变量i
- for(i=0;i<=9;i++){
- printf("%d\n",arr[i]);
- }
- return 0;
- }
37 传递数组
- #include<stdio.h>
- void temp(int arr[]){
- int i ;
- for(i=0;i<=4;i++){
- printf("%d",arr[i]);
- }
- }
- int main(){
- int arr[5]={1,2,3,4,5};
- //传递数组
- temp(arr);
- return 0 ;
- }
另一种写法
- #include <stdio.h>
- void swap(int *a, int *b); //交换两个数
- int main()
- {
- int str[10];
- int i, j;
- //初始化数组为10 9 8 7 6 5 4 3 2 1
- for (i = 0; i < 10; i++)
- {
- str[i] = 10 - i;
- }
- //排序,从a[0]开始排,从小到大
- for (i = 0; i < 10; i++)
- {
- for (j = i + 1; j < 10; j++)
- {
- if (str[i] > str[j])
- {
- swap(&str[i], &str[j]);
- }
- }
- }
- //将十个数输出
- for (i = 0; i < 10; i++)
- printf("%d\n", str[i]);
- return 0;
- }
- void swap(int *a, int *b)
- {
- int c;
- c = *a;
- *a = *b;
- *b = c;
- }
40 字符串在C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:
1、char 字符串名称[长度] = "字符串值";
2、char 字符串名称[长度] = {'字符1','字符2',...,'字符n','\0'};
注意:
1、[]中的长度是可以省略不写的;
2、采用第2种方式的时候最后一个元素必须是'\0','\0'表示字符串的结束标志;
3、采用第2种方式的时候在数组中不能写中文。
在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。例如:
.41. 声明二维数组
- #include <stdio.h>
- int main()
- {
- //使用第一种方式初始化方式声明并初始化二维数组arr1
- int arr1[2][2]={{10,20},{30,40}};
- int arr3[][2]={{20,30},{40,50}};
- //使用第二种方式初始化方式声明并初始化二维数组arr2
- int arr2[2][2];
- arr2[0][0]=10;
- arr2[0][1]=20;
- arr2[1][0]=30;
- arr2[1][1]=40;
- return 0;
- }