long sum=0; for(j=1;j<=3;j++) {
m=j+2;
for(i=1;j<=20;i++)
{
n=i+1;
sum=sum+m*m*k; }
}
printf(―sum is :%d\\n‖,sum);
}
观察程序的执行结果有无变化?
(6)在(5)的程序中,若将外循环控制表达式分别做如下修改: . j=1;j<3;j++ . j=1;j=3;j++ . j=1;j>=3;j++
.j=1;j>3;j++ . j=1;j<=3;j--
.j=1;j>3;j-- . j=1;j<3;j++
.j=0;j<3;j++ j=1;j<=3;j++ j=1;j<3;++j
观察程序的执行结果有无变化? 三、分析讨论
1、如何测试计数型循环结构的控制表达式中的错误? 2、从实验中你得到了哪些提高嵌套循环程序效率的启示?
实验四 数组、函数
一、 目的与要求
1、掌握C语言函数定义及调用的规则。 2、理解参数传递的过程。 3、掌握数组定义的规则。
4、掌握C语言数组的基本用法。 二、 实验内容与步骤
实验1、 上机调试下面的程序,根据系统给出的出错信息,找出错原因。 main() {
int,y;
printf(―%d\\n‖,sum(x+y)); int sum(a,b) {
int a,b;
return(a+b); } }
实验2、 编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态
地显示递归函数被调用的轨迹。
实验3、编写程序,测试下列数组的定义方式是否正确 (1) main()
{
int n;
scanf(―%d‖,&n); int a[n]; ?? }
(2) main() {
const int n=10; int a[n]; }
(3) #include
#define M 10 main() {
int a[M];
}
(4) main()
{
int a[2+2*4];
}
(5) #include
#define M 2 #define N 8 main()
{ int a[M+N];
}
通过这一实验,可以说明什么问题?
实验4、运行下面的C程序,根据运行结果,可以说明什么? main( )
{ int num[5]={1,2,3,4,5}; inti i;
for(i=0;i<=5;i++)
printf(―%d‖,num[i]); }
实验5、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。
实验6、为一个起泡排序程序设计测试用例,并测试之。
实验7、有下面的C程序,目的是想计算由键盘输入的任意两个整数的积。 /********exl.c********/
#include ―stdio.h‖ main()
{ scanf(―%x,%y‖,&x,%y); p=prodct(x,t);
printf(―The product is :‖,p); }
int prodct(int a ,int b ) {int c; c=a*b; return c; }
三、 分析讨论
1、 针对以上实验内容写出相应的参数传递过程并分析结果。 2、 讨论参数的传递的几种形式。
3、 通过实验,分析定义与引用数组的区别。
实验五 指 针
一、目的和要求
1. 熟悉指针的正确用法。 2.了解指针参数的特殊性。
3.掌握函数、指针、数组的用法。
二、实验内容和步骤
1、指出下面程序错误的原因。 main( ) {
int x=10,y=5,*px,*py; px=py; px=&x; py=&y;
printf(―*px=%d,*py=%d,*px,*py); }
2、下面的程序试图有如下运行结果: which style you want to : Capital ( c ) or uncapital ( a ):c ↙ COMPUTER Which sytle you want to : Capital ( c ) or uncapital ( a ) : u↙ computer 请调试下面的程序,使其有如上执行结果。 #include
char s*; char c;
printf(―which style you want to :ln‖); printf(―capital ( c ) or uncapital(a):‖); c=getchar(); if(c=’c’)
strcpy(s,‖COMPUTER‖); else
strcpy(s,‖computer‖); put(s); }
分析出错原因。
3.下面的程序能获得上述运行结果吗? main() {
char *S=‖COMPUTER‖; char c;