所有代码为博主本人思路,并非标准答案,仅供参考!如有错误,欢迎评论提出更正。
2010年
编写一个程序计算1~200之间所有包含3的数(如3、13、30、113等)的和。
- 解法1:
#include<stdio.h>
int main(void)
{
int i,temp,sum = 0;
for(i = 1;i <= 200;i++)
{
temp = i;
while(temp)
{
// 获取当前数字最后一位是否为3
if(temp%10 == 3)
{
sum += i;
break;
}
// 如果最后一位不为3,那么除10降位,如32/10=3,145/10=14;
temp /= 10;
}
}
printf("1~200之间所有包含3的数字和为:%d\n",sum);
}
- 解法2:
#include<stdio.h>
int main(void)
{
int i,sum = 0;
for(i = 1;i <= 200;i++)
/*注意:该方法只适合求1~299之间所有包含3的数字之和*/
/* i%10 == 3判断所有个位为3的情况 i%100/10 == 3判断十位为3的情况 因为题目求1~200之>间所有包含3数字的和,并不会出现百位为3的情况(300)*/
if(i%10 == 3 || i%100/10 == 3)
sum += i;
printf("1~200之间所有包含3的数字和为:%d\n",sum);
}
2011年
编写程序输出符合下列要求的全部三位数。
条件:由1、2、3、4四个数字组成,互相同且无重复的所有三位数。
#include<stdio.h>
int main(void)
{
int i,j,k,sum;
for(i = 1;i <= 4;i++)
{
for(j = 1;j <= 4;j++)
{
for(k = 1;k <= 4;k++)
{
if(i != j && i != k && j != k)
printf("%d%d%d\t",i,j,k);
}
}
}
return 0;
}
- 实现思路:定义三层循环,分别循环4次代表1、2、3、4的四个数字。三层循环可以让所有三位数情况遍历一次。在循环体内输出符合条件的三位数,条件为i != j && i != k && j != k(互不相同且不重复)。
编写一个程序从键盘输出10个学生的成绩,统计输出最高分,最低分和平均分。
#include<stdio.h>
int main(void)
{
int score[10],max,min,sum = 0,i;
double avg;
for(i = 0;i < 10;i++)
{
printf("请输出第%d个学生成绩:",(i+1));
scanf("%d",&score[i]);
if(i == 0)
{
max = score[i];
min = score[i];
}
if(max < score[i])
max = score[i];
if(min > score[i])
min = score[i];
sum += score[i];
}
avg = sum / 10.0;
printf("max-->%d\tmin-->%d\tavg-->%0.2f\n",max,min,avg);
return 0;
}
2012年
编写程序找出1~200之间所有既能被5整除又能被7整除的数。
#include<stdio.h>
int main(void)
{
int i;
for(i = 1;i <= 200;i++)
{
if(i % 5 == 0 && i % 7 == 0)
printf("%d\t",i);
}
printf("\n");
return 0;
}
有一分数序列
2/1、3/2、5/3、8/5、13/8、21/13、……
求出这个数列的前20项之和。
#include<stdio.h>
int main(void)
{
double sum = 0.0;
int n1 = 1,n2 = 2,t;
int i;
for(i = 0;i < 20;i++)
{
// 如果是int/int必须要强制类型转换,否则精度丢失。也可以直接将n1.n2的数据类型定义为double
sum += (double)n2/n1;
t = n1;
n1 = n2;
n2 += t;
}
printf("%f\n",sum);
return 0;
}
将一个字符串转换成对应的数字,如字符串"123"转换成123,假设字符串中所有字符都是数字字符。
#include<stdio.h>
int main(void)
{
char str[] = "123";
int i = 0,value = 0;
while(str[i] != '\0')
{
value *= 10;
// 因为数字0的ASCII码为48,所以转换到int要减去48
value += str[i] - 48;
i++;
}
printf("%d\n",value);
return 0;
}
2013年
编写程序输出三位整数中各位数字之和为7的所有数。如整数106、115、124、……均为满足条件的数(1+0+6=7、1+1+5=7、1+2+4=7)。
#include<stdio.h>
int main(void)
{
int i,n1,n2,n3,sum;
for(i = 100;i <= 999;i++)
{
n1 = i % 10;
n2 = (i % 100 - n1) / 10;
n3 = (i - (n1 + n2 * 10)) / 100;
sum = n1 + n2 + n3;
if(sum == 7)
printf("%d\t",i);
}
printf("\n");
return 0;
}
编写程序将下列四行四列方阵中的数存入二维数组a[4][4]中,并求出其中的最大值及最大值所在数组的行标和列标。
#include<stdio.h>
int main(void)
{
int a[][4] = {23,44,12,77,13,2,33,12,23,45,12,65,11,9,15,78},i,j,row,col,max = a[0][0];
for(i = 0;i < 4;i++)
for(j = 0;j < 4;j++)
{
if(max < a[i][j])
{
row = i + 1;
col = j + 1;
max = a[i][j];
}
}
printf("max is %d,row and col is (%d,%d)\n",max,row,col);
return 0;
}
2014年
编写程序输出1!+2!+3!+…+50!的值。
#include<stdio.h>
int main(void)
{
int i;
long t = 1,sum = 0;
for(i = 1;i <= 50;i++)
{
t *= i;
sum += t;
}
printf("sum is %ld\n",sum);
return 0;
}
从键盘输入某学生的四科成绩,编写程序实现输出四科的总分、平均分、最高分和最低分。
#include<stdio.h>
void main(void)
{
double score[4],sum = 0.0,avg = 0.0,min = 0.0,max = 0.0;
int i;
for(i = 0;i < 4;i++)
{
printf("请输入第%d科成绩:",i+1);
scanf("%lf",score+i);
}
sum = score[0];
max = score[0];
min = score[0];
for(i = 1;i < 4;i++)
{
if(max < score[i])
max = score[i];
if(min > score[i])
min = score[i];
sum += score[i];
}
avg = sum / 4;
printf("sum is %f\navg is %f\nmax is %f\nmin is %f\n",sum,avg,max,min);
}
2015年
输入10个学生的成绩(整数),需要统计出成绩低于平均分的学生人数,请编程实现。
#include<stdio.h>
void main(void)
{
int score[10],i,sum = 0,num = 0;
double avg = 0.0;
for(i = 0;i < 10;i++)
{
printf("请输入第%d个学生成绩:",i+1);
scanf("%d",score+i);
sum += score[i];
}
avg = sum / 10.0;
for(i = 0;i < 10;i++)
{
if(score[i] < avg)
num++;
}
printf("成绩低于平均分的学生人数为:%d\n",num);
}
一个三位数,如果它的三个位置上的数字的立方和等于这个数本身,就称它为水仙花数。如153=1*1*1+5*5*5+3*3*3,所以153是水仙花数。请编程找出100~500之间的水仙花数。
- 解法一:
#include<stdio.h>
void main(void)
{
int i,n1,n2,n3;
for(i = 100;i <= 500;i++)
{
n1 = i % 10;
n2 = (i % 100 - n1) / 10;
n3 = (i % 1000 - (n1 + n2 * 10)) / 100;
if(i == (n1*n1*n1 + n2*n2*n2 + n3*n3*n3))
printf("%d\t",i);
}
printf("\n");
}
解法二:
#include<stdio.h>
void main(void)
{
int i,n1,n2,n3;
for(i = 100;i <= 500;i++)
{
n1 = i % 10;
n2 = i / 10 % 10;
n3 = i / 100;
if(i == (n1*n1*n1 + n2*n2*n2 + n3*n3*n3))
printf("%d\t",i);
}
printf("\n");
}
2016年
输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>
void main(void)
{
int m,n,temp;
int x; // 最小公约数
int y; // 最小公倍数
printf("请输入正整数m n:");
scanf("%d%d",&m,&n);
x = m;
y = n;
if(x < y)
{
temp = x;
x = y;
y = temp;
}
while(y != 0)
{
temp = x % y;
x = y;
y = temp;
}
y = m * n / x;
printf("最小公约数为:%d\n最大公倍数为:%d\n",x,y);
}
输出以下的杨辉三角形(要求输出10行)。
#include<stdio.h>
void main(void)
{
int arr[10][10],i,j;
for(i = 0;i < 10;i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
for(i = 2;i < 10;i++)
for(j = 1;j < i;j++)
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
for(i = 0;i < 10;i++)
{
for(j = 0;j <= i;j++)
printf("%d\t",arr[i][j]);
printf("\n");
}
}
2017年
输入一个字符,判别它是否为小写字母,如果是,将他转换为大写字母;如果不是,不转换。然后输出最后得到的字符。
有一个3*4的矩阵a,求出其中值最小的那个元素的值,以及其他所在的行号和列号。
#include<stdio.h>
void main(void)
{
int a[][4] = {{1,2,3,4},{9,8,7,6},{-10,10,-5,2}},i,j,row = 0,col = 0,min = a[0][0];
for(i = 0;i < 3;i++)
for(j = 0;j < 4;j++)
{
if(min > a[i][j])
{
min = a[i][j];
row = i + 1;
col = j + 1;
}
}
printf("max-->%d\n(row,col)-->(%d,%d)\n",min,row,col);
}
2018年
编写函数Fun1,其实现的功能是:判断某一年是否为闰年,如果是返回1,否则返回0。(闰年的条件:能被4整除,但不能被100整除的年份是闰年;能被400整除的年份是闰年)
#include<stdio.h>
int Fun1(int year)
{
int flag = 0;
if(year%4 == 0 && year%100 != 0)
flag = 1;
if(year%400 == 0)
flag = 1;
return flag;
}
有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁,问第4个学生岁数,他说比第3个学生大2岁,问第3个学生,又说比第2个学生大2岁,问第2个学生,说比第1个大2岁,最后问第1个学生,他说是10岁。设计一个函数描述上述递归过程,并采用主函数调用的方式,输出第5个学生的年龄。
#include<stdio.h>
void main(void)
{
int Fun1(int,int);
printf("第五个学生年龄是%d岁\n",Fun1(5,0));
}
int Fun1(int num,int age)
{
if(num == 1)
return age += 10;
age += 2;
return Fun1(--num,age);
}
2019年
2019年与2016年的题目完全相同,请参考2016年。
2020年
编写函数 Fun23 实现功能如下:指针 s 所指向的字母数字串中只包含数字和字母,实现除了字符串前的数字字符保留,其他的数字字符全部删除。例如:如果 s 的内容为1234ABCD44432abcde7890,按规定删除后 s 的内容应当是:1234ABCDabcde
void Fun23(char *s){
while(*s - '0' <= 9 && *s - '0' >= 0)
s++;
while(*s != '\0'){
if(*s - '0' <= 9 && *s - '0' >= 0)
strcpy(s,s+1);
else
s++;
}
}
编写函数 Fun22 实现如下功能:假设 n 名学生的成绩存储在一个结构体数组变量 scoreLists 中,计算学生成绩的平均分并通过函数返回。其中,结构体类型定义代码如下所示。
struct StudentScore{
double score;
};
double Fun22(struct StudentScore *stu,int n){
int i;
double sum = 0.0,avg;
for(i = 0;i < n;i++){
sum += stu->score;
stu++;
}
avg = sum/n;
return avg;
}