基础程序设计题
1.计算圆周率近似值
/**
* 计算圆周率的近似值,直到最后一项绝对值小于10的-6次方为止
* PI=4*(1-1/3+1/5-1/7+1/9.....)
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
float pi = 0.0, t = 1.0, n = 1.0;
while (1 / n >= 1e-6)
{
pi = pi + t * 1.0 / n;
t = -1 * t;
n = n + 2;
}
pi = pi * 4;
printf("pi=%f\n", pi);
system("pause");
return 0;
}
#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int main(){
float a=0.0,b=1.0,t=1.0;
for(int i=3;fabs(b)>1e-6;i+=2){
a=a+b;
t=-t;
b=t/i;
}
printf("PI=%f",a*4);
system("pause");
return 0;
}
2.输入6个学生的5门成绩,求每个人的平均成绩
/**
* 从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩
*/
#include <stdio.h>
#include <stdlib.h>
#define M 6
#define N 5
void input(double scores[][N], int row, int col);
void average(double scores[][N], int row, int col, double avgs[]);
void output(double avgs[], int size);
int main()
{
double scores[M][N];
double avgs[M];
input(scores, M, N);
average(scores, M, N, avgs);
output(avgs, M);
system("pause");
return 0;
}
void input(double scores[][N], int row, int col)
{
int i, j;
printf("请输入%d个学生的%d门成绩,每个学生成绩在一行,以空格分割成绩:\n", row, col);
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
scanf("%lf", &scores[i][j]);
}
}
}
void average(double scores[][N], int row, int col, double avgs[])
{
int i, j;
for (i = 0; i < row; i++)
{
avgs[i] = 0.0;
for (j = 0; j < col; j++)
{
avgs[i] += scores[i][j];
}
avgs[i] /= col;
}
}
void output(double avgs[], int size)
{
int i;
printf("%6s%10s\n", "序号", "平均成绩");
printf("--------------\n");
for (i = 0; i < size; i++)
{
printf("%6d%10.2lf\n", i + 1, avgs[i]);
}
}
3.计算字符串s中最大连续相同的字符个数的函数
/**
* 编写函数int maxSameChars(char *s);
* 该函数计算字符串s中最大连续相同的字符个数
*/
#include <stdio.h>
#include <stdlib.h>
int maxSameChars(char *s);
int main()
{
char s1[] = "aaadddd";
printf("%d", maxSameChars(s1));
system("pause");
return 0;
}
int maxSameChars(char *s) // 相同字符出现个数
{
int sum = 0;
int max = 0;
for (int i = 0; s[i] != '\0'; i++)
{
for (int j = 0; s[j] != '\0'; j++)
{
if ((int)s[i] == (int)s[j]) // 转型,比较各自对应的 int 值
{
sum++; // 相等时 sum++,记录每次循环对应字符出现的次数
}
}
if (sum > max) //比较字符出现最多的次数与此次循环对应字符出现的次数
{
max = sum; // 记录字符串中字符出现最多的次数
}
sum = 0; // 每次循环对应字符出现的次数清0
}
return (max); // 返回结果
}
4.从键盘输入10个整数,以二进制形式输出到文件"outFile"中
/**
* 从键盘输入10个整数,以二进制形式输出到文件outFile中
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
int num;
// 打开文件
fp = fopen("outFile.txt", "wb");
printf("请输入10个整数:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &num);
// 将整数以二进制形式输出到文件中
fwrite(&num, sizeof(int), 1, fp);
}
// 关闭文件
fclose(fp);
printf("已将10个整数以二进制形式输出到文件.\n");
system("pause");
return 0;
}
5.输出一个浮点数整数部分的最右边
/**
* 读取一个浮点数,然后显示其整数部分的最右边的数字
* 例如:输入235.46,输出5
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
float num = 0.0;
int int_part = 0;
int int_right = 0;
printf("请输入一个浮点数:\n");
scanf("%f", &num);
// 提取整数部分
int_part = (int)num;
// 提取最右边的数字
int_right = int_part % 10;
printf("整数部分最右边的数字为:%d\n", int_right);
system("pause");
return 0;
}
6.实现华氏温度与摄氏温度的转换按要求输出
/**
* 华氏温度与摄氏温度的转换
* 要求输出32度到212度每隔20度的摄氏温度
*/
#include <stdio.h>
#include <stdlib.h>
#define F_LOW 32
#define F_MAX 212
#define STEP 20
int main()
{
typedef float REAL;
REAL fahrenheit, celsius;
fahrenheit = F_LOW;
printf("华氏\t摄氏\n\n");
while (fahrenheit <= F_MAX)
{
celsius = (fahrenheit - 32.0) / 1.8;
printf("%4.1f %4.1f\n", fahrenheit, celsius);
fahrenheit += STEP;
}
system("pause");
return 0;
}
7.计算欧拉数e的值,按要求输出
/**
* 计算欧拉数e的值
* 要求计算到项数值小于0.000001为止
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int n, k;
double e, t, p;
e = 1.0;
n = 1;
do
{
/* code */
p = 1.0;
for (k = 1; k <= n; k++)
{
p = p * k;
}
t = 1.0 / p;
e = e + t;
n++;
} while (/* condition */ t >= 1e-6);
printf("e=%lf\n", e);
system("pause");
return 0;
}
8.佛洛伊德三角(输入行数输出结果)
/**
* 佛洛伊德三角形
*/
#include <stdio.h>
#include <stdlib.h>
int Sum(int n);
int main()
{
int i = 0, j = 1, row = 0, n = 1, tmp = 0, count = 1;
printf("请输入行数:>");
scanf("%d", &row);
int sum = Sum(row); // 计算结尾的数字
for (i = 1; i <= sum; i++)
{
count = 1; // 每次循环好一遍后,使count=1,否则会出现下图所示的结果
for (; count <= n; j++)
{
printf("%d ", j);
count++;
}
i = j; // 让i=j,否则会得不到想要的结果,反而会得到一个出乎意料的结果
printf("\n");
n++; // 记录行的变化
}
system("pause");
return 0;
}
int Sum(int n)
{
int i = 0, sum = 0; // 这里的sum=0很重要,否则算出来的答案就是错误的
for (i = 1; i <= n; i++)
{
sum = sum + i;
}
return sum;
}
9.10座城市的12月中的日最高温度,键入城市和温度,输出温度最高和最低的城市和日期
/**
* 10座城市的12月中的日最高温度,键入城市和温度,输出温度最高和最低的城市和日期
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
char *cities;
char *max_tmp_city;
char *min_tmp_city;
int min_tmp_day = 0;
int max_tmp_day = 0;
int min_tmp = INT_MIN;
int max_tmp = INT_MAX;
int tmp = 0;
for (int i = 0; i < 10; i++)
{
scanf("%s", &cities);
for (int j = 0; i < 31; j++)
{
scanf("%d", &tmp);
if (tmp > max_tmp)
{
max_tmp = tmp;
max_tmp_city = cities;
max_tmp_day = j + 1;
}
if (tmp < min_tmp)
{
min_tmp = tmp;
min_tmp_city = cities;
min_tmp_day = j + 1;
}
}
}
printf("max:%s,%d", max_tmp_city, max_tmp_day);
printf("min:%s,%d", min_tmp_city, min_tmp_day);
system("pause");
return 0;
}
10.输出问句,接收一个答案如果答案正确退出程序,不正确提示再输入一次,三次答案仍不正确,显示答案停止运行
/**
* 输出问句,接收一个答案如果答案正确退出程序,不正确提示
* 再输入一次,三次答案仍不正确,显示答案停止运行
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str2[100] = "马云";
char str1[100];
int i = 0;
while (1)
{
printf("谁是阿里巴巴的创始人?\n");
gets(str1);
if (cmp(str1, str2) == 1)
{
printf("true");
return 0;
}
else
{
printf("Try Again\n");
i++;
}
if (i == 3)
{
printf("错误3次,答案是马云");
return 0;
}
}
system("pause");
return 0;
}
int cmp(char *a, char *b)
{
int i = 0;
while (a[i] != "\0")
{
if (a[i] != b[i])
{
return 0;
i++;
}
return 1;
}
}
11.递归实现斐波那契数列,输入项数,输出数列
// 斐波那契数列:请输入项数,输出具体数列
#include<stdlib.h>
#include<stdio.h>
int fibonacii(int);
int main(){
int num;
scanf("%d",&num);
printf("%d",fibonacii(num));
system("pause");
return 0;
}
//递归实现斐波那契数列
int fibonacii(int n){
if(n==1||n==2){
return 1;
}
return fibonacii(n-1)+fibonacii(n-2);
}
12.读取一个字符,统计字符在文件中出现的次数
/**
* 12.读取一个字符,统计字符在文件中出现的次数
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch, temp;
int sum = 0;
FILE *fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("data is not\n");
exit(-1);
}
ch = getchar();
while (!feof(fp))
{
fscanf(fp, "%c", &temp);
if (temp == ch)
sum++;
}
printf("the number of %c:%d", ch, sum);
system("pause");
return 0;
}
13.计算涨薪后的员工工资
/**
* 计算员工的工资
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
float salary, sum;
printf("请输入员工的原始工资\n");
scanf("%f", &salary);
if (salary < 0)
{
printf("输入有误\n");
}
else if (salary >= 1000)
{
sum = salary + salary * 0.2;
printf("涨薪后的工资为:%f", sum);
}
else if (salary < 1000 && salary >= 500)
{
sum = salary + salary * 0.15;
printf("涨薪后的工资为:%f", sum);
}
else if (salary < 500)
{
sum = salary + salary * 0.1;
printf("涨薪后的工资为:%f", sum);
}
system("pause");
return 0;
}
14.输入一门成绩,输出对应等级
/**
*输入成绩,输出等级
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
float n = 0.0;
printf("请输入一个成绩\n");
scanf("%f", &n);
int a = (int)n / 10;
if (n >= 0 && n <= 100)
{
switch (a)
{
case 10:
case 9:
printf("等级为A\n");
break;
case 8:
printf("等级为B\n");
break;
case 7:
printf("等级为C\n");
break;
case 6:
printf("等级为D\n");
break;
default:
printf("等级为E\n");
break;
}
}
else
{
printf("无效成绩\n");
}
system("pause");
return 0;
}
15.输入20位学生的姓名 成绩,按成绩从大到小输出
/**
* 输入学生姓名成绩,按成绩大小排序输出
*/
#include <stdio.h>
#include <stdlib.h>
#define N 20
int compare();
struct student
{
char name[20];
int score;
} stu[N];
int main()
{
// 输入学生信息
for (int i = 0; i < N; i++)
{
printf("请输入第%d个学生的信息:", i + 1);
scanf("%s %d", stu[i].name, &stu[i].score);
}
// 排序
qsort(stu, N, sizeof(struct student), compare);
// 输出
printf("按成绩从大到小排序结果:\n");
for (int i = 0; i < N; i++)
{
printf("%s %d\n", stu[i].name, stu[i].score);
}
system("pause");
return 0;
}
int compare(const void *a, const void *b)
{
struct student *sa = (struct student *)a;
struct student *sb = (struct student *)b;
if (sa->score > sb->score)
{
return -1;
}
else if (sa->score < sb->score)
{
return 1;
}
else if (sa->score == sb->score)
{
return 0;
}
}
/**
* 2
*/
#include <stdio.h>
#include <stdlib.h>
#define N 20
struct student
{
char name[20];
float score;
};
int main()
{
struct student stu[N];
struct student temp;
int i, j, k;
for (i = 0; i < N; i++)
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%s %f", stu[i].name, &stu[i].score);
}
for (i = 0; i < N - 1; i++)
{
k = i;
for (j = i + 1; j < N; j++)
{
if (stu[j].score > stu[k].score)
{
k = j;
}
if (k != i)
{
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp;
}
}
}
//输出
printf("按从小到大的排列\n");
for (i = 0; i < N; i++)
{
printf("%s %f", stu[i].name, stu[i].score);
printf("\n");
}
system("pause");
return 0;
}
16.编写一个判断素数的函数,输出2-1000的所有素数
/**
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1001
int IsPrime();
int main()
{
int s[N];
printf("输出2-1000的所有素数\n");
for (int i = 2; i < N; i++)
{
s[i] = i;
}
// 判断s[]是否为素数
for (int i = 2; i < N; i++)
{
if (IsPrime(s[i]) == 1)
{
printf("%d", s[i]);
printf("\n");
}
}
system("pause");
return 0;
}
// 如果返回1是素数
int IsPrime(int num)
{
int flag = 0;
//num能完成所有循环就是素数
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
flag++; // 素数个数加1
}
}
if (flag == 0)
{
return 1;
}
}
17.输入3个数,输出中间那个不大不小的数
/**
* 输入三个整数,输出那个不大不小的数
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, y, z;
int max, min;
int mid;
printf("请输入三个整数\n");
scanf("%d %d %d", &x, &y, &z);
max = (x > y) ? x : y;
max = (max > z) ? max : z;
min = (x < y) ? x : y;
min = (min < z) ? min : z;
mid = x + y + z - min - max;
printf("中间数是%d", mid);
system("pause");
return 0;
}
18.输入一个整数,输出用汉字表示
/**
* 输入一个整数,求各位数字对应的汉字
*/
#include <stdio.h>
#include <stdlib.h>
void output();
int main()
{
int n;
printf("请输入一个整数\n");
scanf("%d", &n);
output(n);
system("pause");
return 0;
}
void output(int n)
{
int a[10];
int i = 0;
while (n)
{
a[i++] = n % 10;
n /= 10;
}
while (--i >= 0)
{
switch (a[i])
{
case 0:
printf("零");
break;
case 1:
printf("一");
break;
case 2:
printf("二");
break;
case 3:
printf("三");
break;
case 4:
printf("四");
break;
case 5:
printf("五");
break;
case 6:
printf("六");
break;
case 7:
printf("七");
break;
case 8:
printf("八");
break;
case 9:
printf("九");
break;
}
}
printf("\n");
}
19.输入一些数字(0-4),统计输入得到个数
/**
* 输入一些0-4的数字,以-1结束,统计各个数字的个数
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, d, e, i, m;
a = b = c = d = e = 0;
i = 0;
printf("输入一些0-4的数字,输入-1结束\n");
while (1)
{
i++;
if (i >= 100)
{
break;
}
printf("输入第%d个数:\n", i);
scanf("%d", &m);
if (m == -1)
{
break;
}
switch (m)
{
case 0:
a++;
break;
case 1:
b++;
break;
case 2:
c++;
break;
case 3:
d++;
break;
case 4:
e++;
break;
default:
printf("输入有误\n");
break;
}
}
printf("0的个数为%d,1的个数为%d,2的个数为%d,3的个数为%d,4的个数为%d", a, b, c, d, e);
system("pause");
return 0;
}
/**
* 输入一些0-4的数字,以-1结束,统计各个数字的个数
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c, d, e;
a = b = c = d = e = 0;
int n[100];
for (int i = 0; i < 100; i++)
{
printf("输入第%d个数", i + 1);
scanf("%d", &n[i]);
if (n[i] == -1)
{
break;
}
}
for (int i = 0; i < 100; i++)
{
if (n[i] == 0)
a++;
if (n[i] == 1)
b++;
if (n[i] == 2)
c++;
if (n[i] == 3)
d++;
if (n[i] == 4)
e++;
if (n[i] == -1)
break;
}
printf("0的个数是%d,1的个数是%d,2的个数是%d,3的个数是%d,4的个数是%d", a, b, c, d, e);
system("pause");
return 0;
}
20.将十进制数字转换为十六进制字符串,输出0-1024对应的十六进制字符串
/**
* 将一个十进制的数转换为十六进制字符串
*/
#include <stdio.h>
#include <stdlib.h>
void decimalToHex(int d)
{
int a[100];
int i = 0;
int m = 0;
char hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
printf("%d", d);
while (d > 0)
{
a[i++] = d % 16;
d = d / 16;
}
printf("转化为十六进制后:");
for (i = i - 1; i >= 0; i--)
{
m = a[i];
printf("%c", hex[m]);
}
printf("\n");
}
int main()
{
printf("0-1024十进制数对应的十六进制分别是\n");
int count = 0;
for (int i = 0; i < 1024; i++)
{
count++;
decimalToHex(i);
if (i % 10 == 0)
{
printf("\n");
}
}
system("pause");
return 0;
}
21.输入年月日,计算该日是该年的第几天
/**
* 输入年月日,计算该日是该年的第几天
*/
#include <stdio.h>
#include <stdlib.h>
int dm();
int main()
{
int day, year, month;
printf("请输入年月日:\n");
scanf("%d %d %d", &year, &month, &day);
dm(year, month, day);
system("pause");
return 0;
}
int dm(int year, int month, int day)
{
int flag = 0;
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
flag = 1;
}
else
{
flag = 0;
}
int a = 0;
switch (month - 1)
{
case 11:
a += 30;
case 10:
a += 31;
case 9:
a += 30;
case 8:
a += 31;
case 7:
a += 31;
case 6:
a += 30;
case 5:
a += 31;
case 4:
a += 30;
case 3:
a += 31;
case 2:
a += 28 + flag;
case 1:
a += 31;
break;
default:
printf("Please input others\n");
}
a += day;
printf("这是%d年第%d天.\n", year, a);
return 0;
}
22.输入2个矩阵求和
/**
* 输入两个三行三列矩阵,求两个矩阵的和
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int matrix1[3][3], matrix2[3][3], sum[3][3];
int i, j;
// 输入第一个矩阵
printf("请输入第一个矩阵:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &matrix1[i][j]);
}
}
// 输入第二个矩阵
printf("请输入第二个矩阵:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &matrix2[i][j]);
}
}
// 计算两个矩阵的和
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
sum[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
// 输出结果
printf("两个矩阵的和为:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", sum[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
23.输入一个矩阵,输出矩阵的转置
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3 // 定义矩阵行数
#define COLS 4 // 定义矩阵列数
int main()
{
int a[ROWS][COLS]; // 定义一个 ROWS 行 COLS 列的矩阵
int i, j;
// 读入矩阵元素
printf("请输入矩阵元素:\n");
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLS; j++)
{
scanf("%d", &a[i][j]);
}
}
// 转置矩阵
printf("转置后的矩阵:\n");
for (i = 0; i < COLS; i++)
{
for (j = 0; j < ROWS; j++)
{
printf("%d ", a[j][i]);
}
printf("\n");
}
system("pause");
return 0;
}
24.输出某范围内能同时被2个数整除的一批数,并规定打印格式
/**
* 打印100-1000之间能被7整除的数又能被5整除,每行打印5个数
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int count = 0;
for (int i = 100; i <= 1000; i++)
{
if (i % 5 == 0 && i % 7 == 0)
{
printf("%d ", i);
count++;
if (count % 5 == 0)
{
printf("\n");
}
}
}
system("pause");
return 0;
}
25.计算按照折扣信息后应付的金额
/**
* 计算折扣后的价格
*/
#include <stdio.h>
#include <stdlib.h>
float conter(float n, int t);
int main()
{
float a = 0.0;
float money;
int t;
printf("请输入顾客的购买金额,机加工用数字1,手工制品用数字2,用空格隔开\n");
scanf("%f %d", &a, &t);
money = conter(a, t);
printf("顾客的应付金额为%f\n", money);
system("pause");
return 0;
}
float conter(float n, int t)
{
float a;
if (n >= 0 && n <= 100)
{
if (t == 1)
{
a = n;
}
else if (t == 2)
{
a = n - (n * 0.05);
}
}
if (n >= 101 && n <= 200)
{
if (t == 1)
{
a = n - (n * 0.05);
}
else if (t == 2)
{
a = n - (n * 0.075);
}
}
if (n >= 201 && n <= 300)
{
if (t == 1)
{
a = n - (n * 0.075);
}
else if (t == 2)
{
a = n - (n * 0.1);
}
}
if (n > 300)
{
if (t == 1)
{
a = n - (n * 0.1);
}
else if (t == 2)
{
a = n - (n * 0.15);
}
}
return a;
}
26.按要求输出星号打印出等腰三角形
/**
打印:
*
***
*****
*******
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, k, n = 4;//n是行数,可改为变量控制等腰三角形高度
for (i = 1; i <= n; i++)
{
for (k = 1; k <= n - i; k++)//控制空格
{
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++)//控制*数
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}
27.逆序输出整数
/**
* 逆序输出整数
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, x;
printf("请输入一段整数\n");
scanf("%d", &n);
printf("逆序输出后为:\n");
while (n > 0)
{
x = n % 10;
printf("%d", x);
n = n / 10;
}
system("pause");
return 0;
}
28.100-200的素数个数
/**
* 统计100-200之间的素数个数
*/
#include <stdio.h>
#include <stdlib.h>
int isPrime(int n);
int main()
{
int i, p = 0;
for (i = 100; i <= 200; i++)
{
if (isPrime(i) == 1)
{
printf("%d是素数\n", i);
p++;
}
}
printf("素数个数是%d", p);
system("pause");
return 0;
}
int isPrime(int n)
{
int flag = 0;
// n能完成所有循环就是素数
for (int i = 2; i < n; i++)
{
if (n % i == 0)
{
flag++;
}
}
if (flag == 0)
{
return 1; // 是素数
}
}
29.读取文件中的字符,统计小写字母个数
/**
* 从文件a.txt中读取字符,并统计小写字母的个数。
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
int num = 0;
FILE *fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("data is not\n");
return 1;
}
while ((ch = fgetc(fp)) != EOF)
{
if (ch >= 'a' && ch <= 'z')
{
num++;
}
}
fclose(fp);
printf("小写字母个数为:%d\n", num);
system("pause");
return 0;
}