admin管理员组文章数量:1794759
大学生C语言期末必背题目,考研必背题目,找工作基础题目
1、输出9*9口诀。共9行9列,i控制行,j控制列。 //99乘法表 int main() { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { printf("%d x %d = %-4d",i,j,i*j); } printf("\\n"); } }
运行结果:
2、古典问题:有一对兔子,从出生后第3个月起每个闯都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(斐波那契数列) //兔子繁殖问题 #define month 20 int main() { long x1 = 1, x2 = 1; for (int i = 1; i <= month; i++) { printf("%-12ld%-12ld", x1, x2); if (i % 2 == 0) { printf("\\n"); } x1 = x1 + x2; x2 = x1 + x2; } return 0; } 3、判断101-200之间有多少个素数,并输出所有素数及素数的个数。解析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
//素数判断 int main() { int count = 0; for (int i = 101; i <= 200; i++) { int flag = 0; for (int j = 2; j < sqrt(i) + 1; j++) { if (i % j == 0) { flag = 1; break; } } if (!flag) { ++count; printf("%d ", i); if (count % 8 == 0) { printf("\\n"); } } } printf("\\n%d", count); return 0; } 4、—个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 //完数 int main() { int count = 0; for (int i = 2; i < 1000; i++) { int sum = 1; for (int j = 2; j < i; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { ++count; printf("%d = 1", sum); for (int j = 2; j < i; j++) { if (i % j == 0) { printf("+%d", j); } } printf("\\n"); } } printf("%d", count); }运行结果:
5、下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,请在空白处完善程序。 //矩阵转置 #define ROW 4 #define COL 4 int main() { int arr[ROW][COL] = { 0 }; for (int i = 0; i < COL; i++) { for (int j = 0; j < ROW; j++) { scanf("%d", &arr[j][i]); } } printf("\\n"); for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%d ", arr[i][j]); } printf("\\n"); } return 0; }运行结果:
6、杨辉三角 //杨辉三角 #define ROW 20 #define COL 20 int main() { int arr[ROW][COL] = { 0 }; arr[0][0] = 1; for (int i = 1; i < ROW; i++) { arr[i][0] = arr[i][i] = 1; for (int j = 1; j < COL-1; j++) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; } } for (int i = 0; i < ROW; i++) { for (int j = 0; j <= i; j++) { printf("%-5d ", arr[i][j]); } printf("\\n"); } return 0; }运行结果:
7、通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。 //学生成绩 int main() { double arr[4][5] = { 0 }; int i, j,sum; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { scanf("%lf", &arr[i][j]); } } for (i = 0; i < 3; i++) { sum = 0; for (j = 0; j < 4; j++) { sum+=arr[i][j]; } arr[i][4] = sum/4; } for (i = 0; i < 5; i++) { sum = 0; for (j = 0; j < 3; j++) { sum += arr[j][i]; } arr[3][i] = sum/3; } for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { printf("%2.2lf ", arr[i][j]); } printf("\\n"); } return 0; }
运行结果:
8、完善程序,实现将输入的字符串反序输出,如输入windows输出swodniw。 //字符串逆序-常规 int main() { char c[100] = { 0 }; gets(c); int len = strlen(c); int left = 0, right = len - 1; while (left < right) { char temp = c[left]; c[left] = c[right]; c[right] = temp; left++; right--; } printf("%s", c); return 0; } //字符串逆序-指针 int main() { char c[100] = { 0 }; gets(c); int len = strlen(c); int left = 0, right = len - 1; while (left < right) { char temp = *(c+left); *(c + left) = *(c + right); *(c + right) = temp; left++; right--; } printf("%s", c); return 0; } 9、从字符串中删除字符 //从字符串中删除字符 int main() { char str[100] = { 0 }; gets(str); char c = { 0 }; scanf("%c", &c); int i, j; for (i = 0, j = 0; str[i] != '\\0'; i++) { if (str[i] != c) { str[j] = str[i]; j++; } } str[j] = '\\0'; printf("%s", str); return 0; }运行结果:
//从字符串中删除字符 int main() { char str[100] = { 0 }; gets(str); char c = { 0 }; scanf("%c", &c); int i, j; for (i = 0, j = 0; str[i] != '\\0'; i++) { if (str[i] != c) { str[j] = str[i]; j++; } } str[j] = '\\0'; printf("%s", str); return 0; }10、编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9_1.out中。 //排序 void sort(int* x, int n) { for (int i = 0; i < n; i++) { for (int j = 1+i; j < n; j++) { if (x[i] < x[j]) { int temp = x[i]; x[i] = x[j]; x[j] = temp; } } } for (int i = 0; i < n; i++) { printf("%d ", x[i]); } } int main() { int n = 0; scanf("%d", &n); int *arr = (int*)malloc(n*sizeof(int)); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } sort(arr, n); return 0; }
运行结果:
11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列整了点花活,但是程序没问题,一样用。。。
//插入排序 void sort(int* x, int n) { for (int i = 0; i < n; i++) { for (int j = 1+i; j < n; j++) { if (x[i] < x[j]) { int temp = x[i]; x[i] = x[j]; x[j] = temp; } } } for (int i = 0; i < n; i++) { printf("%d ", x[i]); } } int main() { int n = 0; scanf("%d", &n); int *x = (int*)malloc(n*sizeof(int)); int i = 0; for (i = 0; i < n; i++) { scanf("%d", &x[i]); } int num = 0; scanf("%d", &num); x = (int*)realloc(x, (n+1)*sizeof(int)); x[i] = num; sort(x, n+1); return 0; }运行结果:
12、编写函数replace(char*s,char c1,charc2)度实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out中 //替换字符串中字符 replace(char* s, char c1, char c2) { while (*s != '\\0') { if (*s == c1) { *s = c2; } s++; } } main() { FILE* fp; char str[100], a, b; if ((fp = fopen("p10_2.out", "w")) == NULL) { printf("cannot open thefile\\n"); exit(0); } printf("Enter a string:\\n"); gets(str); printf("Enter a&&b:\\n"); scanf("%c,%c", &a, &b); printf("%s\\n", str); fprintf(fp, "%s\\n", str); replace(str, a, b); printf("Thenew string is----%s\\n", str); fprintf(fp, "Thenew string is----%s\\n", str); fclose(fp); } 13、产在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。 //寻找子串位置 int search(char* str1, char* str2) { int len2 = strlen(str2); int i = 0, j = 0; while (str1[i]) { for (j = 0; j < len2; j++) { if (str1[i + j] != str2[j]) { break; } } if (j >= len2) { return i; } else { ++i; } } return -1; } int main() { char str1[10] = "this is"; char str2[9] = "is"; printf("%d", search(str1, str2)); return 0; } 14、用指针变量输出结构体数组元素。 //产用指针变量输出结构体数组元素。 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\\tSex\\tAge\\t\\n"); /*用指针变量输出结构体数组元素。*/ for (ps = stu; ps < stu + 5; ps++) { printf("%d\\t%-10s\\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、建立一个有三个结点的简单链表 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.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、输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。 //回文数 #define MANX 20 typedef enum { false, true } bool; bool palindrome(char* str) { int len = strlen(str); int left = 0, right = len - 1; while (left < right) { if (*(str + left) != *(str + right)) { return false; } left++; right--; } return true; } int main() { char str[MANX] = { 0 }; gets(str); if (palindrome(str) == 1) { printf("YES!"); } else { printf("NO!"); } return 0; }
运行结果:
17、冒泡排序,选择排序从小到大,排序后结果输出到屏幕及文件myf2.out(1)冒泡排序
//冒泡加文件 void bubble(int* arr, int n) { for (int i = 0; i < n; i++) { for (int j = 1 + i; j < n; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } int main() { FILE* fp; if ((fp = fopen("myf2.out", "w")) == NULL) { printf("cannot open the file\\n"); exit(0); } int arr[20] = { 0 }; int n = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } bubble(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); fprintf(fp, "%d ", arr[i]); } fclose(fp); return 0; }(2) 选择排序
//选择加文件 void choose(int* arr, int n) { for (int i = 0; i < n; ++i) { int min = arr[i],index = i; for (int j = 1 + i; j < n; ++j) { if (min > arr[j]) { min = arr[j]; index = j; } } if (min < arr[i]) { int temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } } } int main() { FILE* fp; if ((fp = fopen("myf2.out", "w")) == NULL) { printf("cannot open the file\\n"); exit(0); } int arr[20] = { 0 }; int n = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } choose(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); fprintf(fp, "%d ", arr[i]); } fclose(fp); return 0; }18、编写函数countpi,利用公式计算T的近似值,当某一项的值小于10-5时,认为达到精度要求,请完善函数。将结果显示在屏幕上并输出到文件p7_3.out中。 //计算pi近似值加文件 double count_pi(double eps) { double num1 = 1, num2 = 1, quotient = 1, sum = 1; int i = 0; while (quotient >= 1e-5) { i++; num1 *= i; num2 *= (2 * i + 1); quotient = num1 / num2; sum += quotient; } return sum * 2; } int main() { FILE* fp; double eps = 1e-5,pi; if ((fp = fopen("p7_3.out", "w+")) == NULL) { printf("cannot open the file\\n"); exit(0); } pi = count_pi(eps); printf("pi = %lf\\n", pi); fprintf(fp,"pi = %lf\\n", pi); fclose(fp); return 0; }
版权声明:本文标题:大学生C语言期末必背题目,考研必背题目,找工作基础题目 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686860258a111364.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论