目录
1、/*输出9*9口诀。共9行9列,i控制行,j控制列。*/
编辑3、/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。*/
4、/*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。*/
5、/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。*/
8、/*完善程序,实现将输入的字符串反序输出,如输入windows 输出swodniw。*/
9、/*下面程序的功能是从字符数组s中删除存放在c中的字符。*/
10、/*编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9_1.out中*/
11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
13、在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。
16、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。
1、/*输出9*9口诀。共9行9列,i控制行,j控制列。*/
#include "stdio.h"
void main()
{
int i, j, result;
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
result = i * j;
printf("%d*%d=%-3d", i, j, result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
2、/*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?兔子的规律为数列1,1,2,3,5,8,13,21....*/
#include "stdio.h"
void main()
{
long f1, f2;
int i;
f1 = f2 = 1;
for (i = 1; i <= 20; i++)
{
printf("%12ld %12ld", f1, f2);
if (i % 2 == 0) printf("\n");/*控制输出,每行四个*/
f1 = f1 + f2; /*前两个月加起来赋值给第三个月*/
f2 = f1 + f2; /*前两个月加起来赋值给第三个月*/
}
}
3、/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。*/
#include<stdio.h>
#include<math.h>
void main()
{
int a = 101, b = 0, c, d = 2;
for (a = 101; a <= 200; a++)
{
c = (int)sqrt(a);
for (d = 2; d <= c; d++)
{
if (a % d == 0)
break;
}
if (d > c)
{
b++;
printf("%d\t", a);
}
}
printf("\n");
printf("101-200之间素数的个数%d\n", b);
}
4、/*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。*/
#include<stdio.h>
int main()
{
int i, j, s;
for (i = 2; i <= 1000; i++)
{
s = 1;
for (j = 2; j <= i / 2; j++)
if (i % j == 0)s += j;
if (s == i)
{
printf("1~1000的完全数有:%d ,其因子是 1 ", i);
for (j = 2; j <= i / 2; j++)
if (i % j == 0)printf("%d ", j);
printf("\n");
}
}
return 0;
}
5、/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。*/
//逆序
#define _CRT_SECURE_NO_WARNINGS//不加可能会报错
#include <stdio.h>
int main()
{
int a[4][4], b[4][4], i, j; //a存放原始数组数据,b存放旋转后数组数据
printf("输入16个数字: ");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
scanf("%d", &a[i][j]);
b[3 - j][i] = a[i][j];
}
printf("逆序转换后数组为 b:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
printf("%6d", b[i][j]);
printf("\n");
}
}
//顺序
#define _CRT_SECURE_NO_WARNINGS//不加可能会报错
#include <stdio.h>
int main()
{
int a[4][4], b[4][4], i, j; //a存放原始数组数据,b存放旋转后数组数据
printf("输入16个数字: ");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
scanf("%d", &a[i][j]);
b[j][3 - i] = a[i][j];
}
printf("顺序转换后数组为 b:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
printf("%6d", b[i][j]);
printf("\n");
}
}
6、/*编程打印直角杨辉三角形*/
#include <stdio.h>
int main()
{
int i, j, a[6][6];
for (i = 0; i <= 5; i++)
{
a[i][i] = 1; a[i][0] = 1;
}
for (i = 2; i <= 5; i++)
for (j = 1; j <= i - 1; j++)
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
for (i = 0; i <= 5; i++)
{
for (j = 0; j <= i; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
7、/*通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车。其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。*/
#define _CRT_SECURE_NO_WARNINGS//不加可能会报错
#include <stdio.h>
void main()
{
int a[4][5], i, j, sum = 0;
for (i = 0; i < 3; i++)
{
printf("输入第%d位学生的四门成绩:\n ", i + 1);
for (j = 0; j < 4; j++)
scanf("%d", &a[i][j]);
}
//计算第5列,即每个学生成绩平均值。
for (i = 0; i < 3; i++)
{
sum = 0;
for (j = 0; j < 4; j++)
sum += a[i][j];
a[i][4] = sum / 4;
}
//计算第4行,即每一课成绩和总成绩的平均值
for (j = 0; j < 5; j++)
{
sum = 0;
for (i = 0; i < 3; i++)
sum += a[i][j];
a[3][j] = sum / 3;
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 5; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
8、/*完善程序,实现将输入的字符串反序输出,如输入windows 输出swodniw。*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
int i;
printf("输入一串字符:");
scanf("%s", str);
printf("反序输出为:");
for (i = strlen(str) - 1; i >= 0; i--)
printf("%c", str[i]);
printf("\n");
return 0;
}
指针法:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void Reverse(char* str)
{
char* left = str;//left指向字符串数组的首元素
char* right = str + strlen(str) - 1;//right指向字符串的最后一个元素
while (left < right)//进行首元素和尾元素的交换,直至left等于right为止,此时字符串完成1逆置
{
char temp = *left;
*left = *right;
*right = temp;
++left;
--right;
}
}
int main()
{
printf("输入一串字符:");
char str[10000];
gets(str);
Reverse(str);
printf("反序输出为:");
puts(str);
return 0;
}
9、/*下面程序的功能是从字符数组s中删除存放在c中的字符。*/
#include <stdio.h>
int main()
{
char s[80], c;
int j, k;
printf("\n输入字符串: ");
gets(s);
printf("\n输入要删除的字符: ");
c = getchar();
for (j = k = 0; s[j] != '\0'; j++)
if (s[j] != c)
s[k++] = s[j];
s[k] = '\0';
printf("\n删除后字符串为:%s", s);
}
10、/*编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9_1.out中*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void sort(int* x, int n)
{
int i, j, k, t;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (x[j] > x[k]) k = j;
if (k != i)
{
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
}
void main()
{
FILE* fp;
int* p, i, a[10];
fp = fopen("p9_1.out", "w");
p = a;
printf("输入10个数字:");
for (i = 0; i < 10; i++)
scanf("%d", p++);
p = a;
sort(p, 10);
printf("从大到小排序 后数字顺序为:" );
for (; p < a + 10; p++)
{
printf("%d ", *p);
fprintf(fp, "%d ", *p);
}
system("pause");
fclose(fp);
}
11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
#include<stdio.h>
int main()
{
printf("原来数组a中的元素为:0,12,17,20,25,28,30 ");
int a[10] = { 0,12,17,20,25,28,30 };//定义一个长度为10的数组
int i, j, t;
printf("%d", a[7]);//查看第8个元素值
printf("\n");
printf("输入一个数据:");
scanf_s("%d", &a[7]);//将输入值赋给第8个元素
printf("\n");
printf("数组a中的元素重新排序后为:");
/*冒泡排序由小到大,每一轮比较之后此轮最大的数都会移到此轮最右侧,
那么每一轮比较之后需要比较的次数都减一,加上插入的共8个元素比较7次,
也就是8-(1+i),i=0*/
for (i = 0; i < 8; i++)//外循环控制要进行比较的轮数
for (j = 0; j < 8 - 1 - i; j++)//内循环控制要比较的次数
if (a[j] > a[j + 1])//从第0个元素开始左右比较,左右替换,大的数右移
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
for (i = 0; i < 8; i++)/*for循环输出比较后的数组每一个元素值*/
printf("%-3d", a[i]);
}
12、编写函数replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out中
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void replace(char* s, char ch1, char ch2)
{
int i = 0;
for (; s[i] != '\0'; i++)
{
if (s[i] == ch1)
s[i] = ch2;
}
return;
}
int main()
{
char s1[20];
char ch1, ch2;
printf("分别输入字符串、替换的字符、替换后的字符(空格隔开):\n");
scanf("%s %c %c", s1, &ch1, &ch2);
replace(s1, ch1, ch2);
printf("%s\n", s1);
return 0;
}
13、在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char s1[100], s2[100];
int len1, len2, i, j, k;
printf("输入两个字符串(空格隔开):");
scanf("%s %s", s1, s2);
len1 = strlen(s1);
len2 = strlen(s2);
for (i = 0; i < len1 - len2 + 1; i++)
{
j = 0;
k = i;
while (s1[k] == s2[j])
{
k++;
j++;
if (j == len2)
{
printf("%d\n", i+1);
return 0;
}
}
}
printf("-1\n");
return 0;
}
14、用指针变量输出结构体数组元素。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
struct student
{
int num;
char* name;
char sex;
int age;
}stu[5] = { {1001,"lihua",'F',18},{1002,"liuxing",'M',19},{1003,"huangke",'F',19},{1004,"fengshou",'F',19},{1005,"Wangming",'M',18} };
main()
{
int i;
struct student* ps;
printf("Num \tName\t\t\tSex\tAge\t\n");
/*用指针变量输出结构体数组元素。*/
for (ps = stu; ps < stu + 5; ps++)
printf("%d\t%-10s\t\t%c\t%d\t\n", ps->num, ps->name, ps->sex, ps->age);
/*用数组下标法输出结构体数组元素学号和年龄。*/
printf("输出结构体数组元素学号和年龄:\n");
for (i = 0; i < 5; i++)
printf("%d\t%d\t\n", stu[i].num, stu[i].age);
}
15、建立一个有三个结点的简单链表:
#include<stdio.h>
#include<string.h>
#define NULL 0
struct student
{
int num;
char* name;
int age;
struct student* next;
};
void main()
{
struct student a, b, c, * head, * p;
a.num = 1001; a.name = "lihua"; a.age = 18; //对结点成员进行赋值
b.num = 1002; b.name = "liuxing"; b.age = 19;
c.num = 1003; c.name = "huangke"; c.age = 18;
head = &a;//建立链表,a为头结点
a.next = &b;
b.next = &c;
c.next = NULL;
p = head;//输出链表
do {
printf("%5d,%s,%3d\n", p->num, p->name, p->age);
p = p->next;
} while (p != NULL);
}
16、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。
#include <stdio.h>
#include <string.h>
#include<string.h>
main()
{
char s[100];
int i, j, n;
printf("输入字符串:\n");
gets(s);
n = strlen(s);
for (i = 0, j = n - 1; i < j; i++, j--)
if (s[i] != s[j])
break;
if (i >= j) printf("是回文串\n");
else
printf("不是回文串\n");
}
17、冒泡排序,从小到大
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Print(int array[], int len) {
for (int i = 0; i < len; i++) {
printf("%d ", array[i]);
}
}
void BubbleSort(int array[], int len) {
int tem;
//外层循环控制 排序的趟数 n个元素排序需要循环n-1次 【1】
for (int i = 0; i < len - 1; i++) {
//内层循环控制比较的次数 n个元素第i趟比较n-i次 【2】
for (int j = 0; j < len - 1 - i; j++) {
//比较相邻的元素大小 目的:将最大的元素选出到移动到最后
if (array[j] > array[j + 1]) {
tem = array[j];
array[j] = array[j + 1];
array[j + 1] = tem;
}
}
}
}
int main() {
int array[] = { 3,44,38,5,47,15,36 };
int len = sizeof(array) / sizeof(int);
printf("原始序列为:\n");
Print(array, len);
BubbleSort(array, len);
printf("\n排序后序列为:\n");
Print(array, len);
}
18、编写函数countpi,利用公式
计算π的近似值,当某一项的值小于10-5时,认为达到精度要求,请完善函数。将结果显示在屏幕上并输出到文件p7_3.out中。
#include<stdio.h>
double countpi(int n)
{
int i;
double sum = 1.0;
for (i = 1; i <= n; i++)
{
sum = sum * i / (2 * i + 1);
}
return(sum);
}
int main()
{
double countpi(int n);
int i;
double count = 1;
for (i = 1; countpi(i) > 0.00001; i++)
{
count += countpi(i);
}
printf("π的近似值为:");
printf("%0.5f\n", 2 * count);
return 0;
}