信息学竞赛(C语言)程序填空

合集下载

全真c语言程序填空题考试题库!!!

全真c语言程序填空题考试题库!!!

全真c语言程序填空题考试题库!!!c语言程序填空!!!这就是考试题库!!!共计131道试题一、程序填空(共131题)Turbo C(共131试题)3)./*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:已定义一个含有30个元素的数组s,函数fun1的功能是按顺序分别赋予各元素从2开始的偶数,函数fun2则按顺序每五个元素求一个平均值, 并将该值存放在数组w中。

-------------------------------------------------------*/float s[30],w[6];fun1(float s[]){int k,i;for(k=2,i=0;i<30;i++){/***********SPACE***********/ ________________ ;k+=2;}}fun2(float s[],float w[]){float sum=0.0;int k,i;for(k=0,i=0;i<30;i++){sum+=s[i];/***********SPACE***********/ ________________;{w[k]=sum/5;/***********SPACE***********/ ________________ ; k++;}}}main(){int i;fun1(s);/***********SPACE***********/________________;for(i=0;i<30;i++){if(i%5==0) printf("\n");printf("%8.2f",s[i]);}printf("\n");for(i=0;i<6;i++)printf("%8.2f",w[i]);}答案:【1】s[i]=k 或s[i]=(i+1)*2【2】if( ( i + 1 )%5 == 0 )或if( ( i + 1 )/5*5 ==i+1)【3】sum=0 或sum=0.0【4】fun2(s,w)4)./*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:下面的程序是求1!+3!+5!+……+n!的和。

信息学奥赛初赛程序填空

信息学奥赛初赛程序填空

1.下列程序计算1000以内能被3整除的自然数之和,请完成程序。

#include <iostream.h>void main(){int x=1, sum;[1]while(1){if( [2] )break;if( [3] )sum+=x;x++;}cout<<sum<<endl;}2.下面的函数fun未使用中间变量实现对两个数的交换,请完成下列函数的定义。

void fun(int &x, int &y){x+=y;y= [1] ;[2] ;}3.下面的函数bubble()是对整数数组a按升序排序的冒泡算法,其中,参数a存储将被排序的数据,size是数组a中存储的元素数目,请完成该函数。

void bubble(int a[], int size){[1] ;for(int p=1; [2] ; p++)for(int i=0; [3] ; i++)if(a[i]>a[i+1]){temp=a[i];[4] ;[5] ;}}3. 下面的函数Sort()用于对整数数组array按升序排序的选择排序算法,其中参数n表示array数组中存储的数组元素数。

例如,假设数组array中有10个元素,选择排序就是:先将10个数中的最小数与a[0]对换;再将a[1]到a[9]中的最小数与a[1]对换,….,直到排序完成。

请完成该函数。

void Sort( int array[], int n){int k;[1] ;for(int i=0; i<n-1; i++){[2] ;for(int j= [3] ; j<n; j++)if(array[j]<array[k])k=j;t=array[k];[4] ;[5] ;}}4. 统计字符串中英文字母个数的程序。

#include <iostream>using namespace std;int count (char str[]);void main(){char s1[80];cout<<"Enter a line:";[1] ;cout<<"count="<<count(s1)<<endl;}int count (char str[]){int num=0;for (int i=0;str[i];i++)if (str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z') [2] ;return [3] ;}5. 下面的函数Fun将一个整数字符串转换为一个整数。

c语言程序填空题

c语言程序填空题

c语言程序填空题题目描述:编写一个C语言程序,实现对一个整型数组的排序功能。

请编写一个函数,接受一个整型数组和数组的长度作为参数,将数组按照从小到大的顺序进行排序,并将排序后的数组输出。

要求:1. 使用冒泡排序算法实现数组排序功能。

2. 函数的原型为:void bubbleSort(int arr[], int length)。

3. 参数arr表示待排序的整型数组,length表示数组的长度。

4. 输出排序后的数组。

示例:输入:[5, 3, 8, 2, 1]输出:[1, 2, 3, 5, 8]解题思路:冒泡排序是一种简单直观的排序算法。

它重复地走访过要排序的元素,挨次比较相邻的两个元素,如果它们的顺序错误就交换位置,直到没有需要交换的元素为止。

具体步骤如下:1. 定义一个外层循环,循环次数为数组长度减1,表示需要进行n-1次比较。

2. 在外层循环中,定义一个内层循环,循环次数为数组长度减去当前外层循环的索引,表示每次比较的元素个数递减。

3. 在内层循环中,比较相邻的两个元素,如果顺序错误就交换位置。

4. 重复执行步骤3,直到内层循环结束。

5. 重复执行步骤2和步骤3,直到外层循环结束。

编写代码:```c#include <stdio.h>void bubbleSort(int arr[], int length) {int i, j;for (i = 0; i < length - 1; i++) {for (j = 0; j < length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {5, 3, 8, 2, 1};int length = sizeof(arr) / sizeof(arr[0]);printf("排序前的数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}printf("\n");bubbleSort(arr, length);printf("排序后的数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}printf("\n");return 0;}```代码解析:1. 在主函数中,定义了一个整型数组arr和数组长度length。

C语言题目程序填空及答案

C语言题目程序填空及答案

C语言题目程序填空及答案程序填空/*------------------------------------------------------- 【程序填空】---------------------------------------------------------功能:当输入“2,5”的时候输出为“2 5 5”-------------------------------------------------------*/#include#define max 100main(){int f[max],i,j,k,m;scanf("%d,%d",&k,&m);/***********SPACE***********/for(i=0;i<=【m】;i++)f[i]=0;/***********SPACE***********/f[【k-1】]=1;for(i=k;i<=m;i++)/***********SPACE***********/for(j=i-k;j<=i-1;j++)f[i]【+=】f[j];printf("%d%10d%10d\n",k,m,f[m]);}/*------------------------------------------------------- 【程序填空】--------------------------------------------------------- 题目:以下程序是实现输出 x,y,z 三个数中的最大者。

-------------------------------------------------------*/#includemain(){int x = 4, y = 6,z = 7;/***********SPACE***********/int u ,【v】;if(x>y)/***********SPACE***********/【u=x】;else u = y;if(u>z)v = u;elsev=z;printf("the max is %d",v );}/*------------------------------------------------------- 【程序填空】---------------------------------------------------------功能:删除字符串中的指定字符,字符串和要删除的字符均由键盘输入。

c语言程序填空题库

c语言程序填空题库

━━━━━━━━━━━━━━━━━━一、程序填空共130题━━━━━━━━━━━━━━━━━━第1题(9.0分)题号:441/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。

-------------------------------------------------------*/#include <conio.h>#include <stdio.h>void fun (long s, long *t){long sl=10;s /= 10;/***********SPACE***********/*t = s 【?】10;while(s>0){/***********SPACE***********/s = 【?】;/***********SPACE***********/*t = s%10*sl【?】;/***********SPACE***********/sl = sl 【?】10;}}main(){ long s, t;clrscr();printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t);printf("The result is: %ld\n", t); }答案:1). %2). s/1003). + *t4). *第2题(9.0分)题号:439/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:1982年我国第三次人口普查,结果全国人口为10.3亿,假如人口增长率为5%。

c语言程序填空练习题

c语言程序填空练习题

C语言程序填空题1.阅读以下程序并填空。

以下程序的功能是:输出三位正整数中能被13整除的数#include <stdio.h>main(){ int n;for( n=100 ; n<=999 ;n++) if(n%13!=0) continue ; else printf("%d\n",n);} 2.阅读以下程序并填空。

以下程序的功能是:输出100以内能被3整除且个位数为6的所有整数 #include <stdio.h>main(){ int i,j;for(i=0; i<=9 ;i++){ j= i*10+6 ;if(j%3!=0) continue;else printf("%d\n",j);} }3.阅读以下程序并填空。

以下的程序功能是:求101至999之间所有能被13整除的整数之和和个数 #include <stdio.h>main(){ int i,cnt;float sum=0;i=101; cnt=0;while( i<=999 ){ if( i%13==0 ){ sum+=i; cnt++; } i++ ; )printf("sum=%f,cnt=%d\n”,sum,cnt);}4.阅读以下程序并填空。

该程序的功能是:用递归的方法求菲波那契数列2,2,4,6,10,16, 26,42,68,110,……的第10项 #include <stdio.h>long fib(int n){ if(n>= 3 )return fib(n-1)+fib(n-2);elsereturn 2 ; }main(){ printf("%ld\n”,fib(10)); }5.阅读以下程序并填空。

该程序的功能是:用递归法求:1 + 2 + 3 + + n#include <stdio.h> long Sum(int n) { if(n> 1 )return n+Sum(n-1); else return 1 ;)6.阅读以下程序并填空。

c语言程序填空(含答案)

c语言程序填空(含答案)

【程序填空】功能:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

len=length(str...);I.nt length ........(p)N.++..;P.++..;【程序改错】功能:将一个字符串中的大写字母转换成小写字母。

bool (char)......fun(char *c)fun= c;(return *c)..........puts(*p);(putchar(*p)).............【程序设计】功能:编写函数实现两个数据的交换,在主函数中输入任意三个数据,调用函数对这三个数据从大到小排序。

------------------------------------------------*/ #include<stdio.h>void wwjt(); void swap(int *a,int *b){/**********Program**********/ /********** End **********/ }main(){int x,y,z;scanf("%d%d%d",&x,&y,&z);if(x<y)swap(&x,&y);if(x<z)swap(&x,&z);if(y<z)swap(&y,&z);printf("%3d%3d%3d",x,y,z); wwjt();}void wwjt(){FILE *IN,*OUT;int m,n;int i[2];IN=fopen("in.dat","r");if(IN==NULL){printf("Read FILE Error"); }OUT=fopen("out.dat","w"); if(OUT==NULL){printf("Write FILE Error"); }for(n=0;n<3;n++){for(m=0;m<2;m++){fscanf(IN,"%d",&i[m]); }swap(&i[0],&i[1]);fprintf(OUT,"%d\n",i[0]); fprintf(OUT,"%d\n",i[1]); }fclose(IN);fclose(OUT);}/*-------------------------------------------------------【程序填空】功能:输入3个数a,b,c,按从小到大的顺序输出。

c语言程序填空含答案

c语言程序填空含答案

c语言程序填空含答案在学习C语言的过程中,掌握程序填空的技巧是非常关键的。

程序填空题目可以帮助我们加深对C语言语法和逻辑的理解,并锻炼我们的编程思维能力。

在本文中,将为大家提供一些C语言程序填空题及其答案,希望对大家的学习有所帮助。

1. 下面是一个求最大公约数的C语言程序,请填写缺失的代码。

```c#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int main() {int num1, num2;printf("请输入两个正整数:");scanf("%d%d", &num1, &num2);printf("最大公约数为:%d", gcd(num1, num2)); return 0;}```答案:```c#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int main() {int num1, num2;printf("请输入两个正整数:");scanf("%d%d", &num1, &num2);printf("最大公约数为:%d", gcd(num1, num2));return 0;}```2. 下面是一个计算平均数的C语言程序,请填写缺失的代码。

```c#include <stdio.h>double average(int arr[], int length) {int sum = 0;for (int i = 0; i < length; i++) {sum += arr[i];}return sum / length;}int main() {int numbers[] = {5, 10, 15, 20, 25};int length = sizeof(numbers) / sizeof(numbers[0]);printf("平均数为:%.2f", average(numbers, length));return 0;}答案:```c#include <stdio.h>double average(int arr[], int length) {int sum = 0;for (int i = 0; i < length; i++) {sum += arr[i];}return (double)sum / length;}int main() {int numbers[] = {5, 10, 15, 20, 25};int length = sizeof(numbers) / sizeof(numbers[0]);printf("平均数为:%.2f", average(numbers, length));return 0;}```3. 下面是一个字符串反转的C语言程序,请填写缺失的代码。

c语言程序填空题库及详解答案

c语言程序填空题库及详解答案

c语言程序填空题库及详解答案在C语言的学习过程中,程序填空题是一种常见的练习方式,它可以帮助学生加深对C语言语法和逻辑的理解。

下面是一个C语言程序填空题库的示例,包括题目和相应的详解答案。

题目一:计算圆的面积```c#include <stdio.h>#define PI 3.14159int main() {double radius, area;printf("请输入圆的半径:");scanf("%lf", &radius);area = PI * radius * radius;printf("圆的面积是:%.2f\n", area);return 0;}```题目二:判断闰年```c#include <stdio.h>int main() {int year;printf("请输入一个年份:");scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {printf("%d 是闰年。

\n", year);} else {printf("%d 不是闰年。

\n", year);}return 0;}```题目三:求最大公约数```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数是:%d\n", gcd(num1, num2)); return 0;}```题目四:字符串反转```c#include <stdio.h>#include <string.h>void reverse(char str[]) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);reverse(str);printf("反转后的字符串是:%s\n", str);return 0;}```题目五:计算阶乘```c#include <stdio.h>int factorial(int n) {if (n <= 1) {return 1;} else {return n * factorial(n - 1);}}int main() {int num;printf("请输入一个正整数:");scanf("%d", &num);printf("%d 的阶乘是:%d\n", num, factorial(num));return 0;}```以上题目涵盖了C语言中的一些基础概念,如循环、条件判断、函数定义和数组操作。

(完整版)全真c语言程序填空题考试题库

(完整版)全真c语言程序填空题考试题库

c语言程序填空!!!这就是考试题库!!!共计131道试题一、程序填空(共131题)Turbo C(共131试题)3)./*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:已定义一个含有30个元素的数组s,函数fun1的功能是按顺序分别赋予各元素从2开始的偶数,函数fun2则按顺序每五个元素求一个平均值, 并将该值存放在数组w中。

-------------------------------------------------------*/float s[30],w[6];fun1(float s[]){int k,i;for(k=2,i=0;i<30;i++){/***********SPACE***********/________________ ;k+=2;}}fun2(float s[],float w[]){float sum=0.0;int k,i;for(k=0,i=0;i<30;i++){sum+=s[i];/***********SPACE***********/________________;{w[k]=sum/5;/***********SPACE***********/________________ ;k++;}}}main(){int i; fun1(s);/***********SPACE***********/________________;for(i=0;i<30;i++){if(i%5==0) printf("\n");printf("%8.2f",s[i]);}printf("\n");for(i=0;i<6;i++)printf("%8.2f",w[i]);}答案:【1】s[i]=k 或s[i]=(i+1)*2【2】if( ( i + 1 )%5 == 0 )或if( ( i + 1 )/5*5 ==i+1)【3】sum=0 或sum=0.0【4】fun2(s,w)4)./*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:下面的程序是求1!+3!+5!+……+n!的和。

NOIP2020(第二十届)初赛普及组C语言试题及答案

NOIP2020(第二十届)初赛普及组C语言试题及答案

NOIP2020(第二十届)初赛普及组C语言试题及答案NOIP2020(第二十届)初赛普及组C语言试题及答案第二十届全国青少年信息学奥林匹克联赛初赛普及组C语言试题竞赛l 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)1. 以下哪个是面向对象的高级语言()。

A. 汇编语言B. C++C. FortranD. Basic 2. 1TB代表的字节数量是()。

A. 2的10次方B. 2的20次方C. 2的30次方D. 2的40次方3. 二进制数00100100和00010101的和是()。

A. 00101000B. 001010100C. 01000101D. 00111001 4. 以下哪一种设备属于输出设备()。

A. 扫描仪B. 键盘C. 鼠标D. 打印机5. 下列对操作系统功能的描述最为完整的是()。

A. 负责外设与主机之间的信息交换B. 负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D. 将源程序编译成目标程序 6. CPU、存储器、I/O设备是通过()连接起来的。

A. 接口B. 总线C. 控制线D. 系统文件7. 断电后会丢失数据的存储器是()。

A. RAMB. ROMC. 硬盘D. 光盘8. 以下哪一种是属于电子邮件收发的协议()。

A. SMTPB. UDPC. P2PD. FTP 9. 下列选项中不属于图像格式的是()。

A. JPEG格式B. TXT格式C. GIF格式D. PNG格式10. 链表不具有的特点是()。

A. 不必事先估计存储空间B. 可随机访问任一元素C. 插入删除不需要移动元素D. 所需空间与线性表长度成正比11. 下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。

A. 296B. 133C. 256D. 199 12. 下列几个32位IP地址中,书写错误的是()。

NOIP(第二十届)初赛普及组C语言试题及答案

NOIP(第二十届)初赛普及组C语言试题及答案

NOIPXX(第二十届)初赛普及组C语言试题及答案第届全国青少年信息学奥林匹克联赛初赛普及组C语言试题竞赛时间:xx年10月12日14:30~16:30 选手注意: l 试题纸共有8页,答题纸共有2页,总分值100分。

请在答题纸上作答,写在试题纸上的一律无效。

l 不得使用任何电子设备(如计算器、、电子词典等)或查阅任何书籍资料。

一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1. 以下哪个是面向对象的高级语言()。

A. 汇编语言B. C++C. FortranD. Basic 2. 1TB代表的字节数量是()。

A. 2的10次方B. 2的20次方C. 2的30次方D. 2的40次方 3. 二进制数00 0和00010101的和是()。

A. 00101000B. 001010100C. 01000101D. 00111001 4. 以下哪一种设备属于输出设备()。

A. 扫描仪B. 键盘C. 鼠标D. 打印机 5. 以下对操作系统功能的描述最为完整的是()。

A. 负责外设与主机之间的信息交换B. 负责诊断机器的故障C. 控制和管理计算机系统的各种硬件和软件资源的使用D. 将源程序编译成目标程序 6. CPU、存储器、I/O设备是通过()连接起来的。

A. 接口B. 总线C. 控制线D. 系统文件 7. 断电后会丧失数据的存储器是()。

A. RAMB. ROMC. 硬盘D. 光盘 8. 以下哪一种是属于收发的协议()。

A. TPB. UDPC. P2PD. FTP 9. 以下选项中不属于图像格式的是()。

A. JPEG格式B. TXT格式C. GIF格式D. PNG格式 10. 链表不具有的特点是()。

A. 不必事先估计存储空间B. 可随机访问任一元素C. 插入删除不需要元素D. 所需空间与线性表长度成正比 11. 以下各无符号十进制整数中,能用八位二进制表示的数中最大的是()。

C语言程序填空(清晰版本)

C语言程序填空(清晰版本)

C语言程序填空(清晰版本)【程序填空】功能:求出二维数组中的最小元素值。

#include/***********FILL***********/min_value(int m,int n,_____){int i,j,min;min=array[0][0];for(i=0;i<m;i++)< bdsfid="71" p=""></m;i++)<>for(j=0;j<n;j++)< bdsfid="73" p=""></n;j++)<>/***********FILL***********/if(min_____array[i][j]) min=array[i][j];/***********FILL***********/return(_____);}void main(){int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}; /***********FILL***********/printf("min value is %d\n",_____);}【参考答案】int array[][4]int array[3][4]【参考答案】>>=【参考答案】min【参考答案】min_value(3,4,a)【程序填空】功能:输入两个整数x,y,求他们的阶乘和x!+y!。

#includeint fun (int ss){ int i,n=1;/**********FILL************/for(_____;i<=ss;i++)n=n*i;/**********FILL************/_____ n;}main(){int x,y;scanf("%d,%d",&x,&y);/**********FILL************/printf("x!+y!=%d",_____);}【参考答案】i=1【参考答案】return【参考答案】fun(x)+fun(y)fun(y)+fun(x)【程序填空】功能:产生并输出如下形式的方阵。

C语言程序设计填空题及答案复习用

C语言程序设计填空题及答案复习用

导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能;这类习题的设计就是要引导读者逐步掌握编程的方法;本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力;在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率; 下面程序的功能是不用第三个变量,实现两个数的对调操作; include <>main{ int a,b;scanf"%d%d",&a,&b;printf"a=%d,b=%d\n",a,b;a= ①;b= ②;a= ③;printf"a=%d,b=%d\n",a,b;}下面程序的功能是根据近似公式:π2/6≈1/12+1/22+1/32+ ……+1/n2,求π值; include <>double pilong n{ double s=;long i;fori=1;i<=n;i++s=s+ ①;return ②;}下面的程序的功能是求一维数组中的最小元素;findminint s,int t,int k{ int p;forp=0,k=p;p<t;p++ifsp<sk①;}main{ int a10,i,k=&i;fori=0;i<10;i++scanf"%d",&ai;findmina,10,k;printf"%d,%d\n",k,ak;}下面程序的功能是计算1-3+5-7+ …… -99+101的值;main{ int i,t=1,s=0;fori=1;i<=101;i+=2{ ①t=t i;s=s+t;②;t>0t=-1:1;}printf"%d\n",s;}有以下程序段:s=;fork=1;k<=n;k++s=s+kk+1;printf"%f\n",s;填空完成下述程序,使之与上述程序的功能完全相同;s=;①;k=0;do{ s=s+d;②;d=kk+1;}while ③;printf"%f\n",s;下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入;main{ float x,amax,amin;scanf"%f",&x;amax=x;amin=x;while ①{ ifx>amax amax=x;if ②amin=x;scanf"%f",&x;}printf"\namax=%f\namin= %f\n",amax,amin;}下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中;funint x,int b{ int k=0,r;do{ r=x% ①;bk++=r;x/= ②;}whilex;}下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数;例如数字26,数位上数字的乘积12大于数字之和8;main{ int n,k=1,s=0,m;forn=1;n<=100;n++{ k=1;s=0;①;while ②{ k=m%10;s+=m%10;③;}ifk>sprintf"%d",n;}}下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数;main{ int i,j,k,count=0;fori=1;i<=9;i++forj=0;j<=9;j++if ①continue;else fork=0;k<=9;k++if ②count++;printf"%d",count;}下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数;main{ int i,j;fori=0;①;i++{ j=i10+6;if ②countinue;printf"%d",j;}}下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数;hcfint m,int n{ int r;ifm<n{ r=m;①;n=r;}r=m%n;while ②{ m=n;n=r;r=m%n;}③;}下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序;排好序的10个数分两行输出;程序如下:include <>main{ ①;int i,j;printf"Input 10 numbers please\n";fori=0;②;i++scanf"%f", &ai;printf"\n";fori=2;③;i++forj=0;④;j++ if ⑤{ x=aj;⑥;aj+1=x;}printf"The sorted 10numbers;\n";fori=0;⑦;i++{ if ⑧printf"\n";printf"%f\t",ai;}printf"\n";}下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和;include ""main{ int i,a20,s,count;s=count=0;fori=0;i<20;i++scanf"%d", ①;fori=0;i<20;i++{ ifai<0②;s+=ai;count++;}printf"s=%d\tcount=%d\n",s,count;}下面程序的功能是删除字符串s中的空格;include <>main{ char s="Beijing ligongdaxue";int i,j;fori=j=0;si='\0';i++ifsi= ' ' ①;else ②;sj= '\0';printf"%s",s;}下面程序的功能是将字符串s中所有的字符'c'删除;请选择填空;include<>main{ char s80;int i,j;getss;fori=j=0;si= '\0';i++ifsi= 'c' ①;sj= '\0';putss;}下面程序的功能是输出两个字符串中对应相等的字符;请选择填空;include <>char x="programming";char y="Fortran";main{ int i=0;whilexi= '\0' && yi= '\0' ifxi==yiprintf"%c", ①;elsei++;}下面程序的功能是将字符串s 中的每个字符按升序的规则插到数组a中, 字符串a已排好序;include <> main{ char a20="cehiknqtw";char s="fbla";int i,k,j;fork=0;sk= '\0';k++{ j=0;whilesk>=aj && aj= '\0'j++;for ①②;aj=sk;}putsa;}下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差;例如:输入的两个字符串分别为"abcdefg"和"abceef",则输出为-1;include <>main{ char str1100,str2100,c;int i,s;printf"Enter string 1: ";getsstr1;printf"Enter string 2: ";getsstr2;i=0;whilestr1i == str2i &&str1i= ①i++;s= ②;printf"%d\n", s;}下面的函数expand在将字符串s复制到字符串t时, 将其中的换行符和制表符转换为可见的转义字符表示,即用'\n'表示换行符,用'\t'表示制表符;expandchar s,char t{ int i,j;fori=j=0;si= '\0';i++switch si{ case '\n': t ①= ②;tj++ = 'n';break;case '\t': t ③= ④;tj++ = 't';break;default: t ⑤= si;break;}tj = ⑥;}下面的函数indexchar s, char t检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置下标值,否则送回-1;indexchar s, char t{ int i,j,k;fori=0;si= '\0';i++{ forj=i,k=0;①&& sj==tk;j++,k++ ;if ②return i;}return-1;}n下面程序的功能是计算S= k ;k=0long funint n{ int i;long s;fori=1;i ①;i++s=i;return ②;} main{ int k,n;long s;scanf"%d",&n;s= ③;fork=0;k<=n;k++s+= ④;printf"%ld\n",s;}下面程序的功能是显示具有n个元素的数组s中的最大元素;define N 20main{ int i,aN;fori=0;i<N;i++scanf"%d",&ai;printf"%d\n", ①;}fmaxint s,int n{ int k,p;forp=0,k=p;p<n;p++ifsp>sk ②;returnk;}下面程序的功能是由键盘输入n,求满足下述条件的x、y:nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小;include <>pow3int n,int x{ int i, last;forlast=1,i=1;i<=x;i++last= ①;returnlast;}main{ int x,n,min,flag=1;scanf"%d", &n;formin=2;flag;min++forx=1;x<min && flag;x++if ②&&pow3n,x==pow3n,min-x{ printf"x=%d,y=%d\n", x,min-x ;③;}}下面的程序是用递归算法求a的平方根;求平方根的迭代公式如下:include <>double mysqrt double a, double x0{ double x1, y;x1 = ①;if fabsx1-x0>y = mysqrt ②;else y = x1;return y ;}main{ double x;printf"Enter x: ";scanf"%lf", &x;printf"The sqrtof %lf=%lf\n", x, mysqrt x, ;}以下程序是计算学生的年龄;已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄;include <>age int n{ int c;if n==1 c=10;else c= ①;returnc;}main{ int n=5;printf"age:%d\n", ②;}下面的函数sumint n完成计算1~n的累加和;sumint n{ ifn<=0printf"data error\n";ifn==1 ①;else ②;}下面的函数是一个求阶乘的递归调用函数;factoint n{ if n == 1 ①;else return ②;}组合问题,由组合的基本性质可知:1 Cm,n=Cn-m,n2 Cm,n+1=Cm,n+Cm-1,n公式2是一个递归公式,一直到满足C1,n=n为止;当n<2m时,可先用公式1 进行简化,填写程序中的空白,使程序可以正确运行;include""main{ int m,n;printf"Input m,n=";scanf"%d%d", &m, &n;printf"The combinationnumbeers is %d\n",combinm,n;}combin int m, int n{ int com;if n<2m m=n-m;if m==0 com=1;else ifm==1 ①;else ②;returncom;}下列函数是求一个字符串str的长度;•••••• int strlen char str••••••{ if ①return 0;•• •••• else return ②;}用递归实现将输入小于32768的整数按逆序输出;如输入12345,则输出54321;include""main{ int n;printf"Input n : ";scanf"%d", ①;rn;printf"\n";}r int m{ printf"%d", ②;m = ③;if ④⑤;}输入n值,输出高度为n的等边三角形;例如当n=4时的图形如下:include <>void prt char c, int n{ if n>0{ printf "%c", c ;①;}}main{ int i, n;scanf"%d", &n;for i=1;i<=n;i++{ ②;③;printf"\n";}}下面的函数实现N层嵌套平方根的计算;double ydouble x, int n{ if n==0return0;else return sqrtx+ ①;}函数revstrs将字符串s置逆,如输入的实参s为字符串"abcde", 则返回时s 为字符串"edcba";递归程序如下:revstr char s{ char p=s, c;whilep p++;①;ifs<p{ c=s;s=p;②;revstrs+1;③;}}如下是由非递归实现的revstrs函数:revstr schar s;{ char p=s, c;while p p++;④;while s<p{ c=s;⑤= p;p-- = c;}}下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是"ABCDE",反序为"EDCBA";void inventchar str,int n{ char t;t=str;str=str+n-1;str+n-1=t;if n>2 invent ①,n-2;else ②;}从键盘上输入10个整数,程序按降序完成从大到小的排序; include <>int array10;sort int p, int q{ int max, s;if ①return;max=p;for s=p+1;s<=q;s++if s > max②;swap ③;sort ④;}swap int x, int y { int temp;temp=x;x=y;y=temp;}main{ int i;printf"Enterdata :\n";for i=0;i<10;i++scanf"%d", &arrayi;sort⑤;printf"Output:";for i=0;i<10;i++printf"%d ", arrayi;}下面函数的功能是将一个整数存放到一个数组中;存放时按逆序存放;例如:483存放成"384";include <>void convertchar a, int n{ int i;ifi=n/10 =0convert ①, i ;a = ②;}char str10= " ";main{ int number;scanf"%d", &number;convert str, number ;putsstr;}下面程序的功能是实现数组元素中值的逆转;include <>main{ inti,n=10,a10={1,2,3,4,5,6,7,8,9,10};inverta,n-1;fori=0;i<10;i++printf"%4d",ai;printf"\n";}invertint s,int num{ int t,k;t=s+num;while ①{ k=s;s=t;t=k;②;③;}}下面程序通过指向整型的指针将数组a34 的内容按3行×4列的格式输出,请给printf 填入适当的参数,使之通过指针p将数组元素按要求输出;include <>inta34={{1,2,3,4},{5,6,7,8},{9,1 0,11,12}}, p=a;main{ int i,j;fori=0;i<3;i++{ forj=0;j<4;j++printf"%4d ", ①;}}下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串; include <>main{ char str81, sptr;int i;fori=0;i<80;i++{ stri=getchar ;ifstri== '\n' break;}stri= ①;sptr=str;while sptrputchar sptr ②;}下面函数的功能是将字符变量的值插入已经按ASCII码值从小到大排好序的字符串中;void funchar w,char x,int n{ int i,p=0;whilex>wp ①;fori=n;i>=p;i-- ②;wp=x;++n;}下面程序的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符;include <>strmergea,b,c / 将已排好序的字符串a、b合并到c /char a,b,c;{ char t,w;w=c;while a= '\0' ①b='\0'{ t= ②a++:b<a b++ :③;/ 将a、b的小者存入t /if w ④'\0' w=t;else if t ⑤w ++w=t;/ 将与w不相同的t存入w /}while a = '\0' / 以下将a或b中剩下的字符存入w /if a = w ++w=a++;else a++;while b = '\0'if b = w ++w=b++;else b++;++w = ⑥;}strsort char s / 将字符串s中的字符排序/{ int i,j,n;char t,w;⑦;for n=0;w = '\0';⑧w++;for i=0;i<n-1;i++for j=i+1;j<n;j++if si>sj{ ⑨}}main{ char s1100,s2100,s3200;printf"\nPlease Input First String:";scanf"%s",s1;printf"\nPlease Input Second String:";scanf"%s",s2;strsorts1;strsorts2;⑩= '\0';strmerges1,s2,s3;printf"\nResult:%s",s3;}已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成:①若乘积为一位数,则该乘积即为数列的后继项;②若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项; 下面的程序输出该数列的前N项及它们的和,其中,函数sumn,pa 返回数列的前N项和,并将生成的前N项存入首指针为pa的数组中,程序中规定输入的N值必须大于2,且不超过给定的常数值MAXNUM;例如:若输入N的值为10,则程序输出如下内容:sum10=442 3 6 1 8 8 6 4 2 4include ""define MAXNUM 100int sumn, paint n, pa;{ int count, total, temp;pa = 2;①=3;total=5;count=2;while count++<n{ temp = pa-1 pa;if temp<10{ total += temp;++pa = temp;}else{ ②= temp/10;total += pa;if count<n{ count ++;pa++;③= temp%10;total += pa;}}}④;}main{ int n, p, q, numMAXNUM;do{ printf"Input N= 2<N<%d:",MAXNUM+1;scanf"%d", &n;}while ⑤;printf"\nsum%d=%d\n", n,sumn, num;for p=num, q = ⑥;p<q;p++printf"%4d", p;printf"\n";}下面程序的功能是输入学生的姓名和成绩,然后输出;include <>struct stuinf{ char name20;/ 学生姓名/int score;/ 学生成绩/} stu, p;main{ p=&stu;printf"Enter name:";gets ①;printf"Enter score: ";scanf"%d", ②;printf"Output: %s, %d\n", ③, ④;}下面程序的功能是按学生的姓名查询其成绩排名和平均成绩;查询时可连续进行,直到输入0时才结束;•• include <>include <>define NUM 4• struct student• { int rank;char name;float score;••••••••};•••••••• ①stu={ 3,"liming",,•••••••• 4,"zhanghua",,•••••••• 1,"anli",,•••••••• 2,"wangqi",};••••••••main••••••••{ char str10;•••••••• int i;•••••••• do{ printf"Enter a name";•••••••• scanf"%s",str;•••••••• for i=0;i<NUM;i++ •••••••• if ②••••••••{ printf"Name :%8s\n",stui.name;••••••••printf"Rank :%3d\n",stui.rank;••••••••printf"Average :%\n",stui.score;•••••••• ③;•••••••• }•••••••• if i>=NUMprintf"Not found\n";•••••••• }whilestrcmpstr,"0"=0 ;••••••••}下面程序的功能是从终端上输入5个人的年龄、性别和姓名,然后输出;include""structman{ charname20;unsigned age;charsex7;};main{ structmanperson5;data_inperson,5;data_o utperso n,5;}data_in struct man p, int n{ struct man q = ①;for ;p<q;p++{ printf "age:se x:name " ;scanf" %u%s", &p->ag e,p->sex;②;}}data_o ut struct man p, int n { struct man q = __③__;for ;p<q;p++printf"%s;%u;%s\n",p->name,p->age,p->sex;}输入N个整数,储存输入的数及对应的序号,并将输入的数按从小到大的顺序进行排列;要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定;例如:输入的第3个整数为5,第7个整数也为5,则将先输入的整数5排在后输入的整数5的前面;程序如下:include ""define N 10struct{ int no;int num;} arrayN;main{ int i,j,num;for i=0;i<N;i++{ printf"enter No. %d:",i;scanf"%d",&num;for ①;j>=0&&arrayj.num②num;③arrayj+1=arrayj;array ④ .num=num;array ⑤ .no=i;}for i=0;i<N;i++printf"%d=%d,%d\n",i,arrayi.num,arrayi.no;}以下程序的功能是:读入一行字符如:a、...y、z,按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾如下图,然后再按输入的相反顺序输出,并释放全部结点;include <>main{ struct node{ char info;struct node link;} top,p;char c;top=NULL;whilec= getchar ①{ p=struct nodemallocsizeofstruct node;p->info=c;p->link=top;top=p;}while top{ ②;top=top->link;putcharp->info;freep;}}下面函数将指针p2所指向的线性链表,串接到p1所指向的链表的末端;假定p1所指向的链表非空;define NULL 0struct link{ float a;struct link next;};concatenate p1,p2struct list p1,p2;{ if p1->next==NULLp1->next=p2;else concatenate ①,p2;}下面程序的功能是从键盘输入一个字符串,然后反序输出输入的字符串;include <>struct node{ char data;struct node link;}head;main{ char ch;struct node p;head = NULL;while ch=getchar='\n'{ p = struct nodemallocsizeofstruct node;p->data = ch;p->link = ①;head = ②;}③;while p=NULL{ printf"%c ", p->data;p = p->link;}}下面程序的功能是从键盘上顺序输入整数,直到输入的整数小于0时才停止输入;然后反序输出这些整数;include <>struct data{ int x;struct data link;}p;input{ int num;struct data q;printf"Enter data:";scanf"%d", &num;if num<0①;q = ②;q->x = num;q->link = p;p=q;③;}main{ printf"Enter data until data<0:\n";p=NULL;input;printf"Output:";while ④{ printf"%d\n", p->x;⑤;}}下面函数的功能是创建一个带有头结点的链表,将头结点返回给主调函数;链表用于储存学生的学号和成绩;新产生的结点总是位于链表的尾部;struct student{ long num;int score;struct student next;};struct student creat{ struct studenthead=NULL,tail;long num;int a;tail= ①mallocLEN;do{ scanf"%ld,%d",&num,&a;ifnum=0{ ifhead==NULL head=tail;else ②;tail->num=num;tail->score=a;tail->next=struct studentmallocLEN;}else tail->next=NULL;}whilenum=0;return ③;}下面create函数的功能是建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾;单向链表的头指针作为函数值返回;include <>define LEN sizeofstructstudentstruct student{ long num;int score;struct student next;};struct student creat{ struct studenthead=NULL,tail;long num;int a;tail= ①mallocLEN;do{ scanf"%ld,%d",&num,&a;ifnum=0{ ifhead==NULL head=tail;else tail=tail->next;tail->num=num;tail->score=a;tail->next= ②mallocLEN;}else tail->next=NULL;}whilenum=0;③;}下面程序的功能是统计文件中的字符的个数;include <>main{ long num=0;①fp;iffp=fopen"", "r"==NULL{ printf"Can't open the file ";exit0;}while ②{ fgetcfp;num++;}printf"num=%d\n",num;fclosefp;}下面程序的功能是把从键盘输入的文件用作为文件结束标志复制到一个名为的新文件中;include <>FILE fp;main{ char ch;iffp=fopen ①==NULLexit0;whilech=getchar=''fputcch,fp;②;}下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出假定给定的文件名无误; include <>mainint argc,char argv{ FILE &f1,f2;ifargc< ①{ printf"The command lineerror ";exit0;}f1=fopenargv1, "r";f2=fopenarhv2, "w";while ②fputsfgetcf1, ③;④;⑤;}下面程序的功能是根据命令行参数分别实现一个正整数的累加或阶乘;例如:如果可执行文件的文件名是sm,则执行该程序时输入:"sm + 10",可以实现10的累加;输入:"sm - 10",可以实现求10的阶乘;include <>include <>main int argc,char argv{ int n;void sum,mult;void funcp;n=atoiargv2;ifargc=3 || n<=0dispform ;switch ①{ case '+': funcp=sum;break;case '-': funcp=mult;break;default: dispform ;}②;}void sumint m{ int i,s=0;fori=1;i<m;i++③;printf"sum=%d\n",s;}void multint m{ long int i, s=1;fori=1;i<=m;i++s = i;printf"mult= %ld\n";s;}dispform{ printf "usage:sm n+/n>0\n";exit 0;}下面程序的功能是键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件中,然后从该文件读出字符串并显示出来;include <>main{ char str100;int i=0;FILE fp;iffp=fopen"", ①==NULL { printf"Can't open the file.\n";exit0;}printf"Input a string:\n";getsstr;whilestri{ ifstri>= 'a'&&stri<= 'z' stri= ②;fputcstri,fp;i++;}fclosefp;fp=fopen"", ③;fgetsstr,strlenstr+1,fp;printf"%s\n",str;fclosefp;}下面程序的功能是将从终端上读入的10个整数以二进制方式写入名为""的新文件中;include <>FILE fp;main{ int i, j;if fp=fopen ①, "wb" ==NULLexit 0;for i=0;i<10;i++{ scanf"%d", &j ;fwrite ②, sizeofint, 1, ③;}fclose fp;}以字符流形式读入一个文件,从文件中检索出六种C语言的关键字,并统计、输出每种关键字在文件中出现的次数;本程序中规定:单词是一个以空格或'\t'、'\n'结束的字符串;include <>include <>FILE cp;char fname20, buf100;int num;struct key{ char word10;int count;}keyword={ "if", 0, "char", 0,"int", 0,"else", 0, "while", 0, "return",0};char getword FILE fp{ int i=0;char c;whilec=getcfp = EOF &&c==' '||c=='\t'||c=='\n' ;if c==EOF return NULL ;else bufi++=c;whilec = ①&& c= ' ' && c='\t' && c= '\n'bufi++ = c;bufi= '\0';returnbuf;}lookupchar p{ int i;char q, s;fori=0;i<num;i++ { q = ②;s=p;while s && s==q{ ③}if ④{ keywordi.count++;break;}}return;}main{ int i;char word;printf"Input file name:";scanf"%s", fname;ifcp=fopenfname, "r"==NULL{ printf"File openerror: %s\n", fname;exit0;}num = sizeofkeyword /sizeofstruct key;while ⑤lookupword;fclosecp;fori=0;i<num;i++printf"keyword:%-20scount=%d\n",keywordi.word,keywordi.count;}下面程序的功能是从键盘接受姓名例如:输入"ZHANG SAN",在文件""中查找,若文件中已经存入了刚输入的姓名,则显示提示信息;若文件中没有刚输入的姓名,则将该姓名存入文件;要求:⑴若磁盘文件"",已存在,则要保留文件中原来的信息;若文件""不存在,则在磁盘上建立一个新文件;⑵当输入的姓名为空时长度为0,结束程序;include <>main{ FILE fp;int flag;char name30, data30;iffp=fopen"", ①==NULL{ printf"Open file error\n";exit0;}do{ printf"Enter name:";getsname;if strlenname==0break;strcatname, "\n";②;flag=1;while flag && fgetsdata, 30,fp ③if strcmpdata, name == 0④;if flagfputsname, fp;elseprintf"\tData enter error\n";} while ⑤;fclosefp;}。

C语言程序填空题及答案

C语言程序填空题及答案

程序填空题、1#include <stdio.h>void main()int n,k=0;{scanf(%d,&n);// 1)n 2) n!=0;while( _____1_____ ){k++;n=n/10_____2_____;}printf(%d\n,k);}2、#include <stdio.h>#include <math.h>#define f(x) x*x-5*x+sin(x)void main(){ int x; float max;// max=f(1);______1______for(x=2;x<=10;x++)if(f(i)>max) // max=f(i);______2______printf(%f\n,max);}、3#include <stdio.h>void main(){char c;c=getchar();// c>='a' && c<'v'if(______1______)c=c+5;elseif (c>='v' && c<='z')//c=c-21;______2______putchar(c);}、4.#include <stdio.h>void Dec2Bin(int m){int bin[32],j;for(j=0;m!=0;j++){// m%2bin[j]= ______1______;m=m/2;}for(;j!=0;j--)// bin[j-1]printf(%d, ______2______ );}void main(){int n;scanf(%d,&n);Dec2Bin(n);}5、#include <stdio.h>#include <math.h>void main(){int n,s=0;scanf(%d,&n);n=fabs(n);//n=(n>0?n:-n) 2) ;______ 1 ______while(n!=0) {// s=s+n_x0010_;______ 2 ______n=n/10;}printf(%d\n,s);}、6/#include <stdio.h>//int *pa , int *pb void swap(______1______)*/ 交换两个数的位置{ /*int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf(%d%d%d,&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);// a>b if(______2______)swap(&a,&b);printf(%d,%d,%d,a,b,c);}7、#include <stdio.h>//long f(int n);_______1______void main(){printf(%ld\n,f(30));}long f(int n){// n==1||n==2 if( ______2______ )return 1;elsereturn f(n-1)+f(n-2);}8、#include <stdio.h>void main(){char s[80];int i,j;gets(s);// s[i]!='\0' for(i=j=0;______1______;i++)if(s[i] != 'c'){s[j]=s[i];//j++;______2______}s[j]='\0';puts(s);}、9#include <stdio.h>struct STUDENT{char name[16];int math;int english;int computer;int average;};*/ /* 计算平均成绩void GetAverage(struct STUDENT *pst){int sum=0;//sum+ pst->math+ pst->English+ pst->computer sum = ______1______;pst->average = sum/3;}void main(){int i;ike,80,80,90},eter,90,100,99}};for(i=0;i<4;i++){// &st[i]GetAverage(______2______);}printf(Name\tMath\tEnglish\tCompu\tAverage\n);for(i=0;i<4;i++){printf(%s\t%d\t%d\t%d\t%d\n,st[i].name,st[i].math,st[i].english,st[i].computer,st[i].average);}}10、#include <stdio.h>#include <math.h>long f(long n){ long m,y=0; m=fabs(n);while(m!=0) {y=y*10+m_x0010_;// m=m/10;____1____}if(n>=0) return y;//return ( -y);else _____2_____}void main(){printf(%ld\t,f(12345)); printf(%ld\n,f(-34567));}11、#include <stdio.h>float f(float,float*,int);void main(){ float b[5]={1.1,2.2,3.3,4.4,5.5};printf(%f\n,f(1.7,b,5));}// float x,float a[ ], int n float f( _______1________ ) { float y=a[0],t=1; int i;for(i=1;i<n;i++) { t=t*x; y=y+a[i]*t; }// return y_____2_____}、12#include <stdio.h>#include <string.h>#include <ctype.h>void f(char *s){ int i=0;while(s[i]!='\0'){strcpy// if(isdigit(s[i])) ____1____(s+i,s+i+1);//else___2___ i++;}}void main(){ char str[80];gets(str); f(str); puts(str);}13、#include <stdio.h>#include <ctype.h>void main(){ char a[80]; int n[3]={0},i; gets(a);//for(i=0;a[i]!='\0';i++)________1________{if (tolower(a[i])>='a' && tolower(a[i])<='z') /*统计字母个数*/n[0]++;// a[i]>='0' && a[i]<='9' *///*统计数字个数else if (________2________)n[1]++;elsen[2]++;}for(i=0;i<3;i++) printf(%d\n,n[i]);}14、#include <stdio.h>#include<math.h>void main(){int i,a,b,c;for(i=100;i<=999;i++){a=i/100;// b=i_x0010_0/10;_______1_______c=i_x0010_;//i==a*a*a+b*b*b+c*c*c if (________2________)printf(%d is a Armstrong number!\n,i);}}15、#include <stdio.h>void main(){int a[10],b[10],i;printf(\Input 10 numbers: );for (i=0; i<10;i++) /* 数组输入*/scanf(%d, &a[i]);for (i=1; i<10; i++)//a[i]+a[i-1]数组中的元素*/ b/* b[i]=______1______; 计算for (i=1; i<10; i++){printf(=,b[i]);//i%3==0*/ 个数据每行打印if (______2______) printf(\); /* 3 }}。

C语言程序填空题加答案

C语言程序填空题加答案

5、 若a和b都是int型变量,函数scanf("%3d%2d",&a,&b) 对应的键盘输入数据是:2618223<回车> 则该函数执行后,变量b的值等于【 82 】. 6、 若c是char型变量,c的初值为-1,则函数printf("%u",c) 的输出结果为【 65535 】. 假设int型数据占2个字节. 7、 若有如下输入函数:scanf("%d%d%d",&a,&b,&c); 则可以使用空格、【 换行符 或 \n 或 回车换行符 或 回车 或 回车】 符 或制表符 作为输入数据的间隔符。 8、 C语言的输入输出功能通过调用库【 函数 】实 现. 9、 表达式 'A' - 'D' 的值等于【 -3 】.
20、 在for(表达式1;表达式2;表达式3) 语句中 表达式1执行了【 1 】次. 21、 执行以下程序后,输出'$'号的个数是【 6 】. main() { int i,j; for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('$'); } 22、 执行下列程序段后,s的值是【 15 】. int k, s; for(k=s=0; k<10&&s<=10; s+=k)k++; 23、 用while和do-while循环时,循环变量初始化的操作 应在while和do-while语句之【 前 】完成.
33、 (!x)==(x!=0)的值为【 0 】. 34、 对应scanf("a=%d,b=%d",&a,&b);语句的输入a为 a=3,b=7 】. 3,b为7的键盘输入格式是【 35、 当a=0,b=2,c=3时,则表达式a+b>0 && b==c的值 是【 0 】. 36、 设x,y,z均为int型变量;请写出描述"x或y中有一个 小于z"的表达式【 x<z||y<z 】. 37、 当a=0,b=2,c=4时,则表达式c+b>0 && !b==a的值 是【 1 】. 38、 在使用printf()函数时,如果字符串的长度、或整型 数位数超过说明的长宽, 将按其【 实际 】长度输出. 39、 使用格式符%m.nf输出一个实数时,若小数部分位 数超过了说明的小数位宽度n时, 则第n+1位要进行 【 四舍五入 】.

信息学竞赛(C语言)程序填空

信息学竞赛(C语言)程序填空

·程序填空题·1.(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。

请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。

例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

#include <stdio.h>int a[101];int n,i,ans,len,tmp,beg;int main(){scanf("%d",&n);for (i=1;i<=n;i++)scanf("%d",&a[i]);tmp=0;ans=0;len=0;beg= ①;for (i=1;i<=n;i++){if (tmp+a[i]>ans){ans=tmp+a[i];len=i-beg;}else if ( ②&&i-beg>len)len=i-beg;if (tmp+a[i] ③){beg= ④;tmp=0;}else⑤;}printf("%d %d\n",ans,len);return 0;}①_______________________ ②_______________________③_______________________ ④_______________________⑤_______________________2、读入一个字符串,如果出现了减号' - ' ,减号两侧又同时为小写字母、大写字母或数字,就需要按照ASCII码的顺序把' - ' 所代表的省略部分不全。

例如:' a – d ' 实际是' abcd ',' E – H ' 实际是' EFGH ' ,' A – A ' 实际上是' A ' ,' 0 - 7 ' 实际上是' 01234567 ' 。

C语言程序填空题

C语言程序填空题

导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能;这类习题的设计就是要引导读者逐步掌握编程的方法;本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力;在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率;下面程序的功能是不用第三个变量,实现两个数的对调操作;include <>main{ int a,b;scanf"%d%d",&a,&b;printf"a=%d,b=%d\n",a,b;a= ①;b= ②;a= ③;printf"a=%d,b=%d\n",a,b;}下面程序的功能是根据近似公式:π2/6≈1/12+1/22+1/32+ …… +1/n2,求π值; include <>double pilong n{ double s=;long i;fori=1;i<=n;i++s=s+ ①;return ②;}下面的程序的功能是求一维数组中的最小元素; findminint s,int t,int k{ int p;forp=0,k=p;p<t;p++ifsp<sk①;}main{ int a10,i,k=&i;fori=0;i<10;i++scanf"%d",&ai;findmina,10,k;printf"%d,%d\n",k,ak;}下面程序的功能是计算1-3+5-7+ ……-99+101的值;main{ int i,t=1,s=0;fori=1;i<=101;i+=2{ ①;s=s+t;②;}printf"%d\n",s;}有以下程序段:s=;fork=1;k<=n;k++s=s+kk+1;printf"%f\n",s;填空完成下述程序,使之与上述程序的功能完全相同;s=;①;k=0;do{ s=s+d;②;d=kk+1;}while ③;printf"%f\n",s;下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入;main { float x,amax,amin;scanf"%f",&x;amax=x;amin=x;while ①{ ifx>amax amax=x;if ②amin=x;scanf"%f",&x;}printf"\namax=%f\namin=%f\n",amax,ami n;}下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中;funint x,int b{ int k=0,r;do{ r=x% ①;bk++=r;x/= ②;}whilex;}下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数;例如数字26,数位上数字的乘积12大于数字之和8;main{ int n,k=1,s=0,m;forn=1;n<=100;n++{ k=1;s=0;①;while ②{ k=m%10;s+=m%10;③;}ifk>sprintf"%d",n;}}下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数;main{ int i,j,k,count=0;fori=1;i<=9;i++forj=0;j<=9;j++if ①continue;else fork=0;k<=9;k++if ②count++;printf"%d",count;}下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数;main{ int i,j;fori=0;①;i++{ j=i10+6;if ②countinue;printf"%d",j;}}下面程序的功能是用辗转相除法求两个正整数m 和n的最大公约数;hcfint m,int n{ int r;ifm<n{ r=m;①;n=r;}r=m%n;while ②{ m=n;n=r;r=m%n;}③;}下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序;排好序的10个数分两行输出;程序如下:include <>main{ ①;int i,j;printf"Input 10 numbers please\n";fori=0;②;i++scanf"%f", &ai;printf"\n";fori=2;③;i++forj=0;④;j++if ⑤{ x=aj;⑥;aj+1=x;}printf"The sorted 10 numbers;\n";fori=0;⑦;i++{ if ⑧printf"\n";printf"%f\t",ai;}printf"\n";}下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和;include ""main{ int i,a20,s,count;s=count=0;fori=0;i<20;i++scanf"%d", ①;fori=0;i<20;i++{ ifai<0②;s+=ai;count++;}printf"s=%d\t count=%d\n",s,count;}下面程序的功能是删除字符串s中的空格; include <>main{ char s="Beijing ligong daxue";int i,j;fori=j=0;si='\0';i++ifsi= ' ' ①;else ②;sj= '\0';printf"%s",s;}下面程序的功能是将字符串s中所有的字符'c'删除;请选择填空;include<>main{ char s80;int i,j;getss;fori=j=0;si= '\0';i++ifsi= 'c' ①;sj= '\0';putss;}下面程序的功能是输出两个字符串中对应相等的字符;请选择填空;include <>char x="programming";char y="Fortran";main{ int i=0;whilexi= '\0' && yi= '\0'ifxi==yiprintf"%c", ①;elsei++;}下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串a已排好序; include <>main{ char a20="cehiknqtw";char s="fbla";int i,k,j;fork=0;sk= '\0';k++{ j=0;whilesk>=aj && aj= '\0'j++;for ①②;aj=sk;}putsa;}下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差;例如:输入的两个字符串分别为"abcdefg"和"abceef",则输出为-1;include <>main{ char str1100,str2100,c;int i,s;printf"Enter string 1: ";getsstr1;printf"Enter string 2: ";getsstr2;i=0;whilestr1i == str2i && str1i= ①i++;s= ②;printf"%d\n", s;}下面的函数expand在将字符串s复制到字符串t时, 将其中的换行符和制表符转换为可见的转义字符表示,即用'\n'表示换行符,用'\t'表示制表符;expandchar s,char t{ int i,j;fori=j=0;si= '\0';i++switch si{ case '\n': t ①= ②;tj++ = 'n';break;case '\t': t ③= ④;tj++ = 't';break;default: t ⑤= si;break;}tj = ⑥;}下面的函数indexchar s, char t检查字符串s 中是否包含字符串t,若包含,则返回t在s中的开始位置下标值,否则送回-1;indexchar s, char t{ int i,j,k;fori=0;si= '\0';i++{ forj=i,k=0;①&& sj==tk;j++,k++ ;if ②return i;}return-1;}n下面程序的功能是计算S= k ;k=0long funint n{ int i;long s;fori=1;i ①;i++s=i;return ②;}main{ int k,n;long s;scanf"%d",&n;s= ③;fork=0;k<=n;k++s+= ④;printf"%ld\n",s;}下面程序的功能是显示具有n个元素的数组s中的最大元素;define N 20main{ int i,aN;fori=0;i<N;i++scanf"%d",&ai;printf"%d\n", ①;} fmaxint s,int n{ int k,p;forp=0,k=p;p<n;p++ifsp>sk ②;returnk;}下面程序的功能是由键盘输入n,求满足下述条件的x、y:nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小;include <>pow3int n,int x{ int i, last;forlast=1,i=1;i<=x;i++last= ①;returnlast;}main{ int x,n,min,flag=1;scanf"%d", &n;formin=2;flag;min++forx=1;x<min && flag;x++if ②&& pow3n,x==pow3n,min-x{ printf"x=%d,y=%d\n", x, min-x ;③;}}下面的程序是用递归算法求a的平方根;求平方根的迭代公式如下:include <>double mysqrt double a, double x0{ double x1, y;x1 = ①;if fabsx1-x0>y = mysqrt ②;else y = x1;return y ;}main{ double x;printf"Enter x: ";scanf"%lf", &x;printf"The sqrt of %lf=%lf\n", x, mysqrt x, ;}以下程序是计算学生的年龄;已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄;include <> age int n{ int c;if n==1 c=10;else c= ①;returnc;}main{ int n=5;printf"age:%d\n", ②;}下面的函数sumint n完成计算1~n的累加和;sumint n{ ifn<=0printf"data error\n";ifn==1 ①;else ②;}下面的函数是一个求阶乘的递归调用函数; factoint n{ if n == 1 ①;else return ②;}组合问题,由组合的基本性质可知:1 Cm,n=Cn-m,n2 Cm,n+1=Cm,n+Cm-1,n公式2是一个递归公式,一直到满足C1,n=n为止;当n<2m时,可先用公式1 进行简化,填写程序中的空白,使程序可以正确运行;include""main{ int m,n;printf"Input m,n=";scanf"%d%d", &m, &n;printf"The combination numbeers is %d\n", combinm,n;}combin int m, int n{ int com;if n<2m m=n-m;if m==0 com=1;else ifm==1 ①;else ②;returncom;}下列函数是求一个字符串str的长度; •••••• int strlen char str ••••••{ if ①return 0;•• •••• else return ②;} 用递归实现将输入小于32768的整数按逆序输出;如输入12345,则输出54321; include""main{ int n;printf"Input n : ";scanf"%d", ①;rn;printf"\n";}r int m{ printf"%d", ②;m = ③;if ④⑤;}输入n值,输出高度为n的等边三角形;例如当n=4时的图形如下:include <>void prt char c, int n{ if n>0{ printf "%c", c ;①;}}main{ int i, n;scanf"%d", &n;for i=1;i<=n;i++{ ②;③;printf"\n";}}下面的函数实现N层嵌套平方根的计算; double ydouble x, int n{ if n==0return0;else return sqrtx+ ①;}函数revstrs将字符串s置逆,如输入的实参s为字符串"abcde", 则返回时s 为字符串"edcba";递归程序如下:revstr char s{ char p=s, c;whilep p++;①;ifs<p{ c=s;s=p;②;revstrs+1;③;}}如下是由非递归实现的revstrs函数:revstr schar s;{ char p=s, c;while p p++;④;while s<p{ c=s;⑤= p;p-- = c;}}下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是"ABCDE",反序为"EDCBA";void inventchar str,int n{ char t;t=str;str=str+n-1;str+n-1=t;if n>2 invent ①,n-2;else ②;}从键盘上输入10个整数,程序按降序完成从大到小的排序;include <>int array10;sort int p, int q{ int max, s;if ①return;max=p;for s=p+1;s<=q;s++if s > max②;swap ③;sort ④;}swap int x, int y { int temp;temp=x;x=y;y=temp;}main{ int i;printf"Enter data :\n";for i=0;i<10;i++ scanf"%d", &arrayi;sort ⑤;printf"Output:";for i=0;i<10;i++printf"%d ", arrayi;}下面函数的功能是将一个整数存放到一个数组中;存放时按逆序存放;例如:483存放成"384"; include <>void convertchar a, int n{ int i;ifi=n/10 =0convert ①, i ;a = ②;}char str10= " ";main{ int number;scanf"%d", &number;convert str, number ;putsstr;}下面程序的功能是实现数组元素中值的逆转; include <>main{ int i,n=10,a10={1,2,3,4,5,6,7,8,9,10};inverta,n-1;fori=0;i<10;i++printf"%4d",ai;printf"\n";}invertint s,int num{ int t,k;t=s+num;while ①{ k=s;s=t;t=k;②;③;}}下面程序通过指向整型的指针将数组a34 的内容按3行×4列的格式输出,请给printf 填入适当的参数,使之通过指针p将数组元素按要求输出;include <>int a34={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, p=a;main{ int i,j;fori=0;i<3;i++{ forj=0;j<4;j++printf"%4d ", ①;}}下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串;include <>main{ char str81, sptr;int i;fori=0;i<80;i++{ stri=getchar ;ifstri== '\n' break;}stri= ①;sptr=str;while sptrputchar sptr ②;}下面函数的功能是将字符变量的值插入已经按ASCII码值从小到大排好序的字符串中;void funchar w,char x,int n{ int i,p=0;whilex>wp ①;fori=n;i>=p;i-- ②;wp=x;++n;}下面程序的功能是从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符;include <>strmergea,b,c / 将已排好序的字符串a、b合并到c /char a,b,c;{ char t,w;w=c;while a= '\0' ①b='\0'{ t= ②a++:b<a b++ : ③;/ 将a、b的小者存入t /if w ④'\0' w=t;else if t ⑤w ++w=t;/ 将与w不相同的t存入w /}while a = '\0' / 以下将a或b中剩下的字符存入w /if a = w ++w=a++;else a++;while b = '\0'if b = w ++w=b++;else b++;++w = ⑥;}strsort char s / 将字符串s中的字符排序/ { int i,j,n;char t,w;⑦;for n=0;w = '\0';⑧w++;for i=0;i<n-1;i++for j=i+1;j<n;j++if si>sj{ ⑨}}main{ char s1100,s2100,s3200;printf"\nPlease Input First String:";scanf"%s",s1;printf"\nPlease Input Second String:";scanf"%s",s2;strsorts1;strsorts2;⑩= '\0';strmerges1,s2,s3;printf"\nResult:%s",s3;}已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成:①若乘积为一位数,则该乘积即为数列的后继项;②若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项;下面的程序输出该数列的前N项及它们的和,其中,函数sumn,pa 返回数列的前N项和,并将生成的前N项存入首指针为pa的数组中,程序中规定输入的N值必须大于2,且不超过给定的常数值MAXNUM;例如:若输入N的值为10,则程序输出如下内容:sum10=442 3 6 1 8 8 6 4 2 4include ""define MAXNUM 100int sumn, paint n, pa;{ int count, total, temp;pa = 2;①=3;total=5;count=2;while count++<n{ temp = pa-1 pa;if temp<10{ total += temp;++pa = temp;}else{ ②= temp/10;total += pa;if count<n{ count ++;pa++;③= temp%10;total += pa;}}}④;}main{ int n, p, q, numMAXNUM;do{ printf"Input N= 2<N<%d:", MAXNUM+1;scanf"%d", &n;}while ⑤;printf"\nsum%d=%d\n", n, sumn, num;for p=num, q = ⑥;p<q;p++printf"%4d", p;printf"\n";}下面程序的功能是输入学生的姓名和成绩,然后输出;include <>struct stuinf{ char name20;/ 学生姓名/int score;/ 学生成绩/} stu, p;main{ p=&stu;printf"Enter name:";gets ①;printf"Enter score: ";scanf"%d", ②;printf"Output: %s, %d\n", ③, ④;}下面程序的功能是按学生的姓名查询其成绩排名和平均成绩;查询时可连续进行,直到输入0时才结束;•• include <>include <>define NUM 4• struct student • { int rank;char name;float score;••••••••};•••••••• ①stu ={ 3,"liming",, •••••••• 4,"zhanghua",, •••••••• 1,"anli",,•••••••• 2,"wangqi",};••••••••main••••••••{ char str10;•••••••• int i;•••••••• do{ printf"Enter a name";•••••••• scanf"%s",str;•••••••• for i=0;i<NUM;i++ •••••••• if ②•••••••• { printf"Name :%8s\n",;•••••••• printf"Rank :%3d\n",stui.rank;•••••••• printf"Average :%\n",stui.score;•••••••• ③;•••••••• }•••••••• if i>=NUM printf"Not found\n";•••••••• }while strcmpstr,"0"=0 ;••••••••}下面程序的功能是从终端上输入5个人的年龄、性别和姓名,然后输出;include ""struct man{ char name20;unsigned age;char sex7;};main{ struct man person5;data_inperson,5;data_outperson,5;}data_instruct man p, int n{ struct man q = ①;for ;p<q;p++{ printf"age:sex:name" ;scanf"%u%s", &p->age, p->sex;②;}} data_out struct man p,int n{ struct man q = __③__;for ;p<q;p++printf"%s;%u;%s\n",p->name, p->age,p->sex;}输入N个整数,储存输入的数及对应的序号,并将输入的数按从小到大的顺序进行排列;要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定;例如:输入的第3个整数为5,第7个整数也为5,则将先输入的整数5排在后输入的整数5的前面;程序如下:include ""define N 10struct{ int no;int num;} arrayN;main{ int i,j,num;for i=0;i<N;i++{ printf"enter No. %d:",i;scanf"%d",&num;for ①;j>=0&&arrayj.num ②num;③arrayj+1=arrayj;array ④ .num=num;array ⑤ .no=i;}for i=0;i<N;i++printf"%d=%d,%d\n",i,arrayi.num,arrayi.n o;}以下程序的功能是:读入一行字符如:a、...y、z,按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾如下图,然后再按输入的相反顺序输出,并释放全部结点;include <>main{ struct node{ char info;struct node link;} top,p;char c;top=NULL;whilec= getchar ①{ p=struct node mallocsizeofstruct node;p->info=c;p->link=top;top=p;}while top { ②;top=top->link;putcharp->info;freep;}}下面函数将指针p2所指向的线性链表,串接到p1所指向的链表的末端;假定p1所指向的链表非空; define NULL 0struct link{ float a;struct link next;};concatenate p1,p2struct list p1,p2;{ if p1->next==NULLp1->next=p2;elseconcatenate ①,p2;}下面程序的功能是从键盘输入一个字符串,然后反序输出输入的字符串;include <>struct node{ char data;struct node link;}head;main{ char ch;struct node p;head = NULL;while ch=getchar='\n'{ p = struct node mallocsizeofstruct node;p->data = ch;p->link = ①;head = ②;}③;while p=NULL{ printf"%c ", p->data;p = p->link;}}下面程序的功能是从键盘上顺序输入整数,直到输入的整数小于0时才停止输入;然后反序输出这些整数;include <>struct data{ int x;struct data link;}p;input{ int num;struct data q;printf"Enter data:";scanf"%d", &num;if num<0①;q = ②;q->x = num;q->link = p;p=q;③;}main{ printf"Enter data until data<0:\n";p=NULL;input;printf"Output:";while ④{ printf"%d\n", p->x;⑤;}}下面函数的功能是创建一个带有头结点的链表,将头结点返回给主调函数;链表用于储存学生的学号和成绩;新产生的结点总是位于链表的尾部;struct student{ long num;int score;struct student next;};struct student creat{ struct student head=NULL,tail;long num;int a;tail= ①mallocLEN;do{ scanf"%ld,%d",&num,&a;ifnum=0{ ifhead==NULL head=tail;else ②;tail->num=num;tail->score=a;tail->next=struct student mallocLEN;}else tail->next=NULL;}whilenum=0;return ③;} 下面create函数的功能是建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾;单向链表的头指针作为函数值返回;include <>define LEN sizeofstruct studentstruct student{ long num;int score;struct student next;};struct student creat{ struct student head=NULL,tail;long num;int a;tail= ①mallocLEN;do{ scanf"%ld,%d",&num,&a;ifnum=0{ ifhead==NULL head=tail;else tail=tail->next;tail->num=num;tail->score=a;tail->next= ②mallocLEN;}else tail->next=NULL;}whilenum=0;③;}下面程序的功能是统计文件中的字符的个数; include <>main{ long num=0;①fp;iffp=fopen"", "r"==NULL{ printf"Can't open the file ";exit0;}while ②{ fgetcfp;num++;}printf"num=%d\n",num;fclosefp;}下面程序的功能是把从键盘输入的文件用作为文件结束标志复制到一个名为的新文件中; include <>FILE fp;main { char ch;iffp=fopen ①==NULLexit0;whilech=getchar=''fputcch,fp;②;}下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出假定给定的文件名无误;include <>mainint argc,char argv{ FILE &f1,f2;ifargc< ①{ printf"The command line error ";exit0;}f1=fopenargv1, "r";f2=fopenarhv2, "w";while ②fputsfgetcf1, ③;④;⑤;}下面程序的功能是根据命令行参数分别实现一个正整数的累加或阶乘;例如:如果可执行文件的文件名是sm,则执行该程序时输入:"sm + 10",可以实现10的累加;输入:"sm - 10",可以实现求10的阶乘;include <>include <>main int argc,char argv{ int n;void sum,mult;void funcp;n=atoiargv2;ifargc=3 || n<=0dispform ;switch ①{ case '+': funcp=sum;break;case '-': funcp=mult;break;default: dispform ;}②;}void sumint m{ int i,s=0;fori=1;i<m;i++ ③;printf"sum=%d\n",s;}void multint m{ long int i, s=1;fori=1;i<=m;i++s = i;printf"mult= %ld\n";s;}dispform{ printf "usage:sm n+/ n>0\n";exit 0;}下面程序的功能是键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件中,然后从该文件读出字符串并显示出来;include <>main{ char str100;int i=0;FILE fp;iffp=fopen"", ①==NULL{ printf"Can't open the file.\n";exit0;}printf"Input a string:\n";getsstr;whilestri{ ifstri>= 'a'&&stri<= 'z'stri= ②;fputcstri,fp;i++;}fclosefp;fp=fopen"", ③;fgetsstr,strlenstr+1,fp;printf"%s\n",str;fclosefp;}下面程序的功能是将从终端上读入的10个整数以二进制方式写入名为""的新文件中; include <>FILE fp;main{ int i, j;if fp=fopen ①, "wb" == NULLexit 0;for i=0;i<10;i++{ scanf"%d", &j ;fwrite ②, sizeofint, 1, ③;}fclose fp;}以字符流形式读入一个文件,从文件中检索出六种C语言的关键字,并统计、输出每种关键字在文件中出现的次数;本程序中规定:单词是一个以空格或'\t'、'\n'结束的字符串;include <>include <>FILE cp;char fname20, buf100;int num;struct key{ char word10;int count;}keyword={ "if", 0, "char", 0, "int", 0, "else", 0, "while", 0, "return", 0};char getword FILE fp{ int i=0;char c;whilec=getcfp = EOF && c==''||c=='\t'||c=='\n' ;if c==EOF return NULL ;else bufi++=c;whilec = ①&& c= ' ' && c= '\t' && c= '\n'bufi++ = c;bufi= '\0';returnbuf;}lookupchar p{ int i;char q, s;fori=0;i<num;i++ { q = ②;s=p;while s && s==q{ ③}if ④{ keywordi.count++;break;}}return;}main{ int i;char word;printf"Input file name:";scanf"%s", fname;ifcp=fopenfname, "r" ==NULL{ printf"File open error: %s\n", fname;exit0;}num = sizeofkeyword / sizeofstruct key;while ⑤lookupword;fclosecp;fori=0;i<num;i++printf"keyword:%-20scount=%d\n",keywor di.word,keywordi.count;}下面程序的功能是从键盘接受姓名例如:输入"ZHANG SAN",在文件""中查找,若文件中已经存入了刚输入的姓名,则显示提示信息;若文件中没有刚输入的姓名,则将该姓名存入文件;要求:⑴若磁盘文件"",已存在,则要保留文件中原来的信息;若文件""不存在,则在磁盘上建立一个新文件;⑵当输入的姓名为空时长度为0,结束程序;include <>main{ FILE fp;int flag;char name30, data30;iffp=fopen"", ①==NULL{ printf"Open file error\n";exit0;}do{ printf"Enter name:";getsname;if strlenname==0break;strcatname, "\n";②;flag=1;while flag && fgetsdata, 30, fp ③if strcmpdata, name == 0④;if flagfputsname, fp;elseprintf"\tData enter error \n";} while ⑤;fclosefp;}参考答案答案: ①a+b ②a-b ③a-b答案:①floatii ②sqrt6s 答案:①k=p答案:①t=ti ②t=t>0-1:1答案:①d=1 ②k++ ③k<=n答案: ①x>=0 ②x<amin答案: ①2 ②2答案:①m=n ②m>0 ③m=m/10答案:①i==j ②k=i&&k=j答案:①i<=9 ②j%3=0答案:①m=n ②r=0 ③returnn答案:①float a10,x ②i<=9 ③i<=8 ④j<=9-i⑤aj>aj+1 ⑥aj=aj+1 ⑦i<=9 ⑧i%5==0 答案:①&ai ②continue注释:①是基本概念,使用scanf函数输入数组元素的值;当输入的元素值小于0时,应当跳过后面的语句,取下一个数,所以②要填入continue;答案:①sj++=si ②sj=si答案:①sj++=si答案:①xi++答案:①i=strlena;i>=j;i-- ②ai+1=ai答案:①'\0' ②str1i-str2i答案:①j++ ②'\\' ③j++ ④'\\' ⑤j++ ⑥'\0'答案:①tk= '\0' ②tk== '\0'答案:①<=n ②s ③0 ④funk答案:①afmaxa,N ②k=p答案:①lastn%1000 ②x=min-x ③flag=0 答案:①x0+a/x0/2 ②a,x1注释:根据迭代公式,①处应当是计算迭代值x1=x0+a/x0/2;按照求平方根的要求,当迭代的精度不能满足"fabsx1-x0>"时,则要继续迭代,因此②处应当填写"a,x1";程序中调用了求绝对值的库函数fabs ;答案:①2+agen-1 ②age5注释:由于程序是递归算法,因此首先要建立问题的递归数学模型;根据原题的描述可以写出如下递归公式:agen = 10 n=1agen = 2+agen-1 n>1对照程序和递归公式可以看出:n的含义是第n 位学生;很显然,要求第5位学生的年龄,②处应当是调用函数age,实参的值应当是5;在①处应该是函数的递归调用,根据递归公式,应当填写:2+agen-1;答案:①return1 ②return sumn-1+n注释:按照常规的编程方法,此问题可采用一个循环语句实现;阅读程序,没有发现循环语句,这时,应当认为原来的编程者使用的是非常规的算法;对于这样常规算法需要用循环实现而没有使用循环的程序,就可以肯定地认为,一定是使用了递归算法;将问题"求1~n的累加和"的公式写成递归定义,可以是如下形式;sumn=1 当n=1时sumn=sunn-1+n 当n>1时根据此递归定义,可以很容易完成程序;答案:①return1 ②nfacton-1 注释:我们熟悉的求n的算法一般是采用循环语句实现,但在此程序中根本没有循环语句;这时我们应该想到:是采用递归算法实现的;首先写出求n的递归公式;n=1 当n=1时n=nn-1 当n>1时根据此递归定义,可以很容易完成程序;答案:①com=n ②com=combinn-1,m-1 + combinn-1,m注释:题目的说明中已经给出组合问题的递归定义,不需要读者自己寻找递归表达式;程序中的语句"if n<2m m=n-m;"完成了题目中叙述的"用公式1进行简化"的工作;答案:①str=='\0' ②1+strlenstr+1注释:求串长算法的关键是确定串结束标记'\0'的位置;根据求串长的方法,可以得到如下递归算法:指针str指向字符串的首字符如果当前字符str== 串结束标记'\0'则串长=0否则串长= 1+除第一个字符之外的剩余字符串的串长因此,在①的位置上应当填写"str=='\0'",以判断当前字符str是否是串结束标记'\0';在②的位置应当是根据上面的递归算法进行递归调用,因此应当填写"1+strlenstr+1";答案:①&n ②m%10 ③m/10 ④m>0 ⑤rm答案:①prtc, n-1 ②prt' ' , n-i ③prt'', i 注释:函数prt的功能是输出n个字符c;答案:①yx, n-1注释:这显然是一个递归问题,首先要对原来的数学函数定义形式进行变形,推导出原来函数的等价递归定义;可以推导出原来函数的递归定义如下;yx,n=x 当n=0时yx,n=sqrtx+yx,n-1 当n>0时答案:①p-- ②p='\0' ③p=c ④p-- ⑤s++ 注释:在递归算法中,指针s指向字符串首部要反向的字符,即要将指针s所指向的字符与指针p 所指向的字符串尾的字符'\0'进行交换,在交换过程中,将尚没有交换的字符串的中间部分作为一个整体,进行递归处理;程序中首先执行"c=s",将首字符存入临时变量;然后执行"s=p",将尾字符存入串首;执行"revstrs+1"是递归处理串的中间部分,这时,在②处应当填入"p='\0'",即存入串结束标记;这是这一程序中的关键所在;在③处要完成将存在临时变量c中的字符存入串尾的工作,应当填写"p=c";答案:①str+1 ②return ①改为n-2答案:①p>=q ②max=s ③p,max④p+1,q ⑤&array0, &array9注释:本程序中的排序部分采用的是递归算法;函数sort的两个形参的含义是:对指针p和指针q 之间的数据进行排序;由语句"for s=p+1;s<=q;s++"中指针p和指针q之间的关系可以得出:指针p不应在指针q之后,因此①处应填"p>=q"、⑤处应填"&array0,&array9";由于变量max是指向当前最大值的指针,则当找到新的最大值时,max中保存的应该是新的最大值的指针,因此②处应填"max=s";当调用函数swap交换两个变量值的时候,要求实参是变量的地址,因此,③处应填"p,max"将最大值存入指针p所指的单元;由于问题的要求是"从大到小"排序,通过执行一次函数sort使最大值已经放到了指针p所指的单元中,因此,下一遍排序的时候,只要对指针p之后的元素进行即可,所以④处应填"p+1,q";答案:①a+1 ②n%10+'0'答案:①s<t ②s++ ③t--答案;①p+4i+j注释:p是一个一级指针,赋值后保存二维数组a 的首地址,做加法运算加1时,实际地址增加一个它所指向的数据类型的长度;在C语言中,多维数组在计算机中是按行存储的,所以在本题中要通过指针访问二维数组中的数据,必须将二维下标转换为一维下标;答案:①'\0' 或0 ②++注释:在C语言中,进行字符串处理时,必须注意串结束标记'\0',它是在进行串处理时的最基本的要求,所以①中要填入'\0';为了使用putchar输出一个字符串,则必须有改变指针的运算,这里只能使用++运算;答案:①p++ ②wi+1=wi答案:①&& ②a<b ③a++, b++ ④==⑤= ⑥'\0' ⑦w=s ⑧n++⑨t=si;si=sj;sj=t;⑩s30答案:①++pa ②++pa ③pa④returntotal ⑤n<=2 || n>=MAXNUM+1 ⑥num+n答案:①②& ③p->name ④p->score 注释:这是结构中的最基本概念;答案:①struct student ②,str==0 ③break注释:程序的主体是一个二重循环,内层for循环完成查找学生的工作;①处是进行结构数组说明并初始化,按照结构变量说明的格式规定,应该填写:strcut student;②处为if语句的逻辑条件,应当是当查找到指定的学生后输出学生的情况,因此应当填写:,str==0;③处应当将控制退出内层的for循环,只能选择break 语句;答案:①p+n ②getsp->name ③p+n注释:本程序是通过函数完成对于结构数组的输入和输出操作;函数data_in和data_out十分相似,都是通过结构指针p和结构指针q来操作结构数组的元素;由于指针q在两个函数中的作用相同,所以①和③填写的内容也应该是相同的;由for 语句中的循环终止条件"p<q"可以看出,q应该指在数组的最后一个元素之后,所以①和③应当填入p+n;②应当完成姓名的输入工作,应当为getsp->name;答案:①j=i-1 ②> ③j-- ④j+1 ⑤j+1注释:程序的基本思想是:对于输入的第i个整数num,从数组array中已有的元素中倒序开始查找;若数组array中的第j个元素的值大于num,则将数组中的元素j向后移动一个位置;否则,就应将num插入到当前位置作为元素j;因此,程序的基本设计思想就是插入排序;程序中内层的for循环完成查找插入位置的工作,因此答案①、②和③有密切的关系,要统一考虑;同样,程序中的答案④和⑤也有密切的关系,要统一考虑;答案:①= '\n' ②p=top答案:①p1->next答案:①head ②p ③p=head注释:程序在从键盘接受字符的同时就在建立起链表,所建立的链表本身就已经是反序排列的,因此在反序输出字符串的时候实际只需沿着链表的第一个结点开始,顺序操作即可;答案:①return ②struct data mallocsizeofstruct data ③input ④p=NULL ⑤p=p->next答案:①struct student ②tail=tail->next ③head注释:①malloc函数的作用是在内存开辟指定字节数的存储空间,并将此存储空间的地址返回赋给尾指针tail,但是此地址为void型,应将其强制转换为所要求的结构指针类型;②新开辟的结点的内存地址存于tail所指向的已建立的链表的尾结点的结构成员next,新结点连入链表以后,尾指针tail应指向新的结点;答案:①struct student ②struct list ③returnhead答案:①FILE ②feoffp注释:FILE 是文件结构类型名;feof是测试文件结束标志的函数;答案:①"" ②fclosefp答案:①3 ②feoff1或feoff1==0 ③f2 ④fclosef2 ⑤fclosef1注释:程序中使用了带参数的main函数,其中整型参数argc为命令行中字符串的个数,此程序运行时输入的字符串有可运行程序名、文件1和文件2,故argc不应小于3;字符串指针argv0指向可运行程序名、字符串指针argv1指向输入文件名、字符串指针argv2指向输出文件名,由上所述②处给出循环条件是输入文件是否结束,③处需要填出输出文件名;最后两处是关闭两个文件,原则上关闭文件没有顺序要求,但习惯上是后打开的文件先关闭;答案:①argv1 ②funcpn ③s+=i注释:程序执行时输入的命令及参数的个数操作系统规定用空格表示字符串的分隔由系统赋给主函数的形数argc,输入的命令和参数以字符串的格式保存,字符串的首地址分别赋给指针数组argv的各个元素,其中argv1是'+'或'-',分别表示累加或阶乘;程序根据argv1所指向的字符串的内容给指向函数的指针变量funcp赋值;②处要求的语句是根据指向函数的指针变量的内容对相应的函数实现调用,所以选择A或B是错误的;据funcp是被调函数的地址,funcp实现了对函数的调用,根运算符的结合性,funcp表示取funcp的目标,而funcpn则funcp先和n结合,funcp就被解释为函数名,显然是错误的;答案:①"w" ②-32 ③"r"答案:①"" ②&j ③fp答案:①fgetcfp=EOF ②&keywordi.word0 ③s++;q++;④s==q ⑤word=getwordcp=NULL答案:①"a+" ②rewindfp ③=NULL ④flag=0 ⑤ferrorfp==05 8 9+18 + 27 + 30 英20。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

·程序填空题·
1.(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。

请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。

例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

#include <stdio.h>
int a[101];
int n,i,ans,len,tmp,beg;
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
tmp=0;
ans=0;
len=0;
beg= ①;
for (i=1;i<=n;i++){
if (tmp+a[i]>ans){
ans=tmp+a[i];
len=i-beg;
}
else if ( ②&&i-beg>len)
len=i-beg;
if (tmp+a[i] ③){
beg= ④;
tmp=0;
}
else
⑤;
}
printf("%d %d\n",ans,len);
return 0;
}
①_______________________ ②_______________________
③_______________________ ④_______________________
⑤_______________________
2、读入一个字符串,如果出现了减号' - ' ,减号两侧又同时为小写字母、大写字母或数字,就需要按照ASCII码的顺序把' - ' 所代表的省略部分不全。

例如:' a – d ' 实际是' abcd ',' E – H ' 实际是' EFGH ' ,' A – A ' 实际上是' A ' ,' 0 - 7 ' 实际上是' 01234567 ' 。

请编程输出转化后的字符串。

#include<stdio.h>
#include<string.h>
int main(void){
long length i,j;
char s[100];
scanf("%s",s);
length = strlen(s);
s[length] = ①;
i = ②;
while(i<length)
if( ③)
{
printf("%c",s[i]);

}
else
{
if( ((s[i-1]>='a') && (s[i+1]<='z')) || ((s[i-1]>='A') &&
(s[i+1]<='Z')) || ((s[i-1]>='0') && (s[i+1]<='9')) )
{
for( ⑤;j<=s[i+1];j++)


}
else
{
printf("%c",s[i]);
i++;
}
}
return 0;
}
①_______________________ ②_______________________
③_______________________ ④_______________________
⑤_______________________ ⑥_______________________
⑦_______________________。

相关文档
最新文档