hello world程序詳解
#include<stdio.h> // 標(biāo)準(zhǔn)輸入輸出庫 預(yù)編譯文件
#include<math.h> // 包含 math 庫
/*
# include 包含 <stdio.h> .h header 頭文件
stdio standard 標(biāo)準(zhǔn) i input 輸入 o output 輸出
這個(gè)文件可能包含一個(gè)輸入輸出的頭文件
C99 C語言標(biāo)準(zhǔn)
/*
// 標(biāo)準(zhǔn) int必須寫return 主函數(shù)入口
int main() {
/*
* 我的第一個(gè)C語言程序 注釋 不被編譯器識別
*/
// 這是單行注釋
printf_s("Hello World!\n"); // print 打印 format 格式化輸出
int sqrt_num = sqrt(9); // 使用math庫
printf("sqrt_num %d\n", sqrt_num);
return 0;
}
畫畫小游戲
// draw a shape of different picture
void draw_triangle() {
printf(" /|\n"); // 語句statement是按順序執(zhí)行的
printf(" / |\n");
printf(" / |\n");
printf(" / |\n");
printf("/____|\n");
}
while 循環(huán)
void print_increment() {
int number = 0; // 設(shè)置為計(jì)數(shù)器
// 判斷括號內(nèi)的expression是否為真
while (number <= 5) {
printf("%d\n", number);
number++; // number = number + 1 的簡化
}
}
// 無論表達(dá)式是非為真都會執(zhí)行一次
void test_do_while() {
int number = 6;
do {
printf("%d\n", number);
number++; // number = number + 1 的簡化
} while(number <= 5);
}
for 循環(huán)
// 遍歷數(shù)組元素
void print_array_element() {
int luckyNumbers[] = {4, 8, 15, 16, 23, 42};
int i;
for (i = 0; i < 6; i++){
printf("%d\n", luckyNumbers[i]);
}
}
結(jié)構(gòu)體
struct Student {
char name[50];
char major[50];
int age;
double gpa;
};
int main(){
struct Student student1;
student1.age = 32;
student1.gpa = 3.2;
// 這里處理字符串需要strcpy函數(shù)
strcpy( student1.name, "Jim");
strcpy( student1.major, "Business");
struct Student student2;
student2.age = 18;
student2.gpa = 2.2;
strcpy( student2.name, "Sam");
strcpy( student2.major, "Art");
printf("%f", student2.gpa);
return 0;
}
猜數(shù)字游戲
// 猜數(shù)字游戲
void guess_number_game_v1() {
int secretNumber = 5;
int guess;
while (guess != secretNumber) {
printf("Enter a number:");
scanf("%d",&guess);
}
printf("You Win!");
}
void guess_number_game_v2() {
int secretNumber = 5;
int guess;
int guessCount = 0; // 猜測次數(shù)記數(shù)
int guessLimit = 3; // 猜測次數(shù)的限制為3
int outOfGuesses = 0; // 0為假 1為真 用于切換狀態(tài)
while (guess != secretNumber && outOfGuesses == 0) {
if (guessCount < guessLimit) {
printf("Enter a number:");
scanf("%d",&guess);
guessCount++;
} else {
outOfGuesses = 1;
}
}
if (outOfGuesses == 1) {
printf("out of guesses");
} else {
printf("You Win!");
}
}
2D Arrays & Nested Loops
/*2D Arrays & Nested Loops*/
void traverse_nested_arrays() {
// 需要聲明是int類型的數(shù)組
int numbers[3][2] = {
{1, 2},
{3, 4},
{5, 6}
};
// printf("%d", numbers[0][0]); // 通過下標(biāo)訪問數(shù)組元素
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("%d,",numbers[i][j]);
}
printf("\n");
}
}
1.如何理解c語言的內(nèi)存模型與指針墩剖。
https://www.zhihu.com/question/24466000/answer/27893272
編程指北
https://www.zhihu.com/question/432288840/answer/1798182117
2.變量名儲存在哪里,變量的儲存機(jī)制是什么俩功?
https://www.zhihu.com/question/34266997#:~:text=%E5%8F%98%E9%87%8F%E9%83%BD%E8%A6%81%E5%8D%A0%E6%8D%AE%E4%B8%80%E5%AE%9A,%E7%9A%84%E5%8F%98%E9%87%8F%E7%9A%84%E5%86%85%E5%AD%98%E5%9C%B0%E5%9D%80%E3%80%82&text=%E5%8F%98%E9%87%8F%E5%90%8D%E6%98%AF%E7%BB%99%E7%BC%96%E8%AF%91,%E5%AD%98%E6%94%BE%E5%9C%A8%E5%AF%84%E5%AD%98%E5%99%A8%E4%B8%AD%E4%BA%86%E3%80%82
3.數(shù)組連續(xù)存儲的機(jī)制是?
// 變量只是內(nèi)存地址的別名 通過&取出變量的地址
int age = 30;
double gpa = 3.4;
char grade = "A";
int numbers[3] = {1, 2, 3};
printf("age: %p\ngpa: %p\ngrade: %p\n", &age, &gpa, &grade);
printf("%p\n", &numbers[0]);
printf("%p\n", &numbers[1]);
printf("%p\n", &numbers[2]);
指針是地址
指針變量是存儲地址的變量
/*
& 取變量地址
* 定義指針變量 或者解引用(取值)
*/
int age = 30;
int *pAge = &age;
int **ppAge = &pAge;
int ***pppAge = &ppAge;
double gpa = 3.4;
double *pGpa = &gpa;
char grade = "A";
char *pGrade = &grade;
printf("age's memory address: %p\n", &age);
printf("pAge 's memory address: %p\n", &pAge);
printf("ppAge 's memory address: %p\n", &ppAge);
printf("pppAge 's memory address: %p\n", &pppAge);
// * 解引用 這里是指針?biāo)赶蜃兞康闹? printf("pAge內(nèi)存儲地址所指向的值: %d\n", *pAge);
printf("ppAge 's memory address: %d\n", **ppAge);
printf("pppAge 's memory address: %d\n", ***pppAge);
/*
& 和 * 都是一元運(yùn)算符 互逆
& 取地址
* 取值
*/
printf("%d\n", age);
printf("%p\n", &age);
printf("%d\n", *&age);
printf("%p\n", &*&age);
printf("%d\n", *&*&age);
文件操作
#include <stdio.h>
void write_flie() {
// w 寫入文件 如果沒有就創(chuàng)建 或者覆蓋
FILE * fpointer = fopen("employees.txt", "w"); // fopen 打開文件
// fprintf(fpointer, "overridden"); // 這里覆蓋寫入了信息
fprintf(fpointer, "Jim, Saleman\nPam, Receptionist\nOscar, Accouning");
fclose(fpointer); // 關(guān)閉文件
}
void append_file() {
// a 在指針末尾追加寫入
FILE * fpointer = fopen("employees.txt", "a");
fprintf(fpointer, "\nKelly, Customer Service");
fclose(fpointer);
}
void read_file() {
char line[255];
char line1[255];
FILE * fpointer = fopen("employees.txt", "r");
// 使用fgets讀取一行內(nèi)容
fgets(line, 255, fpointer);
printf("%s", line);
fgets(line1, 255, fpointer);
printf("%s", line1);
fclose(fpointer);
}
int main() {
read_file();
return 0;
}