2019西南大学0039C语言程序设计机考大作业答案
- 格式:doc
- 大小:52.50 KB
- 文档页数:3
(c)程序必须有输入输出提示。
3. 依据下列提供的程序回答问题#include <stdio.h>int f(int m,int n){ int r;while(r=m%n){ m=n; n=r; }return(n);}int main(){ int int_num1, int_num2;printf("请输入两个正的整数(之间用逗号隔开):\n ");scanf("%d,%d",&int_num1,&int_num2);printf("int_num1= %d,int_num2= %d\n",int_num1,int_num2);printf("The maximun common divisor is %d\n",f(int_num1,int_num2));}(1)上述提供程序中,函数f的功能是什么?答:函数f的功能是求两个数的最大公约数。
(2)请依据提供的函数f代码所表示的算法内涵画出其中的传统流程图或N-S图或采用自然语言描述fun代码所表示的算法。
答:辗转相除法(欧几里德法) C语言中用于计算两个正整数a,b的最大公约数,采用函数嵌套调用形式进行求两个数的最大公约数。
其算法过程为:前提:设两数为a,b设其中a做被除数,b做除数,temp为余数Steps:大数放a中,小数放b中;求a/b的余数;若temp=0则b为最大公约数;如果temp!=0则把b的值给a,temp的值给a;返回第二步。
流程图:(3)在VC6.0环境下,运行上述程序时,若输入的数据序列为36,48其输出结果是什么?答:输出结果如下int_num1= 36,int_num2= 48The maximun common divisor is 12二、大作业要求大作业共需要完成3个大题:第1题,满分30分;第2题(1)-(5)任选两题完成,各15分,(6)题必做,10分,满分40分;第3题(1)-(3)必做,满分30分。
//打开文件后,如下步骤写程序#include <stdio.h>//首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数//接下来需要写一个main函数,这也是c语言程序里必不可少的一个函数,叫主函数,他是整个程序的入口函数,程序所有的功能实现都要在这个函数中体现。
但是这个函数有且仅有一个int main(){//这是main函数的函数体,要实现什么功能,就把实现功能的语句写到这里面//比如我要实现打印HelloWorld字符,那么我就调用printf()标准输出语句printf("Hello World!\n");//这个语句表示原样输出引号内的字符,‘\n’表示换行return0;//最后,因为main函数有一个int的返回类型限定,那么我们使用return 语句返回一个int类型的值 0.}//这样就结束了。
一个简单的但又完整的C程序就有了,//下一步就是使用编译器编译成目标的可执行文件://如果是windows下的vc++,那么需要分别点击编译,链接两个按钮生成hello.exe可执行文件//如果是linux下直接在shell中使用gcc hello.c就可以编译成可执行文件a.out //最后就是运行了,windows下直接点击vc++的运行或双击hello.exe可以出现dos窗口运行,并显示结果,linux下使用“./a.out”可以直接运行,运行结果会显示在shell 中。
//这就是整个完整的流程,包括每一步。
调试过程:设置断点,调试命令,察看变量,查看内存,常见错误:C 语言程序设计的错误可分为语法错误、连接错误、逻辑错误和运行错误。
VC++ 和DEV C++都是C++语言的开发工具。
如果只是做些小程序,基本上看不出区别。
两者DEBUG 和RELEASE上的时间有所不同。
还有一点就是,通常如果是在VC++下编写的代码,不是很规范,拿到DEV C++上会报错。
printf("请输入两个正的整数(之间用逗号隔开):\n");scanf("%d,%d",&int_num1,&int_num2);printf("int_num1=%d,int_num2=%d\n",int_num1,int_num2);printf("The maximun common divisor is%d\n",fun(int_num1,int_num2));}3.阅读下列程序,按照要求回答下列问题#include <stdio.h>int fun(int n){int s=0,i;for(i=1;i<=n;i++)s=s+i;return s;}int main( ){int i,n;int sum=0;printf("请输入一个正整数(n≥5):\n");scanf("%d", &n);for(i=1;i<=n;i++) sum=sum+fun(i);printf("1+(1+2)+(1+2+3)+ ......+(1+2+3+...+%d)=%d\n",n,sum); }(1)上述程序中函数fun的功能是什么?答:上述程序中函数fun的功能是求n之内的自然数求和(2)依据函数fun的功能画出其流程图。
(3) 当输入n的值为5时,其输出结果是什么?答:当输入n的值为5时,其输出结果是1+(1+2)+(1+2+3)+ ......+(1+2+3+...+5)=35二、大作业要求大作业共需要完成3个大题:第1题满分30分;第2题(1)-(6)小题任选两题完成,各15分,(7)小题必做,10分,满分40分;第3题(1)-(3)必做,满分30分。
西南大学网络与继续教育学院课程考试试题卷类别:网教 专业:算机科学与技术,计算机应用技术 2015年12月课程名称【编号】: C语言程序设计 【0039】 A卷大作业 满分:100 分一、大作业题目1.通过你对C语言程序设计课程的学习,你认为C语言具有哪些特点?并简要说明。
C语言有哪些局限性?针对这些局限性,是如何解决这些问题的?2.C语言是一种结构化程序设计语言,在C语言中是如何体现结构化程序设计思想的?结构化程序设计方法有内容是什么?在模块化设计中,划分模块的基本原则是什么?采用结构化程序设计方法的好处是什么?3.编程题(1)编写程序,利用公式求的值。
(要求最后一项小于10-6为止)。
(2)编写程序输出100以内能被7整除的数。
(3)编写一个函数void sort(float a[],int n),其功能是对数组a中的n个数据按照升序排列。
再写一个主函数调用该函数对输入10个学生的成绩从高到低排序,并输出排序的结果。
4.依据下列提供的程序回答问题#include <stdio.h>void main(){float x[1000],sum=0.0,ave,score;int n=0,i;printf("请输入一个学生的课程成绩(0-100):\n");scanf("%f",&score);while(score>=0){sum=sum+score;x[n]=score;n++;printf("再输入一个学生的课程成绩(0-100):\n");scanf("%f",&score);}ave=sum/n;printf("输出平均成绩:\n");printf("ave=%5.0f\n",ave);printf("输出低于平均分的学生成绩:\n");for(i=0;i<n;i++)if (x[i]<ave) printf("%5.0f",x[i]);}(1)所提供程序的功能是什么?(2)请依据提供的程序画出其中的传统流程图或N-S图或自然语言描述。
c语言程序设计考试题及答案2019一、选择题(每题2分,共20分)1. 在C语言中,用于定义一个结构体类型的关键字是()。
A. structB. unionC. enumD. typedef答案:A2. 下列关于C语言函数的描述,错误的是()。
A. 函数可以没有返回值B. 函数可以没有参数C. 函数可以有多个返回值D. 函数可以有多个入口答案:D3. 在C语言中,下列哪个选项是正确的文件操作语句()。
A. FILE *fp; fp = fopen("example.txt", "r");B. FILE *fp; fp = open("example.txt", "r");C. FILE *fp; fp = read("example.txt", "r");D. FILE *fp; fp = openfile("example.txt", "r");答案:A4. 下列关于指针的描述中,错误的是()。
A. 指针可以存储地址B. 指针可以存储数据C. 指针可以作为函数的参数D. 指针可以作为函数的返回值答案:B5. C语言中,下列哪个选项是正确的数组定义方式()。
A. int arr[5] = {1, 2, 3, 4, 5};B. int arr[] = {1, 2, 3, 4, 5};C. int arr[5] = {1, 2, 3};D. int arr = {1, 2, 3, 4, 5};答案:A6. 下列关于C语言中预处理命令的描述,正确的是()。
A. #include <stdio.h> 用于编译时包含标准输入输出库B. #define PI 3.14159 是一个宏定义C. #pragma 是编译器指令D. 以上都是答案:D7. 在C语言中,下列哪个选项是正确的循环语句()。
西南大学网络与继续教育学院课程代码:0039 学年学季:20201单项选择题1、对于下面程序输出结果的判断中,正确的是()。
#include <stdio.h>void main(){int x;for(x=1;x<=100;x++)if (++x%2= =0)if (++x%3= =0)if (++x%5= =0)printf("%d,",x); }D. 输出31,61,91输出30,60,90不输出任何内容输出29,59,892、在循环结构中,continue语句的作用是( )E. 继续执行本次循环提前退出本重循环提前结束本次循环提前退出多重循环3、设char s[ ]=“1234567”;,执行printf(“%d,%d\n”,strlen(s),sizeof(s));后的输出结果是( )B. 7,87,78,88,74、执行语句x=(a=3,b=a--);后,x,a,b的值依次是()2,3,23,3,23,2,23,2,35、下面程序的输出结果是()。
#include "stdio.h"int main(){int x=-1,y=4;int k;k=x++<=0&&!(y--<=0);printf("%d,%d,%d",k,x,y);}0,0,31,1,21,1,21,0,36、下列程序的运行结果是()#include "stdio.h"int main( ){int a[3][3]={1,4,17,3,6,19,2,5,18},i,s=0;for(i=0;i<3;i++)s=s+a[i][2-i];printf("s=%d\n",s);}A. s=26s=25s=24s=227、对二维数组正确定义并初始化的是( )int a[3][ ]={{l,2,3},{4,5,6}}int a[3][3]={a,b,c,d,e,f,g}int a[ ][3]={1,2,3,4,5,6}int a[3][3]=(1,2,3,4,5,6)8、下面程序的输出结果是()。
#include <stdio.h>//首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数
//接下来需要写一个main函数,这也是c语言程序里必不可少的一个函数,叫主函数,他是整个程序的入口函数,程序所有的功能实现都要在这个函数中体现。
但是这个函数有且仅有一个
int main()
{
//这是main函数的函数体,要实现什么功能,就把实现功能的语句写到这里面
//比如我要实现打印HelloWorld字符,那么我就调用printf()标准输出语句
printf("Hello World!\n");//这个语句表示原样输出引号内的字符,‘\n’表示换行
return0;//最后,因为main函数有一个int的返回类型限定,那么我们使用return语句返回一个int类型的值0.
}
//这样就结束了。
一个简单的但又完整的C程序就有了,
//下一步就是使用编译器编译成目标的可执行文件:
//如果是windows下的vc++,那么需要分别点击编译,链接两个按钮生成hello.exe可执行文件
//如果是linux下直接在shell中使用gcc hello.c就可以编译成可执行文件a.out
//最后就是运行了,windows下直接点击vc++的运行或双击hello.exe可以出现dos窗口运行,并显示结果,linux下使用“./a.out”可以直接运行,运行结果会显示在shell中。
//这就是整个完整的流程,包括每一步。
调试过程:设置断点,调试命令,察看变量,查看内存,
常见错误:C 语言程序设计的错误可分为语法错误、连接错误、逻辑错误和运行错误。
VC++ 和DEV C++都是C++语言的开发工具。
如果只是做些小程序,基本上看不出区别。
两者DEBUG和RELEASE上的时间有所不同。
还有一点就是,通常如果是在VC++下编写的代码,不是很规范,拿到DEV C++上会报错。
而反过来则可以运行。
这里涉及到GCC的问题,它对标准的支持表现在不支持非标准的东西,但是 DEV C++有个最大的好处就是体积小,没有VC++这么大,可以装到U盘里。
(3)
1 对于编译器处理更方便。
在编译的时候,编译器需要为变量定义符号列表,有显式的变量定义,可以让编译器更方便的查找到变量列表,从而确定变量符号列表,执行后续的编译操作。
2 不容易出错。
可以识别出变量名的手打错误。
比如定义了var_name,在调用的时候如果写作了var_nane, 如果没规定要先定义后使用,那么var_nane就会被当做一个新的变量使用,只到运行时才会发生错误。
而按照C语言的规定,在编译阶段就可以发现该错误。
3 程序更清晰。
变量定义时,直接指明类型,这样在阅读程序时不需要为查知变量类型而花费额外时间。
2、
(1)
#include <stdio.h>
main()
{
int i,n,sum=0;
printf("input n:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
sum+=i;
}
printf ("sum=%d\n",sum);
}
(5)
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for(; i <= 999; i++)
{
int tmp = 0;
int sum = 0;
int count = 1;
tmp = i//把i赋值给tmp
while(tmp/10)//用while循环判断有几位数
{
count ++;//满足条件,计数器++
tmp /= 10;
}
tmp = i;//重新赋值
while(tmp)//判断i是否为水仙花数
{
sum += pow((tmp % 10), count);//pow函数,求一个数的次方,如输入参数pow(3,3),即得27
tmp /= 10;
}
if(sum == i)//如果sum等于i,找到了,并且输出
printf("%d ", i);
}
return 0;
}
(6)
#include<stdio.h>
#include<math.h>
#define N 5
int pri[N];
int flag=0;//判断有无素数无则返回1,有则返回0 int count=0;//素数个数
void pri me(int ar[],int n);
main()
{
int a[N];
int i,j,temp;
pri ntf("input %d numbers below:",N);
for(i=0; i<N; i++)
scanf("%d",&a[i]);
prime(a,N);
for(i=0; i<count; i++)
for(j=i+1;j<count;j++)
if(pri[i]>pri[j])
{
temp = pri[i];
pri[i] = pri[j];
pri[j] =temp;
}
if(flag == 1)
{
printf("After sorting:\n");
for(i=0; i<count; i++)
printf("%d\n",pri[i]);
printf("\n");
}
return 0;
} void prime(int ar[],int n) {
int i,j,m;
for(i=0; i<n; i++)
{
m=(int)(sqrt(ar[i])+1);
for(j=2; j<=m;j++)
if(ar[i]%j == 0)
break;
if(j>m)
{
flag=1;
pri[count++]=ar[i];
printf("%4d\n",ar[i]);
}
}
printf("No primer\n");
}
3、
(1)fun的功能是求m个数的平均值 (3)这些偶数的平均值是16。