c语言实验答案
- 格式:docx
- 大小:2.77 MB
- 文档页数:4
华南农业大学c语言程序设计上机指导书参考答案上级实验参考答案#include stdio.h#includemath.hint main(){ int i;double a, b;for(i=0;i<=100000;++i){a=sqrt(i+100);b=sqrt(i+168);if((int)a==ceil(a)&&(int)b==ceil(b))printf(%d\n,i);}}实验2基本数据类型、运算和表达式一、实验目的1)掌握C语言数据类型,熟悉如何定义一个整型和实型的变量,以及对它们赋值的方法。
2)掌握不同的类型数据之间赋值的规。
3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加++)和自减--)运算符的使用。
4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容1 / 561.变量的定义[题目1117:变量定义,按要求完成程序]下面给出一个可以运行的程序,但是缺少部分语句,请按右边的提示补充完整缺少的语句。
void main(){int a, b;/*定义整型变量a和b*/int i, j;/*定义实型变量i和j */a=5;b=6;i=3.14;j=i*a*b;printf(a=%d,b=%d,i=%f,j=%f\n, a, b, i,j);}[具体操作步骤]1)将代码补充完整;2)在TC或VC++上运行通过;3)在JudgeOnline实验系统上提交;2.赋值表达式与赋值语句[题目1118:赋值表达式与赋值语句,写出程序运行结果]阅读下面程序,写出运行结果:voidmain()2 / 56{float a;int b, c;char d, e;a=3.5;b=a;c=330;d=c;e='\\';printf(%f,%d,%d,%c,%c, a,b,c,d,e);}运行结果为:3.500000,3,330,J,\[提示]赋值语句具有类型转换的功能,但可能会改变数据。
《C语言》上机实验题及参考答案作者名:不详来源:网友提供05年7月21日1、编程实现对键盘输入的英文名句子进行加密。
用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变:2、编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。
3、从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、1角、5分、1分各多少张。
4、随机产生20个[10,50]的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各元素之和。
5、编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
6、模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
7、任何一个自然数m的立方均可写成m个连续奇数之和。
例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+19编程实现:输入一自然数n,求组成n3的n个连续奇数。
8、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
9、编制一个完成两个数的四则运算程序。
如:用户输入34+56则输出结果90.00。
要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
10、输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;(3)逆序输出其各位数字。
如输入:56439,输出:5位数5,6,4,3,99,3,4,6,511、编写子函数:(1)用冒泡法将一个数组排成升序的函数---SUB1;(2)在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
实验7:程序的输入输出实验目的:1、熟悉字符的输入输出和格式化的输入输出,了解基本规则。
2、进一步熟悉C语言程序的编辑、编译、连接和运行的方法。
实验内容:1、若inta,b; scanf( "%d%d”,&a,&b);不可以用A ____________ 作为输入的分隔符。
A) , B)空格C)回车D) TAB键2、已有如下定义和输入语句,若要求al, a2, cl, c2的值分别为10, 20,A和B,当用户从键盘输入时,正确的数据输入方式是________ 。
int al,a2; char cl,c2;s canf( “%d%d”,&al,&a2);scanf( "%c%c",&cl,&c2);A) 1020AB<CR> B) 10 20<CR>AB<CR>C) 10 20 AB<CR> D) 10 20AB<CR>3、阅读以下程序,当输入数据的形式为254340<CR>正确的输出结果为______ 。
main(){intscanf( “%d%d%d”,&x,&y,&z);printf( "x+y+z=%d\n" #x+y+z);}A)x+y+z=48 B)x+y+z=35 C)x+z=35 D)不确定值4、根据定义和数据的输入方式,输入语句的正确形式为______ 。
已有定义:float fl,f2;数据的输入方式:A)scanf(,&仏&f2);B)s canf(“%f%f”,&仏&f2);C)s canf(“%3.2f%2・lf”,&fl,&f2);D)scanf(“%3・2f%2・:Lf”,&f:L,&f2);<5、以下说法正确的是______ oA)输入项可以为一实型常量,如scanf(“%f”,;B)只有格式控制,没有输入项,也能进行正确输入,如scanf(“a=%d,b=%d”);C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4・2f”,&f);D)当输入数据时,必须指明变量的地址,如scanf(“%f”,&f);6、已有定义int x; float y;且执行scanf(“%3d%f”,&x,&y);语句,若从第一列开始输入数据12345 678V回车〉,则x的值为 _____ __ 的值为______ 。
C 语言程序设计上机实验指导与习题参考答案(第四版)(学生改编)实验 1:C语言程序初步一、实验目的(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。
(2)了解在该系统上如何编辑、编译、连接和运行一个 C程序。
(3)通过运行简单的 C 程序,初步了解 C程序的特点。
(4)在教师的指导下,学会使用在线评判系统。
二、实验内容1.运行第一个 C 程序题目:ThefirstCProgram将下列程序输入visualc ,编译、连接和运行该程序。
includequotstdio.hquotmain printfquotThefirstCProgramnquot具体操作步骤(1)在编辑窗口中输入程序。
(2)保存程序,取名为a1.c。
(3)按照第一章中介绍的方法,编译、连接和运行程序。
,则该题完成。
4按照第三章介绍的方法,将代码提交到在线评判系统,系统返回“通过”2.在在线评判系统中提交实现了计算 ab 功能的程序题目 1001:计算ab由键盘输入两个整数,计算并输出两个整数的和。
实现该功能的程序如下,inclu dequotstdio.hquotmain int ab scanfquotddquotampaampbprintfquotdquotab(1)在程序编辑窗口中输入程序。
(2)保存程序,取名为a2.c。
(3)按照前二章中介绍的方法,编译、连接和运行程序。
(4)在程序运行过程中,输入 15 30↙↙表示输入回车符(5)如果看到如下输出结果,则表明1530 的结果正确,如果得不到如下结果,则需检查并更正程序。
45(6)按照第三章中介绍的方法进入在线评判系统。
(7)显示题目列表,点击题号为 1001,题名为“计算ab”的题目。
(8)查看完题目要求后,点击页面下端的“sumbit” ,参照第二章提交程序的方法提交程序a2.c。
(9)查看评判结果,如果得到“accepted”则该题通过,否则返回第一步检查程序是否正确。
实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。
-前言-/*非常感谢度娘以及各位网上C语言高手的支持,才能让敝人完成此文档的整理。
本文档集合了本人、度娘、众网友的力量,其中代码的正确率约为90%(不正确的有标注)。
为回报度娘及众网友的帮助,本文档免费下载。
*//*配“电子科技大学出版社(周信东主编)”的C语言程序设计实验*//*努力吧,骚年以及学妹们!*//*整理ed by 口玉刀一 of GUET.*/=====================实验一 C语言程序初步=====================1.----------------------------已知a=5,b=4,c=6,求出s并换行#include"stdio.h"main(){int a,b,c,s;a=5;b=4;c=6;s=(a+b+c)/3;printf("a=%d,b=%d,c=%d\n,s=%d",a,b,c,s);}2.-------------------------------输入一个数字求他的平方#include<stdio.h>main(){int r,s;scanf("%d",&r);s=r*r;printf("s=%d\n",s);}3.--------------------------------(1)#include<stdio.h>main(){printf(" *\n");printf("***\n");printf(" *\n");}(2)#include<stdio.h>{int v;int a,b,c; //a,b,c aer sides,v is volume of cubea=3;b=3;c=5;v=a*b*c;printf("v=%d\n",v);}=================================实验二数据类型、运算符和表达式=================================1.(1)--------------------------------------------------//总觉得打印结果怪怪的,DO YOU THINK SO?main(){char s1='3',s2='4',s3='5';int c1=101,c2=102;printf("3%c\t4%c\t5%c\n",s1,s2,s3); //3%c为输出3和%cprintf("s1=%d\ts2=%d\ts3=%d\n",s1,s2,s3);//注意哦,s1,s2,s3是char!而%d:输入输出为整形 %ld 长整型 %hd短整型 %hu无符号整形 %u %lu%s:输入输出为字符串 %c字符%f:输入输出为浮点型 %lf双精度浮点型printf("c1=%d\t~%c\n",c1,c1); //换码符'\t',表示水平制表位(horizeontal tab),它的作用是将光标移到最接近8的倍数的位置printf("c2=%d\t~%c\n",c2,c2); //注意c1,c2的类型}(2)//运行结果为8.300000 %是求余数先运算x-y,把结果转换为int型的有利于四则运算main(){float x=8.3,y=4.2,s;int a=7;s=x+a%5*(int)(x-y)%2/3;printf("s=%f",s);}main(){int i,j,p,q;i=3;j=6;p=i++;q=--j;printf("%d,%d,%d,%d\n",i,j,p,q);p=i--+3;q=++j-4;printf("%d,%d,%d,%d",i,j,p,q);}(4)main(){int m=15,n=9,s;m*=3+2;printf("%d",m);n+=n-=n*=n;printf("%d",n);printf("%d\n",(s=6*5,m+n+s));printf("%d\n",s);}2.---------------------------------------------------- (1)#include<stdio.h>#define MM 40main(){int a=3,b=6,t;t=MM/(3+6);printf("%d%d",t,MM);}//原来printf语句打成了print,printf语句中少了一个%d.(2)#include<stdio.h>{int m;double x;scanf("%d",&m);x=3.14*m*m;printf("%f",x);}//注意分号,%f转义(3)main(){int m=8,n=5;printf("%d",m*=m-n);printf("%d,%d,%d",m=m+1,n-1,m+n);}3.---------------------------------------------------- main(){int a=9,b=5;a+=b;b=a-b;a-=b;printf("%d%d",a,b);}4.---------------------------------------------------- //4.输入a,b,c三个变量,计算数学公式(a*b)/cmain(){int a,b,d;float s,c;scanf("%d%d%f",&a,&b,&c);d=a*b;s=d/c;printf("%f",s);}=================================实验三顺序结构和输入输出方法=================================1.---------------------------------------------------(1)main(){int m=345,t;float n=2.56;t=2.56*100;printf("m=%d,n*100=%d\n",m,t);}(2)main(){int a,b,c,s,v;scanf("%d%d%d",&a,&b,&c);s=a*b;v=a*b*c;printf("%d,%d,%d\n",a,b,c);printf("s=%d,v=%d\n",s,v);}2.----------------------------------------------------(1)main(){int m,n;float x=3.5,y=6.2;scanf("%d,%d",&m,&n);printf("%6d,%6d",m,n); /*每个数的输出宽度为6,两个数之间逗号建个。
c语言实验答案
Prepared on 21 November 2021
n"); printf("The first number:"); scanf("%d",&a); printf("The second number"); scanf("%d",&b); printf("Results as follows:\n"); printf("%d+%d=%d\n",a,b,a+b); printf("%d-%d=%d\n",a,b,a-b); printf("%d*%d=%d\n",a,b,a*b); printf("%d+%d=%f\n",a,b,*a/b); .+1/n!的值。 #include<> void main() { int n,p=1,i; float sum=0; printf("please input n:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=p*i; sum+=p; } printf("sum=%f\n",sum); } .14 p=j; switch(p) umber); for(j=0;j<3;j++) printf("%",stu[i].score[j]); printf(" ave=%.2f\n",average(stu[i]));umber); printf("score:"); for(j=0;j<3;j++) scanf("%f",&(stu[i].score[j]));
}
}
void main()
{
struct student stu[3];
//定义结构体数组
input(stu);
//数组名做参数,传递的是地址
output(stu);
}
//静态链表的建立,有三个学生,包
括学号(sno char(8)),姓名
(sname char(20)),分数(grade
float[]),
//定义结构体类型数组存学生信息,
使用链表所有学生,实现链表的输入
输出。
//静态的书上有原题目,我写成动态
的了,用子函数的方式实现
#include <>
#include<>
#include <>
struct stu
//定义全局结构体
{
char sno[8];
char sname[20];
float grade;
struct stu *next;
} ;
////////////////////////////////
////////////////////////
void main( )
{
struct stu *creat(struct
stu *);
void print(struct stu*);
struct stu *head;
head=NULL;
head=creat(head);
print(head);
}
///////////////////////////////////////////////////////// struct stu *creat(struct stu*head) //建立链表 { struct stu *p,*q; q=(struct stu*)malloc(sizeof(struct stu)); //分配空间 printf("please input sno:"); scanf("%s",q->sno); printf("please input sname:"); scanf("%s",q->sname); printf("please input grade:"); scanf("%f",&q->grade); head=q; while(q->grade!=0) //当分数为0时结束 { p=(struct stu*)malloc(sizeof(struct stu)); printf("please input sno:"); scanf("%s",p->sno); printf("please input sname:"); scanf("%s",p->sname); printf("please input grade:"); scanf("%f",&p->grade); q->next=p; q=p; } q->next=NULL; return head; //返回链表的头指针 } ////////////////////////////////////////////////////////// void print(struct stu *head)
//输出链表
{
struct stu *p;
//设游标指针
p=head;
//取得链表的头指针
printf("data:\n-----------
-----------\n");
while(p->next!=NULL)
{
printf("%s\n",p-
>sno);
printf("%s\n",p-
>sname);
printf("%f\n",p-
>grade);
printf("------------
----------\n");
p=p->next;
}
}
//递归方法实现快速排序算法。快速
排序的基本原理是:
//(1)选择一个充当划分较小和较
大元素的界限的元素,称其为基准
值。
//(2)将数组中的元素重新排列使
得较大元素向数组尾端移动,较小元
素向数组首端移动。
//如此在形式上将数组分成两部分,
界限左边元素都小于基准值,而界限
右边元素都大于基准值,此过程称为
分解。
//在分解完成后,充当界限的数组首
元素可能需要和中间某元素对调。
//(3)排序两个子数组中元素。因
为基准值左边元素都小于基准值右边
元素,所以将两个子数组分别排序后
即使得整个数组有序。
#include<>
#define N 10
void main()
{
void fun(int *,int,int); int i,a[N]; printf("please input array:"); for(i=0;i
部分有值(right>i),递归右半边
fun(p,i,right);
}