2024年2月18日发(作者:梁丘飞)
C语言上机实验
2.1 熟悉C语言程序开发环境
2.1.3 实验内容
1. 编程题1
编写程序实现在屏幕上显示以下文字。
思考:如何在屏幕显示数字、汉字等信息?
2. 编程题2
编程打印如下图案。
a
aa
aaa
aaaa
3.改错题
改正下列程序中的错误,在屏幕上显示商品价格表(源程序error1_2.c)。输入输出示例
商品名称 价格
TCL电视机 ¥7600
美的空调 ¥2000
SunRose键盘 ¥50.5
源程序(有错误的程序)
#include
mian()
{
printf("商品名称 价格n);
printf("TCL电视机 ¥7600")
printf("美的空调 ¥2000)
printf("SunRose键盘 ¥50.5)
}
4.编程题3
编程将下面的内容显示在屏幕的中间位置。
***********************************
tell me why? tell me why?
tell me why? tell me why?
1
The dress is long.
The shoes are big.
The trousers are black.
C语言程序设计
just tell me why, why, why?
***********************************
思考:最少可用几条printf()语句完成?
2
2.2 数据描述
2.2.3 实验内容
1.编程题1
已知a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。
输入输出示例
a/b的商=7
a/c的商=3
a%b的余数=10
a%c的余数=15
2.编程题2
已知a=160,b=46,c=18,d=170, 编写求输入输出示例
(a+b)/(b-c)*(c-d)=-1064.000000
3.编程题3
设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符)
输入输出示例
c=-10
4.编程题4
当n为24时,求出n的个位数字、十位数字的值。
输入输出示例
24的个位数字是4,十位数字是2
思考:如果n是三位数或四位数时,怎样求它的各位数字?
5.改错题
改正下列程序中的错误。假设i的初始值为1,j的初始值为2,求下列表达式的值(k)。
(1)i +=j
(2)i ――
(3)i * j / i
(4)i % ++j
输入输出示例
(1)i=3,j=2,k=3
(2)i=0,j=2,k=1
(3)i=1,j=2,k=2
(4)i=1,j=3,k=1
源程序(有错误的程序error2_2.c)
#include
3
(ab)(cd)的程序。
bc
C语言程序设计
main()
{
i=1; j=2;
k=(i+=j)
printf("(1) i=%d,j=%d,k=%dn",i,j,k);
i=1; j=2;
k=i--;
printf("(2) i=%d,j=%d,k=%dn",i,j,k);
i=1; j=2;
k=i*j/i;
printf("(3) i=%d,j=%d,k=%dn",i,j,k);
i=1; j=2;
k=i% ++j;
printf("(4) i=%d,j=%d,k=%dn",i,j,k);
}
4
2.3 顺序结构程序设计
2.3.3 实验内容
1.键盘输入与屏幕输出练习
源程序:
#include
main()
{
char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%dn",a,b,c);
}
问题1 要使上面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的 。
A)1 2 34 B)1, 2, 34
C)’1’,’2’,34 D)12 34
问题2 在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?
问题3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?
问题4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1', '2',34,则应修改程序中的哪条语句?怎样修改?
[提示:利用转义字符输出字符单引号字符。]
问题5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1', '2',34,则程序应修改程序中的哪条语句?怎样修改?
第1种输入方式:1,2,34↙(以逗号作为分隔符)
第2种输入方式:1 2 34↙(以空格作为分隔符)
第3种输入方式:1 2 34↙(以Tab键作为分隔符)
第4种输入方式:1↙
2↙
34↙(以回车符作为分隔符)
2. 编程题1
从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。
输入输出示例
Enter a and b: 20 30
d:40
x:28
5
C语言程序设计
3.编程题2
从键盘输入两个实数a和x,按公式计算并输出y的值:
yasin(ax)ln(ax)e
输入输出示例
Enter a , x : 1.0,0.0
y=2.000000
4.改错题
改正下列程序中的错误。从键盘输入3个整数a、b、c,计算这3个整数的和s,并以“s=a+b+c”和“a+b+c=s”的形式输出a、b、c和s的值。请不要删除源程序中的注释。(源程序error3_2.c)
输入输出示例
3 4 5
12=3+4+5
3+4+5=12
源程序(有错误的程序)
#include
main()
{
int a,b,c,s;
scanf("%d%d%d",&a,&b,c);
s=a+b+c;
printf("%d=%d+%d+%dn",a,b,c); /*输出s=a+b+c*/
printf("%d+%d+%d=%dn",s); /*输出a+b+c=s*/
}
5.编程题3(选做)
已知a=2.5,b=9.4,c=4.3,编程求axbxc0的解x1和x2。
提示:可用求根公式x1 ,225axbb24ac
2a输入输出示例
x-1=-0.533003,x2=-3.226996
6.编程题4(选做)
从键盘输入3个变量的值,其中a=10,b=20,c=30,然后将3个变量交换,使得a=20,b=30,c=10。
输入输出示例
10 20 30
a=20 b=30 c=10
6
2.4.3 实验内容
2.4 选择结构程序设计
1.编程题1
输入整数x和a,计算并输出下列分段函数f(x)的值(保留2位小数),请调用log函数求自然对数,调用fabs函数求绝对值。
1axlnf(x)2aax0输入输出示例
第一次运行
Enter a and x:5 6
a=5,f(6)=0.24
第二次运行
Enter a and x:5 5
a=5,f(5)=0.00
xaxa
2.编程题2
从键盘输入一个整数,若大于等于0,输出提示信息“is positive”,否则输出“is
negative”。
输入输出示例
第一次运行
Input a :5
5 is positive
第二次运行
Input a :0
0 is positive
第三次运行
Input a :-3
-3 is negative
3.编程题3
输入a、b、c三个整数,输出最大数。
输入输出示例
第一次运行
Enter a,b,c:1,5,9
the max number is:9
第二次运行
Enter a,b,c:9,5,1
the max number is:9
第三次运行
Enter a,b,c:1,9, 5
7
C语言程序设计
the max number is:9
4.改错题
改正下列程序中的错误,输入一个数n(不一定是整数),判定n是小于0,等于0,还是大于0。(源程序error4_2.c)
输入输出示例
第一次运行
Enter n:10
10 is greater than 0
第二次运行
Enter n:-5
-5 is less than 0
第三次运行
Enter n:0
0 is equal to 0
源程序(有错误的程序)
#include
main()
{
double n;
printf("Enter n:");
scanf("%f",&n);
if(n<0)
printf("n is less than 0n");
else if(n=0)
printf("n is equal to 0n");
else
printf("n is greater 0n");
}
模仿调试案例,单步调试程序,观察变量值的变化。
5.编程题4(选做)
一个工人的月工资按如下方法计算:在正常工作时间内每小时为5元,如果超出正常工作时间,则在超过的时间内每小时4元。其中,每月正常工作时间为160小时。编制一个程序,计算并输出一个工人的工资。其中月工作时间从键盘输入。
输入输出示例
第一次运行
input t:150
p=750
第二次运行
input t:200
p=960
第三次运行
input t:160
p=800
8
6.编程题5(选做)
编写一个程序,要求用户输入一个两位的整数,然后显示这个数的英文单词。
输入输出示例
第一次运行
Enter a two-digit number:35
You entered the number thirty-five
第二次运行
Enter a two-digit number:12
You entered the number twelve
提示:把数分解为两个数字。用一个switch语句显示第一位数字对应的单词(“twenty”、“thirty”等),用第二个switch语句显示第二位数字对应的单词。不要忘记11~19的数有特殊处理要求。
2.5 循环结构程序设计
2.5.3 实验内容
1.编程题1
编写程序:求1+2+3+…+100和12+22+33+…+1002。
输入输出示例
sum1=5050 sum2=338350
2.编程题2
一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出2~5000中的所有完数。
输入输出示例
6 28 496
3.编程题3
编写程序:计算sinx的近似值,精确到10-6。其中x为弧度,由用户从键盘输入。
x3x5x7
sinxx3!5!7!输入输出示例
第一次运行:
请输入一个x值(弧度值):0
sin(0.00)=0.000000
第二次运行:
请输入一个x值(弧度值):1.57
sin(1.57)=1.000000
4.改错题
改正下列程序中的错误。(源程序error4_2.c)
韩信点兵。韩信有一队兵,他想知道有多少人,便让土兵排队报数。按从1至5报数,最末一个土兵报的数为1;按从1至6报数,最末一个土兵报的数为5;按从1至7报数,
9
C语言程序设计
最末一个土兵报的数为4;最后按从1至11报数,最末一个土兵报的数为10;你知道韩信有多少土兵吗?
输入输出示例
n=2111
源程序(有错误的程序)
#include
main()
{
int find=0;
while(!find)
{
if(n%5==1 && n%6==5 && n%7==4 && n%11==10)
{
printf("n=%dn", n);
find =1;
}
}
}
5.编程题4(选做)
编写一个程序,计算并输出能写成两个数平方之和的所有三位数的个数。
输入输出示例
num=274
6.编程题5(选做)
编写程序,用户从键盘输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。注意:n不得大于10。
输入输出示例
Enter n::5
A B C D E
F G H I
J K L
M N
O
10
2.6 函数和编译预处理
2.6.3 实验内容
1.编程题1
写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
输入输出示例
输入:n1=24 n2=16
输出:zdgys=8 zxgbs=48
2.编程题2
一个素数,依次从低位去掉一位,二位,……,若所得的各数仍都是素数,则称超级素数。试求[100,9999]之内:(1)超级素数的个数 (2)所有超级素数之和(3)最大的超级素数。
输入输出示例
num=30, sum=75548, max=7393
3.编程题3
用递归方法求n阶勒让德多项式的值,递归公式为
1 (n=0)
Pn(x)= x (n=1)
((2n-1)x Pn-1(x)-(n-1) Pn-2(x))/n (n>1)
输入输出示例
第一次运行:
请输入n和x的值:0,7
P0(7)=1.00
第二次运行:
请输入n和x的值:1,2
P1(2)=2.00
第三次运行:
请输入n和x的值:3,4
P3(4)=154.00
4.改错题
改正下列程序中的错误。根据下式求π的值,直到某一项小于10-6(源程序error6_2.c)
输入输出示例
PI=3.14159 (改正后程序运行结果)
源程序(有错误的程序)
#include
int fact(int n);
int multi(int n);
main()
11
C语言程序设计
{int i;
double sum,item,eps;
eps=1E-6;
sum=1;
item=1;
for(i=1;item>=eps;i++)
{item=fact(i)/multi(2*i+1);
sum=sum+item;
}
printf(“PI=%0.5lfn”,sum*2);
return 0;
}
int fact(int n)
{int i;
int res=1;
for(i=0;i<=n;i++)
res=res*i;
return res;
}
int multi(int n)
{int i;
int res=1;
for(i=3;i<=n;i=i+2)
res=res*i;
return res;
}
5.编程题4(选做)
满足下列条件的自然数称为超级素数:该数本身、所有数字之和、所有数字之积以及所有数字 的平方和都是素数。例如113就是一个超级素数。求[100,999]之内:(1)超级素数的个数。(2)所有超级素数之和(3)最大的超级素数。
输入输出示例
num=3 sum=555 max=311
6.编程题5(选做)
求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。
输入输出示例
Input a,b,c: 1,2,1
equation:1.00*x*x+2.00*x+1.00=0
root:x1=-1.00 x2=-1.00
12
2.7 数组
2.7.3 实验内容
1、已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
2、设计一个程序,从键盘输入指定个数的数据,按选择排序方法,将其按从小到大的顺序排列。(选择排序,首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。)
输入/输出实例:
输入:32 45 7 21 12
输出:7 12 21 32 45
3、青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。
输入/输出实例:
输入:8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2
输出:8.8
4、有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。
输入/输出实例:
输入:123,94,-10,218,3,9,10,-83,45,16,44,-99
输出:218 0 3
5、输入一串字符,计算其中字符、数字和空格的个数。
输入:sd234kj64jk mjk
输出:字符:9 数字:5 空格:1
6、有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
输入:-12 -8 12 24 45 46 56 58 68 78
输入要查找的数据:58
输出:58的下标为7
输入要查找的数据:21
输出:”无此数”
13
C语言程序设计
2.8 数组和函数综合程序设计
2.8.3 实验内容
1、编一程序计算出两个矩阵A、B的和、差(设计一个函数同时计算两个矩阵的和与差)。
输入/输出实例
矩阵A:{{7,-5,3,3},{2,8,-6,4},{1,-4,-2,5}}
矩阵B:{{3,6,9,4},{2,-8,3,6},{5,-2,-7,9}}
输出实例:
A+B:{{10,1,12,7},{4,0,-3,10},{6,-6,-9,14}}
A- B:{{4,-11,-6,-1},{0,16,-9,-2},{-4,-2,5,-4}}
2、设计一个函数在若干个数据中查找指定数据。
输入/输出实例
(1)输入若干个数据:12 54 32 65 76 23 43
输入要查找的数据:56
输出实例:数据56 没有找到
(2)输入要查找的数据 65
输出实例:数据65 已找到。
3、设计一个选择排序函数,实现对数据的排序,然后设计一个函数实现对顺序数据的快速查找。
输入/输出实例
输入数据:23 54 65 12 87 43 25 21
输出排序后的数据:12 21 23 25 43 54 65 87
数据要查找的数据:43
输出:数据43已找到
输入要查找的数据:98
输出:数据98没有找到
4、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数
5、打印以下图案:
*
* *
* * *
* * * *
* * * * *
main()
{
char a[5]={'*' , '*' , '*' , '*' , '*'};
int i,j,k;
char space=' ';
for(i=0;i<5;i++) /*输出5行*/
{
printf("n"); /* 输出每行前先换行*/
14
printf(" "); /* 每行前面留5个空格 */
for (j=1;j<=i;j++)
printf("%c",space); /* 每行再留1个空格*/
for ( k=0;k<5;k++)
printf("%c",a[k]); /*每行输入5个'*'号*/
}
}
、求矩阵上三角形元素之和。调试下列程序,并修改。
#define N 6
main()
{
int i,j,sum=0;
int a[N][N]={0};
printf("input 5×5 data:n");
for(i=1;i { printf("Input the %d line data:n",i); for(j=1;j scanf("%d",&a[i][j]); } for(i=1;i { for(j=1;j printf("%5d",a[i][j]); printf("n"); } for(i=1;i for(j=1;j<=i;j++) sum=sum+a[i][j]; printf("sum=%dn",sum); } 6 15 C语言程序设计 2.9 指针 2.9.3 实验内容 1、编写一函数 int lenstr( char *str),测量从主函数中输入的字符串的长度。 2、编写一函数void verstring(char *str)将从键盘上输入的任意字符串逆序输出。 3、阅读程序并运行,每次输入8个数,观察运行结果,写出程序的功能。 #include void main() { int a[100],t1,t2,max,min,*p,*q,i,n; printf("nPlease input n ge shu: "); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); printf("n"); max=min=a[0]; for(i=0;i { if(a[i]>max) { max=a[i];p=&a[i]; } /*用指针标记最大值的下标*/ if(a[i] { min=a[i];q=&a[i]; } /*用指针标记最小值的下标*/ } if( min==a[0]&& max==a[n-1]) { t1=a[0]; a[0]=a[n-1]; a[n-1]=t1; } else if( max==a[0] && (min!=a[n-1])) { t2=a[n-1]; a[n-1]=min; *q=t2; } else if( min==a[n-1] && max!=a[0]) { t1=a[0];a[0]=max;*p=t1; } else if( max!=a[0] && min!=a[n-1]) { t1=a[0]; a[0]=max; *p=t1; 16 t2=a[n-1]; a[n-1]=min; *q=t2; } printf("n"); for(i=0;i printf("%d ", a[i]); printf("n"); } 4、调试下列程序,并说明程序的功能 #include int lenstr(char *str) { char *p=str; while(*str!=‘0’) str++; return(str-p); } void main( ) { char ss[80]; int len; gets(ss); len=lenstr(ss); printf(“len=%dn”, len); } 5、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。 6、定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人? 17 2024年2月18日发(作者:梁丘飞) C语言上机实验 2.1 熟悉C语言程序开发环境 2.1.3 实验内容 1. 编程题1 编写程序实现在屏幕上显示以下文字。 思考:如何在屏幕显示数字、汉字等信息? 2. 编程题2 编程打印如下图案。 a aa aaa aaaa 3.改错题 改正下列程序中的错误,在屏幕上显示商品价格表(源程序error1_2.c)。输入输出示例 商品名称 价格 TCL电视机 ¥7600 美的空调 ¥2000 SunRose键盘 ¥50.5 源程序(有错误的程序) #include mian() { printf("商品名称 价格n); printf("TCL电视机 ¥7600") printf("美的空调 ¥2000) printf("SunRose键盘 ¥50.5) } 4.编程题3 编程将下面的内容显示在屏幕的中间位置。 *********************************** tell me why? tell me why? tell me why? tell me why? 1 The dress is long. The shoes are big. The trousers are black. C语言程序设计 just tell me why, why, why? *********************************** 思考:最少可用几条printf()语句完成? 2 2.2 数据描述 2.2.3 实验内容 1.编程题1 已知a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 输入输出示例 a/b的商=7 a/c的商=3 a%b的余数=10 a%c的余数=15 2.编程题2 已知a=160,b=46,c=18,d=170, 编写求输入输出示例 (a+b)/(b-c)*(c-d)=-1064.000000 3.编程题3 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 输入输出示例 c=-10 4.编程题4 当n为24时,求出n的个位数字、十位数字的值。 输入输出示例 24的个位数字是4,十位数字是2 思考:如果n是三位数或四位数时,怎样求它的各位数字? 5.改错题 改正下列程序中的错误。假设i的初始值为1,j的初始值为2,求下列表达式的值(k)。 (1)i +=j (2)i ―― (3)i * j / i (4)i % ++j 输入输出示例 (1)i=3,j=2,k=3 (2)i=0,j=2,k=1 (3)i=1,j=2,k=2 (4)i=1,j=3,k=1 源程序(有错误的程序error2_2.c) #include 3 (ab)(cd)的程序。 bc C语言程序设计 main() { i=1; j=2; k=(i+=j) printf("(1) i=%d,j=%d,k=%dn",i,j,k); i=1; j=2; k=i--; printf("(2) i=%d,j=%d,k=%dn",i,j,k); i=1; j=2; k=i*j/i; printf("(3) i=%d,j=%d,k=%dn",i,j,k); i=1; j=2; k=i% ++j; printf("(4) i=%d,j=%d,k=%dn",i,j,k); } 4 2.3 顺序结构程序设计 2.3.3 实验内容 1.键盘输入与屏幕输出练习 源程序: #include main() { char a,b; int c; scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%dn",a,b,c); } 问题1 要使上面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的 。 A)1 2 34 B)1, 2, 34 C)’1’,’2’,34 D)12 34 问题2 在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改? 问题3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改? 问题4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1', '2',34,则应修改程序中的哪条语句?怎样修改? [提示:利用转义字符输出字符单引号字符。] 问题5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1', '2',34,则程序应修改程序中的哪条语句?怎样修改? 第1种输入方式:1,2,34↙(以逗号作为分隔符) 第2种输入方式:1 2 34↙(以空格作为分隔符) 第3种输入方式:1 2 34↙(以Tab键作为分隔符) 第4种输入方式:1↙ 2↙ 34↙(以回车符作为分隔符) 2. 编程题1 从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。 输入输出示例 Enter a and b: 20 30 d:40 x:28 5 C语言程序设计 3.编程题2 从键盘输入两个实数a和x,按公式计算并输出y的值: yasin(ax)ln(ax)e 输入输出示例 Enter a , x : 1.0,0.0 y=2.000000 4.改错题 改正下列程序中的错误。从键盘输入3个整数a、b、c,计算这3个整数的和s,并以“s=a+b+c”和“a+b+c=s”的形式输出a、b、c和s的值。请不要删除源程序中的注释。(源程序error3_2.c) 输入输出示例 3 4 5 12=3+4+5 3+4+5=12 源程序(有错误的程序) #include main() { int a,b,c,s; scanf("%d%d%d",&a,&b,c); s=a+b+c; printf("%d=%d+%d+%dn",a,b,c); /*输出s=a+b+c*/ printf("%d+%d+%d=%dn",s); /*输出a+b+c=s*/ } 5.编程题3(选做) 已知a=2.5,b=9.4,c=4.3,编程求axbxc0的解x1和x2。 提示:可用求根公式x1 ,225axbb24ac 2a输入输出示例 x-1=-0.533003,x2=-3.226996 6.编程题4(选做) 从键盘输入3个变量的值,其中a=10,b=20,c=30,然后将3个变量交换,使得a=20,b=30,c=10。 输入输出示例 10 20 30 a=20 b=30 c=10 6 2.4.3 实验内容 2.4 选择结构程序设计 1.编程题1 输入整数x和a,计算并输出下列分段函数f(x)的值(保留2位小数),请调用log函数求自然对数,调用fabs函数求绝对值。 1axlnf(x)2aax0输入输出示例 第一次运行 Enter a and x:5 6 a=5,f(6)=0.24 第二次运行 Enter a and x:5 5 a=5,f(5)=0.00 xaxa 2.编程题2 从键盘输入一个整数,若大于等于0,输出提示信息“is positive”,否则输出“is negative”。 输入输出示例 第一次运行 Input a :5 5 is positive 第二次运行 Input a :0 0 is positive 第三次运行 Input a :-3 -3 is negative 3.编程题3 输入a、b、c三个整数,输出最大数。 输入输出示例 第一次运行 Enter a,b,c:1,5,9 the max number is:9 第二次运行 Enter a,b,c:9,5,1 the max number is:9 第三次运行 Enter a,b,c:1,9, 5 7 C语言程序设计 the max number is:9 4.改错题 改正下列程序中的错误,输入一个数n(不一定是整数),判定n是小于0,等于0,还是大于0。(源程序error4_2.c) 输入输出示例 第一次运行 Enter n:10 10 is greater than 0 第二次运行 Enter n:-5 -5 is less than 0 第三次运行 Enter n:0 0 is equal to 0 源程序(有错误的程序) #include main() { double n; printf("Enter n:"); scanf("%f",&n); if(n<0) printf("n is less than 0n"); else if(n=0) printf("n is equal to 0n"); else printf("n is greater 0n"); } 模仿调试案例,单步调试程序,观察变量值的变化。 5.编程题4(选做) 一个工人的月工资按如下方法计算:在正常工作时间内每小时为5元,如果超出正常工作时间,则在超过的时间内每小时4元。其中,每月正常工作时间为160小时。编制一个程序,计算并输出一个工人的工资。其中月工作时间从键盘输入。 输入输出示例 第一次运行 input t:150 p=750 第二次运行 input t:200 p=960 第三次运行 input t:160 p=800 8 6.编程题5(选做) 编写一个程序,要求用户输入一个两位的整数,然后显示这个数的英文单词。 输入输出示例 第一次运行 Enter a two-digit number:35 You entered the number thirty-five 第二次运行 Enter a two-digit number:12 You entered the number twelve 提示:把数分解为两个数字。用一个switch语句显示第一位数字对应的单词(“twenty”、“thirty”等),用第二个switch语句显示第二位数字对应的单词。不要忘记11~19的数有特殊处理要求。 2.5 循环结构程序设计 2.5.3 实验内容 1.编程题1 编写程序:求1+2+3+…+100和12+22+33+…+1002。 输入输出示例 sum1=5050 sum2=338350 2.编程题2 一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出2~5000中的所有完数。 输入输出示例 6 28 496 3.编程题3 编写程序:计算sinx的近似值,精确到10-6。其中x为弧度,由用户从键盘输入。 x3x5x7 sinxx3!5!7!输入输出示例 第一次运行: 请输入一个x值(弧度值):0 sin(0.00)=0.000000 第二次运行: 请输入一个x值(弧度值):1.57 sin(1.57)=1.000000 4.改错题 改正下列程序中的错误。(源程序error4_2.c) 韩信点兵。韩信有一队兵,他想知道有多少人,便让土兵排队报数。按从1至5报数,最末一个土兵报的数为1;按从1至6报数,最末一个土兵报的数为5;按从1至7报数, 9 C语言程序设计 最末一个土兵报的数为4;最后按从1至11报数,最末一个土兵报的数为10;你知道韩信有多少土兵吗? 输入输出示例 n=2111 源程序(有错误的程序) #include main() { int find=0; while(!find) { if(n%5==1 && n%6==5 && n%7==4 && n%11==10) { printf("n=%dn", n); find =1; } } } 5.编程题4(选做) 编写一个程序,计算并输出能写成两个数平方之和的所有三位数的个数。 输入输出示例 num=274 6.编程题5(选做) 编写程序,用户从键盘输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。注意:n不得大于10。 输入输出示例 Enter n::5 A B C D E F G H I J K L M N O 10 2.6 函数和编译预处理 2.6.3 实验内容 1.编程题1 写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 输入输出示例 输入:n1=24 n2=16 输出:zdgys=8 zxgbs=48 2.编程题2 一个素数,依次从低位去掉一位,二位,……,若所得的各数仍都是素数,则称超级素数。试求[100,9999]之内:(1)超级素数的个数 (2)所有超级素数之和(3)最大的超级素数。 输入输出示例 num=30, sum=75548, max=7393 3.编程题3 用递归方法求n阶勒让德多项式的值,递归公式为 1 (n=0) Pn(x)= x (n=1) ((2n-1)x Pn-1(x)-(n-1) Pn-2(x))/n (n>1) 输入输出示例 第一次运行: 请输入n和x的值:0,7 P0(7)=1.00 第二次运行: 请输入n和x的值:1,2 P1(2)=2.00 第三次运行: 请输入n和x的值:3,4 P3(4)=154.00 4.改错题 改正下列程序中的错误。根据下式求π的值,直到某一项小于10-6(源程序error6_2.c) 输入输出示例 PI=3.14159 (改正后程序运行结果) 源程序(有错误的程序) #include int fact(int n); int multi(int n); main() 11 C语言程序设计 {int i; double sum,item,eps; eps=1E-6; sum=1; item=1; for(i=1;item>=eps;i++) {item=fact(i)/multi(2*i+1); sum=sum+item; } printf(“PI=%0.5lfn”,sum*2); return 0; } int fact(int n) {int i; int res=1; for(i=0;i<=n;i++) res=res*i; return res; } int multi(int n) {int i; int res=1; for(i=3;i<=n;i=i+2) res=res*i; return res; } 5.编程题4(选做) 满足下列条件的自然数称为超级素数:该数本身、所有数字之和、所有数字之积以及所有数字 的平方和都是素数。例如113就是一个超级素数。求[100,999]之内:(1)超级素数的个数。(2)所有超级素数之和(3)最大的超级素数。 输入输出示例 num=3 sum=555 max=311 6.编程题5(选做) 求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。 输入输出示例 Input a,b,c: 1,2,1 equation:1.00*x*x+2.00*x+1.00=0 root:x1=-1.00 x2=-1.00 12 2.7 数组 2.7.3 实验内容 1、已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 2、设计一个程序,从键盘输入指定个数的数据,按选择排序方法,将其按从小到大的顺序排列。(选择排序,首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。) 输入/输出实例: 输入:32 45 7 21 12 输出:7 12 21 32 45 3、青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 输入/输出实例: 输入:8.5 9 9.8 6.5 8.7 8.5 9.3 9.6 8.9 8.2 输出:8.8 4、有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。 输入/输出实例: 输入:123,94,-10,218,3,9,10,-83,45,16,44,-99 输出:218 0 3 5、输入一串字符,计算其中字符、数字和空格的个数。 输入:sd234kj64jk mjk 输出:字符:9 数字:5 空格:1 6、有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。 输入:-12 -8 12 24 45 46 56 58 68 78 输入要查找的数据:58 输出:58的下标为7 输入要查找的数据:21 输出:”无此数” 13 C语言程序设计 2.8 数组和函数综合程序设计 2.8.3 实验内容 1、编一程序计算出两个矩阵A、B的和、差(设计一个函数同时计算两个矩阵的和与差)。 输入/输出实例 矩阵A:{{7,-5,3,3},{2,8,-6,4},{1,-4,-2,5}} 矩阵B:{{3,6,9,4},{2,-8,3,6},{5,-2,-7,9}} 输出实例: A+B:{{10,1,12,7},{4,0,-3,10},{6,-6,-9,14}} A- B:{{4,-11,-6,-1},{0,16,-9,-2},{-4,-2,5,-4}} 2、设计一个函数在若干个数据中查找指定数据。 输入/输出实例 (1)输入若干个数据:12 54 32 65 76 23 43 输入要查找的数据:56 输出实例:数据56 没有找到 (2)输入要查找的数据 65 输出实例:数据65 已找到。 3、设计一个选择排序函数,实现对数据的排序,然后设计一个函数实现对顺序数据的快速查找。 输入/输出实例 输入数据:23 54 65 12 87 43 25 21 输出排序后的数据:12 21 23 25 43 54 65 87 数据要查找的数据:43 输出:数据43已找到 输入要查找的数据:98 输出:数据98没有找到 4、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数 5、打印以下图案: * * * * * * * * * * * * * * * main() { char a[5]={'*' , '*' , '*' , '*' , '*'}; int i,j,k; char space=' '; for(i=0;i<5;i++) /*输出5行*/ { printf("n"); /* 输出每行前先换行*/ 14 printf(" "); /* 每行前面留5个空格 */ for (j=1;j<=i;j++) printf("%c",space); /* 每行再留1个空格*/ for ( k=0;k<5;k++) printf("%c",a[k]); /*每行输入5个'*'号*/ } } 、求矩阵上三角形元素之和。调试下列程序,并修改。 #define N 6 main() { int i,j,sum=0; int a[N][N]={0}; printf("input 5×5 data:n"); for(i=1;i { printf("Input the %d line data:n",i); for(j=1;j scanf("%d",&a[i][j]); } for(i=1;i { for(j=1;j printf("%5d",a[i][j]); printf("n"); } for(i=1;i for(j=1;j<=i;j++) sum=sum+a[i][j]; printf("sum=%dn",sum); } 6 15 C语言程序设计 2.9 指针 2.9.3 实验内容 1、编写一函数 int lenstr( char *str),测量从主函数中输入的字符串的长度。 2、编写一函数void verstring(char *str)将从键盘上输入的任意字符串逆序输出。 3、阅读程序并运行,每次输入8个数,观察运行结果,写出程序的功能。 #include void main() { int a[100],t1,t2,max,min,*p,*q,i,n; printf("nPlease input n ge shu: "); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); printf("n"); max=min=a[0]; for(i=0;i { if(a[i]>max) { max=a[i];p=&a[i]; } /*用指针标记最大值的下标*/ if(a[i] { min=a[i];q=&a[i]; } /*用指针标记最小值的下标*/ } if( min==a[0]&& max==a[n-1]) { t1=a[0]; a[0]=a[n-1]; a[n-1]=t1; } else if( max==a[0] && (min!=a[n-1])) { t2=a[n-1]; a[n-1]=min; *q=t2; } else if( min==a[n-1] && max!=a[0]) { t1=a[0];a[0]=max;*p=t1; } else if( max!=a[0] && min!=a[n-1]) { t1=a[0]; a[0]=max; *p=t1; 16 t2=a[n-1]; a[n-1]=min; *q=t2; } printf("n"); for(i=0;i printf("%d ", a[i]); printf("n"); } 4、调试下列程序,并说明程序的功能 #include int lenstr(char *str) { char *p=str; while(*str!=‘0’) str++; return(str-p); } void main( ) { char ss[80]; int len; gets(ss); len=lenstr(ss); printf(“len=%dn”, len); } 5、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。 6、定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人? 17