c语言 指针编程实验 设计一个函数,它有三个参数 (1) 被查找的字符串str; (2) 待查找的字符xCh; (3

c语言 指针编程实验 设计一个函数,它有三个参数 (1) 被查找的字符串str; (2) 待查找的字符xCh; (3,第1张

楼主,第三个参数有点看不懂、、

我用前两个参数来完成你的函数

int count(char s, char c)

{

int i;

int num = 0;

for(i = 0; i < strlen(s); i++)

{

if(s[i] == c)

num++;

}

return num;

}

楼主可以参考我的将第三个参数放进去,如果还不会就将第三个参数讲明白点,我看懂了帮你加

main()

{

int a,b,c,s;

printf("请任意输入三个整数或者inpur a,b,c\n");

scanf("%d%d%d",&a,&b,&c,a,b,c);

s=(a+b+c)/3;

printf("a=%d,b=%d,c=%d\n",a,b,c);

printf("%d\n”,s);

} 我也刚自学C 希望能帮到你。。自己测试了一下 可以运行

#include

#include

//用到了rand函数,所以要有这个头文件

#include

//用到了time函数,所以要有这个头文件

int

main()

{

int

number;

//number用于存储随机数

int

guess=0;

//guess用于存储玩家猜的数

srand((unsigned)

time(null));//用系统时间作为rand函数使用的种子

number=rand()%100;

//随机除以100,取余数

number++;

//余数加1

printf("猜数字游戏\n");

printf("该数字在1到100之间\n");

while(guess!=number)

{

printf("请输入您所猜的数:");

scanf("%d",&guess);

//如果玩家猜的数较小,给予提示

if

(guess

number)

{

printf("大了\n");

}

}

//猜中则循环结束,输出猜中的数字

printf("猜对了,这个数字就是:%d\n",number);

return

0;

}

学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验一 上机 *** 作初步和简单的C程序设计

一、 实验目的

1、熟悉C语言运行环境Turbo C++30

2、会简单的程序调试

3、熟悉C语言各种类型数据的输入输出函数的使用方法

4、掌握顺序结构程序设计

二、 实验内容

1、 上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题17)

2、 编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题16)

3、 设圆半径r=15,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 30中不能输入汉字,只能输入英文或拼音。(习题48)

4、 运行如下程序,写出运行结果。

#include <stdioh>

void main()

{

int a=1,b=2;

a=a+b; b=a-b; a=a-b;

printf("%d,%d\n",a,b);

}

三、 实验步骤与过程

四、程序调试记录

c语言实验心得:

1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。

2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。

3、常量放到code区,如字库、修正系数。

4、逻辑标志变量可以定义到bdata中。

在51系列芯片中有16个字节位寻址区bdata,其中可以定义816=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。

5、data区内最好放局部变量。

因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;

6、确保程序中没有未调用的函数。

在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。

7、如果想节省data空间就必须用large模式。

将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。

8、使用指针时,要指定指针指向的内存类型。

在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为: char data p;。还可指定指针本身的存放内存类型,如:char data xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。

以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:

从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx(不重要的补充:c中idata做指针式的访问效果很好)

xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

三、有关单片机ALE引脚的问题

"单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6每当访问

外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲"这句话是不是有毛

病我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我

小弟感激涕零

答:

其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE

四、如何将一个INT型数据转换成2个CHAR型数据?

经keil优化后,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。

五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX

六、typedef 和 #define 有何不同

typedef 和 #define 有何不同》》》 如

typedef unsigned char UCHAR ;

#define unsigned char UCHAR ;

typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了

一个新的名字

#define只是一个标号的定义

你举的例子两者没有区别,但是#define还可以这样用

#define MAX 100

#define FUN(x) 100-(x)

#define LABEL

等等,这些情况下是不能用typedef定义的

七、请问如何设定KELC51的仿真工作频(时钟)

用右键点击左边的的target 1,然后在xtal一栏输入

八、不同模块怎样共享sbit变量,extern不行

把SBIT定义单独放到一个H中,每个模块都包含这个h文件

九、C51中对于Pxx的访问必须自己定义吗?

是的。

如sbit P17 = 0x97;即可定义对P17的访问

十、SWITCH( )语句中表达式不可以是位变量对吗?

可以用位变量:

#include

#include

void main()

{

bit flag;

flag=0;

switch(flag)

{

case '0':{printf("0\n");break;}

case '1':{printf("1\n");break;}

default:break;

}

}

bit 变量只有两种状态,if 语句足够啦,!!!

十一、const常数声明占不占内存???

const 只是用来定义“常量”,所占用空间与你的定义有关,如:

const code cstStr[] = {"abc"};

占用代码空间;而如:

const char data cstStr[] = {"abc"};

当然占用内存空间。

另外,#define 之定义似乎不占用空间。

十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?

试一试将auxr1清0,然后在c语言中直接声明xdata类型的变量

十三、BUG of Keil C51

程序中用如下语句:

const unsigned char strArr[] = {"数学"};

结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪!

凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]=

{0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。

十四、Keil C51中如何实现代码优化?

菜单Project下Option for target "Simulator"的C51

看到Code optimization了吗?

十五、请教c的!和 ~ 符号有甚区别??

!是逻辑取反,~是按位取反。

十六、c51编程,读端口,还要不要先输出1?

我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事?谢了

要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。

十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I/O口呢?

p35完全可以当普通的io使用

十八、C51中 INT 转换为 2个CHAR?

各位高手:

C51中 INT 转换为 CHAR 如何转换诸如:

X = LOW(Z);

Y = HIGH(Z);

答:

x=(char)z;

y=(char)(z>>8);

十九、如果我想使2EH的第7位置1的话,用位 *** 作可以吗?

现在对位 *** 作指令我一些不太明白请各位多多指教:

如 SETB 07H 表示的是20H7置1,对吗?(我在一本书上是这么看到的)

那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢?谢谢!

SETB 77H

setb (2eh-20h)8+7

20h-2fh每字节有8个可位 *** 作(00h-7fh),其它RAM不可位直接 *** 作

二十、char addr=0xc000 和char xdata addr=0xc000有何区别?

char addr=0xc000;

char xdata addr=0xc000;

除了在内存中占用的字节不同外,还有别的区别吗

char addr=0xc000; 是通用定义,指针变量 addr 可指向任何内存空间的值;

char xdata addr=0xc000; 指定该指针变量只能指向 xdata 中的值;

后一种定义中该指针变量(addr)将少占用一个存储字节。

uchar xdata addr=0xc000;指针指向外ram;

如果:data uchar xdata addr=0xc000;指针指向外ram但指针本身存在于内ram(data)

以此类推可以idata uchar xdata addr=0xc000;pdata uchar xdata addr=0xc000;

data uchar idata addr=0xa0;

二十一、while(p1_0)的执行时间?

假设,P1_0为单片机P1口的第一脚,请问,

while(P1_0)

{

P1_0=0;

}

while(!P1_0)

{

P1_0=1;

}

以上代码,在KEIL C中,需要多长时间,执行完。能具体说明while(P1_0)的执行时间吗?

仿真运行看看就知道了,

我仿真了试了一下,约14个周期

二十二、怎样编写C51的watchdog程序?

各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查

找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入

主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端

初始花程序,使他一运行,就设置开门狗?

可以在startupa51中加入看门狗刷新指令,当然用汇编,然后重新编译startupa51

,将他和你的程序连接即可。新的startupa51会自动代替系统默认的启动模块。

二十三、keil C51 怎样把修改的startupa51 加到工程文件中

直接加入即可

注意不要改动STACK,C_START,C_STARTUP等符号。startupa51直接加入项目,不用修改也可。可在内面自己修改汇编的一些限制或堆栈指针。

二十四、关于波特率的设置

我在设定串口波特率时发现一个问题:在晶体震荡器为110592MHz时,若设9600BPS的话,

TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?

如果变了,又为什么?(因为我看书上俩个是一样的),希望大家点拨。

答:

当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。

TH1和TL1的值不变

二十五、如何在C中声明保留这部分RAM区不被C使用?

我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:

DSEG AT 20H

AA: DS 10

这样C51就不会占用20H--29H了

或者在c51里这样定义:

uchar data asm_buff[10] _at_ 0x20;

二十六、问浮点运算问题

我在用C51时发现它对传递浮点参数的个数有限制,请问:

1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有限制吗?

2)这种传递浮点参数的限制有多少呢?

3)floatfloat的结果是float类型还是double类型能否直接赋值给float类型的变量?

答:

由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有限制。

不过KEIL提供了一个编译参数,可以支持更多参数的传递。具体

的内容见KEIL的PDF文档。

我建议你把多个要传递的参数定义到指针或结构体中去,传递参

数通过指针或结构进行,这样好一些。

第3个问题回答是YES,你自己试试不就知道了。

二十七、如何在某一个地址定义ram

用_at_ 命令,这样可以定位灵活一点的地址

uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM

将dis_buff[16]定位在0x6020开始的16个字节

二十八、keil c中,用什么函数可以得到奇偶校验位?

例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。

#include

unsigned char parity(unsigned char x){

x^=x;

if(P)return(1);

else return(0);

}

unsigned char parity2(unsigned int x){

#pragma asm

mov a,r7

xrl ar6,a

#pragma endasm

if(P)return(1);

else return(0);

}

1、求1+2+3+………+100。(循环)答案#includevoidmain(){inti,sum=0;for(i=1;ivoidmain(){inta,b,c,d;scanf("%d,%d,%d",&a,&b,&c);d=max(a,b,c);printf("max=%d",d);getch();/暂停看运行结果/}intmax(intx,inty,intz){intu;if(x>=y&&x>=z)u=x;elseif(y>=x&&y>=z)u=y;elseu=z;return(u);4用起泡法对十个数据排序(数组实现)答案#includemain(){inti,j,t;staticinta[10]={5,7,4,2,3,6,1,0,9,8};for(j=0;ja[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}}}for(i=0;imain(){inta[10],i=0;for(i=0;i=0;i--)printf("%f",a[i]);}6输入两个数,交换他们的值并输出。(元素交换)答案#includeintmain(){intm,n,temp;scanf("%d%d",&m,&n);if(mvoidmain(){inti=1;for(i;i='a')a[i]=a[i]-32;printf("%c",a[i]);}printf("\n小写为:");for(i=0;i=65&&c=97&&c=48&&c=100&&xvoidmain(){charc;while((c=getchar())!='\n'){c=c+4;if(c>'Z'+4||c>'z')c=c-26;}printf("%c",c);}printf("\n");}12,P1115556(switch)55#includemain(){intx,y;printf("输入x:");scanf("%d",&x);if(xmain(){floatscore;chargrade;case2:printf("请输入学生成绩:");scanf("%f",&score);while(score>100||(scorevoidmain(){intyear,leap;scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear\n")}5614,P31例217例218217输出50个学生中成绩高于80分者的学号和成绩218输出2000——2500年每一年是否闰年#includevoidmain(){intyear;year=2000;go:if(((year%4==0)&&(year%100!=0))||(year%400==0))printf("%disrunnian",year);if(year2500)gotoend;gotogo;end:getch();}希望对你有所帮助

c语言程序设计第三版指导答案

 

附录F  课后题参考答案 

习  题  1 

11  填空题 

1.函数 

2.主函数main();主函数main() 3.主函数main() 4.函数首部;函数体 5.{;} 

6.顺序结构;选择结构;循环结构 7.c;obj;exe 

12  思考题 

1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构 

2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。 

3.略 4.略 5.略 13  编程题 1.答: 

#include "stdioh" main() 

{  float a=10, b=20, h=5, s;    s=(a+b)h/2; 

   printf("s=%f " , s ); } 

2.答: 

#include "stdioh" 

main() 

{  printf("");    printf("        hello  world         ");    printf(""); }

习  题  2 

21  单选题 

DBDCA  DCABB  CA 

22  填空题 

1.2000000  

 

2.1;0500000 

3.9;2 4.6 5.100;d 6.(1)20     

(2)0   

 

 (3)60 7.(1)10;6;4     

(2)6;9;15  

 (3)3;60;83 

8.55或 '7' 

9.x=4;y=6;z=3;m=463 

23  改错题(略) 

习  题  3 

31  单选题 

BDABC  ADCAC  BBA 

32  填空题 

1.3 2.261 3.10 

4.2, 1;互换a,b的值 5.66 6.003 7.7 

8.50,4,c=3<Enter> 

9.i=10,j=20<Enter> 

10.   (1)65   (2)65,A   (3)314,12346 

  (4)3141600e+000,1234560e+002   (5)8765432100   (6)8765432e+003

11.a=2b=5x=88y=7634c1=65c2=97 12.%d/%d;%d/%d=%2f\n 

33  改错题(略) 34  编程题 

1.答: 

#include "stdioh" main() { 

  int x,y; 

  scanf("%d%d",&x,&y);   printf("\t\tx\ty\n"); 

  printf("十进制数\t%d\t%d\n",x,y);   printf("八进制数\t%o\t%o\n",x,y);   printf("十六进制数\t%X\t%x\n",x,y); } 

2.答: 

#include "stdioh" main() { 

  char ch; 

  printf("请输入一个大写英文字母");   scanf("%c",&ch); 

  printf("大写英文字母是%c\n",ch);   printf("它的前导字符是%c\n",ch-1);   printf("它的后续字符是%c\n",ch+1); } 

3.答: 

#include "stdioh"   main()   { 

  int x,a,b,c,y; 

  printf("请输入一个三位整数\n");   scanf("%d",&x);   a=x/100; 

  b=(x-a100)/10;   c=x%10; 

  y=c100+b10+a; 

  printf("反向输出该整数:%d\n",y);   } } 

4.答: 

#include "stdioh" main() 

{  int hour; 

  double salary, salaryday; 

  scanf("%d,%lf", &hour, &salaryday ); 

  salary=hoursalaryday- hoursalaryday01; 

printf("%82lf\n", salary); } 

5.答: 

#include "stdioh" main() { 

  int a,b,c,t; 

  printf("请输入三个整数\n");   scanf("%d%d%d",&a,&b,&c); 

  printf("交换前a=%d,b=%d,c=%d\n",a,b,c);   t=a;a=c;c=b;b=t; 

  printf("交换后a=%d,b=%d,c=%d\n",a,b,c); } 

习  题  4 

41  单选题 

BADDD  ACBBB  BA 

42  填空题 

1.1 

2.(1)a>0 || b>0     

 

 

 

 

 (2)x>0 && x<=10   (3)a==15 && b==15 && c==15    

(4)p<a || p<b || p<c  

3.(1)0    (2)1    (3)1    (4)0    (5)1 

4.c=1 5.-4 6.1 7.5, 0, 3 8.5 9.123 

10.( cvb= ='y'||cvb= ='Y')&&(work>=3||college=='y'|| college=='Y')&&age<=35 

43  改错题(略) 44  编程题 

1.答 

#include "stdioh" 

#include "mathh" main() { 

  double a,b,c,p,area; 

  scanf("%lf%lf%lf",&a,&b,&c); 

  printf("三角形的三边为:%llf,%1lf,%1lf\n",a,b,c);  if (a+b>c&&a+c>b&&b+c>a)  {p=(a+b+c)/2;

area=sqrt(p(p-a)(p-b)(p-c)); 

  printf("三角形的面积为%2lf\n",area);  }  else 

  printf("不能构成三角形\n"); } 

2.答: 

#include "stdioh" main() 

{ int x,y; 

  scanf("%d,%d",&x,&y);   if(xx+yy>1000)  

     printf("%d\n",(xx+yy)/100);   else 

     printf("%d\n",x+y); } 

3.答: 

#include "stdioh" #include "mathh" main() 

{ double x,y; 

  scanf("%lf",&x);   if(x<-2)       y=xx-sin(x);   else if (x<=2)     y=pow(2,x)+x;   else     y=sqrt(xx+x+1); 

  printf("x=%2lf y=%2lf\n",x,y); } 

4.答: 

#include "stdioh" main( ) 

{ long ge,shi,qian,wan,x;    scanf("%ld",&x);    wan=x/10000; 

   qian=x%10000/1000;    shi=x%100/10; 

   ge=x%10; 

   if (ge==wan&&shi==qian)       /个位等于万位并且十位等于千位/     printf("this number is a huiwen\n");    else      

 printf("this number is not a huiwen\n"); 

5.答: 

#include "stdioh"  main() 

{  float p,w,s,d,f; 

scanf("%f,%,%f",p,s,w);    if (s>3000) d=015    else if( s>=2000) d=01;    else if(s>=1000) d=008;    else if(s>=500) d=005;    else if(s>=250) d=002;    else  d=0    f=pws(1-d);    printf("%f",f); } 

6.答: 

#include "stdioh" main() 

{  int year,money;    char x; 

   printf("是否是本公司产品(y/n):");    scanf("%c",&x); 

   if(x=='y'||x=='Y') 

      {printf("产品使用的年限:");       scanf("%d",&year); 

     if(year<=1) money=0; 

    else if(year<8) money=50;     else money=100; 

  

  printf("产品保修额是:%d\n",money); 

   } 

   else  

   {  money=200; 

     printf("不是本公司产品,产品保修额是:%d\n",money);    } } 

7.答: 

#include "stdioh" main() 

{  int money,num1,num2; 

   printf("请输入取款额(≤2000):");    scanf("%d",&money); 

   if(money>2000) printf("请输入取款额数≤2000!\n");    else      if(money%50==0)      { num1=money/100;        num2=(money-num1100)/50;         printf("需支付100元:%d张\n",num1);        printf("需支付50元:%d张\n",num2);       }    else       printf("输入钱数必须是50的倍数!\n"); }

习  题  5 

51  单选题 

CDABA  ABDDB  DBCB 

52  填空题 

1.2 0 2.333  

3.(1)i<10 或 i<=9    (2)j%3!=0 

4.(1)flag(float)k/(k+1) 或10flagk/(k+1)   (2)flag=-flag 5.(1)max=x   

 

  

(2)x!=-1    (3)scanf("%d", &x) 

6.(1)x<=9或x<10    

(2)y=9-x 

53  改错题(略) 54  编程题 

1.答: 

(1)for循环,其他略 

#include "stdioh" 

main() 

{ int i,s=0; 

  for(i=1;i<=100;i++)   s+=ii; 

  printf("%d\n",s); } 

(2)for循环,其他略 

#include "stdioh" main() 

{ int i=1,p=1;   double s=1;   do   { 

      s+=10/p;       p=++i; 

  }while(10/p>1e-6);   printf("%lf",s); } 

2.答: 

#include "stdioh" main() 

{  int m,n,t,a,b; 

   scanf("%d,%d" ,&m,&n)     if (m<n)

{ t=m m=n n=t }    a=m;    b=n;    t=m%n     while(t) 

   { m=n  n=t t=m%n;}    printf("%d",n); } 

3.答: 

#include "stdioh" main() 

{  int x,y,s=1; 

   scanf("%d,%d",&x,&y)     for( y>0 y--)s=x  

   printf("%d,%d,%d\n ",s%10,s/10%10,s/100%10); } 

4.答: 

#include "stdioh" main() 

{ int x,y,z; 

  for( x=1  x<20 x++)   for( y=1 y<33 y++)   { z=100-x-y  

        if ((z%3)==0 &&(5x+3y+z/3)==100)     printf("x=%d,y=%d,z=%d\n",x,y,z)    } } 

5.答: (a) 

#include "stdioh" main() 

{ int j,k  

   for( j=1 j<=4 j++) 

  {  for(k=1;k<=4-j;k++)printf(" ");    printf("")           printf("\n")    } } 

(b) 

#include "stdioh" main() 

{  int j,k  

   for( j=1 j<=4 j++) 

  {for(k=1;k<=4-j;k++)printf(" ");      for(k=1 k<=2j-1 k++)      printf("")          printf("\n")    } } 

6.答: 

程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。 

#include <stdioh> main() {   int i,j,k,n;   printf("water flower'number is:");   for(n=100;n<1000;n++)   {     i=n/100;/分解出百位/     j=n/10%10;/分解出十位/     k=n%10;/分解出个位/     if(n==iii+jjj+kkk)     {      printf("%-5d",n);     }   }   printf("\n"); } 

7.答: 

#include <stdioh> main() {   int x;   for(x=1000;x>=3;x--)   if(x%3==1&&x%5==2&&x%7==3)   { 

      printf("该校的学生人数是:%d人\n",x);       break;   } } 

8.答: 

#include <stdioh> main() {    int x=12,i=1;    while(1) 

   {  if((x+20+i)==2(x+i)) break;        i++;    }    printf("小明母亲在%d年后比小明的年龄大一倍\n",i);    printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁\n",x+i,x+20+i); } 

习  题  6 

61  单选题 

DBCCB   BDC

C语言程序设计教程(第3版) 

  278 

62  填空题 

1.c 2.60 3.1000  10 4.16  

63  编程题 

1.答: 

#include "stdioh" #include "mathh" 

#define  F(a)  aa+ sqrt(3aa+2a+1) main() 

{   float  x, f; 

    scanf("%f", &x ); 

    f=45/F(exp(x))+F(cos(x))+F(sqrt(x))/F(xx)      printf("%f\n", f); } 

习  题  7 

71  单选题 

BCADA  CCCDA  BCBDB 

72  填空题 

1.(1)2 3 4 5   (2)10010    (3)QuickC  

 

(4)10000        01000        00100        00010        00001   (5)Language 

(6)Language Programming 2.(1)j+=2   (2)a[i]>a[j] 3.(1)i=1    (2)x[i-1] 

73  改错题(略) 74  编程题 

1.答: 

#define N 10  

#include "stdioh" main()  

{ int a[N]={1,2,3,4,5,6,7,8,9,10,osum=0, qsum=0,j;   for(j=0;j<10;j++) 

  if( j%2) qsum+=a[j];

else osum+=a[j]; 

 printf("osum=%d,qsum=%d\n", osum,qsum); } 

2.答: 

#define N 10 

#include "stdioh"  main() 

{ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x;   scanf("%d",&x);   for(j=0;j<N;j++) 

        if (x<a[j]) break; if(j==N) a[N-1]=x;  else 

{for(k=N-1; k>j; k--)      a[k]=a[k-1]; a[j]=x;} 

  for(j=0;j<N;j++) 

       printf("%d   ",a[j]); } 

3.答: 

#define M 3 

#include "stdioh" main() 

{  int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;    for( j=0;j<M;j++) 

        for(k=0;k<M;k++)           if (a[j][k]!=a[k][j]) { flag=0; break;}    if (flag) printf("ok");    else printf("NO"); } 

4.答: 

#include "stdioh" #include "stringh" main() 

{  char c1[10],c2[10],j;    gets(c1); gets(c2); 

   for(j=0; (c1[j]==c2[j]) && c1[j] && c2[j]; j++);    if (c1[j]>c2[j]) printf("%d\n",1);    if (c1[j]<c2[j]) printf("%d\n",-1);    if (c1[j]==c2[j]) printf("%d\n",0); } 

5.答: 

#include "stdioh" #include "stringh" #define M 3 #define N 80 main() 

{  char a[M][N],j,k,n[5]={0};    for(j=0;j<M;j++)     gets(a[j]);

for(j=0;j<M;j++) 

  for(k=0;a[j][k];k++) 

    if( a[j][k]>='A' && a[j][k]<='Z') n[0]++; 

    else if (a[j][k]>='a' && a[j][k]<='z') n[1]++;     else if (a[j][k]>='0' && a[j][k]<='9') n[2]++;     else if (a[j][k]==' ' ) n[3]++;     else     n[4]++; 

    for(j=0;j<5;j++)      printf("%4d", n[j]); } 

习  题  8 

81  单选题 

DBDAC  BACCC 

82  填空题 

1.(1)2, 1     (2)10#30#   (3)FOUR, P    (4)60 

2.(1)49  

  (2)2      

(3)2    

 

  (4)     

 

(5)     

83  改错题(略) 84  编程题 

1.答: 

#include "stdioh" 

main() 

{  int n1,n2,n3,t;    int p1,p2,p3; 

   printf("please input 3 number:n1,n2,n3:");    scanf("%d,%d,%d",&n1,&n2,&n3);    p1=&n1; 

   p2=&n2;    p3=&n3; 

   if(p1> p2) { t=p1;p1=p2;p2=t;} 

   if(p1>p3) { t=p1;p1=p3;p3=t;}    if(p2>p3) { t=p2;p2=p3;p3=t;} 

   printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3); } 

2.答: 

#include "stdioh" #define N 3 main() 

{  int a[N],p=a;    for(;p-a<N; p++)    scanf("%d",p);    p=a+N-1; 

   for(;p-a>=0; p--)      printf("%d ",p); } 

3.答: 

#include "stdioh" main() 

{  int a[10]; 

   int j,minl=0,maxl=0;    for(j=0;j<10;j++) 

       scanf("%d", a+j);    for(j=0;j<10;j++) 

     { if(a[maxl]<(a+j))  maxl=j;      if(a[minl]>(a+j))  minl=j;    } 

   j=a[0]; a[0]=a[minl];a[minl]=j;    j=a[9];a[9]=a[maxl];a[maxl]=j;    for(j=0;j<10;j++)    printf("%d ", (a+j)); } 

4.答: 

    输入阵列如下:   1   2   3   4                      5   6   7   8                      9   10  11  12     输出阵列如下: 

                     12  11  10  9                      8   7   6   5                      4   3   2   1 

#define M 3 

#define N 4 

#include "stdioh" main() 

{  int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,p=&a[0][0],t;    for(k=0,j=MN-1;k<j;k++,j--) 

   {  t=(p+k); (p+k)=(p+j); (p+j)=t;}    for (k=0 k<M k++)    {  for(j=0 j<N j++) 

   printf("%4d ",a[k][j]);      printf("\n");

 } } 

5.答: 

#include "stdioh" main() { 

   int len; 

   char str[20],p=str; 

   printf("please input a string:\n");    scanf("%s",str);    len=0; 

   while(p!='\0')    { 

      len++;       p++;    } 

      printf("the string has %d characters\n",len); } 

6.答: 

#include "stringh" #include "stdioh" main() { 

   char str1[5],ch[5][20],k,t,j,c; void sort(char );    for(k=0;k<5;k++)     {str1[k]=ch[k];     gets(str1[k]);}    for(k=0;k<7;k++) 

   {  t=k; 

      for(j=k+1;j<5;j++)      if(strcmp((str1+t),(str1+j))>0) t=j;      c=(str1+t); 

    (str1+t)=(str1+k)      (str1+k)=c     } 

   for(k=0;k<5;k++)     puts(str1[k]); } 

习  题  9 

91  单选题 

CBBAD  DBCCD  DCABC  BCCBA  DCDAB

92  填空题 

1.120 2.x 3.3,2,2,3   4.fac /i 5.8,17 6.9 7.10/(ii)   8. 

    fun-in:30,20,10     fun-end:1015,35,1050      10,20,30 9.012345   10.93636  11.(1)r+b[k]  (2)x 

12.7 5 3 1 9 13.15 

14.(1)x    (2)t 15.(1)'\0'    (2)n++ 16.024 

93  改错题(略) 94  编程题 

1.答: 

void  zhuan( ) 

{  char ch; 

   while((ch=getchar())!='\n') 

   {    if(ch>='a' && ch<='z') ch=ch-32;         putchar(ch);    } } 

2.答: 

double expp(int n) { int k, fac=1;  double sum=1; 

  for(k=1; k<=n; k++)   { fac=k; 

     sum+=10/fac    } 

  return(sum); } 

3.答: 

int  xy3( int x, int y)

{ int k, num=1; 

  for(k=1;k<=y  k++)     num=x  

  num=num%1000    return num  } 

4.答: 

int age( int n) { int c; 

  if(n==1) c=10  

  else c=age(n-1)+2    return c  } 

5.答: 

#include "stdioh" 

 main() 

{  int a,b,c,d; 

   void fun(int a,int b,int c, int d);    scanf("%d%d",&a,&b);    fun(a,b,&c,&d); 

   printf("%d %d",c,d); 

void fun(int a,int b,int c, int d) {  if (b) 

    { c=a/b; d=a%b;} } 

6.答: 

#include "stdioh" 

main(int argc,char argv[]) {  int k; 

    printf("argc=%d\n",argc);     for (k=1;k<argc; k++)          printf("%s\n",argv[k]); } 

习  题  10 

101  单选题 

CDBBB  BBBAD  CCBDC   

102  填空题 

1.所有结构体成员所占存储空间的总和 2.与占用存储空间最大的那个成员相等 

附录F  课后题参考答案 

 

  285 

3.(1)struct satype  (2)3   (3)saa   (4)9   (5)psa=&sa 4.80 5.struct node 6.0 

103  编程题 

1.答: 

#include "stdioh" 

struct student { 

  long  num; 

  char  name[20];   char  sex;   float  score; }; main() 

{ struct  student  s[20], temp;   int j,k, man=0, woman=0; 

  float summan=0,sumwoman=0, aveman, avewoman;   for(k=0; k<20; k++) 

  { scanf("%ld %s %c%f",&s[k]num,s[k]name,&s[k]sex,&s[k]score);     if(s[k]sex=='m')  

    { summan+=s[k]score; man++;}     else  

    { sumwoman+=s[k]score;woman++ }     } 

    aveman=summan/man; 

    avewoman=sumwoman/woman; 

    printf("%d\t%f\t%d\t%f\n",man,aveman,woman,avewoman);     for(k=0; k<19; k++) 

       for(j=0;j<20-k;j++) 

           if(s[j]score<s[j+1]score) 

           { temp=s[j];s[j]=s[j+1];s[j+1]=temp;}        printf("the sorted numbers:\n");        for(k=0;k<20;k++) 

           printf("%ld\t%s\t%c\t%51f\n",s[k]num,s[k]name,s[k]sex,s[k]score); } 

习  题  11 

111  单选题 

BADD 

112  填空题 

1.3d3d330 2.(1)28 

 (2)20   (3)0   (4)--9 

3.(1)251 

 (2)42   

(3)209  

 (4)–295  (5)848 

习  题  12 

121  单选题 

BCDCA  ADA 

122  填空题 

1.rewind(文件指针) 2."d1dat","rb" 3.stdin 

4.文本文件;二进制文件 5.(1)"w"    

(2)str[i]--32  

 

 (3)"r" 

6.fopen  7.Hello 8.(1)"r"   

 

(2)fgetc(fp)  

 

  (3)time++

  

  

 C语言程序设计实验与习题指导课后程序设计答案

 P18 

(1) 

#include<stdioh> int main(void) {  intcelsius,fahr;  fahr=150;  celsius=5fahr/9-532/9;  printf("fahr=%d,celsius=%d\n",fahr,celsius);  return 0; } 

(2) 

#include<stdioh> int main(void) {  intcelsius,fahr;  celsius=26;  fahr=9celsius/5+32;  printf("celsius=%d,fahr=%d\n",celsius,fahr);  return 0; } 

(3) 

#include<stdioh> int main(void) {  intaverage,math,eng,comp;  math=87;  eng=72;  comp=93;  average=(math+eng+comp)/3;  printf("math=%d,eng=%d,comp=%d,average=%d\n",math,eng,comp,average);  return 0; } 

(4) 

#include<stdioh> int main(void) {  intn,a,b,c;  n=152

 c=n%10; 

 b=(n/10)%10;  a=n/100; 

 printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",n,c,b,a);  return 0; 

P27 

(1) 

#include<stdioh> #include<mathh> int main(void) {  intcelsius,fahr;  printf("Enter celsius:");  scanf("%d",&celsius);  fahr=9celsius/5+32;  printf("fahr%d\n",fahr);  return 0; } 

(2) 

#include<stdioh> #include<mathh> int main(void) {  intmoney,year;  doublerate,interest;  printf("Enter money,year,rate:");  scanf("%d%d%lf",&money,&year,&rate);  interest=moneypow(1+rate,year)-money;  printf("interest=%2f\n",interest);  return 0; } 

(3) 

#include<stdioh> #include<mathh> int main(void) {  doublex,y;  printf("Enter x:");  scanf("%lf",&x); 

 if(x<0){   y=pow(x+1,2)+2x+1/x;  }  else{   y=sqrt(x);  } 

 printf("y=f(%f)=%2f\n",x,y);  return 0; 

(4) 

#include<stdioh> int main(void) {  intx,y;  printf("Enter num1:");  scanf("%d",&x);  printf("Enter num2:");  scanf("%d",&y);  printf("%d+%d=%d\n",x,y,x+y);  printf("%d-%d=%d\n",x,y,x-y);  printf("%d%d=%d\n",x,y,xy);  printf("%d/%d=%d\n",x,y,x/y);  printf("%d%%%d=%d\n",x,y,x%y);  return 0; } 

10的阶乘 

#include<stdioh> int main(void) {  inti,n,product;  printf("Enter n:");  scanf("%d",&n);  product=1;  for(i=1;i<=n;i++){   product=producti;  }  printf("product=%d\n",product);  return 0; }

以上就是关于c语言 指针编程实验 设计一个函数,它有三个参数 (1) 被查找的字符串str; (2) 待查找的字符xCh; (3全部的内容,包括:c语言 指针编程实验 设计一个函数,它有三个参数 (1) 被查找的字符串str; (2) 待查找的字符xCh; (3、求C语言实验报告:输入任意三个整数,在屏幕上显示该三个数,并输出该三个数的平均值、C语言编程 猜数游戏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9288467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存