下面程序的輸出結果是( )
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;
}
}