以下程序输出结果是?
#include
main(){
int i=1, j=2, k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d,%d,%d\n", i, j, k);
}
条件表达式 i++==1&&(++j==3||k++==3) 中的各个运算优先级顺序从高到低为 ++、==、&&、||,先求解 ++j==3 的值为真,且 j 的值为 3,由于是逻辑或运算,所以此时计算机不再进行 || 后面的运算,k 的值仍然是 3,该表达式变为 i++==1&&1=(1==1&&1)=(1&&1)=1,然后 i 为 2,所以输出结果为:233。
以下程序输出结果是?
#include
void fun(int x){
if(x/2>1)
fun(x/2);
printf("%d", x);
}
main(){
fun(7);
printf("\n");
}
在函数 fun(int x)的递归调用中,当 x 除以 2 的值大于 1,就接着执行函数 fun(x/2) ,所以主函数中,当执行 fun(7) 时,函数 fun 共执行两次,第一次输出 3, 第二次输出 7。
以下程序输出的结果是?
#include
#include
typedef struct{
char name[9];
char sex;
float score[2];
}STU;
void f(STU a){
STU b = {"Zhao", 'm', 85.0, 90.0};
int i;
strcpy(a.name, b.name);
a.sex = b.sex;
for(i=0; i<2; i++)
a.score[i] = b.score[i];
}
main(){
STU c = {"Qian", 'f', 95.0, 92.0};
f(c);
printf("%s,%c,%2.0f,%2.0f\n",c.name, c.sex, c.score[0], c.score[1]);
}
题目中把结构体变量作为一个整体传给相应的形参,传递的是实参结构体变量中的值。调用函数体内对形参结构体变量中任何成员的操作,都不会影响对应实参中成员的值。
函数 fun 的功能是:将字符串中的字符逆序输出,但不改变字符串的内容。
#include
void fun(char *a){
if(*a){
fun(a+1);
printf("%c", *a);
}
}
main(){
char s[10]="abcd";
printf("处理前字符串 = %s\n处理后字符串 = ", s);
fun(s);
printf("\n");
}
已给出结构体构成的链表结点 a、b、c,各个结点的数据域中均存入字符,函数 fun 的作用是:将 a、b、c 三个结点连成一个单向链表,并输出链表结点中的数据。
#include
typedef struct list{
char data;
struct list *next;
}Q;
void fun(Q *pa, Q *pb, Q *pc){
Q *p;
pa->next = pb;
pb->next = pc;
p = pa;
while(p){
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
main(){
Q a,b,c;
a.data = 'E';
b.data = 'F';
c.data = 'G';
c.next = NULL;
fun(&a, &b, &c);
}
请编写一个函数 float fun(double h),该函数的功能是:使变量 h 中的值保留两位小数,并对第三位进行四舍五入(规定 h 中的值为正数)。
例如,若 h 值为 1234.567,则返回值为 1234.570000;若 h 值为 1234.564,则返回值为 1234.560000。
#include
#include
#include
float fun(float h){
long t;
t = (h*1000+5)/10;
return (float)t/100;
}
void main(){
FILE *wf;
float a;
system("CLS");
printf("Enter a: ");
scanf("%f", &a);
printf("The original data is: ");
printf("%f\n\n", a);
printf("The result : %f\n", fun(a));
wf = fopen("out.dat", "w");
printf(wf,"%f", fun(8.32566));
fclose(wf);
}
逻辑上没有出问题,但是由于 编译器问题涉及精度问题,故而没能输出理论结果。