C语言高手 进

作者&投稿:钱蓝 (若有异议请与网页底部的电邮联系)
C语言高手进~

楼上的都有错。
正确答案是
B A A D B
A C B D B
D D D A C

第9题中while(!x)里面的!x是说如果x==0,则继续循环,因为此时!x == 1,否则只要x != 0,那么!x就等于0
第11题(m=!(3+7))&&(n=9+7),由于(x+7)非零,所以!(3+7)就为0,这样&&表达式的前半部分表达式的值是0,按照短路运算规则,整个&&表达式的值就是0,后半部分不再求值,所以m的值是0,n的值不变,还是6
第12题,if(exp), while(exp), do...while(exp)表示的都是exp非零则执行内部的语句体,exp为零退出。


xt517009140关于3题的解说并不正确。main根本不是C语言里面的关键字,不信用下面这个程序试试看:
#include

int
main(void)
{
int main = 9;

printf( "%d
", main );
return 0;
}

int fn(int n){
if (n==1 or n==2) return 1;
else return fn(n-1)+fn(n-2);
}
void main(){
int n;
scanf("%d",&n);
printf("the nth number is %d
",fn(n));
}

2
void main(){
int a[3][3],t;
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
scanf("%d",&a[i][j]);
for (i=0;i<3;i++)
for (j=0;j<i;j++){
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for (i=0;i<3;i++){
for (j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("
");
}
}

>1:typedef struct {
>2: char title[100];
>3: int (*func)();
>4:} TIPcallbacks;

说白了就是函数指针;
简单来说,比如 int add(int, int); int min(int, int);等等参数和返回值都一样的函数,你想用一个通用的方式处理,就定义一个函数指针:
int (*function)(int, int);
这样这个函数指针就可以引用到任何一个真实定义的函数:
function = &add; 或者 function = &min;

函数指针 函数指针是指向函数的指针变量。
因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为:
数据类型标志符 (指针变量名)(形参列表);
注1:“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
例一、
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d,%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。
不过,在某些编译器中这是不能通过的。这个例子的补充如下。
应该是这样的:
1.定义函数指针类型:
typedef int (*fun_ptr)(int,int);
2.申明变量,赋值:
fun_ptr max_func=max;
也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
例二、
#include<stdio.h>
void FileFunc()
{
printf("FileFunc\n");
}
void EditFunc()
{
printf("EditFunc\n");
}
void main()
{
void (*funcp)();
funcp=FileFunc;
(*funcp)();
funcp=EditFunc;
(*funcp)();
}
指针函数和函数指针的区别
1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
其定义格式如下所示:
返回类型标识符 *返回名称(形式参数表)
{ 函数体 }
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子:
#include
float *find();
main()
{
static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
float *p;
int i,m;
printf("Enter the number to be found:");
scanf("%d",&m);
printf("the score of NO.%d are:\n",m);
p=find(score,m);
for(i=0;i<4;i++)
printf("%5.2f\t",*(p+i));
}
float *find(float(*pionter)[4],int n)/*定义指针函数*/
{
float *pt;
pt=*(pionter+n);
return(pt);
}
学生学号从0号算起,函数find()被定义为指针函数,起形参pointer是指针指向包含4个元素的一维数组的指针变量。pointer+1指向 score的第一行。*(pointer+1)指向第一行的第0个元素。pt是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer.
2,“函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。
函数指针的说明方法为:
数据类型标志符 (*指针变量名)(参数);
注1:函数括号中的参数可有可无,视情况而定。下面的程序说明了函数指针调用函数的方法:
#include
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int (*ptr)();
int a,b,c;
ptr=max;
scanf("%d,%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把 哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。
关于函数指针数组的定义
关于函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。
第一种,标准方法:
{
分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。
根据分析:首先说明是一个数组:数组名[]
其次,要说明其元素的数据类型指针:*数组名[].
再次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式扩起来,根据圆括号和方括号的结合方向,那么 *数组名[]() 说明的是什么呢?是元素返回值类型为指针的函数数组。有这样的函数数祖吗?不知道。所以必须括起来,以保证数组的每一个元素是指针。
}
第二种,蒙骗法:
尽管函数不是变量,但它在内存中仍有其物理地址,该地址能够赋给指针变量。获取函数方法是:用不带有括号和参数的函数名得到。
函数名相当于一个指向其函数入口指针常量。 那么既然函数名是一个指针常量,那么就可以对其进行一些相应的处理,如强制类型转换。
那么我们就可以把这个地址放在一个整形指针数组中,然后作为函数指针调用即可。
完整例子:
#include "stdio.h"
int add1(int a1,int b1);
int add2(int a2,int b2);
void main()
{
int numa1=1,numb1=2;
int numa2=2,numb2=3;
int (*op[2])(int a,int b);
op[0]=add1;
op[1]=add2;
printf("%d %d\n",op[0](numa1,numb1),op[1](numa2,numb2));
}
int add1(int a1,int b1)
{
return a1+b1;
}
int add2(int a2,int b2)
{
return a2+b2;
}
再给出常用的C变量的定义方式:
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

错误信息是说你在ad0832.h和C:\Program
Files\HI-TECH
Software\PICC\PRO\9.60\include\pic168xa.h
中定义的RC1冲突了。
另外,#define
ad_clk
RC2;
#define
ad_do
RC3;
#define
ad_di
RC4;
这些
define语句后面不要加分号

#include<stdio.h>

void
main()
{
const
double
p=3.1415926;
double
r,a,b;
printf("请输入半径:");
scanf("%lf",&r);
a=2*p*r;
b=p*r*r;
printf("周长:%.7lf\n",a);
printf("面积:%.7lf\n",b);
}

看看这个吧
#include<stdio.h>
#include<math.h>
int
IsPrimNumber(int
Num);
int
main()
{
int
Num,flage;
printf("输入要判断的数:");
scanf("%d",&Num);
flage
=
IsPrimNumber(Num);
if(flage
==
1)
printf("%d是素数\n",Num);
else
printf("%d不是素数\n",Num);
return
1;
}
//
判断一个正整数是否是素数
int
IsPrimNumber(int
Num)
{
int
i,k;
//
负数不能判断
if
(Num
<0)
{
printf("%d
can
not
be
dicedied
prime
number!\n",Num);
return
0;
}
//
素数
k
=
(int)sqrt(Num);///////k为Num的平方根
for
(i=2;i<=k;i++)
{
if
((Num
%
i)
==0)
return
0;
}
if
(i
>
k)
return
1;
else
return
0;
}

#
include<stdio.h>
#include
<math.h>//1未包括
头文件
math.h
sqrt需要
int
main(void)
{
double
a,
b,
c;
double
detal,
x1,
x2;
char
ch;//2
未定义变量
ch
do
{printf("a
=");//3打印a变量的值
没有意义
scanf("%lf",
&a);
printf("b
=");//3
scanf("%lf",
&b);
printf("c
=");//3
scanf("%lf",
&c);
detal
=
b*b-4*a*c;
if
(detal
>
0)
{
x1
=
(-b
-
sqrt(detal))/(2*a);
x2
=
(b
-
sqrt(detal))/(2*a);
printf("有两个解:
x1
=
%fl,x2
=
%fl\n",
x1,
x2);//缺少
换行符
,不
算错
}
else
if
(detal
==
0)
{
x1
=
x2
=
(-b)/(2*a);
printf("有一个解:x1
=
x2
=
%lf\n",
x1,
x2);//缺少换行符,不算错
}
else
printf("无解\n");
printf("你想继续么?Y/X");
scanf("
%c",
&ch);
}
while('y'
==
ch
||
'Y'
==
ch);
return
0;
}


孟村回族自治县13954993905: c语言高手进 -
狐恒头孢: C语言一般用在底层开发,比如驱动,通讯协议栈,图像处理等,直接用C语言开发的应用还是比较少的.C语言不想java那些高级语言那样容易写出个小工具小程序的,所以很多人都不知道用C语言干什么.我感觉学完C语言只是个开始,因为...

孟村回族自治县13954993905: C语言高手进!!
狐恒头孢: #include "stdio.h"#include "math.h"#include "stdlib.h"int prime(int m);int main(void){ int i, m, n, count, number; printf("Input n,m:"); scanf("%d%d", &m, &n); if(m<6||n<6)exit(1);for(number=m;number<=n;number+=2) { count=0; for(i=2;i<...

孟村回族自治县13954993905: c语言高手进!
狐恒头孢: #include <stdio.h> int main(void) { long in, res; int ri, repeat; long reverse(long number); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%ld", &in); /*---------*/ res=reverse(in); printf("%ld\n", res); } getch(); } /*---------*/ long reverse(...

孟村回族自治县13954993905: c语言高手进 -
狐恒头孢: #include int max(int a,int b);void main(void){ int a,b,c; printf("输入2个整数:\n"); scanf("%d%d", c=max(a,b); printf("最大值是: %d&#...

孟村回族自治县13954993905: C语言高手进
狐恒头孢: 输出结果应该是正方形吧. 你可以把空格理解成一个字符,空一个空格就是向屏幕输出一个空格字符.

孟村回族自治县13954993905: C语言的高手进. -
狐恒头孢: #include<stdio.h> int main(){ int x; int y; printf("输入x和y,以逗号隔开:\n"); scanf_s("%d,%d", &x, &y); printf("差:%d,和:%d,积:%d,商%d,余数%d",x-y, x+y, x*y, x/y, x%y); return 0; }

孟村回族自治县13954993905: C语言编程,高手进 -
狐恒头孢: main(){ int i,j,min_i,min_j,max_i,max_j; int a[3][3],max,min; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d", min=max=a[i][j]; min_i=min_j=m...

孟村回族自治县13954993905: C语言编程高手进
狐恒头孢: #include <stdio.h> int main() { int i,j,sum; for(i=2;i<=100;i++) { sum=0; for(j=1;j<=i/2;j++) { if(i%j==0) sum+=j; } if(sum==i) printf("%d\n",i); } } ======================== #include <stdio.h> int main() { int n,i=0,m=0,T=0,N; int a[20]; scanf("%d",...

孟村回族自治县13954993905: c语言题 高手进.急急急! -
狐恒头孢: 这里的意思是这样:使用while(scanf(“%c”,&f)!=EOF)读取F 然后你可以判断读取的f再读取N,比如,如果F为B,那你可以读取字符串 如果你F为D,你可以使用%d读取 如 int main() {char f = 0; char a = 0; char b[8] = {0}; while(scanf("%c", &f)!=EOF) { if(f=='D') { scanf("%d", &a);} else if(f == 'B') { scanf("%s", b); } getchar(); printf("%c\nin:", f); } return 0; }

孟村回族自治县13954993905: C语言高手进、
狐恒头孢: #include <stdio.h> void main() { int X; double sum; printf("sum=X%%2/3+7,输入X的值求sum:\n"); //必须用%%才能输出% scanf("%d",&X); sum=double(X%2)/3+7; //必须进行强制类型转换,转换为double,否则结果会出错 printf("sum=%f\n",sum); getchar(); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网