The C Programming Language Learning

1.编写函数 reverse(s),将字符串 s 中的字符顺序颠倒过来。

int reserve(char s[]){
    int i,j;
    char temp;
    i=0;
    while(s[i]!='\0')
      ++i;//find the end of string

    --i;//back off from '\0'
    j=0;
    while(j<i){
        temp = s[j];
        s[j] = s[i];
        s[i] = temp;
        --i;
        ++j;
    }

    return 0;
}

2.统计输入数字字符出现的次数

#include <stdio.h>
main(){
    int ndigit[10];
    int space,others;
    int i,c;
    for(i=0;i<10;i++)
      ndigit[i]=0;

    while((c=getchar())!='\n'){
        if(c>='0'&& c<='9')
          ndigit[c-'0']++;
    }
    for(i=0;i<10;i++)
    printf("%d %d次\n",i, ndigit[i]);
}

3.char对象占用8位,unsigned char的范围是2的8次方0到255 singed char为-128到127

4.编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、int 与 long 类型变量的取值范围。

#include <stdio.h>
#include <limits.h>
int main(){

    printf("singed char %d%d\n",SCHAR_MIN, SCHAR_MAX);
    printf("singed short %d%d\n",SHRT_MIN, SHRT_MAX);
    printf("singed int %d%d\n",INT_MIN, INT_MAX);
    printf("singed long %ld%ld\n",LONG_MIN, LONG_MAX);

    printf("unsigned char max:%u\n",UCHAR_MAX);
    printf("unsigned short max:%u\n",USHRT_MAX);
    printf("unsigned int max:%u\n",UINT_MAX);
    printf("unsigned long max:%lu\n",ULONG_MAX);

    return 0;
}
不同的机器值可能不同
singed char -128127
singed short -3276832767
singed int -21474836482147483647
singed long -92233720368547758089223372036854775807
unsigned char max:255
unsigned short max:65535
unsigned int max:4294967295
unsigned long max:18446744073709551615

5.标准库函数 strlen(s)可以返回字符串参数 s 的长度,但长度不包括末尾的’\0’

#include <stdio.h>
#include <string.h>
int main(){
    char name[] = "I like linux c";

    int l = mystrlen(name);
    printf("len:%d\n", l);


    return 0;
}
int mystrlen(char s[]){
    int len=0;
    while(s[++len]!='\0')
      ;
    return len;

}

6.算术运算符,整数除法会截断结果中的小数部分

9/4=2 9/10=0
取模运算符%:x%y的结果是 x 除以 y 的余数
9%10=9 9%3=0

7.如果某一年的年份能被 4整除但不能被 100 整除,那么这一年就是闰年,此外,能被 400 整除的年份也是闰年

/**
 *返回值1为闰年,0不是闰年
 */
int years(int year){

    if((year%4==0) && (year%100!=0)|| (year%400==0))
      return 1;
    else 
      return 0;

}

8.删除字符串s中出现的所有字符c

void squeeze(char s[], int c){

int i,j=0;
for(i=0;s[i]!='\0';i++){
    if(s[i]!=c)
      s[j++] = s[i];
}
s[j] = '\0';

}
表达式++n 先将 n 的值递增 1,然后再使用变量 n 的值,而表达式 n++则是先使用变量 n 的值,然后再将 n 的值递增 1。
也就是说,对于使用变量 n 的值的上下文来说,++n 和 n++的效果是不同的
“`

9.按位运算符

C 语言提供了 6 个位操作运算符。这些运算符只能作用于整型操作数,
即只能作用于带符号或无符号 char、short、int、long 类型:
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
<< 左移
(>>) 右移
~ 按位求反(一元运算符)
按位与运算符&经常用于屏蔽某些二进制位,置0
按位或运算符|常用于将某些二进制位置为 1

10.编写一个函数 invert(x, p, n),该函数返回对 x 执行下列操作后的结果值:将 x 中从第 p 位开始的 n 个(二进制)位求反(即,1 变成 0,0 变成 1) 的其余各,x位保持不变。

这里写图片描述

11.函数trim用于删除字符串尾部的空格符,制表符与换行符

这里写图片描述

12.在一个源程序的所有源文件中,一个外部变量只能在某个文件中定义一次,而其它文件可以通过 extern 声明来访问它(定义外部变量的源文件中也可以包含对该外部变量的extern 声明)外部变量的定义中必须指定数组的长度,但 extern 声明则不一定要指定数组的长度。外部变量的初始化只能出现在其定义中。

13.指针是一种保存变量地址的变量

这里写图片描述
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章