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 -128 到127
singed short -32768 到32767
singed int -2147483648 到2147483647
singed long -9223372036854775808 到9223372036854775807
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.指針是一種保存變量地址的變量