C 基礎練習2

下面程序的輸出結果是( )

int x = 3;
do
{
printf(“%d\n”,x -= 2);  //當x=3時x-=2後x的值爲1
}while(!(-- x));//當x非0時!x結果爲0,當x=0時!x值爲非0

下面程序的輸出結果是( )

void main(){
int a[]={1,7,12,15};
int *p1=a,*p2 = p1++; //自增運算,P1++表示先賦值後自增,即現將p1的值賦給p2,P1再自增,此時p1爲a[1]
*p1 += *p2++;  //*的優先級與++一樣,所以先運算*p1=*p1+*p2,此時p1=a[1]=8;再運算P2++,此時P2=a[1]
printf(“%d %d”,*p1,*p2);
}

下面程序的輸出結果是( )

int func(int *p){

   return (*p--= 3) - 1;  //(*p--=3)表示將3賦值給*p之後p--此時p指向第一個元素,(*p--=3)-1表示(*p=3)-1與p--無關

}

void main(){
     int arr[]={10,7,5};
     int *p = arr + 1;
     printf("%d",func(p) + *p);//*p仍然指向第二個元素即3,因爲func中僅僅是形參自減而實參未改變,改變的實參指針指向的地址的值
}

下面程序的輸出結果是( )

void main(){
    int i = 1;
    switch(i){
        printf("hello ");  //不在case或者default語句中不會執行
        case 1:printf("Hi ");  //沒有break語句會執行之後的所有語句顧輸出 Hi Bye
        case 2:printf("Bye ");
    }
}

下面程序的輸出結果是( 45 )


void main(){
    int a,b = 0;
    static int c[10]={9,2,3,4,5,6,7,8,0,1};
    for(a = 0;a < 10;a ++)
        b += c[a];
    printf("%d",b);
}

運行以下程序後文件的內容爲( B )
幾種文件讀寫的方式
 (1)用”r”方式打開的文件,不能向其輸入數據,並且該文件已存在,否則出錯;
  (2)用”w”方式打開的文件,只能向該文件輸入數據,如果所打開的文件不存在,則在打開時新建一個以指定的名字命名的文件;如果指定文件存在,則在打開時將該文件刪去,然後新建一個新的文件;
  (3)如果函數fopen打開文件出錯,則fopen返回一個空指針值NULL;
  (4)在程序開始運行時,系統自動打開3個標準文件:標準輸入(stdin),標準輸出(stdout),標準出錯輸 出(stderr)。如果要使用輸入輸出終端,則不需要打開,可以直接使用,如fputc(stdout,’a’);向屏幕輸出字符a。

void main()
{
    char str[100];  //文件名
    FILE *p1,*p2;
    gets(str);
    p1 = fopen(str,”w”);//"w"爲覆蓋寫,即原文件有內容則刪除後寫
    p2 = fopen(str,”w”);  //fopen格式爲(文件名,打開方式);
    fputc(‘A’,p1);
    fputc(‘B’,p2);  //"w"打開,故將P1寫的A覆蓋後只剩B
    fclose(p1);
    fclose(p2);
}

下面程序的輸出結果是( 2 )

long fib(int n)
{ 
if(n > 2) return (fib(n - 1) + fib(n - 2));
    else return 1;
}
void main(){
printf(“%d\n”,fib(3));
}

下面程序的輸出結果是(12480 )

void main()
{
    char c = 48;
    int i,mark = 01;
    for(i = 0;i < 5;i ++)
    {
        printf(“%c”,c|mark); //|爲二進制或,規則爲有一個爲1則結果爲1
        mark = mark << 1;  //左移操作
}
}

下面程序的功能是將字符串src逆序輸出,請將下面程序的錯誤改正,缺少的代碼補全。//爲改錯語句

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

void main()
{
char *src = "hello,world";
char *dest,*d,*p;
int len,i;
len=strlen(src);  //strlren 計算字符串的長度不包含結束標誌符
dest = (char *)malloc(len);
//dest=(char*)malloc((len+1)*sizeof(char));  //len不包括結束標識符所以dest的長度要在len之上加1
p=src[len];
//p = &src[len-1];  //len-1爲字符串最後一位,且需要取地址符
d = dest;
while(len--!= 0)
    d ++ = p --;
//    *(d++)=*(p--);  //指針值得賦值需要添加“*”
//    *d = '\0';    //字符串最後一位需要添加結束標誌符
printf("%s",dest);
}

輸出結果爲a=7,b=30

#define SQUARE(x)  ((x)*(x));  //宏語句的定義

void main()
{
    int a = 5,b;
    b = SQUARE(a++);  //等價語句與a*(a++);a++,則得a=7,b=30
    printf("%d,%d",a,b);

}

運行結果爲 1,2,4,0

void main()
{
    void fun(int a[],int n);
    int a[] = {1,2,4,8};
    int i;
    fun(a,4);  //數組數據在函數調用過程中不能採用傳值調用的參數傳遞方法,而是採用傳址調用
    for(i = 0;i < 4;i ++)
      printf(“%d,”,a[i]);
}

void fun(int a[],int n)
{
    int i,*p;
    for(i = 0;i < n;i ++)
      p = &a[i];
    *p = 0;
}

下面這段程序的功能是什麼?//截取字符串從m位開始之後的所有字符,當m大於字符串長度時返回空

char str[100];
char string[100];

void main()
{
    void fun(int m);
    int m;
    gets(str);
    scanf(“%d”,&m);
    fun(m);
    printf(“%s\n”,string);
}

void fun(int m)
{
    int len,i;
    len = strlen(str);
    if(m > len)
    {
        string[0] = ‘\0’;
        return ;
}
for(i = 0;str[m - 1] != ‘\0’;i ++,m ++)
    string[i] = str[m - 1];
string[i] = ‘\0’;
}

C語言的隱式類型轉換髮生的四種情況
1、算術運算式中,低類型能夠轉換爲高類型。
2、賦值表達式中,右邊表達式的值自動隱式轉換爲左邊變量的類型,並賦值給它。
3、函數調用中參數傳遞時,系統隱式地將實參轉換爲形參的類型後,賦給形參。
4、函數有返回值時,系統將隱式地將返回表達式類型轉換爲返回值類型,賦給調用函數。


逆序/頭插法建立鏈表

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>

typedef struct Node{   //typedef 將node作爲結構體別名,之後使用時只需要別名即可,否則需要用struct Node的形式使用
    int x;
    struct Node* next;
}node;    

void main()
{
   node *s,*head;
   head=(node*)malloc(sizeof(node)); //sizeof()內的參數爲變量而非變量指針
   head->x=0;
   head->next=NULL;
   int num;
   node* temp=head;
   for(int i=0;i<20;i++)
   {
      s=(node*)malloc(sizeof(node));
      scanf("%d",&s->x);
      s->next=head->next;  //逆序即頭插法
      head->next=s;
   }
   s=head->next;  //輸出循環時使用
   while(s!=NULL)  //此處爲s!=NULL而非S->next!=NULL
   {
       printf("%d",s->next);
       s=s->next;
   }
}



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