1. 程式人生 > >10-22C/C++刷題

10-22C/C++刷題

1、有以下程式(strcpy 為字串賦值函式,strcat為字串連線函式)

#include <stdio.h>
#include <string.h>
main()
{
      char a[10]="abc",b[10]="012",c[10]="xyz";
      strcpy(a+1,b+2);
      puts(strcat(a,c+1));
}

程式執行後的輸出結果是a2yz.
解析:C語言標準庫函式strcpy,把從src地址開始且含有’\0’結束符的字串複製到以dest開始的 地址空間。。
從a[1]的地址開始(bc),把b[2]開始的字元複製到a[1],當然字串結束標誌也複製過去了。此時a[10] = “a2\0”;
strcat( a,c+1);把c[1]開始的字串接過去到a的屁股後面,a[10]=“a2yz\0”。
2、在if語句中,else前一個語句可不加“;”,這句話是錯的。
3、如果相鄰兩個格式控制符之間,不指定資料分隔符(如逗號、冒號等),則相應的兩個輸入資料之間,至少用一個空格分隔,或者用Tab鍵分隔,或者輸入一個數據後,按回車鍵,然後再輸入下一個資料。而逗號不能作為資料分隔符。
4、
在這裡插入圖片描述


解析:第四行 逗號表示式中間不能為空,必須要有表示式。
5、在這裡插入圖片描述
6、在這裡插入圖片描述
解析:A應該帶單引號才是字元。
7、在這裡插入圖片描述
解析:非常量引用的初始值必須為左值。
理解左右值:看能不能對錶達式取地址,如果能,則為左值,否則為右值。左右值都是針對表示式而言,左值是指表示式結束後依然存在的持久物件,右值是指表示式結束時就不再存在的臨時物件,在標準C++語言中,臨時量(術語為右值,因其出現在賦值表示式的右邊)可以被傳給函式,但只能被接受為const &型別。
函式形式引數是臨時量,是右值。
A中 &a=0;0是常量,用&操作符相當於可以修改常量0物件的值,而常物件的值是不能修改的為了保證安全性,一般會加const A&a=0.
8、若變數已正確的定義為float型別,要通過輸入函式scanf(“%f%f%f”,&a,&b,&c)給a賦值10,b賦值22,c賦值33,以下不正確的輸入形式是
在這裡插入圖片描述

9、在這裡插入圖片描述
解析:非法指標並不只是未分配的記憶體,而包括所有已經不能訪問的記憶體,例如指向已經返回的函式區域性變數,越過陣列邊界的地址等。兩個同類型指標相減有意義,這就是求差,但相加沒有意義。
比如兩個陣列元素一一對應,當我們已知A的X元素,而要找B中與之對應的Y時,就可以使用B+(X-A) 其中X-A就是同類型指標相減,這也是唯一的做法。
10、在c語言中下面哪個語句的結果是1?
在這裡插入圖片描述
解析:A main函式的返回值,用於說明程式的退出狀態。如果返回0,則代表程式正常退出;返回其他數字的含義由系統決定。通常,返回非零代表程式異常退出。
C:p存的是常量字串“hello”的地址,p==“hello”的值是1。如果改為char p[]=“hello”,呢麼p=="hello"的值為0.因為此時p指向了一段
(新開闢的)長度為6的記憶體區域,儲存的值"hello"的拷貝(也就是說不是原來的常量字串)。如果再修改為char p[]=“hello”; return (strcmp (p,“hello”));則返回1。