- 基础题
- 从键盘输入一个小写字母,转化为大写字母并输出。
#include <stdio.h> int main() { char c1,c2; c1=getchar(); printf("%c,%d\n",c1,c1); c2=c1-32; printf("%c,%d\n",c2,c2); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)字符输入语句书写正确,10分; (5)输出语句书写正确,10分; (6)大写字母转换正确10分。 (7)答卷程序编写工整、清晰,5分。 |
- 从键盘输入两个整数,输出最小数。
#include <stdio.h> int main() { int a,b; scanf("%d%d",&a,&b); if (a<b) printf("最小数是:%d\n",a); else printf("最小数是:%d\n",b); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入语句书写正确,5分; (5)分支逻辑正确,20分,基本正确,但存在细微错误,-5分,错误较多,但语句大部分书写正确,-10分。错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
- 对于给定的正整数N,需要计算 S=1!+2!+3!+...+N!。
#include <stdio.h> int main() { int i; long sum = 0; long f = 1; int N; printf("请输入N:\n"); scanf("%d", &N); for (i = 1; i <= N; i++) { f *= i; sum += f; } printf("S=%ld", sum); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入语句书写正确,5分; (5)循环逻辑正确,20分,基本正确,但存在细微错误,-5分,错误较多,但语句大部分书写正确,-10分。错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
4、从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入,程序中用变量 i 统计大于零的整数个数,用变量 j 统计小于零的整数个数。
#include <stdio.h> int main() { int i = 0, j = 0; int x; printf("请输入数据,用空格隔开每个数\n"); scanf("%d", &x); while (x != 0) { if (x > 0) i++; else j++; scanf("%d", &x); } printf("大于0的个数为%d\n小于0的个数为%d\n", i, j); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入语句书写正确,5分; (5)循环语句书写正确,5分; (6)分支逻辑正确,15分,基本正确,但存在细微错误,-5分,错误较多,部分书写正确,-10分 (7)输出语句书写正确,5分; (8)答卷程序编写工整、清晰,5分。 |
5、求ax2+bx+c=0方程的解,要求
- a=0,不是二次方程。
- b2-4ac=0,有两个相同的实根。
- b2-4ac>0,有两个不等的实根。
- b2-4ac<0,有两个共轭的复根。
#include <stdio.h> #include<math.h> int main ( ) { float a, b,c,disc,x1,x2,realpart,imagpart; scanf ("%f,%f,%f", &a, &b,&c); printf("The equation"); if(fabs(a)<1e-6) printf("is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has two equal roots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } } return 0; } | 评分 (1)#include<stdio.h>、#include<math.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入语句书写正确,5分; (5)分支逻辑正确,25分,基本正确,但存在细微错误,-5分,错误较多,部分书写正确,-10分,错误较多,但个别语句书写正确,-15分; (6)答卷程序编写工整、清晰,5分。 |
6、某学校需要搬运图书,已知男教师一人搬3箱子,女教师一人搬2箱,学生两人搬一箱。问用45人正好搬45块箱,有多少种搬法?(每人至少搬1箱)
#include <stdio.h> int main() { int men,women,child; for (men = 1; men <= 45; men++) for (women = 1; women <= 45; women++) for (child = 1; child <= 45; child++) if ((men+women+child==45) && (men*3+women*2+child*0.5==45)) printf("men=%d women=%d child=%d\n", men, women, child); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)for循环书写正确,15分; (5)条件判断正确,10分 (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
7、编程求1-100这100个整数中9出现的次数。
#include<stdio.h> int main() { int i,sum=0; for (i = 1; i<=100; i++) //遍历所有数字 { if (i/10 == 9)//判断十位是否是9 sum++; if (i%10 == 9)//判断个位是否是9 sum++; } printf("%d", sum); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)for循环书写正确,5分; (5)主逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
- 一球从100米高度自由落下,每次落地后反弹回原来高度的一半,再落下时,按照这个规律运动,试编程求它在第10次落地时,共经过多少米?第10次反弹会达到多高?
#include <stdio.h> int main() { float s=100,h=s/2; for(int i=2;i<=10;i++){ s=s+2*h; h=h/2; } printf("它在第10次落地时共经过%f米\n",s); printf("第10次反弹%f米\n",h); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)for循环书写正确,5分; (5)主逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
9、计算k以内能被13或17整除的自然数之和
功能:计算出k以内最大的10个能被13或17整除的自然数之和。如果不足10个,则仅计算符合条件的数字之和。
输入格式:
输入一个整数k,1<k<=6000。
输出格式:
输出符合条件的自然数之和的值
输入样例1:
2000
输出样例1:
19525
输入样例2:
5
输出样例2:
0
#include<stdio.h> int main() { int k,s=0,n=0; scanf("%d",&k); while(n<10) { if(k%13==0||k%17==0) { s+=k; n++; } k--; if(k<13) break; } printf("%d",s); return 0; } | 评分 (1)#include<stdio.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入书写正确,5分; (5)循环逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
10、国王的奖赏
阿基米德与国王下国际象棋(64格),国王输了,国王问阿基米德要什么奖赏?阿基米德对国王说:“只要在棋盘上第一个放一粒米,第二格放二粒,第三格放四粒,第四格放八粒……按这个方法放满整个棋盘就行。”国王以为要不了多少粮食,就随口答应了,结果国王输了。假设国王有1至10吨麦子,1吨=1000千克=1000000克,1粒麦子有0.1克,请问这些麦子能放到多少格?
输入格式:
输入国王拥有的麦子吨数,设麦子吨数x大于等于1吨,小于等于10吨,x为一个单精度实型数。
输出格式:
输出麦子占用的格数
输入样例1:
1
输出样例1:
24
输入样例2:
10
输出样例2:
27
#include<stdio.h> #include<math.h> int main() { float s=0,x; int i=0; scanf("%f",&x); while(s<x*1000*1000*10) { s+=pow(2,i); i++; } printf("%d",i); return 0; } | 评分 (1)#include<stdio.h>、#include<math.h>正确,5分; (2)main函数书写正确(含return),5分; (3)变量定义正确,5分; (4)输入书写正确,5分; (5)循环逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
二、进阶题
1、试编写函数实现求两个整数的最大公约数。
#include<stdio.h> int gys(int a,int b) { int i; for(i=a; i>0; i--) if (a%i==0&&b%i==0) { return i; break; } } int main() { int a,b,c; scanf("%d%d",&a,&b); c=gys(a,b); printf("%d",c); return 0; } | 评分
(3)变量定义、输入语句正确,5分; (4)函数定义及调用正确,5分; (5)循环逻辑正确,20分,基本正确,但存在细微错误,-5分,错误较多,但语句大部分书写正确,-10分。错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
2、求出Fibonacci数列的前30个数并存放到数组a中,输出数组a的所有元素(要求每行输出5个元素)。
#include <stdio.h> int main( ) { int i; int a[30] = {1, 1}; for (i = 2; i < 30; i++) a[i] = a[i-1] + a[i-2]; for (i = 0; i < 30; i++) { if (i % 5 == 0) printf ("\n"); printf ("%12d", a[i]); } return 0; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)变量、数组定义正确,10分; (3)for循环条件书写正确,5分; (4)存放语句书写正确,10分; (5)for循环输出条件语句书写正确,5分; (6)if条件语句书写正确,5分; (7)输出语句书写正确,5分。 (8)答卷程序编写工整、清晰,5分。 |
3、从键盘输入某班58个学生的《C语言程序设计》的成绩,编程计算该班《C语言程序设计》的平均分。
#include <stdio.h> float Average(float score[],int n) { float sum=0; for(int i=0;i<n;i++) sum=sum+score[i]; return(sum/n); } int main ( ) { float score[58],average_score; printf ("\n请输入58个学生的成绩:"); for(int i=0;i<58;i++) scanf ("%f", & score[i]); average_score=Average(score, 58); printf ("\n平均成是:%f",average_score); return 0; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)变量、数组定义正确,5分; (3)函数定义及调用正确,5分; (4)函数体逻辑正确,20分,基本正确,但存在细微错误,-5分,错误较多,但语句大部分书写正确,-10分。错误较多,但个别语句书写正确,-15分; (5)输入语句书写正确,5分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
4、试编写一个函数:在数组a中有n个整数,要求把下标从0到p(p小于等于n-1)的数平移到数组的最后。
例如:
原始内容:1,2,3,4,5,6,7,8,9,10;
当p=4时,移动后内容:6,7,8,9,10,1,2,3,4,5
#include <stdio.h> void MyFun(int a[],int n,int p) { int i,j,t; for(i=0; i<=p; i++) { t=a[0]; for(j=1; j<n; j++) a[j-1]=a[j]; a[n-1]=t; } } int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; MyFun(a,10,4); for(int i=0;i<10;i++) { printf("%d ",a[i]); } return 0; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)变量、数组定义正确,5分; (3)函数定义及调用正确,5分; (4)for循环书写正确,5分; (5)主逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
5、定义函数int get_count(char *name)计算字符串name的长度,并返回结果。在main函数中定义一个字符数组,输入若干个字符,调用函数get_count计算字符串的长度,并输出其计算结果。
#include <stdio.h> int get_count (char *name); int main() { int length; char name[100]; printf("请输入一个字符串:\n"); scanf("%s", name); length=get_count (name); printf("length=%d", length); return 0; } int get_count (char *name) { int i=0; while(name[i] != '\0') { i++; } return i; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)变量、数组定义正确,5分; (3)函数定义、声明及调用正确,10分; (4)函数体逻辑正确,15分,基本正确,但存在细微错误,-5分,错误较多,部分书写正确,-10分。 (5)输入语句书写正确,5分; (6)输出语句书写正确,5分; (7)答卷程序编写工整、清晰,5分。 |
- 本题要求编写程序,将输入的n个整数存入数组a中,然后计算这些数的平均值,再输出所有大于平均值的数。
#include <stdio.h> int main() { int a[20], sum = 0, ave; int n, i; printf("请输入存入数组的数据个数:"); scanf("%d", &n); printf("请输入数据,用空格隔开每个数\n"); for (i = 0; i < n; i++) { scanf("%d", &a[i]); sum += a[i]; } ave = sum / n; printf("大于平均值的数有:\n"); for (i = 0; i < n; i++) { if (a[i] > ave) printf("%d ", a[i]); } return 0; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)变量、数组定义正确,5分; (3)循环输入累加书写正确,15分; (4)平均值求解正确,5分 (5)循环输出、条件判断书写正确,15分; (6)答卷程序编写工整、清晰,5分。 |
7、某手机店每天早上进货,进货时需要记录手机的数量,以及每个手机的名称、所包含手机的数量、每个手机的单价,手机结构体定义如下:
struct phone{
char name[15];
int count;
float price;
};
编写程序,接收商店工作人员录入的进货手机的总数量和每个手机的基本信息(名称、个数、单价),计算并输出当天进货花费的总金额。
#include<stdio.h> struct phone{ char name[15]; int count; float price; }; int main() { struct phone st[100]; int i,k,n; float total=0; printf("请输入进货手机的数量:"); scanf("%d",&n); printf("请输入每个手机的信息:\n"); for(i=0;i<n; i++) { scanf("%s%d%f",st[i].name ,&st[i].count,&st[i].price ); total += st[i].count * st[i].price ; } printf("总额:%.2f\n",total); return 0; } | 评分
(2)变量、数组定义正确,5分; (3)输入书写正确,5分; (4)循环结构及循环体正确,15 分 (5)输出书写正确,5分; (6)答卷程序编写工整、清晰,5分。 |
8、编程实现:统计某班10名学生成绩中及格的人数,并对成绩进行从低到高排序。其中getPass(score,n)函数用于计算及格人数,score为数组名,n为人数、Sort(score,n)函数用于排序,score为数组名,n为人数。
#include <stdio.h> int getPass(int score[], int n); void Sort(int score[], int n); int main() {int score[10], count, i; for(i=0; i<10; i++) scanf("%d", &score[i]); count = getPass(score, 10); Sort(score, 10); printf("及格人数=%d\n",count); printf("sort array:\n"); for(i=0;i<10;i++) printf("%4d",score[i]); return 0; } int getPass(int score[], int n) { int i, count=0; for(i=0;i<n;i++) if(score[i]>60) count++; return count; } void Sort(int score[], int n) { int i,j,k; for(i=0; i<n-1; i++) { k=i; for(j=i+1;j<n;j++) if( score[j]<score[k]) k=j; if(k!=i) { int tmp; tmp = score[i]; score[i]=score[k]; score[k] = tmp; } } } | 评分 (1)0#include<stdio.h>正确,main函数书写正确(含return),5分; (2)函数声明、调用书写正确,5分 (3)变量、数组定义正确,5分; (4)输入书写正确,5分; (5)getPass函数定义正确,10 分
(7)输出书写正确,5分; (8)答卷程序编写工整、清晰,5分。 |
9、计算学生成绩:有一个结构体类型,包含三个成员:学生姓名、学生学号和5门课程成绩,其结构体类型定义如下:
struct student
{
char name[10]; //姓名
char num[10]; //学号
float score[5]; //5科成绩
};
编写程序由键盘输入10个学生的姓名、学号和5科成绩,计算并输出每位学生的姓名、学生学号和平均成绩,平均成绩保留两位小数。
#include<stdio.h> struct student { char name[10]; //姓名 char num[10]; //学号 float score[5]; //5科成绩 }; int main() { struct student a[10]; int i,j; float average; for(i=0;i<10;i++) { scanf("%s",a[i].name); scanf("%s",a[i].num); for(j=0;j<5;j++) scanf("%f",&a[i].score[j]); } for(i=0;i<10;i++) { average=0; for(j=0;j<5;j++) average+=a[i].score[j]; average/=5; printf("%s %s %.2f\n",a[i].name,a[i].num,average); } return 0; } | 评分 (1)#include<stdio.h>正确,main函数书写正确(含return),5分; (2)结构体类型定义正确,5分 (3)变量、数组定义正确,5分; (4)循环输入书写正确,10分; (5)循环计算逻辑正确,20分,主逻辑基本正确,但存在细微错误,-5分,主逻辑错误较多,但语句大部分书写正确,-10分。主逻辑错误较多,但个别语句书写正确,-15分; (6)答卷程序编写工整、清晰,5分。 |
10、统计平均分,最高分及得最高分人数
请编写一个函数fun,函数的功能是:统计出若干个学生的平均成绩,最高分以及得最高分的人数。
函数接口定义:
float fun(float array[],int n);
其中array和n都是用户传入的参数。函数须统计array数组中学生的平均成绩,最高分以及得最高分的人数,函数返回平均成绩,最高分以及得最高分的人数存放在全局变量Max和J中。
float fun(float array[],int n) { int i; float s=0; Max=array[0]; J=0; for(i=0;i<n;i++) { s+=array[i]; if(Max<array[i]) Max=array[i]; } s=s/n; for(i=0;i<n;i++) if(Max==array[i]) J++; return s; } | 评分 (1)函数定义正确,5分; (2)变量、数组定义正确,10分 (3)循环判断最大值书写正确,15分; (4)平均值求解正确,5分; (5)循环存放数据书写正确,10分; (6)答卷程序编写工整、清晰,5分。 |