當前位置:網站首頁>江蘇大學考研885程序設計 - 填空選擇知識點,作為一名程序員我不忘初心

江蘇大學考研885程序設計 - 填空選擇知識點,作為一名程序員我不忘初心

2021-08-20 06:21:34 代碼席爾瓦


11、若 float x=2.5, y=8.2, z=1.4; int a=3,b=5; 則錶達式 x=z*b++,b=b*x,b++ 的值是:42。

解答:注意這是 逗號錶達式,並且最後是 b++,則先返回 b 的值再執行 ++。


12、編譯預處理包含::文件包括(#include)宏定義(#define)條件編譯


13、枚舉類型的定義:


#include<stdio.h>

enum Color {red, yellow, blue, white, black}; // 定義枚舉類型

enum Color w = white;

int main() {

    printf("%d", w); // 3

    return 0;

} 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

也可以定義枚舉類型的同時定義變量:


enum Color {red, yellow, blue, white, black} w = white; 


     
  • 1.
  • 2.
  • 3.

 優先級知識點


1、*(乘號)<=!=!&& 運算符中,優先級從高到低是:!*<=!=&&

2、+>=->!&& 中,優先級從高到低是:->!+>=&&

3、&&!+= 運算符中,優先級最低的是:=

4、優先級:算術運算 > 關系運算 > 邏輯運算(!除外) > 賦值運算

5、對於以下結構定義:


struct sk {

	int len;

	char *str;

} a[5], *p = a; 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

++p->str 中的 ++ 加在 指針str上

解答:C語言中 -> 的優先級 高於 ++; 相當於 ++(p->str),指針先指向元素值,再自增;

6、假定 p 所指對象的指為 20,p+1 所指對象的值為 60,則執行 *p++; 語句後,p 所指對象的值為:60;

解答:*++ 優先級相同,從右往左運算,*p++ 的效果等同於 *(p++),先執行 p++ 後再取值,所以指針後移一比特後取值,取到的值為 60。

如果改成 (*p)++ 則答案變成 21。

 指針知識點


1、若有以下說明和語句:


int a[10], *p1, *p2;

p1 = a;

p2 = &a[5]; // p2 = a + 5; 等價 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

p2 - p1 的值為:5

2、有以下程序:


#include<stdio.h>

#include<stdlib.h>



int main() {

    char *p, *q;

    p = (char *)malloc(sizeof(char) * 20);

    q = p; // p 和 q 指向同一塊內存

    scanf("%s%s", p, q); // p接收了abc, q接收了def, 後輸入的覆蓋了前面的

    printf("%s %s", p, q);

    return 0;

} 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

若從鍵盤輸入:abc def<回車>,則輸出結果是:def def

解:pq 指向同一塊堆內存,後輸入的覆蓋了前面輸入的內容。

  • scanf() 和 %s 只能錄入連續的字符串,遇到空格就結束了;

  • 區別於 gets() ) 可以錄入帶空格的字符串,遇回車才結束。

3、若有定義:


int a[3][4], *p; 


     
  • 1.
  • 2.
  • 3.

則對數組元素 a[i][j] (0<=i<3,0<=j<4)正確的引用是:*(*(a+i)+j)

解答:a[3][4] 定義了一個二維數組,a錶示二維數組a的首地址;

a[0]a[1] 看作一維數組,a[0] (或 *a) 代錶一維數組 a[0] 的首地址;

a[0][0] (或*(*a)) 代錶一維數組 a[0] 的第一個元素;

*(a+1)+1 也就是 a[1]+1,即一維數組 a[1] 的第二個元素,即 a[1][1] 的地址;

*(*(a+1)+1) 就是 a[1][1] 的值;

例:


#include<stdio.h>



int main() {

    int a[3][4];

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            a[i][j] = i+j;

        }

    }



    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            printf("a[%d][%d]=%d\t", i, j, *(*(a + i) + j));

        }

        printf("\n");

    }

} 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

a[0][0]=0 a[0][1]=1 a[0][2]=2 a[0][3]=3

a[1][0]=1 a[1][1]=2 a[1][2]=3 a[1][3]=4

a[2][0]=2 a[2][1]=3 a[2][2]=4 a[2][3]=5




4、若有定義 `char s[10]`,則下面不能錶示 `s[1]` 地址的是:(B)  

A、`s+1`  

B、`s++`  

C、`&s[0]+1`  

D、`&s[1]`



解:  

`s`是數組首元素地址,**地址** 是 **指針常量**,可以輸出 `s+1` 代錶第二個元素的地址,但是不可以執行 `s++`,因為 `s++` 等價於 `s+=1` ,**地址是常量,不能修改它的值**。  

A 中 `s+1` 代錶數組第二個元素的地址,即 `s[1]` 的地址。  

B 中 `s++` 是錯誤的,不能修改地址的值。  

C 中 `&s[0]+1`,等價於 `s+1`,正確。  

D 中 `&s[1]` 錶示 數組第二個元素的地址。




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

#include<stdio.h>

int main() {

char s[10];

printf("%x\n", s+1);    // 61fe17

// printf("%x\n", s++); // 錯誤

printf("%x\n", &s[0]+1);// 61fe17

printf("%x\n", &s[1]);  // 61fe17

return 0;

}




[](https://gitee.com/vip204888/java-p7)文件操作知識點

--------------------------------------------------------------------------



1、C(C++) 語言中的文件類型劃分為 **ASCII 文件** 和 **二進制文件** 兩種。



2、C程序中,可把整型數以**二進制形式**存放到文件中的函數時:fwrite函數



3、當文件指針已處在結尾時,函數 `feof()` 返回值是 非0;



*   `feof()` 用來判斷文件是否處於結束比特置,如果讀文件結束,`feof()`為非0值,否則為0。



[](https://gitee.com/vip204888/java-p7)數據類型

-----------------------------------------------------------------------



1、設有定義:




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

char w;int x;float y;




則錶達式 `w*x - 3.0*y` 值的數據類型為:double



解:這道題很容易做成 float,在C語言中 `小數(3.0)` 默認是 `double` 類型,而非 `float`。



2、下面正確的字符常量是:(C)  

A、`"c"`  

B、`'\\''`  

C、`'w'`  

D、`''`



解:A 中使用了雙引號,是字符串不是字符常量。  

B 中多了一個反斜杠,`'\\'` 錶示反斜杠字符,`'\''` 錶示引號字符。  

C 是正確的。  

D:C語言的 **空字符** 是 `\0` 而非 `''`(編譯不通過)。



3、若有定義語句:`int a = 7; float x = 2.5, y = 4.7;` 則錶達式 `x+a%3*(int)*(x+y)/4` 的值為 3.500000,執行 `a+=a-=a*=a;` a 的值為:0。



解答:第一問很容易寫成 `3.5`,`float` 和 `double` 都默認保留 6 比特小數。




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

#include<stdio.h>

int main() {

float a = 123456; // 123456.000000

double b = 654321; // 654321.000000

printf("%f\n%lf", a, b);

return 0;

}




[](https://gitee.com/vip204888/java-p7)函數知識點

------------------------------------------------------------------------



1、以下函數調用語句中,含有的實參個數是:2




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

calc(exp1, (exp3,exp4,exp5));




解:原理是**逗號錶達式**(從左往右計算,最終返回最右的值),本語句相當於 `calc(exp1, exp5);`



[](https://gitee.com/vip204888/java-p7)字符串賦值操作

--------------------------------------------------------------------------




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

char *s = “hello world”;

// 下列寫法也可以

char *s;

s = “hello world”;


char s[] = "I love China!";

// 下列寫法是錯誤的

/**

    char s[10];

    s = "hello world!"; // 數組名是地址,是常量,不能被賦值

**/ 


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

char c[10] = {‘c’, ’ ', ‘p’, ‘r’, ‘o’, ‘g’, ‘r’, ‘a’, ‘m’};

// 下列寫法是錯誤的

/**

char c[10];

c = {'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm'}; // 數組名是地址,是常量,不能被賦值

**/




總結:指針直接賦值、先定義再賦值都可以;數組不能先定義再賦值;



[](https://gitee.com/vip204888/java-p7)int main(int argc, char\*\* argv) 的含義

--------------------------------------------------------------------------------------------------------



問題:將程序prog.c編譯鏈接後運行:`prog -nla hello world則*(*(argv+2))` 是( )  

A.‘p’  

B.’-’  

C.‘h’  

D.‘w’



解答:  

C語言代碼的完整框架如下,平時我們常常省略 `main()` 括號中內容;




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

#include <stdio.h>

int main(int argc, char** argv) {

// 或 int main(int argc, char* argv[])

return 0;

}




C語言的 main 函數擁有兩個參數



*   `int` 類型的 `argc` 參數:錶示 **命令行參數的個數**;

*   `char**` 類型 `argv` 參數:指向一個 **字符串數組**,該數組存儲 **命令行參數內容**。  

    (注意:程序本身的名字為命令行的第一個參數)



驗證:




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

#include <stdio.h>

int main(int argc, char** argv) {

printf("%d\n", argc);		// 輸出argc的值,也就是命令行參數的個數(包括程序名)

for (int i = 0; i < argc; i++) {

    printf("argv[%d] = %s\n", i, argv[i]); // 輸出每個數組的值

}

printf("*(*(argv+2)) = %c\n", *(*(argv+2))); // 第3個參數的第1個值, 即'hello'的'h'

return 0;

}




![在這裏插入圖片描述](https://s2.51cto.com/images/20210820/1629410730722330.jpg)



[](https://gitee.com/vip204888/java-p7)程序閱讀題

========================================================================



[](https://gitee.com/vip204888/java-p7)static 注意點

-----------------------------------------------------------------------------



`static` 是**靜態變量**,定義時必須**初始化**,以後的賦值都是不起作用的。




     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

#include<stdio.h>

void test() {

int x = 0;

static int y = 5; // 只有第一次調用 test() 時 y被賦值了, 後續再調用無效

y  += ++x;

printf("%4d %4d", x, y);

}

int main() {

test();

test();

}


 1    6   1    7 

```



[](https://gitee.com/vip204888/java-p7)strcmp 字符串比較規則

---------------------------------------------------------------------------------



```

#include<stdio.h>

#include<string.h>



void f(char p[][10], int n) {

    char t[20];

    int i, j;

    for (i = 0; i < n - 1; i++) { // 冒泡排序

        for (j = i + 1; j < n; j++) {

            if (strcmp(p[i], p[j]) < 0) {

                strcpy(t, p[i]);

                strcpy(p[i], p[j]);

                strcpy(p[j], t);



# 最後分享一波我的面試寶典——一線互聯網大廠Java核心面試題庫

**以下是我個人的一些做法,希望可以給各比特提供一些幫助:**

> **[點擊《一線互聯網大廠Java核心面試題庫》即可免費領取](https://gitee.com/vip204888/java-p7)**,整理了很長一段時間,拿來複習面試刷題非常合適,其中包括了Java基礎、异常、集合、並發編程、JVM、Spring全家桶、MyBatis、Redis、數據庫、中間件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且還會持續的更新...可star一下!

![image](https://s2.51cto.com/images/20210820/1629410731470259.jpg)

**283頁的Java進階核心pdf文檔**

> Java部分:Java基礎,集合,並發,多線程,JVM,設計模式
>
> 數據結構算法:Java算法,數據結構
>
> 開源框架部分:Spring,MyBatis,MVC,netty,tomcat
>
> 分布式部分:架構設計,Redis緩存,Zookeeper,kafka,RabbitMQ,負載均衡等
>
> 微服務部分:SpringBoot,SpringCloud,Dubbo,Docker

![image](https://s2.51cto.com/images/20210820/1629410731138872.jpg)



**還有源碼相關的閱讀學習**

![image](https://s2.51cto.com/images/20210820/1629410731937815.jpg)


     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.

版權聲明
本文為[代碼席爾瓦]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2021/08/20210820062134014y.html

隨機推薦