15级程序设计基础题库(c语言)2 - 截止到指针 - 答案版本

更新时间:2024-02-28 02:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

15级《程序设计基础》题库

<说明>

1、 总共抽11道题,每小题10分,共100分(附加题选做,计入总分,但总分不高于100)。 按题型:顺序(1道)、分支(1道)、单循环(2道)、多循环(1道)、数组(1道)、函数(1道)、

字符串(1道)、指针(1道) 、数据类型(1道)、附加题(1道)。

按难易程度:易(1道)、较易(4道)、较难(4道)、难(1道)。

2、考试要求:写代码实现(其中分支(1道)、单循环(2道)、多循环(1道)共四道要求先画出流程图,再根据流程图写代码),理论考试,2个小时。

一、顺序结构(10道抽1道,写代码)

1、 将华氏温度转化成摄氏温度。公式为:C=(5/9)*(F-32),其中F为华氏温度,C为

摄氏温度。请根据给定的华氏温度输出对应的摄氏温度。(易)

2、 根据观察,蟋蟀的鸣叫频率与温度有关,具体的公式为T=(c+40)/10.其中,c代表

蟋蟀每分钟鸣叫数,T代表华氏温度。请根据蟋蟀每分钟的鸣叫数输出相应的华氏温度。(易)

3、 任意输入一个三位数,求这个数每个位上的数。如整数932,个位为2、十位为3、

百位为9. (较易)

4、 编写程序,定义一个三位整数,求其各位数字之和。如整数932,各位数字之和为

14. (较易)

5、 编程实现两个整数交换位置,例如:int x = 6,y = 9,交换后 x = 9,y = 6。(较易) 6、 已知圆的半径,求圆的面积。(易) 7、 已知球的半径,求球的表面积。(

)(易)

8、 已知一个三角形的三边边长分别为a,b,c,利用海伦公式求三角形的面积。(较难)

a?b?c海伦公式:

p?S?p(p?a)(p?b)(p?c) 2调用 #include 中的sqrt(d)函数,其中参数d为 double 类型。 #include #include #define PI 3.1415926 void main(){

double a,b,c,p,s;

printf(\输入三角形的三边用空格隔开:\ scanf(\ p = (a+b+c)/2;

s = sqrt(p*(p-a)*(p-b)*(p-c)); printf(\面积为:%lf\\n\}

9、 求两数平方和的算术根。(较易)

10、 给定一段时间求出它的秒数。(如计算2小时 17分30秒等于多少秒)(较易)

二、分支结构(10道抽1道,要求画出流程图再写代码)

11、 从键盘输入三个数a,b,c,将a,b,c按从大到小的顺序输出。(较易) #include void main () {

int a,b,c,t; // 先把最大的排在最左边 printf(\请输入a,b,c三个整数\\n\ scanf(\ if(a

if(a

if(b

printf(\输出a,b,c最大值重新排序之后的顺序::%d,%d%,%d\\n\}

12、 两个整数比较大小,输出较大值。(易) #include void main () {

//两个整数比较大小,输出较大值 int i,j,max;

printf(\请输入两个两个整数:\\n\ scanf(\ if (i>j) {

max=i; } else

}

{

max=j; }

printf(\输出两个数的最大值max::%d\\n\

13、 三个整数比较大小,输出最大值。(较易)

#include void main () {

//三个整数比较大小,输出最大值 int x,y,z,max;

printf(\请输入三个整数:\\n\ scanf(\ if(x>y)

{ //x和在再进行比较 if(x>z) { max=x; } else { max=z; } } else { //y和z再进行比较 if(y>z) { max=y; } else { max=z; } }

printf(\输出三个数的最大值max::%d\\n\}

14、 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤。0.15元计费,如

超50公斤,超过部分每公斤加收0.10元。编一程序完成自动计费工作。(较易)

开始定义变量weight和charge并赋初值weight<50真charge=weight*0.15假charge=(50*0.15)+(weight-50)*0.25输出charge的值结束 #include void main () {

double weight;//定义行李重量 double charge;

printf(\请输入行李的重量\\n\ scanf(\ if(weight<=50) {

//根据行李重量计算费用 charge = weight*0.15; } else {

charge = 50*0.15+(weight-50)*0.25; }

printf(\费用为:%lf\\n\ }

15、 判断某个整数是否为水仙花数。(水仙花数是一个三位数,该数各位的立方和等于

该数本身。例如153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3)(较难)

#include void main () {

int year;

scanf(\

if ((year%4==0 && year0 !=0) || year@0==0) { printf(\年是润年\\n\ } else { printf(\年不是润年\\n\ } }

16、 判断某年是否为闰年。(闰年的条件是:该年的年号能被4整除且不能被100整除,

或该年的年号能被400整除,则该年是闰年,否则不是闰年。)(较易)

#include void main () {

int year;

scanf(\

if ((year%4==0 && year0 !=0) || year@0==0) { printf(\年是润年\\n\ } else { printf(\年不是润年\\n\ } }

17、 求下列函数中y的值。(较易)

y=10 (x=0) y=3x+5 (x>0)

y=x-2 (x<0)

#include void main () {

double x,y; scanf(\ if (x==0) { y=10; }

else if (x>0) { y=3*x+5; } else { y=x-2; }

printf(\输入x的值%lf后,函数y的值为:%lf\ }

18、 根据某同学的成绩,判定其成绩的等级。(90~100分为“优秀”,80~89为“良

好”,70~79为“中等”,60~69为“及格”,60分以下为“不及格”。)(较难)

开始定义并初始化学生成绩ss<0?否s<60?否s<70否s<80是是是是否s<90否是s<=100否是无效成绩不及格及格中等良好优秀无效成绩结束 #include void main () { float s; printf(\请输入某个同学的成绩:\\n\ scanf(\ if (s<60 && s>=0) { printf(\成绩的等级为:不及格\\n\ } else if (s>=60 && s<70) { printf(\成绩的等级为:及格\\n\ }

}

else if (s>=70 && s<80) {

printf(\成绩的等级为:中等\\n\}

else if (s>=80 && s<90) {

printf(\成绩的等级为:良好\\n\}

else if (s>=90 && s<=100) {

printf(\成绩的等级为:优秀\\n\} else {

printf(\输入成绩有误,请收入有效成绩!\\n\}

19、 某超市为了促销,规定:购物不足50元的按原价付款,超过50不足100的按九折

付款,超过100元的,超过部分按八折付款。编一程序完成超市的自动计费的工作。(较易)

#include void main () {

float money;

scanf(\

if (money < 50) {

money=money *1; }

if (money >=50 && money <100) {

money=money * 0.9; }

if (money >=100) {

money=100 * 0.9 + (money-100) * 0.8;//题目表述不清晰,按照常理来做 }

printf(\自动计费后付款金额为:%f\\n\}

20、 编写一个程序,功能是从键盘输入1—4中的某一个数字,由电脑打印出其对应的

季节的英语名称。spring summer autumn winter(较难) #include void main () {

short int x;

printf(\请输入1-4整数:\ scanf(\ switch(x) {

//根据x的值输出 spring summer autumn winter case 1:printf(\ case 2:printf(\ case 3:printf(\ case 4:printf(\

default:printf(\输入的值有误,请输入一个按照题意要求的整数\\n\ } }

三、单循环(10道抽2道,要求画出流程图再写代码)

21、 求1到100的累加和。(较易) #include void main() {

int i,sum=0;

for (i=1;i<=100;i++) {

sum += i; }

printf(\}

22、 求1000以内所有能被5整除的整数的和。(较易) #include void main() {

int i,sum=0;

for (i=1;i<=1000;i++) {

if (i%5==0) { sum += i; }

}

printf(\}

23、 求10的阶乘。(较易)

/*

#include void main() {

int i,sum=1; for (i=10;i>0;i--) { sum *= i; }

printf(\} */

#include void main() {

int i,sum=1;

for (i=1;i<=10;i++) { sum = sum * i; }

printf(\}

24、 输出26个小写英文字母。(较易) #include void main() {

char s=’a’-1;

for (int i=1;i<=26;i++) {

//s = s + 1;

printf(\ }

//printf(\ putchar('\\n'); }

25、 统计1000以内所有能被7整除的数。(#include void main()

较易)

{

for (int i=1;i<=1000;i++) {

if (i%7 == 0) { printf(\ } }

//printf(\ putchar('\\n'); }

26、 统计1000以内所有能被2整除又能被5整除的数。(较难) #include void main() {

for (int i=1;i<=1000;i++) {

if (i%2 == 0 && i%5 == 0) { printf(\ } }

//printf(\ putchar('\\n'); }

27、 打印100以内所有能被3整除的数,每5个数打印一行。(较难) #include void main() {

int j=0;

for (int i=1;i<=100;i++) {

if (i%3 == 0) { printf(\ j++;//每打印一个数 记录一次 }

if (j %5 == 0)//满5个数时输出换行 { putchar('\\n'); } }

putchar('\\n');

}

28、 判断某个整数是否为素数。(素数是一个大于1且只能被1和它本身整除的整数)

(较难)

#include void main() {

int i,j;

//输入一个整数i,判断是否为素数 scanf(\

for(j=2;j<=i;j++) {

if(i%j==0)

break;//j从2开始增,一旦j能整除i则退出 }

if(i==j)//判断那个最小因数是不是i本身,是则为素数,否则不是。 {

printf(\是素数!\\n\ } else {

printf(\不是素数!\\n\ } }

29、 判断某个整数是否为完全数。(完全数:所有小于该数本身的因子之和等于该数本

身,例如6是一个完全数,因为,6=1+2+3)(较难) #include void main() {

int i,j,sum;

//请输入一个整数i. scanf(\ sum=0;

for (j=1;j

if(i==sum)

printf (\是一个完全数!\\n\ else

printf (\不是一个完全数!\\n\

}

30、 输出1000以内的所有水仙花数。(水仙花数是一个三位数,该数各位的立方和等

于该数本身。例如153是一个水仙花数,因为153 = 13 + 53 + 33)(较难) #include #include void main() { int gw,sw,bw,sum;

for (int i=100;i<1000;i++) {

gw=i; sw=i/10; bw=i/100;

sum = pow(gw,3) + pow(sw,3) + pow(bw,3); if (i==sum) { printf(\ } }

putchar('\\n'); }

31、 编写程序读入整数并求它们的总和与平均值。输入0时程序结束。(#include void main() { float sum=0; //求和变量 float p=0;//平均值 int i=0; int a; scanf(\ while(a!=0) { sum = sum + a; printf(\请继续输入一个数值,输入0时结束。\ scanf(\ i=i+1; } p = sum/i; printf(\总输入个数:i=%d ,总和:sum=%f,平均值:p=%f \}

32、 用while循环,求n的平方大于12000的最小数n。(难) #include void main()

较难) {

int n=1; while(n>0) { if( n*n >12000) { break; } n++; }

printf(\最小n=%d\}

33、 求1+1/2+1/3+?+1/n>10,n的值至少为多大。(难) #include void main () { double sum=0; int n=0; int i=1; do { sum = sum + 1.0/i; i++; n++; } while (sum <=10); printf(\的值至少等于:%d\}//12367

#include void main() {

double sum=0; int n=0;

for (int i=1;sum <=10;i++) {

sum = sum + 1.0/i; n++; }

printf(\的值至少等于:%d\}

34、 本金10000元存入银行,年利率千分之3,每过1年,本金和利息作为新的本金,

5年后,总共有多少钱?(较易) #include void main()

{

double money=10000; for (int i=1;i<=5;i++) {

money = money * (1 + 0.003); }

printf(\}

35、 斐波那契数列的第1和第2个数分别为1和1,从第三个数开始,每个数等于其前

两个数之和(1,1,2,3,5,8,13?.).编写一个程序输出斐波那契数列中的前20个数。(较难)

#include void main() {

int a1=1,a2=1,ai=0; for (int i=1;i<=20;i++) {

if (i<=2) { printf(\ }

else //从低三个数开始等于前两个数之和 { ai=a1+a2;//每次循环输出的数 printf(\ a1=a2; a2=ai; } } }

36、 一个球从100米高自由落下,每次落地后,反弹回原高度的一半,再落下,再反弹。

求它第10次落地后反弹多高?(较易) #include void main() {

double h=100;

for (int i=1;i<=10;i++) {

h = h /2.0; }

printf(\}

37、 有1020个西瓜,第一天卖掉一半多两个,以后每天卖剩下的一半多两个,问几天

后可以卖完,请编程计算。(较难)

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*6=36

6*7=42 7*7=49

6*8=48 7*8=56 8*8=64

6*9=54 7*9=63 8*9=72 9*9=81

#include int main() {

for (int i=1;i<=9;i++) {

for (int j=1;j<=i;j++) { printf (\ } printf(\输出完后进行换行 } return 0; }

47、

打印九九乘法表,形式如下:(难)

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 9*1=2 9*2=18 9*3=21 9*4=36 9*5=45 9*6=54 9*7=63 #include int main() {

for (int i=1;i<=9;i++) {

for (int j=1;j<=9;j++) { printf (\ } printf(\输出完后进行换行 } return 0; }

1*8=8 1*9=9 2*8=16 2*9=18 3*8=24 3*9=27 4*8=32 4*9=36 5*8=40 5*9=45 6*8=48 6*9=54 7*8=56 7*9=63 8*8=64 8*9=72 9*8=72 9*9=81

48、 打印100以内的所有素数。(素数是一个大于1且只能被1和它本身整除的整数)

(难)

#include void main() { int i,j; for(i=2;i<=100;i++) { for(j=2;j

49、 打印1000以内的完全数。(完全数:所有小于该数本身的因子之和等于该数本身,

例如6是一个完全数,因为,6=1+2+3)(难) #include #include void main(void) {

int i,j,m,s;

for (i=2;i<=1000;i++) { s=0;

for (j=1;j

if(i==s) printf (\完全数有%d\ }

system (\}

50、 求1!+2!+3!+??+10!。(难)

#include void main() { int x,y=0; int i,j; for(i=1;i<=10;i++) { x=1; for(j=1;j<=i;j++) { x= x*j; } y=y+x; } printf(\阶乘的结果:1!+2!+3!+......+10!=%d\ }

单循环:

#include void main() { long a=1,n,s=0; for(n=1;n<=10;n++) { a*=n;/*求阶乘*/ s+=a;/*求和*/ } printf(\}

五、数组(10道抽1道,写代码)

51、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},并将其每

个元素全部输出显示。(较易) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; for (int i=0;i<10;i++) {

printf(\ }

putchar('\\n'); }

52、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},并将其每

个元素逆序输出显示。(较易) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; for (int i=9;i>=0;i--) {

printf(\ }

putchar('\\n'); }

53、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求其最大

值。(较难) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; int i,j,t;

for(j=0;j<9;j++) //循环次数 带表要下次几次,是数组元素个数-1 {

for(i=0;i<9-j;i++) //每次循环后就把每次最大的数下沉下去 i<9-j if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }

printf(\数组中最大值为;%d\ printf(\}

54、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求其最小

值。(较难) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; int i,j,t;

for(j=0;j<9;j++) //循环次数 带表要下次几次,是数组元素个数-1 {

for(i=0;i<9-j;i++) //每次循环后就把每次最大的数下沉下去 i<9-j if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }

printf(\数组中最小值为:%d\ printf(\}

55、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求数组元

素的和。(较难) #include void main() {

//定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求数组元素的和。(较难)

int a[10]={21,45,38,66,73,14,55,99,85,10}; int sum=0;

for (int i=0;i<10;i++) {

sum=sum +a[i]; }

printf(\}

56、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求数组元

素的平均值。(较难) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; int sum=0; float av=0;

for (int i=0;i<10;i++) {

sum=sum +a[i]; }

av= sum/10.0; printf(\}

57、 请定义一个2行3列的int类型的数组,其值为{{1,2,3},{2,4,6}}并将其每个元素

全部输出显示。(较易) #include

void main() {

int a[2][3]={{1,2,3},{2,4,6}}; for (int i=0;i<2;i++) {

for(int j=0;j<3;j++) { printf(\ }

printf(\ } }

58、 请定义一个2行3列的int类型的数组,其值为{{1,2,3},{2,4,6}},输出所有元素

的和。(难) #include void main() {

int sum=0;

int a[2][3]={{1,2,3},{2,4,6}}; for (int i=0;i<2;i++) {

for(int j=0;j<3;j++) { sum =sum + a[i][j]; } }

printf(\}

59、 请定义一个4行4列的int类型的数组,求对角线上元素的和。(难) #include void main() {

int sum=0;

int a[4][4]={{1,2,3,4},{2,4,6,8},{1,2,3,4},{2,4,6,8}}; for (int i=0;i<4;i++) {

for(int j=0;j<4;j++) { if((i==j) || (i+j==3)) { sum =sum + a[i][j];//其中一条对角线 +另外一条对角线 } }

}

printf(\}

60、 定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},并按元素

从小到大的顺序输出显示。(难) #include void main() {

int a[10]={21,45,38,66,73,14,55,99,85,10}; int i,j,k,t;

for(j=0;j<9;j++) //循环次数 带表要下次几次,是数组元素个数-1 {

for(i=0;i<9-j;i++) //每次循环后就把每次最大的数下沉下去 i<9-j if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }

for(k=0;k<10;k++) {

printf(\ } }

六、字符串(10道抽1道,写代码)

61、 编写程序,用你的英文名字初始化一个字符串,然后输出,如John(较易)

#include void main() {

char name[10]=\ printf(\}

62、 请定义一个长度为10的字符串,并将其输出显示。(较易)

#include #include void main() { char pwd1[10]=\ puts(pwd1);

}

63、 定义2串密码,判断该两串密码是否一致。(较难)

#include #include void main() {

char pwd1[30]=\ char pwd2[30]=\ int i=strcmp(pwd1,pwd2); if (i==0) {

puts(\定义的两串密码一致!\ } else {

puts(\定义的两串密码不一致!\ } }

64、 反向加密:定义任意长度的密码,输出反向的密码。(较易)

#include #include void main() { char pwd[]=\ int i=0; i=strlen(pwd); for(int j=i-1;j>=0;j--) { printf(\ } }

65、 判断字符串是否为回文串。(提示:回文字符串是具有回文特性的字符串:即该字

符串从左向右读和从右向左读一样,如12321)(难)

#include #include void main() {

int x,i;

char str1[50]; gets(str1); x=strlen(str1);

//要判断长度必须是基数个数 if(x%2!=0) {

for(i=0;i<=x/2; i++) //比只比较前一半的字符是否等于后一半的字符 { //这就是比较两端的字符 if(str1[i] != str1[x-i-1]) { break;//不是回文 } } if(i> x/2) { puts(\是回文字符串\ } else { puts(\不是回文字符串\ } } else {

puts(\不是回文字符串\ } }

66、 将字符串中的小写字母改为相应的大写字母 。(难) #include #include void main() { char str1[50]; gets(str1); strupr(str1); puts(str1); }

67、 定义两个字符串,比较两个字符串的长度,输出较长的字符串。若两个字符串长度

相同,则输出第一个字符串 。(较难)

#include #include void main() {

char str1[100]={\

char str2[100]={\ int lenstr1,lenstr2; lenstr1=strlen(str1); lenstr2=strlen(str2); if (lenstr1 >=lenstr2) {

puts(str1); } else {

puts(str2); }

}

68、 定义一字符串,输出字符串中第一个出现字母a的位置,如没有则输出-1 。

#include #include void main() { char str1[100]={\ int lenstr1; lenstr1 =strlen(str1); for (int i=0;i

69、 定义一字符串,统计该字符串中数字的个数。(较难) #include #include void main() { char str1[100],c; int sum=0,i; printf(\

难)(

gets(str1);

for(i=0;(c=str1[i])!='\\0';i++) {

if(c>='0' && c<='9') { sum+=1; } }

printf(\

}

70、 定义两个字符串,合并成一个新的字符串并输出。(较难) #include #include void main() { char str1[100]={\ char str2[]=\ strcat(str1,str2); puts(str1); }

七、函数(抽1道,写代码)

注:在分支结构中任抽一题,要求用函数实现。(较难)

八、指针(10道抽1道,写代码)

71、 定义函数求2个整数的最大值(要求使用指针变量作函数参数来实现)。(

#include

int smax(int * pa,int * pb) {

int max; if (* pa > * pb) { max = * pa; } else { max = * pb; }

较难) return max; }

void main() {

int a,b ,max;

int smax(int * pa,int * pb); scanf(\ int * pa,* pb; pa = &a; pb = &b;

max=smax(pa,pb);

printf(\最大值:%d\\n\}

72、 定义函数实现两个float型数的交换(要求使用指针变量作函数参数来实现)。(较

难)

#include

void swap(float * pc,float * pd) { float p; p= * pc; * pc=* pd; * pd=p; }

void main () { float a,b; void swap(float * pc,float * pd); scanf(\ float * pa =&a; float * pb =&b; printf(\交换前指针指向的地址的值:%f,%f\\n\ swap(pa,pb); printf(\交换之后指针指向的地址的值:%f,%f\\n\ }

73、 定义(返回指针)函数求三个数的最大值。(较难)

#include

float * smax(float a[3]) {

float * pa; pa = &a[0];

for (int i=1;i<3;i++) { if ( *pa < a[i]) { pa = &a[i]; } }

return pa; }

void main() // {

float a[3]={2.1f,2.3f,45}; float * smax(float a[3]); float * pa; pa = smax(a);

printf(\最大值:%f\\n\}

74、 定义(返回指针)函数求三个数的和。(较难)

#include

float * mysum(float a[3]) {

float j=0; float * sum;

sum = &j;//初始化指针的地址 for (int i=0;i<3;i++) { j += a[i]; }

return sum; }

void main() // {

float a[3]={2,10,3}; float * sum;

sum = mysum(a);

printf(\最大值:%f\\n\}

75、 定义函数求x,y中的较小数(要求用指向函数的指针实现)。(#include void main()

难)

{

int mymin (int,int);//定义一个函数

int (* p)(int,int);//定义一个指向函数的指针 int min,x,y;

p = mymin;//给指针p赋初值; printf(\请输入x,y的值:\ scanf(\ min=p(x,y);

printf(\最小值为:%d\\n\ }

int mymin(int a,int b) {

if (a void main() {

int mymax (int,int);//声明一个函数

int (* p)(int,int);//定义一个指向函数的指针 int max,x,y;

p = mymax;//给指针p赋初值; printf(\请输入x,y的值:\ scanf(\ max=(*p)(x,y);

printf(\最小值为:%d\\n\ }

int mymax(int a,int b) {

if (a

难)

}

else { return a; }

77、 求一个字符串中的数字字符之和。(要求用指向字符串的指针实现)(难)

#include #include void main() {

char * s =\ int len;//定义字符串长度变量 int sum = 0; len=strlen(s);

for (int i=0;i='0' && (*s)<='9') { sum += (* s)-'0'; } s++; }

printf(\}

78、 输出字符串长度。(要求用指向字符串的指针实现)(难) #include #include

void main() //输出字符串的长度 { char * s =\ int len;//定义字符串长度变量 len=strlen(s); printf(\字符串的长度len=%d\\n\}

79、 键盘输入10个数,输出10个数的和(指向一维数组的指针实现)。(难)

#include void main() // 79、 {

int a[10];

键盘输入10个数,输出10个数的和(指向一维数组的指针实现)

}

int * p = a; int s = 0;

printf(\请输入10个整数\for(int i=0;i<10;i++) { scanf(\ s += *p; p++; }

printf(\个数的和为:%d\\n\

80、 键盘输入10个数,输出10个数的最大值(指向一维数组的指针实现)。(难)

#include void main() { int a[10]; int * p = a; int max = 0; printf(\请输入10个整数\ for(int i=0;i<10;i++) { scanf(\ if(i==0) { max=*p; } else { if (max < (*p)) { max = (* p); } } p++; } printf(\个数中的最大值为:%d\\n\}

九、数据类型(10道抽1道,写代码)

81、 定义一个日期结构体变量(年、月、日),定义包含3个日期信息的数组,输出这

些日期信息。(较难)

#include void main() {

//声明结构体 struct Date { int date_Year; int date_Month; int date_Day; };

//定义结构体数组 struct Date ADate[3]={ {2014,10,1}, {2015,10,1}, {2013,10,1} };

for (int i=0;i<3;i++) { printf(\日期信息:%d年%d月%d日\\n\ } }

82、 定义一个结构体,管理员工的信息(工号,姓名,工资),定义包含3个员工信息

的数组,输出这些员工信息记录。(较难)

#include void main() { //声明 员工 结构体 struct employee { char empl_num[6];//工号 char empl_name[10]; float salary; }; //定义结构体数组 struct employee empl[3]={ {\张三\ {\李四\ {\王五\ }; for (int i=0;i<3;i++) { printf(\输出员工

信息,工号:%s 姓名:%s 工

资:%f\\n\ } }

83、 定义一个结构体,管理学生的成绩(姓名,学号,成绩),定义包含3个学生信息

的数组,输出这些学生信息记录。(较难)

84、 定义一个结构体,管理士兵的信息(姓名,兵种,编号),定义包含3个士兵信息

的数组,输出这些士兵信息记录。(较难)

85、 定义一个结构体,管理学生的成绩(姓名,学号,成绩),从键盘输入3个学生的

数据后,求平均成绩。(难)

86、 定义一个结构体,管理士兵的信息(姓名,兵种,编号),从键盘输入3个士兵信

息的数组,输出这些士兵信息记录。(较难)

87、 定义一个结构体,管理学生的成绩(姓名,学号,成绩),从键盘输入5个学生的

数据后,求最高分。(难)

88、 定义一个结构体,管理学生的成绩(姓名,学号,成绩),从键盘输入5个学生的

数据后,求5个学生的总成绩。(难)

89、 定义一个结构体表示日期,包含年、月、日、星期,其中星期用枚举类型实现,用

今天的日期将其初始化。(难)

90、 定义一个结构体表示日期,包含年、月、日、星期,其中星期用枚举类型实现,用

(2015-4-28 星期二)将其初始化。(难)

十、附加题

91、 求下面数列的前20项的和:2/1、3/2、5/3、8/5、13/8。。。。

#include void main() {

int i,x,y,a; float sum=0;

x=2; //用x表示分子,用y表示分母 y=1;

for(i=0;i<20;i++) { sum+=(float)(x)/y; // printf(\ a=x; x=x+y; y=a; }

printf(\ }

1.首先弄清楚这组分数序列的规律:从第二个数开始分子=前一个数的分子+分母分母=前一个数的分子

92、 键盘输入两个日期(年月日)输出两个日期之间的天数。(如计算2013年1月1

日到2014年3月1日有多少天,考虑闰年) #include #include

int main(int argc, char *argv[]) {

int a[13];

a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31; a[2]=28;a[4]=30;a[6]=30;a[9]=30;a[11]=30; int m,n,p,q,k,i,s,j,x=0,y=0,b=365,c=365;

scanf(\ if((m%4==0&&m0!=0)||m@0==0) b=366;

if((q%4==0&&q0!=0)||q@0==0) c=366;

if(m==q){if(b=366) a[2]=29; for(j=1;j

for(j=1;j

s=y+i-x-p;

printf(\ }

if(m!=q) { if(b=366) a[2]=29; for(j=1;j

(j=1;j1) s=s-q+m; printf(\ system(\ return 0; }

93、 打印图形

1 121 12321 1234321 12321 121 1

#include void main() { int i,j,n=4,k; //scanf(\ k=n; for(i=1;i<=4;i++) //输出每行的顺序:先输出空格,然后输出递增的如 123,最后在输出递减的如21. { for(j=1;j<=(4-i);j++) printf(\ for(j=1;j<=i;j++) printf(\ for(j=i-1;j>0;j--) printf(\ printf(\ } //打印后面3排 ,//输出每行的顺序:先输出空格,然后输出递增的如 123,最后在输出递减的如21. for(i=1;i<=4-1;i++) {

}

}

for(j=1;j<=i;j++) //第一行有1个空格,第i行有i个空格 printf(\for(j=1;j<=k-1;j++) { printf(\} k--;

for(j=k-1;j>0;j--) printf(\printf(\

#include void main() {

int i,j,n,k;

scanf(\ k=n;

for(i=1;i<=n;i++) { for(j=1;j<=(n-i);j++) printf(\ for(j=1;j<=i;j++) printf(\ for(j=i-1;j>0;j--) printf(\ printf(\ }

//打印后面3排 for(i=1;i<=n-1;i++) { for(j=1;j<=i;j++) printf(\ for(j=1;j<=k-1;j++) printf(\ for(j=k-1;j>0;j--) printf(\ printf(\ } }

94、 打印图案

1 1 1 2 2 1 1 2 4 4 2 1

#include #include void main() { int i,j,numL,numR; int c; //scanf(\ for(i=1;i<=5;i++) //输出每行的顺序:先输出空格,然后输出递增的如 1,最后在输出递减的. { c=1; for(j=1;j<=(5-i);j++) printf(\ for(numL=1;numL<=i;numL++) { //输出左边到中间的数 if (numL==1) printf(\ else printf(\ } //输出右边递减部分 for(numR=i-1;numR>0;numR--) printf(\ printf(\ //每行输出完成后换行 } }

95、 编程:桌上放了8袋花生,第1袋花生的数目是1颗,第2袋花生的数目是1*2

颗,第3袋花生的数目是1*2*3颗,以此类推,那么第N袋花生的数目是1*2*3*。。。*N颗,但是其中的第6袋花生已经被人拿走,那么剩下的花生总数是多少? 96、 猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少?

97、 求算式xyz+yzz=532中x, y, z的值(其中xyz和yzz分别表示一个三位数)。 98、 求出用数字0至9可以组成多少个没有重复的三位偶数。

99、 下面的程序从键盘接收任意6个数放入数组A中,假设这6个数为:8 1 4 2 5 6 ,

则要输出一个具有如下内容的方阵。

1 2 4 8

1 2 4 8 16

1 2 4 8

8 1 4 2 5 6 6 8 1 4 2 5 5 6 8 1 4 2 2 5 6 8 1 4 4 2 5 6 8 1 1 4 2 5 6 8

100、 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一

个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

101、 对于已经排好序的数组a(假设数组递增),输入一个测试数据x,如果x存在于

数组a中,则把x元素删除;否则将x插在相应的位置上,要求数组仍然有序。 102、 有两个数组a,b已经按递增的顺序排列好,现在要将a,b合并为数组c,使得数

组c仍然按照递增的顺序排列。

103、 编程实现把一个十进制数转化成二进制数,把结果保存在数组中,并正确输出。 104、 加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。 算法:明

文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。例如,China转换成密文为G l m r e。要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。

105、 设计一个剪刀石头布的游戏。

本文来源:https://www.bwwdw.com/article/p2ea.html

Top