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